piclist 1.2.0 → 1.2.2
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/index.cjs.js +2 -2
- package/dist/index.esm.js +2 -2
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),r=require("events"),n=require("os"),a=require("commander"),i=require("inquirer"),s=require("image-size"),o=require("url"),l=require("text-to-svg"),E=require("sharp"),u=require("crypto"),I=require("uuid"),_=require("chalk"),c=require("minimatch"),S=require("globby"),d=require("ejs"),P=require("download-git-repo"),p=require("rimraf"),g=require("dayjs"),f=require("util"),C=require("axios"),m=require("lodash"),A=require("heic-convert"),T=require("mime-types"),D=require("qiniu"),h=require("webdav"),L=require("node-ssh-no-cpu-features"),U=require("resolve"),N=require("child_process"),R=require("is-wsl"),B=require("form-data"),O=require("https"),M=require("tunnel"),y=require("@picgo/store"),w=require("cross-spawn"),G=require("js-yaml"),b=require("@picgo/i18n");function x(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var F=x(e),H=x(t),$=x(n),W=x(i),v=x(l),K=x(E),k=x(u),q=x(_),Y=x(c),j=x(S),V=x(d),z=x(P),Q=x(p),X=x(g),Z=x(f),J=x(C),ee=x(A),te=x(T),re=x(D),ne=x(U),ae=x(R),ie=x(B),se=x(O),oe=x(M),le=x(w),Ee=x(G);const ue={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing plugins").option("-r, --registry <registry>","Choose a registry for installing plugins").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}))}},Ie={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function _e(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function ce(e,t,r){const n={"{Y}":()=>(new Date).getFullYear().toString(),"{y}":()=>(new Date).getFullYear().toString().slice(2),"{m}":()=>1===((new Date).getMonth()+1).toString().length?`0${(new Date).getMonth()+1}`:((new Date).getMonth()+1).toString(),"{d}":()=>1===(new Date).getDate().toString().length?`0${(new Date).getDate()}`:(new Date).getDate().toString(),"{h}":()=>1===(new Date).getHours().toString().length?`0${(new Date).getHours()}`:(new Date).getHours().toString(),"{i}":()=>1===(new Date).getMinutes().toString().length?`0${(new Date).getMinutes()}`:(new Date).getMinutes().toString(),"{s}":()=>1===(new Date).getSeconds().toString().length?`0${(new Date).getSeconds()}`:(new Date).getSeconds().toString(),"{md5}":()=>k.default.createHash("md5").update(H.default.basename(e,H.default.extname(e))).digest("hex"),"{md5-16}":()=>k.default.createHash("md5").update(H.default.basename(e,H.default.extname(e))).digest("hex").slice(0,16),"{str-10}":()=>_e(10),"{str-20}":()=>_e(20),"{filename}":()=>r?H.default.basename(r,H.default.extname(r)):H.default.basename(e,H.default.extname(e)),"{uuid}":()=>I.v4().replace(/-/g,""),"{timestamp}":()=>Math.floor(Date.now()/1e3).toString()};if(void 0===t||!Object.keys(n).some((e=>t.includes(e)))&&!t.includes("localFolder"))return e;const a=H.default.extname(e);let i=Object.keys(n).reduce(((e,t)=>e.replace(new RegExp(t,"g"),n[t]())),t)+a;return i=i.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return H.default.dirname(e).split(H.default.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),i}const Se=e=>/^https?:\/\//.test(e),de=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},Pe=e=>(de(e)||(e=encodeURI(e)),e),pe=e=>{try{const{width:t=0,height:r=0,type:n}=s.imageSize(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},ge=async e=>{try{return{extname:H.default.extname(e),fileName:H.default.basename(e),buffer:await F.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},fe=async(e,t)=>{let r;e=Pe(e);const n=new Promise(((n,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const i=new o.URL(e).pathname;let s="";try{s=new o.URL(e).searchParams.get("wx_fmt")||H.default.extname(i)||""}catch(e){s=H.default.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:H.default.basename(i),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,a])},Ce=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":me(e)?"simple":"unknown",me=e=>{if(H.default.isAbsolute(e))return!1;const t=H.default.join(process.cwd(),e);return!F.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Ae=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,Te=(e,t=console)=>{switch(Ce(e)){case"normal":case"scope":return e;case"simple":return Ae(e);default:{let r=e;return H.default.isAbsolute(e)&&F.default.existsSync(e)?he(r):(r=H.default.join(process.cwd(),e),F.default.existsSync(r)?he(r):(t.warn(`Can't find plugin ${e}`),""))}}},De=(e,t=console)=>{var r;switch(Ce(e)){case"normal":return Le(e);case"scope":return Le(e,!0);case"simple":return Le(Ae(e));default:{if(!F.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=H.default.posix.join(e,"package.json");if(F.default.existsSync(n)){const e=F.default.readJSONSync(n)||{};return(null===(r=e.name)||void 0===r?void 0:r.includes("picgo-plugin-"))?e.name:(t.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return t.warn(`Can't find plugin: ${e}`),""}}},he=e=>e.split(H.default.sep).join("/"),Le=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},Ue=[],Ne=e=>Ue.some((t=>e.startsWith(t))),Re=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function Be(e){try{return JSON.parse(e)}catch(t){return e}}const Oe=(e=0)=>isNaN(Number(e))?0:Number(e),Me=()=>"development"===process.env.NODE_ENV;const ye=H.default.join(__dirname,"assets","piclist.png");async function we(e,t,r,n,a,i,s,o,l,E,u){o=!o||o<0||o>1?.15:o;const I=K.default(e,{animated:!0}),{width:_=200}=await I.metadata(),c=await async function(e,t,r,n,a,i,s,o=200,l=0){let E;"image"===e?(s=s||ye,E=await K.default(s).toBuffer()):E=await async function(e,t,r,n){t=t||"测试",n=n||e;const a={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},i=v.default.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:u,height:I}=await async function(e){const{width:t,height:r}=await K.default(e).metadata();return{width:t||200,height:r||200}}(E),_=Math.floor(o*Oe(a)),c=Math.floor(_*I/u);return await K.default(E).resize(_,c,{fit:"inside"}).rotate(l,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,o,l,E,_,a);return await I.composite([{input:c,gravity:u||"southeast",tile:n}]).toBuffer()}const Ge=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),be=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],xe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function Fe(e,t,r){try{let n=K.default(e,{animated:!0});return Ge(t.watermarkText)&&(n=K.default(await we(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Oe(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Oe(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0})),await n.toBuffer()}catch(t){return console.log(t),e}}function He(e){return{quality:Oe(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Oe(e.reSizeHeight),reSizeWidth:Oe(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Oe(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Oe(e.rotateDegree),picBed:e.picBed||"smms"}}async function $e(e,t,r){t=He(t);try{if(r=r.toLowerCase().replace(".",""),!xe.includes(r))return e;let a=K.default(e,{animated:!0}),i=100;if(Ge(t.quality)&&t.quality<100&&(i=t.quality),t.isReSizeByPercent){if(Ge(t.reSizePercent)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));e&&r&&(a=a.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)a=a.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const n=t.reSizeHeight/r;a=a.resize(Math.round(e*n),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const n=t.reSizeWidth/e;a=a.resize(t.reSizeWidth,Math.round(r*n),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(a=a.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(console.log("flip"),a=a.flip()),t.isFlop&&(a=a.flop()),t.isConvert){let e=t.convertFormat||"jpg";"imgur"===t.picBed&&"webp"===e&&(e="jpg"),a=a.toFormat(e,{quality:i})}else a=r&&(n=r,be.includes(n))?a.toFormat(r,{quality:i}):a.toFormat("jpg",{quality:i});return await a.toBuffer()}catch(t){return console.log(t),e}var n}const We=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],ve=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&We.includes(t)),Ke=(e,t)=>{const r=t.toLowerCase().replace(".","");if(!We.includes(r)||!e)return!1;const{quality:n,isReSizeByPercent:a,reSizePercent:i,isReSize:s,reSizeHeight:o,reSizeWidth:l,isRotate:E,rotateDegree:u,isConvert:I,convertFormat:_,isFlip:c,isFlop:S}=He(e);if(Ge(n)&&n<100)return!0;if(a&&Ge(i))return!0;if(s&&("number"==typeof o&&o>0||"number"==typeof l&&l>0))return!0;if(E&&u)return!0;if(c||S)return!0;if(I){return t!==(_||"jpg")}return!1},ke=async(e,t)=>(t=t.toLowerCase().replace(".",""),We.includes(t)?await K.default(e,{animated:!0}).toBuffer():e);var qe=Object.freeze({__proto__:null,randomStringGenerator:_e,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${_e(5)}${H.default.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${_e(t)}${H.default.extname(e)}`},renameFileNameWithCustomString:ce,isUrl:Se,isUrlEncode:de,handleUrlEncode:Pe,getImageSize:pe,getFSFile:ge,getURLFile:fe,getPluginNameType:Ce,isSimpleName:me,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Ae,getProcessPluginName:Te,getNormalPluginName:De,handleUnixStylePath:he,removePluginVersion:Le,configBlackList:Ue,isConfigKeyInBlackList:Ne,isInputConfigValid:Re,safeParse:Be,forceNumber:Oe,isDev:Me,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:we,imageAddWaterMark:Fe,imageProcess:$e,needAddWatermark:ve,needCompress:Ke,removeExif:ke});const Ye={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>Se(e)?e:H.default.resolve(e))).filter((t=>{const r=F.default.existsSync(t)||Se(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var je=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var Ve=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var ze=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const Qe=async(e,t,r,n)=>{const a=await e.cmd.inquirer.prompt(t),i="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[i]:a}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},Xe={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,a;try{switch(t){case"buildin":if("compress"===r)await Qe(e,je(e),t,r);else if("watermark"===r)await Qe(e,Ve(e),t,r);else if("rename"===r)await Qe(e,ze(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await Qe(e,je(e),t,n.buildin):"watermark"===n.buildin?await Qe(e,Ve(e),t,n.buildin):"rename"===n.buildin&&await Qe(e,ze(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await Qe(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),a=e.helper[t].get(n[t]);(null==a?void 0:a.config)&&await Qe(e,a.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await Qe(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(a=e.pluginLoader.getPlugin(r.plugin))||void 0===a?void 0:a.config)&&await Qe(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Ze={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const a={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!a[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(a[r])}else n=Object.keys(a).map((e=>a[e]));const i=await t.inquirer.prompt(n);if(i.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{i.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":i.uploader||e.getConfig("picBed.current"),"picBed.uploader":i.uploader||e.getConfig("picBed.current"),"picBed.transformer":i.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Je={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},et=async(e,t)=>{try{const r=rt(t.tmp),n=H.default.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await j.default(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{Y.default(t,e,{dot:!0})&&(n=t)})),!n||tt(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=nt(i,n,a);at(t.dest,s),"function"==typeof r.complete&&r.complete({answers:a,options:t,files:i,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},tt=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},rt=e=>{const t=H.default.join(e,"index.js");if(F.default.existsSync(t)){return require(t)}return{}},nt=(e,t,r)=>{const n={};return e.forEach((e=>{const a=F.default.readFileSync(H.default.join(t,e),"utf8"),i=V.default.render(a,r);(Buffer.isBuffer(i)||/[^\s]/.test(i))&&(n[e]=i)})),n},at=(e,t)=>{Object.keys(t).forEach((r=>{const n=H.default.join(e,r);F.default.ensureDirSync(H.default.dirname(n)),F.default.writeFileSync(n,t[r])}))},it=(e,t)=>{t.offline?F.default.existsSync(t.template)?et(e,t).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${t.template} not found`):(t.template=t.hasSlash?t.template:"PicGo/picgo-template-"+t.template,st(e,t))},st=(e,t)=>{F.default.existsSync(t.tmp)&&Q.default.sync(t.tmp),e.log.info("Template files are downloading..."),z.default(t.template,t.tmp,{clone:t.clone},(r=>{r?e.log.error(r):(e.log.success("Template files are downloaded!"),et(e,t).catch((t=>{e.log.error(t)})))}))},ot={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,r,a)=>{(async()=>{try{const i=t.includes("/"),s=!r||"."===r,o=H.default.resolve(r||"."),l=a.clone||!1,E=a.offline||!1,u=H.default.join(n.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));a.offline&&(t=u);const I={template:t,project:r,hasSlash:i,inPlace:s,dest:o,clone:l,tmp:u,offline:E};s||F.default.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&it(e,I)})):it(e,I)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(q.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(q.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},lt={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change picgo language").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const t=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}],n=await e.cmd.inquirer.prompt(t);return e.i18n.setLanguage(n.i18n),void e.log.success(`Language set to ${n.i18n}`)}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class Et{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),Et.currentPlugin&&(this.pluginIdMap.has(Et.currentPlugin)?null===(r=this.pluginIdMap.get(Et.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(Et.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const ut=(e=null)=>{Et.currentPlugin=e};class It{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new a.Command,this.inquirer=W.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.2.0","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",ue),e.cmd.register("config",Ie),e.cmd.register("setting",Xe),e.cmd.register("upload",Ye),e.cmd.register("use",Ze),e.cmd.register("proxy",Je),e.cmd.register("init",ot),e.cmd.register("i18n",lt)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=Et.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var _t,ct,St;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(_t||(_t={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(ct||(ct={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(St||(St={}));class dt{constructor(e){this.level={[_t.success]:"green",[_t.info]:"blue",[_t.warn]:"yellow",[_t.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=q.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||H.default.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(q.default.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(F.default.existsSync(e)){const t=F.default.statSync(e).size,r=1024*Oe(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){F.default.existsSync(e)&&(F.default.unlinkSync(e),F.default.createFileSync(e))}handleWriteLog(e,t,...r){try{let n=`${X.default().format("YYYY-MM-DD HH:mm:ss")} [PicList ${t.toUpperCase()}] `;r.forEach((e=>{e instanceof Error&&"error"===t?n+=`\n------Error Stack Begin------\n${Z.default.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),n+=`${e} `)})),n+="\n",F.default.appendFileSync(e,n)}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(_t.success,...e)}info(...e){this.handleLog(_t.info,...e)}error(...e){this.handleLog(_t.error,...e)}warn(...e){this.handleLog(_t.warn,...e)}debug(...e){Me()&&this.handleLog(_t.info,...e)}}class Pt extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=H.default.join(e.baseDir,"piclistTemp"),r=H.default.join(e.baseDir,"imgTemp");F.default.ensureDirSync(r),F.default.emptyDirSync(t),this.ttfPath=H.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=H.default.dirname(this.ttfPath);if(F.default.existsSync(e)||F.default.mkdirSync(e,{recursive:!0}),F.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await J.default.get(this.ttfLink,{responseType:"arraybuffer"});return F.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");t.input=e,t.rawInputPath=[],t.rawInput=m.cloneDeep(e),t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("picBed.uploader")||t.getConfig("picBed.current")||"smms";!t.helper.uploader.get(n)&&r?r.picBed="smms":r&&(r.picBed=n);const a=t.getConfig("buildIn.watermark");if(r||a){const e=H.default.join(t.baseDir,"piclistTemp");F.default.existsSync(e)||F.default.mkdirSync(e);const n="Add watermark to image",i="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var l,E,u,I,_,c,S;let d;if(Se(s)){if(t.rawInputPath[o]=s,d=await fe(s,t),!d.success||!d.buffer)throw new Error(d.reason);{let S;if(ve(a,null!==(l=d.extname)&&void 0!==l?l:"")){await this.downloadTTF()?(t.log.info(n),S=await Fe(d.buffer,a,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(Ke(r,null!==(E=d.extname)&&void 0!==E?E:"")&&(t.log.info(i),S=await $e(null!=S?S:d.buffer,r,null!==(u=d.extname)&&void 0!==u?u:"")),!S&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),S=await ke(d.buffer,null!==(I=d.extname)&&void 0!==I?I:"")),S){let n;n=(null==r?void 0:r.isConvert)?null!==(_=null==r?void 0:r.convertFormat)&&void 0!==_?_:"jpg":null!==(c=d.extname)&&void 0!==c?c:"",n=n.startsWith(".")?n:`.${n}`;const a=H.default.join(e,`${d.fileName?`${H.default.basename(d.fileName,H.default.extname(d.fileName))}${n}`:(new Date).getTime()}${n}`);t.rawInputPath[o]=H.default.join(H.default.dirname(s),H.default.basename(a)),F.default.writeFileSync(a,S),t.input[o]=a}}}else{let l;if(t.rawInputPath[o]=s,ve(a,H.default.extname(s))){await this.downloadTTF()?(t.log.info(n),l=await Fe(F.default.readFileSync(s),a,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(Ke(r,H.default.extname(s)))if(t.log.info(i),".heic"===H.default.extname(s)||".heif"===H.default.extname(s)){const t=F.default.readFileSync(s),n=await ee.default({buffer:t,format:"JPEG",quality:1}),a=H.default.join(e,`${H.default.basename(s,H.default.extname(s))}.jpg`);F.default.writeFileSync(a,Buffer.from(n)),l=await $e(F.default.readFileSync(a),r,".jpg")}else l=await $e(null!=l?l:F.default.readFileSync(s),r,H.default.extname(s));if(!l&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),l=await ke(F.default.readFileSync(s),H.default.extname(s))),l){let n;n=(null==r?void 0:r.isConvert)?null!==(S=null==r?void 0:r.convertFormat)&&void 0!==S?S:"jpg":H.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const a=H.default.join(e,`${H.default.basename(s,H.default.extname(s))}${n}`);t.rawInputPath[o]=H.default.join(H.default.dirname(s),`${H.default.basename(s,H.default.extname(s))}${n}`),F.default.writeFileSync(a,l),t.input[o]=a}}})))}else for(const e of t.input)t.rawInputPath.push(e);await this.beforeTransform(t),await this.doTransform(t);const i=t.getConfig("buildIn.rename")||{};if(i.enable){const e=i.format||"{filename}";t.output=t.output.map(((r,n)=>{let a=r.fileName;return e&&(a=ce(t.rawInputPath[n],e),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),r.fileName=a,r}))}return await this.beforeUpload(t),await this.doUpload(t),t.input=t.rawInput,await this.afterUpload(t),t}catch(e){if(t.log.warn(ct.FAILED),t.emit(ct.UPLOAD_PROGRESS,-1),t.emit(ct.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(ct.UPLOAD_PROGRESS,0),e.emit(ct.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(ct.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(ct.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(ct.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(t="smms",n="smms",r=e.helper.uploader.get("smms"),e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`)),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(ct.AFTER_UPLOAD,e),e.emit(ct.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let a=0;a<r;a++)void 0!==e.output[a].imgUrl&&(t+=n?Pe(e.output[a].imgUrl):e.output[a].imgUrl,a!==r-1&&(t+="\n")),delete e.output[a].base64Image,delete e.output[a].buffer;return e.emit(ct.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),a=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${a}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${a}: ${n[r]} error`),e}}))),t}}const pt=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),gt=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=pt(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(a),r=JSON.parse(t);if("success"===r.code)delete n.base64Image,delete n.buffer,n.imgUrl=r.data.url,n.hash=r.data.hash;else{if("image_repeated"!==r.code||"string"!=typeof r.images)throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.message}),new Error(r.message);delete n.base64Image,delete n.buffer,n.imgUrl=r.images}}catch(t){throw e.log.error(t),t}}return e},ft=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"input",get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const Ct=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const a=k.default.createHmac("sha1",n).update(o).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,l=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,E=`sha1\n${o}\n${k.default.createHash("sha1").update(l).digest("hex")}\n`;s=k.default.createHmac("sha1",a).update(E).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,l=k.default.createHmac("sha1",n).update(o).digest(),E=Buffer.concat([l,Buffer.from(o)]);s=Buffer.from(E).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:o}},mt=(e,t,r,n,a)=>{const i=e.area,s=e.path;if(e.version&&"v4"!==e.version){const i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${i}/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${i}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:te.default.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${a};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${i}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${i}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${a};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},At=async e=>{var t,r,n,a;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const s=e.output,o=i.customUrl,l=null!==(t=i.path)&&void 0!==t?t:"",E=!i.version||"v4"===i.version;for(const t of s)if(t.fileName&&t.buffer){const s=Ct(i,t.fileName);if(!s)return!1;let u=t.buffer;!u&&t.base64Image&&(u=Buffer.from(t.base64Image,"base64"));const I=mt(i,t.fileName,s,u,e.GUI_VERSION||e.VERSION),_=await e.request(I).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let c;if(c=E&&"string"==typeof _?JSON.parse(_):_,400===c.statusCode)throw(null===(r=null==c?void 0:c.body)||void 0===r?void 0:r.err)?c.body.err:new Error((null===(n=null==c?void 0:c.body)||void 0===n?void 0:n.msg)||(null===(a=null==c?void 0:c.body)||void 0===a?void 0:a.message));const S=i.options||"",d=void 0!==i.slim&&!!i.slim;if(E&&"SUCCESS"===c.message)delete t.base64Image,delete t.buffer,t.imgUrl=o?`${o}/${l}${t.fileName}`:`${c.data.source_url}${S}`;else{if(E||!c||200!==c.statusCode)throw new Error(_.body.msg);if(delete t.base64Image,delete t.buffer,o)t.imgUrl=`${o}/${encodeURIComponent(l)}${encodeURIComponent(t.fileName)}${S}`.replace(/%2F/g,"/");else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;t.imgUrl=`https://${i.bucket}.${e}/${encodeURIComponent(l)}${encodeURIComponent(t.fileName)}${S}`.replace(/%2F/g,"/")}}d&&(t.imgUrl+=S?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Tt=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};const Dt=(e,t,r)=>{const n=t.path||"",{token:a,repo:i}=t;return{method:"PUT",url:`https://api.github.com/repos/${i}/contents/${encodeURIComponent(n)}${encodeURIComponent(e)}`.replace(/%2F/g,"/"),headers:{Authorization:`token ${a}`,"User-Agent":"PicList","Content-Type":te.default.lookup(e)||"application/octet-stream"},body:r,json:!0}},ht=(e,t)=>{const r=t.path||"",{token:n,repo:a,branch:i}=t;return{method:"GET",url:`https://api.github.com/repos/${a}/contents/${encodeURIComponent(r)}${encodeURIComponent(e)}?ref=${i}`.replace(/%2F/g,"/"),headers:{Authorization:`token ${n}`,"User-Agent":"PicGo"},json:!0}},Lt=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){const r=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:r,path:n+encodeURI(a.fileName)},s=Dt(a.fileName,t,i);try{const r=await e.request(s);if(!r)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,t.customUrl?a.imgUrl=`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=r.content.download_url,a.hash=r.content.sha}catch(r){if(422!==r.statusCode)throw r;{delete a.base64Image,delete a.buffer;const r=await e.request(ht(a.fileName,t));if(!Object.keys(r).length)throw new Error("Get Contents error, please try again");a.hash=r.sha,t.customUrl?a.imgUrl=`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=r.download_url}}}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Ut=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"input",get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function Nt(e,t,r,n){const a=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),i=e.path||"";return{method:"POST",url:`http://upload${a}.qiniup.com/putb64/-1/key/${Buffer.from(i+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":te.default.lookup(t)||"application/octet-stream"},body:n}}function Rt(e){const t=e.accessKey,r=e.secretKey,n=new re.default.auth.digest.Mac(t,r),a={scope:e.bucket};return new re.default.rs.PutPolicy(a).uploadToken(n)}const Bt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=Nt(t,n.fileName,Rt(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options||"";n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Ot=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const Mt=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let l;if(i&&s)l=s;else{if(!a)throw new Error("clientId or accessToken is required");l=`Client-ID ${a}`}const E={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:l,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(i&&s&&o){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:l},json:!0,resolveWithFullResponse:!0,timeout:1e4};if(t.proxy&&(s.proxy=t.proxy),r=await e.request(s),200!==r.statusCode||!r.body.success)throw new Error("Server error, please try again");const E=r.body.data;for(const e of E)if(e.title===o){a=e.id;break}n++}while(r.body.data.length>0);a&&E.formData&&(E.formData.album=a)}return t.proxy&&(E.proxy=t.proxy),E},yt=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=await Mt(e,r,n.fileName,t),i=await e.request(a),s="string"==typeof i?JSON.parse(i):i;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},wt=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_CLIENTID")},default:t.clientId||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get alias(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"accessToken",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get alias(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ACCESS_TOKEN")},default:t.accessToken||"",required:!1},{name:"album",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get alias(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ALBUM")},default:t.album||"",required:!1},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const Gt=(e,t)=>{const r=(new Date).toUTCString(),n=`PUT\n\n${te.default.lookup(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=k.default.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},bt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURIComponent(e.path)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:(new Date).toUTCString(),"Content-Type":te.default.lookup(t)},body:n,resolveWithFullResponse:!0}),xt=async e=>{var t;const r=e.getConfig("picBed.aliyun");if(!r)throw new Error("Can't find aliYun OSS config");r.path=r.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/","/"===r.path&&(r.path="");try{const n=e.output,a=r.customUrl,i=null!==(t=r.path)&&void 0!==t?t:"";for(const t of n)if(t.fileName&&t.buffer){const n=Gt(r,t.fileName);let s=t.buffer;!s&&t.base64Image&&(s=Buffer.from(t.base64Image,"base64"));const o=bt(r,t.fileName,n,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete t.base64Image,delete t.buffer;const e=r.options||"";t.imgUrl=a?`${a}/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/"):`https://${r.bucket}.${r.area}.aliyuncs.com/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/")}}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ft=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const Ht=(e,t)=>{const r=e.path||"",n=e.operator,a=Wt(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${encodeURIComponent(r)}${encodeURIComponent(t)}`.replace(/%2F/g,"/")}&${i}`;return`UPYUN ${n}:${k.default.createHmac("sha1",a).update(s).digest("base64")}`},$t=(e,t,r,n)=>{const a=e.bucket,i=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${a}/${encodeURIComponent(i)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":te.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function Wt(e){return k.default.createHash("md5").update(e).digest("hex")}const vt=(e,t,r,n)=>{const a=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${Wt(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},Kt=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=Ht(t,a.fileName),s=$t(t,a.fileName,i,r),o=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete a.base64Image,delete a.buffer,a.imgUrl=`${t.url}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}${o}`.replace(/%2F/g,"/"),t.antiLeechToken){const e=vt(t.antiLeechToken,t.expireTime,t,a.fileName);a.imgUrl=a.imgUrl.includes("?")?`${a.imgUrl}&${e}`:`${a.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=Be(t.error);e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},kt=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1}]};const qt=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");t.host=t.host.replace(/^https?:\/\/|\/+$/g,""),t.host=(t.sslEnabled?"https://":"http://")+t.host,t.path=(t.path||"").replace(/^\/+|\/+$/g,"")+"/";const r=t.authType||"basic",n=(t.webpath||"").replace(/^\/+|\/+$/g,"")+"/";try{const a=e.output,i=t.customUrl,s=t.path;for(const o of a)if(o.fileName&&o.buffer){let a=o.buffer;!a&&o.base64Image&&(a=Buffer.from(o.base64Image,"base64"));const l={username:t.username,password:t.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===r&&(l.authType=h.AuthType.Digest);const E=h.createClient(t.host,l),u="/"===s?"":s;u&&await E.createDirectory(u,{recursive:!0});if(!await E.putFileContents(`${s}${o.fileName}`.replace(/^\/+|\/+$/g,""),a,{overwrite:!0}))throw new Error("Upload failed");{const r=H.default.join(e.baseDir,"imgTemp","webdavplist"),l=H.default.join(r,o.fileName);F.default.ensureDirSync(r),F.default.writeFileSync(l,a),delete o.base64Image,delete o.buffer;const E=i||t.host;t.webpath?o.imgUrl=`${E}/${"/"===n?"":encodeURIComponent(n)}${encodeURIComponent(o.fileName)}`.replace(/%2F/g,"/"):o.imgUrl=`${E}/${"/"===s?"":encodeURIComponent(s)}${encodeURIComponent(o.fileName)}`.replace(/%2F/g,"/"),o.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(o.fileName)}`}}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Yt=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1}]};const jt=async e=>{const t=e.getConfig("picBed.local");if(!t)throw new Error("Can not find local config!");const r=t.path||"";let n=t.customUrl||"";n&&(n=n.replace(/\/$/,""));let a=t.webPath||"";a&&(a=a.replace(/\\/g,"/").replace(/^\//,"").replace(/\/$/,""));const i=e.output;for(const t of i)if(t.fileName&&t.buffer){let i=t.buffer;!i&&t.base64Image&&(i=Buffer.from(t.base64Image,"base64"));try{try{const s=H.default.join(e.baseDir,"imgTemp","local");F.default.ensureDirSync(s),F.default.ensureDirSync(r),F.default.writeFileSync(H.default.join(r,t.fileName),i),F.default.copyFileSync(H.default.join(r,t.fileName),H.default.join(e.baseDir,"imgTemp","local",t.fileName)),delete t.base64Image,delete t.buffer,t.imgUrl=n?a?`${n}/${encodeURIComponent(a)}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):`${n}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):H.default.join(r,t.fileName),t.hash=H.default.join(r,t.fileName),t.galleryPath=`http://localhost:36699/local/${encodeURIComponent(t.fileName)}`}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},Vt=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class zt{constructor(){this._isConnected=!1}static get instance(){return this._instance||(this._instance=new this)}static get client(){return this._client||(this._client=new L.NodeSSH)}changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{username:t,password:r,privateKey:n,passphrase:a}=e,i=n?{username:t,privateKeyPath:n,passphrase:a||void 0}:{username:t,password:r};try{return await zt.client.connect(Object.assign({host:e.host,port:Number(e.port)||22},i)),this._isConnected=!0,!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this._isConnected)throw new Error("SSH 未连接");try{t=this.changeWinStylePathToUnix(t),await this.mkdir(H.default.dirname(t).replace(/^\/+|\/+$/g,""),r),await zt.client.putFile(e,t);const n=r.fileMode||"0644";if("0644"!==n){const e=`chmod ${n} "${t}"`;return await this.exec(e)}return!0}catch(e){return!1}}async mkdir(e,t){if(!zt.client.isConnected())throw new Error("SSH 未连接");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=this.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t],i=`chown ${n}:${a} "${e}"`;return this.exec(i)}async exec(e){return 0===(await zt.client.execCommand(e)).code}close(){zt.client.dispose(),this._isConnected=!1}}const Qt=async e=>{const t=e.getConfig("picBed.sftpplist");if(!t)throw new Error("Can not find sftpplist config!");t.port=Number(t.port)||22,t.uploadPath=(t.uploadPath||"").replace(/^\/+|\/+$/g,"")+"/";const r=(t.webPath||"").replace(/^\/+|\/+$/g,"")+"/";try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=H.default.join(e.baseDir,"uploadTemp"),s=H.default.join(e.baseDir,"imgTemp","sftpplist");F.default.ensureDirSync(i),F.default.ensureDirSync(s);const o=H.default.join(i,a.fileName);F.default.writeFileSync(o,n);const l=zt.instance;await l.connect(t);const E=H.default.join(`/${t.uploadPath}`.replace(/\/\/+/g,"/"),a.fileName);await l.upload(o,E,t),t.fileUser&&await l.chown(E,t.fileUser),delete a.base64Image,delete a.buffer;const u=t.customUrl||t.host;t.webPath?a.imgUrl=`${u}/${"/"===r?"":encodeURIComponent(r)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=`${u}/${"/"===t.uploadPath?"":encodeURIComponent(t.uploadPath)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"),F.default.moveSync(o,H.default.join(s,a.fileName)),a.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(a.fileName)}`,l.close()}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Xt=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},default:t.dirMode||"",required:!1}]};const Zt=async(e,t)=>{const r={method:"POST",url:"https://telegra.ph/upload",headers:{"content-type":"multipart/form-data"},formData:{file:t}};return e.proxy&&(r.proxy=e.proxy),r},Jt=async e=>{var t,r;let n=e.getConfig("picBed.telegraphplist");n||(n={});try{const r=e.output;for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=H.default.join(e.baseDir,"uploadTemp");F.default.ensureDirSync(i);const s=H.default.join(i,a.fileName);F.default.writeFileSync(s,r);const o=await Zt(n,F.default.createReadStream(s)),l=await e.request(o),E="string"==typeof l?JSON.parse(l):l;if(F.default.remove(s),!(null===(t=null==E?void 0:E[0])||void 0===t?void 0:t.src))throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=`https://telegra.ph${E[0].src}`}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(r=null==t?void 0:t.response)||void 0===r?void 0:r.data)||t}},er=e=>[{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:(e.getConfig("picBed.telegraphplist")||{}).proxy||"",required:!1}];const tr=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:xt,config:Ft})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:At,config:Tt})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:gt,config:ft})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:Lt,config:Ut})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:Bt,config:Ot})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:yt,config:wt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Kt,config:kt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:qt,config:Yt})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:jt,config:Vt})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Qt,config:Xt})}(e),function(e){e.helper.uploader.register("telegraphplist",{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:Jt,config:er})}(e)}}),rr=(e,t,r)=>{const n=pe(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var nr={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let a;if(a=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:Se(r)?await fe(r,e):await ge(r),a.success&&a.buffer){const i=rr(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${X.default().format("YYYYMMDDHHmmss")}${s}}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var ar={handle:async e=>(e.output.push(...e.input),e)};class ir{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=H.default.join(this.ctx.baseDir,"package.json");if(!F.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};F.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return ne.default.sync(t,{basedir:e.baseDir})}catch(r){return H.default.join(e.baseDir,"node_modules",t)}}load(){const e=H.default.join(this.ctx.baseDir,"package.json"),t=H.default.join(this.ctx.baseDir,"node_modules/");if(!F.default.existsSync(t))return!1;const r=F.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),a=Object.keys(r.devDependencies||{}),i=n.concat(a).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return F.default.existsSync(t)}));for(const e of i)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),ut(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),ut(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(ct.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),ut(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=H.default.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const sr={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},or={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const lr=async e=>{!function(e){const t=H.default.join(e.baseDir,"piclist-clipboard-images");F.default.existsSync(t)||F.default.mkdirSync(t)}(e);const t=H.default.join(e.baseDir,"piclist-clipboard-images",`${X.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const a=(()=>{const e=process.platform;if(ae.default)return"wsl";if("win32"===e)return"10"===$.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),i=H.default.join(e.baseDir,or[a]);let s;F.default.existsSync(i)||F.default.writeFileSync(i,sr[a],"utf8"),s="darwin"===a?N.spawn("osascript",[i,t]):"win32"===a||"win10"===a?N.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",i,t]):N.spawn("sh",[i,t]),s.stdout.on("data",(i=>{if("linux"===a&&"no xclip or wl-clipboard"===i.toString().trim())return e.emit(ct.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),n(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const s=i.toString().trim();let o=!1;if(H.default.basename(s)!==H.default.basename(t)&&F.default.existsSync(s)&&(o=!0),"no image"!==s&&!F.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},Er=new r.EventEmitter,ur=new se.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2"});function Ir(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function _r(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function cr(e){var t,r,n,a,i,s,o;const l={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(l)}class Sr{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Er.on(St.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new o.URL(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=oe.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=ur;const r=J.default.create(this.options);r.interceptors.response.use(_r,cr);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let a=e.proxy;if("string"==typeof a){try{a=new o.URL(e.proxy)}catch(e){a=!1,n.proxy=!1,console.error(e)}r=!0}a&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=oe.default.httpsOverHttp({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new ie.default;for(const r in e.formData)Ir(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let a="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(a=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(a=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(a=e.headers["content-type"],delete e.headers["content-type"]),""!==a&&e.headers&&(e.headers["Content-Type"]=a),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class dr{constructor(e){if(this.ctx=e,this.db=new y.JSONStore(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms"})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}class Pr{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>pr(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicGo has already installed ${e.pkgName}`),!1):!!e.success)),i=a.map((e=>e.fullName)),s=a.map((e=>e.pkgName));if(i.length>0){const e=await this.execCommand("install",i,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>pr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>pr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},a={}){const i=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,l;let E=[e].concat(t).concat("--color=always").concat("--save");i&&(E=E.concat(`--registry=${i}`)),s&&(E=E.concat(`--proxy=${s}`));try{const e=le.default("npm",E,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(l=e.stderr)||void 0===l||l.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(ct.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(ct.FAILED,e)}}))}}const pr=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=Te(t,e.log);if(!n)return r;const a=De(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r},gr={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定KeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/49259)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定KeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/49259)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set KeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class fr{constructor(e){this.ctx=e,this.objectAdapter=new b.ObjectAdapter(gr);let t=this.ctx.getConfig("settings.language")||"zh-CN";gr[t]||(t="zh-CN"),this.i18n=new b.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();F.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=H.default.join(e,t.name),n=F.default.readFileSync(r,"utf8");try{const e=Ee.default.load(n);gr[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=H.default.join(this.ctx.baseDir,"i18n-cli");return F.default.pathExistsSync(e)||F.default.ensureDirSync(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const n=m.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),gr[e]=t,!0)}getLanguageList(){return Object.keys(gr)}}class Cr extends r.EventEmitter{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.2.0",this.configPath=e,this.output=[],this.input=[],this.rawInput=[],this.helper={transformer:new Et("transformer"),uploader:new Et("uploader"),beforeTransformPlugins:new Et("beforeTransformPlugins"),beforeUploadPlugins:new Et("beforeUploadPlugins"),afterUploadPlugins:new Et("afterUploadPlugins")},this.initConfigPath(),this.log=new dt(this),this.cmd=new It(this),this.pluginHandler=new Pr(this),this.initConfig(),this.init()}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==H.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=H.default.dirname(this.configPath);F.default.pathExistsSync(this.configPath)||F.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new dr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new fr(this),this.Request=new Sr(this),this._pluginLoader=new ir(this),ut("picgo"),tr().register(this),{register(e){e.helper.transformer.register("path",nr),e.helper.transformer.register("base64",ar)}}.register(this),ut(""),this._pluginLoader.load(),this.lifecycle=new Pt(this)}catch(e){throw this.emit(ct.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?m.get(this._config,e):this._config}saveConfig(e){Re(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(Ne(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Re(e)?Object.keys(e).forEach((t=>{Ne(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),m.set(this._config,t,e[t]),Er.emit(St.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Ne(e)?this.log.warn(`the config.${e} can't be unset`):m.unset(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("The configuration file only supports JSON format."),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await lr(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(ct.FAILED,(()=>{t||F.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||F.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(ct.FAILED,e),e}}}exports.Commander=It,exports.Lifecycle=Pt,exports.LifecyclePlugins=Et,exports.Logger=dt,exports.PicGo=Cr,exports.PicGoUtils=qe,exports.PluginHandler=Pr,exports.PluginLoader=ir,exports.Request=Sr;
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9jb3JlL0xpZmVjeWNsZS50cyIsIi4uL3NyYy91dGlscy9jcmVhdGVDb250ZXh0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc21tcy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RjeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbWd1ci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbG9jYWwudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RlbGVncmFwaC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvcGF0aC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2Jhc2U2NC50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9pMThuL2luZGV4LnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwbHVnaW5IYW5kbGVyOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICAvLyBjb25zdCBwbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIoY3R4KVxyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ2luc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdpbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hbGlhcygnYWRkJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IHByb3h5LCByZWdpc3RyeSB9ID0gcHJvZ3JhbVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBwcm94eSxcclxuICAgICAgICAgIHJlZ2lzdHJ5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLmluc3RhbGwocGx1Z2lucywgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VuaW5zdGFsbCA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuYWxpYXMoJ3JtJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1bmluc3RhbGwgcGljZ28gcGx1Z2luJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10pID0+IHtcclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci51bmluc3RhbGwocGx1Z2lucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VwZGF0ZSA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwZGF0ZSBwaWNnbyBwbHVnaW4nKVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci51cGRhdGUocGx1Z2lucywgb3B0aW9ucykuY2F0Y2goKGU6IEVycm9yKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHBsdWdpbkhhbmRsZXJcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgSUltZ1NpemUsXHJcbiAgdHlwZSBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyxcclxuICB0eXBlIElQbHVnaW5OYW1lVHlwZSxcclxuICB0eXBlIElMb2dnZXIsXHJcbiAgdHlwZSBJUGljR28sXHJcbiAgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcclxuICB0eXBlIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9uc1xyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXHJcbmltcG9ydCBUZXh0VG9TVkcgZnJvbSAndGV4dC10by1zdmcnXHJcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nR2VuZXJhdG9yIChsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknXHJcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSkubWFwKCgpID0+IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKSkuam9pbignJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFRpbWVzdGFtcCAob2xkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCl9JHtyYW5kb21TdHJpbmdHZW5lcmF0b3IoNSl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoUmFuZG9tU3RyaW5nIChvbGROYW1lOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyID0gNSk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGAke3JhbmRvbVN0cmluZ0dlbmVyYXRvcihsZW5ndGgpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBjdXN0b21Gb3JtYXQ6IHN0cmluZywgYWZmaXhGaWxlTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgY29udmVyc2lvbk1hcDogUmVjb3JkPHN0cmluZywgKCkgPT4gc3RyaW5nPiA9IHtcclxuICAgICd7WX0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSxcclxuICAgICd7eX0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zbGljZSgyKSxcclxuICAgICd7bX0nOiAoKSA9PiAobmV3IERhdGUoKS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXRNb250aCgpICsgMX1gIDogKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCksXHJcbiAgICAne2R9JzogKCkgPT4gbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXREYXRlKCl9YCA6IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLnRvU3RyaW5nKCksXHJcbiAgICAne2h9JzogKCkgPT4gbmV3IERhdGUoKS5nZXRIb3VycygpLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke25ldyBEYXRlKCkuZ2V0SG91cnMoKX1gIDogbmV3IERhdGUoKS5nZXRIb3VycygpLnRvU3RyaW5nKCksXHJcbiAgICAne2l9JzogKCkgPT4gbmV3IERhdGUoKS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXRNaW51dGVzKCl9YCA6IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpLnRvU3RyaW5nKCksXHJcbiAgICAne3N9JzogKCkgPT4gbmV3IERhdGUoKS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXRTZWNvbmRzKCl9YCA6IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCksXHJcbiAgICAne21kNX0nOiAoKSA9PiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHBhdGguYmFzZW5hbWUob2xkTmFtZSwgcGF0aC5leHRuYW1lKG9sZE5hbWUpKSkuZGlnZXN0KCdoZXgnKSxcclxuICAgICd7bWQ1LTE2fSc6ICgpID0+IGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUocGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpKS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDE2KSxcclxuICAgICd7c3RyLTEwfSc6ICgpID0+IHJhbmRvbVN0cmluZ0dlbmVyYXRvcigxMCksXHJcbiAgICAne3N0ci0yMH0nOiAoKSA9PiByYW5kb21TdHJpbmdHZW5lcmF0b3IoMjApLFxyXG4gICAgJ3tmaWxlbmFtZX0nOiAoKSA9PiBhZmZpeEZpbGVOYW1lID8gcGF0aC5iYXNlbmFtZShhZmZpeEZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoYWZmaXhGaWxlTmFtZSkpIDogcGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpLFxyXG4gICAgJ3t1dWlkfSc6ICgpID0+IHV1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpLFxyXG4gICAgJ3t0aW1lc3RhbXB9JzogKCkgPT4gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkudG9TdHJpbmcoKVxyXG4gIH1cclxuICBpZiAoY3VzdG9tRm9ybWF0ID09PSB1bmRlZmluZWQgfHwgKCFPYmplY3Qua2V5cyhjb252ZXJzaW9uTWFwKS5zb21lKGl0ZW0gPT4gY3VzdG9tRm9ybWF0LmluY2x1ZGVzKGl0ZW0pKSAmJiAhY3VzdG9tRm9ybWF0LmluY2x1ZGVzKCdsb2NhbEZvbGRlcicpKSkge1xyXG4gICAgcmV0dXJuIG9sZE5hbWVcclxuICB9XHJcbiAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKG9sZE5hbWUpXHJcbiAgbGV0IG5ld05hbWUgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9uTWFwKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XHJcbiAgICByZXR1cm4gYWNjLnJlcGxhY2UobmV3IFJlZ0V4cChjdXIsICdnJyksIGNvbnZlcnNpb25NYXBbY3VyXSgpKVxyXG4gIH0sIGN1c3RvbUZvcm1hdCkgKyBleHRcclxuICBuZXdOYW1lID0gbmV3TmFtZS5yZXBsYWNlKC97KGxvY2FsRm9sZGVyOj8oXFxkKyk/KX0vZ2ksIChfcmVzdWx0LCBrZXksIGNvdW50KSA9PiB7XHJcbiAgICBjb3VudCA9IE1hdGgubWF4KDEsIGNvdW50IHx8IDApXHJcbiAgICBjb25zdCBwYXRocyA9IHBhdGguZGlybmFtZShvbGROYW1lKS5zcGxpdChwYXRoLnNlcClcclxuICAgIGtleSA9IHBhdGhzLnNsaWNlKDAgLSBjb3VudCkucmVkdWNlKChhLCBiKSA9PiBgJHthfS8ke2J9YClcclxuICAgIHJldHVybiBrZXkucmVwbGFjZSgvOi9nLCAnJylcclxuICB9KVxyXG4gIHJldHVybiBuZXdOYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4gKC9eaHR0cHM/OlxcL1xcLy8pLnRlc3QodXJsKVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgdXJsID0gdXJsIHx8ICcnXHJcbiAgdHJ5IHtcclxuICAgIC8vIHRoZSB3aG9sZSB1cmwgZW5jb2RlIG9yIGRlY29kZSBzaG9sZCBub3QgdXNlIGVuY29kZVVSSUNvbXBvbmVudCBvciBkZWNvZGVVUklDb21wb25lbnRcclxuICAgIHJldHVybiB1cmwgIT09IGRlY29kZVVSSSh1cmwpXHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjb25zdCBoYW5kbGVVcmxFbmNvZGUgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghaXNVcmxFbmNvZGUodXJsKSkge1xyXG4gICAgdXJsID0gZW5jb2RlVVJJKHVybClcclxuICB9XHJcbiAgcmV0dXJuIHVybFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VTaXplID0gKGZpbGU6IEJ1ZmZlcik6IElJbWdTaXplID0+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3QgeyB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIHR5cGUgfSA9IGltYWdlU2l6ZShmaWxlKVxyXG4gICAgY29uc3QgZXh0bmFtZSA9IHR5cGUgPyBgLiR7dHlwZX1gIDogJy5wbmcnXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFsOiB0cnVlLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICBleHRuYW1lXHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgLy8gZmFsbGJhY2sgdG8gMjAwICogMjAwXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFsOiBmYWxzZSxcclxuICAgICAgd2lkdGg6IDIwMCxcclxuICAgICAgaGVpZ2h0OiAyMDAsXHJcbiAgICAgIGV4dG5hbWU6ICcucG5nJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZTRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHRuYW1lOiBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGJ1ZmZlcjogYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpLFxyXG4gICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxyXG4gICAgICBzdWNjZXNzOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXHJcbiAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXRcclxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdCh7XHJcbiAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXHJcbiAgICAgICAgbGV0IGV4dG5hbWUgPSAnJ1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMKHVybCkuc2VhcmNoUGFyYW1zXHJcbiAgICAgICAgICBleHRuYW1lID0gdXJsUGFyYW1zLmdldCgnd3hfZm10JykgfHwgcGF0aC5leHRuYW1lKHVybFBhdGgpIHx8ICcnXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFleHRuYW1lLnN0YXJ0c1dpdGgoJy4nKSAmJiBleHRuYW1lKSB7XHJcbiAgICAgICAgICBleHRuYW1lID0gYC4ke2V4dG5hbWV9YFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgIGJ1ZmZlcjogcmVzLFxyXG4gICAgICAgICAgZmlsZU5hbWU6IHBhdGguYmFzZW5hbWUodXJsUGF0aCksXHJcbiAgICAgICAgICBleHRuYW1lLFxyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSBlcnJvciwgJHtlcnJvcj8ubWVzc2FnZSA/PyAnJ31gXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSkoKS5jYXRjaChyZWplY3QpXHJcbiAgfSlcclxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xyXG4gICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IHRpbWVvdXRgXHJcbiAgICAgIH0pXHJcbiAgICB9LCAzMDAwMClcclxuICB9KVxyXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxyXG4gKiAzLiB4eHggLT4gc2ltcGxlXHJcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cclxuICogQHBhcmFtIG5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2NvcGUnXHJcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgcmV0dXJuICdub3JtYWwnXHJcbiAgfSBlbHNlIGlmIChpc1NpbXBsZU5hbWUobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2ltcGxlJ1xyXG4gIH1cclxuICByZXR1cm4gJ3Vua25vd24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4geHh4IC0+IHRydWVcclxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKG5hbWVPclBhdGguaW5jbHVkZXMoJy8nKSB8fCBuYW1lT3JQYXRoLmluY2x1ZGVzKCdcXFxcJykpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG4vKipcclxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4geHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL15AW14vXStcXC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXHJcbiAqIEBwYXJhbSBzY29wZSBwbHVnaW5TY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChzY29wZSkge1xyXG4gICAgcmV0dXJuIGBAJHtzY29wZX0vcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3h4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxyXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcclxuICAgIGNhc2UgJ25vcm1hbCc6XHJcbiAgICBjYXNlICdzY29wZSc6XHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICBjYXNlICdzaW1wbGUnOlxyXG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXHJcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcclxuICAgICAgbGV0IHBsdWdpblBhdGggPSBuYW1lT3JQYXRoXHJcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXHJcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIDMuIGludmFsaWQgbmFtZU9yUGF0aFxyXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAzLiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxyXG4gKiB0aGVuIHVzZSBbcGFja2FnZS5qc29uJ3MgbmFtZV0sIHVzdWFsbHkgbWF0Y2ggdGhlIHNjb3BlIHBhY2thZ2UuXHJcbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKSlcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcclxuICAgICAgLy8gdGhlIG5hbWVPclBhdGggaGVyZSB3aWxsIGJlIGVuc3VyZWQgd2l0aCB1bml4IHN0eWxlXHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhY2thZ2VKU09OUGF0aCA9IHBhdGgucG9zaXguam9pbihuYW1lT3JQYXRoLCAncGFja2FnZS5qc29uJylcclxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XHJcbiAgICAgICAgaWYgKCFwa2cubmFtZT8uaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgbG9nZ2VyLndhcm4oYFRoZSBwbHVnaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZCBpcyAke3BrZy5uYW1lIGFzIHN0cmluZyB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gKVxyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwa2cubmFtZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIHRyYW5zZm9ybSB0aGUgcGF0aCB0byB1bml4IHN0eWxlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxyXG4gKiAyLiAveHh4L3h4eCAtPiAveHh4L3h4eFxyXG4gKiBAcGFyYW0gcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVuaXhTdHlsZVBhdGggPSAocGF0aFN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcclxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcclxufVxyXG5cclxuLyoqXHJcbiAqIHJlbW92ZSBwbHVnaW4gdmVyc2lvbiB3aGVuIHJlZ2lzdGVyIHBsdWdpbiBuYW1lXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqIEBwYXJhbSBzY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZVBsdWdpblZlcnNpb24gPSAobmFtZU9yUGF0aDogc3RyaW5nLCBzY29wZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xyXG4gICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hBcnIgPSBuYW1lT3JQYXRoLm1hdGNoKHJlZylcclxuICAgIGlmICghbWF0Y2hBcnIpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcclxuICogb25seSBjYW4gYmUgZ290XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cclxuXHJcbi8qKlxyXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XHJcbiAqIEBwYXJhbSBrZXlcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGNvbmZpZ0JsYWNrTGlzdC5zb21lKGJsYWNrSXRlbSA9PiBrZXkuc3RhcnRzV2l0aChibGFja0l0ZW0pKVxyXG59XHJcblxyXG4vKipcclxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxyXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxyXG4gKiAmJiBjYW4ndCBiZSBhcnJheVxyXG4gKiBAcGFyYW0gY29uZmlnXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKFxyXG4gICAgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiZcclxuICAgICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiZcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4gKHN0cjogc3RyaW5nKTogVCB8IHN0cmluZyB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcmV0dXJuIHN0clxyXG4gIH1cclxufVxyXG5cclxuLy8gaG9sZC4uLlxyXG4vLyBleHBvcnQgY29uc3QgY29uZmlnV2hpdGVMaXN0OiBSZWdFeHBbXSA9IFtcclxuLy8gICAvXnBpY0JlZC8sXHJcbi8vICAgL15waWNnb1BsdWdpbnMvLFxyXG4vLyAgIC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sXHJcbi8vICAgL2RlYnVnLyxcclxuLy8gICAvc2lsZW50LyxcclxuLy8gICAvY29uZmlnUGF0aC8sXHJcbi8vICAgL15zZXR0aW5ncy8sXHJcbi8vIF1cclxuXHJcbi8vIGV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluV2hpdGVMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbi8vICAgcmV0dXJuIGNvbmZpZ1doaXRlTGlzdC5zb21lKHdoaXRlSXRlbSA9PiB3aGl0ZUl0ZW0udGVzdChrZXkpKVxyXG4vLyB9XHJcblxyXG5leHBvcnQgY29uc3QgZm9yY2VOdW1iZXIgPSAobnVtOiBzdHJpbmcgfCBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzUHJvZCA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB0ZXh0MlNWRyAoXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICBjb2xvcj86IHN0cmluZyxcclxuICBmb250RmFtaWx5Pzogc3RyaW5nXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XHJcbiAgZm9udEZhbWlseSA9ICFmb250RmFtaWx5ID8gZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIDogZm9udEZhbWlseVxyXG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxyXG4gIGNvbnN0IG9wdGlvbnM6IFRleHRUb1NWRy5HZW5lcmF0aW9uT3B0aW9ucyA9IHtcclxuICAgIGFuY2hvcjogJ3RvcCcsXHJcbiAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgIGZpbGw6IGNvbG9yXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IHRleHRTVkcgPSB0ZXh0MlNWRy5nZXRTVkcodGV4dCwgb3B0aW9ucylcclxuICBjb25zdCBzdmcgPSBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxyXG4gIHJldHVybiBzdmdcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdhc3NldHMnLCAncGljbGlzdC5wbmcnKVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEFkZFdhdGVybWFyayAoXHJcbiAgaW1nOiBCdWZmZXIsXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICBpc0Z1bGxTY3JlZW5XYXRlcm1hcms/OiBib29sZWFuLFxyXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8gPSAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXHJcbiAgY29uc3QgaW1hZ2UgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICBjb25zdCB7IHdpZHRoOiBpbWdXaWR0aCA9IDIwMCB9ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKVxyXG4gIGNvbnN0IHdhdGVybWFyayA9IGF3YWl0IGNyZWF0ZVdhdGVybWFyayhcclxuICAgIHdhdGVybWFya1R5cGUsXHJcbiAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICB0ZXh0LFxyXG4gICAgd2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICB3YXRlcm1hcmtTY2FsZVJhdGlvLFxyXG4gICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICBpbWdXaWR0aCxcclxuICAgIHdhdGVybWFya0RlZ3JlZVxyXG4gIClcclxuICBjb25zdCBjb21wb3NpdGVkID0gYXdhaXQgaW1hZ2VcclxuICAgIC5jb21wb3NpdGUoW1xyXG4gICAgICB7XHJcbiAgICAgICAgaW5wdXQ6IHdhdGVybWFyayxcclxuICAgICAgICBncmF2aXR5OiBwb3NpdGlvbiB8fCAnc291dGhlYXN0JyxcclxuICAgICAgICB0aWxlOiBpc0Z1bGxTY3JlZW5XYXRlcm1hcmtcclxuICAgICAgfVxyXG4gICAgXSlcclxuICAgIC50b0J1ZmZlcigpXHJcbiAgcmV0dXJuIGNvbXBvc2l0ZWRcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2F0ZXJtYXJrIChcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgaW1nV2lkdGg6IG51bWJlciA9IDIwMCxcclxuICB3YXRlcm1hcmtEZWdyZWU6IG51bWJlciA9IDBcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBsZXQgd2F0ZXJtYXJrOiBhbnlcclxuICBpZiAod2F0ZXJtYXJrVHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoID0gd2F0ZXJtYXJrSW1hZ2VQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGhcclxuICAgIHdhdGVybWFyayA9IGF3YWl0IHNoYXJwKHdhdGVybWFya0ltYWdlUGF0aCkudG9CdWZmZXIoKVxyXG4gIH0gZWxzZSB7XHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCB0ZXh0MlNWRyhcclxuICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICB0ZXh0LFxyXG4gICAgICB3YXRlcm1hcmtDb2xvcixcclxuICAgICAgd2F0ZXJtYXJrRm9udFBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoXHJcbiAgICApXHJcbiAgfVxyXG4gIGNvbnN0IHsgd2lkdGg6IHdhdGVybWFya1dpZHRoLCBoZWlnaHQ6IHdhdGVybWFya0hlaWdodCB9ID0gYXdhaXQgZ2V0U2l6ZShcclxuICAgIHdhdGVybWFya1xyXG4gIClcclxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVXaWR0aCA9IE1hdGguZmxvb3IoaW1nV2lkdGggKiBmb3JjZU51bWJlcih3YXRlcm1hcmtTY2FsZVJhdGlvKSlcclxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVIZWlnaHQgPSBNYXRoLmZsb29yKFxyXG4gICAgKHdhdGVybWFya1Jlc2l6ZVdpZHRoICogd2F0ZXJtYXJrSGVpZ2h0KSAvIHdhdGVybWFya1dpZHRoXHJcbiAgKVxyXG4gIHJldHVybiBhd2FpdCBzaGFycCh3YXRlcm1hcmspXHJcbiAgICAucmVzaXplKHdhdGVybWFya1Jlc2l6ZVdpZHRoLCB3YXRlcm1hcmtSZXNpemVIZWlnaHQsIHtcclxuICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgfSlcclxuICAgIC5yb3RhdGUod2F0ZXJtYXJrRGVncmVlLCB7IGJhY2tncm91bmQ6IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYWxwaGE6IDAgfSB9KVxyXG4gICAgLnRvQnVmZmVyKClcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0U2l6ZSAoaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8eyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9PiB7XHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCBzaGFycChpbWFnZSkubWV0YWRhdGEoKVxyXG4gIHJldHVybiB7IHdpZHRoOiB3aWR0aCB8fCAyMDAsIGhlaWdodDogaGVpZ2h0IHx8IDIwMCB9XHJcbn1cclxuXHJcbmNvbnN0IHZhbGlkUGFyYW0gPSAoLi4ucGFyYW1zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwYXJhbXMuZXZlcnkocGFyYW0gPT4ge1xyXG4gICAgaWYgKHBhcmFtID09PSB1bmRlZmluZWQgfHwgcGFyYW0gPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gcGFyYW0gIT09ICcnXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gcGFyYW0gPiAwXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyYW0pLmxlbmd0aCA+IDBcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QgPSBbXHJcbiAgJ2F2aWYnLFxyXG4gICdkeicsXHJcbiAgJ2ZpdHMnLFxyXG4gICdnaWYnLFxyXG4gICdoZWlmJyxcclxuICAnaW5wdXQnLFxyXG4gICdqcGVnJyxcclxuICAnanBnJyxcclxuICAnanAyJyxcclxuICAnanhsJyxcclxuICAnbWFnaWNrJyxcclxuICAnb3BlbnNsaWRlJyxcclxuICAncGRmJyxcclxuICAncG5nJyxcclxuICAncHBtJyxcclxuICAncmF3JyxcclxuICAnc3ZnJyxcclxuICAndGlmZicsXHJcbiAgJ3RpZicsXHJcbiAgJ3YnLFxyXG4gICd3ZWJwJ1xyXG5dXHJcblxyXG5jb25zdCB2YWxpZE91dHB1dEZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdC5pbmNsdWRlcyhmb3JtYXQpXHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRXh0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnXVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQWRkV2F0ZXJNYXJrIChpbWc6IEJ1ZmZlciwgb3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLCBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdHJ5IHtcclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMud2F0ZXJtYXJrVGV4dCkpIHtcclxuICAgICAgaW1hZ2UgPSBzaGFycChhd2FpdCBBZGRXYXRlcm1hcmsoXHJcbiAgICAgICAgaW1nLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXHJcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxyXG4gICAgICApLCB7IGFuaW1hdGVkOiB0cnVlIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdE9wdGlvbnMgKG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zKTogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMge1xyXG4gIHJldHVybiB7XHJcbiAgICBxdWFsaXR5OiBmb3JjZU51bWJlcihvcHRpb25zLnF1YWxpdHkpLFxyXG4gICAgaXNDb252ZXJ0OiBvcHRpb25zLmlzQ29udmVydCB8fCBmYWxzZSxcclxuICAgIGNvbnZlcnRGb3JtYXQ6IG9wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJyxcclxuICAgIGlzUmVTaXplOiBvcHRpb25zLmlzUmVTaXplIHx8IGZhbHNlLFxyXG4gICAgcmVTaXplSGVpZ2h0OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZUhlaWdodCksXHJcbiAgICByZVNpemVXaWR0aDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVXaWR0aCksXHJcbiAgICBza2lwUmVTaXplT2ZTbWFsbEltZzogb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZSxcclxuICAgIGlzUmVTaXplQnlQZXJjZW50OiBvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxyXG4gICAgcmVTaXplUGVyY2VudDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVQZXJjZW50KSxcclxuICAgIGlzUm90YXRlOiBvcHRpb25zLmlzUm90YXRlIHx8IGZhbHNlLFxyXG4gICAgaXNGbGlwOiBvcHRpb25zLmlzRmxpcCB8fCBmYWxzZSxcclxuICAgIGlzRmxvcDogb3B0aW9ucy5pc0Zsb3AgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcclxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VQcm9jZXNzIChpbWc6IEJ1ZmZlciwgb3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIHJhd0Zvcm1hdDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxyXG4gIHRyeSB7XHJcbiAgICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgICBpZiAoIWltYWdlRXh0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XHJcbiAgICAgIHJldHVybiBpbWdcclxuICAgIH1cclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIGxldCBxdWFsaXR5ID0gMTAwXHJcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnF1YWxpdHkpICYmIG9wdGlvbnMucXVhbGl0eSEgPCAxMDApIHtcclxuICAgICAgcXVhbGl0eSA9IG9wdGlvbnMucXVhbGl0eSFcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50KSB7XHJcbiAgICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucmVTaXplUGVyY2VudCkpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxyXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcclxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VXaWR0aCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEgLyAxMDApLFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaXNSZVNpemUpIHtcclxuICAgICAgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCkgJiYgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnZmlsbCdcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPiAwKSAmJiAodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplV2lkdGggPT09IDApKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcclxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXHJcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCAob3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA8IGltYWdlSGVpZ2h0KSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVIZWlnaHQgLyBpbWFnZUhlaWdodFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDApICYmICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAwKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA8IGltYWdlV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZVdpZHRoIC8gaW1hZ2VXaWR0aFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoLFxyXG4gICAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc1JvdGF0ZSAmJiBvcHRpb25zLnJvdGF0ZURlZ3JlZSkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLnJvdGF0ZShvcHRpb25zLnJvdGF0ZURlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzRmxpcCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnZmxpcCcpXHJcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxpcCgpXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0Zsb3ApIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5mbG9wKClcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzQ29udmVydCkge1xyXG4gICAgICBsZXQgbmV3Rm9ybWF0ID0gb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICAgIGlmIChvcHRpb25zLnBpY0JlZCA9PT0gJ2ltZ3VyJyAmJiBuZXdGb3JtYXQgPT09ICd3ZWJwJykge1xyXG4gICAgICAgIG5ld0Zvcm1hdCA9ICdqcGcnXHJcbiAgICAgIH1cclxuICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChuZXdGb3JtYXQsIHtcclxuICAgICAgICBxdWFsaXR5XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocmF3Rm9ybWF0ICYmIHZhbGlkT3V0cHV0Rm9ybWF0KHJhd0Zvcm1hdCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KHJhd0Zvcm1hdCBhcyBhbnksIHtcclxuICAgICAgICAgIHF1YWxpdHlcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQoJ2pwZycsIHtcclxuICAgICAgICAgIHF1YWxpdHlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRm9ybWF0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnLCAnZ2lmJ11cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQWRkV2F0ZXJtYXJrID0gKHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgcmV0dXJuICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQ29tcHJlc3MgPSAoY29tcHJlc3NPcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgY29uc3Qgbm9ybWFsaXplZEV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcblxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKG5vcm1hbGl6ZWRFeHQpIHx8ICFjb21wcmVzc09wdGlvbnMpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgY29uc3Qge1xyXG4gICAgcXVhbGl0eSxcclxuICAgIGlzUmVTaXplQnlQZXJjZW50LFxyXG4gICAgcmVTaXplUGVyY2VudCxcclxuICAgIGlzUmVTaXplLFxyXG4gICAgcmVTaXplSGVpZ2h0LFxyXG4gICAgcmVTaXplV2lkdGgsXHJcbiAgICBpc1JvdGF0ZSxcclxuICAgIHJvdGF0ZURlZ3JlZSxcclxuICAgIGlzQ29udmVydCxcclxuICAgIGNvbnZlcnRGb3JtYXQsXHJcbiAgICBpc0ZsaXAsXHJcbiAgICBpc0Zsb3BcclxuICB9ID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXHJcblxyXG4gIGlmICh2YWxpZFBhcmFtKHF1YWxpdHkpICYmIHF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNSZVNpemVCeVBlcmNlbnQgJiYgdmFsaWRQYXJhbShyZVNpemVQZXJjZW50KSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzUmVTaXplICYmICgodHlwZW9mIHJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgcmVTaXplSGVpZ2h0ID4gMCkgfHwgKHR5cGVvZiByZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgcmVTaXplV2lkdGggPiAwKSkpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc1JvdGF0ZSAmJiByb3RhdGVEZWdyZWUpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc0ZsaXAgfHwgaXNGbG9wKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNDb252ZXJ0KSB7XHJcbiAgICBjb25zdCBuZXdGb3JtYXQgPSBjb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICByZXR1cm4gZmlsZUV4dCAhPT0gbmV3Rm9ybWF0XHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcmVtb3ZlRXhpZiA9IGFzeW5jIChpbWc6IEJ1ZmZlciwgZmlsZUV4dDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+ID0+IHtcclxuICBmaWxlRXh0ID0gZmlsZUV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcclxuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KSkge1xyXG4gICAgcmV0dXJuIGltZ1xyXG4gIH1cclxuICByZXR1cm4gYXdhaXQgc2hhcnAoaW1nLCB7XHJcbiAgICBhbmltYXRlZDogdHJ1ZVxyXG4gIH0pLnRvQnVmZmVyKClcclxufVxyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCB1cGxvYWQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwbG9hZCwgZ28gZ28gZ28nKVxyXG4gICAgICAuYXJndW1lbnRzKCdbaW5wdXQuLi5dJylcclxuICAgICAgLmFsaWFzKCd1JylcclxuICAgICAgLmFjdGlvbigoaW5wdXQ6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGlucHV0XHJcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXHJcbiAgICAgICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGAke2l0ZW19IGRvZXMgbm90IGV4aXN0LmApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBleGlzdFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3F1YWxpdHknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnF1YWxpdHkgfHwgMTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNDb252ZXJ0JyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNDb252ZXJ0IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY29udmVydEZvcm1hdCcsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWydhdmlmJywgJ2R6JywgJ2ZpdHMnLCAnZ2lmJywgJ2hlaWYnLCAnaW5wdXQnLCAnanBlZycsICdqcGcnLCAnanAyJywgJ2p4bCcsICdtYWdpY2snLCAnb3BlbnNsaWRlJywgJ3BkZicsICdwbmcnLCAncHBtJywgJ3JhdycsICdzdmcnLCAndGlmZicsICd0aWYnLCAndicsICd3ZWJwJ10sXHJcbiAgICAgIGRlZmF1bHQ6ICdqcGcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZVNpemUnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplV2lkdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVXaWR0aCB8fCA1MDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVIZWlnaHQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplSGVpZ2h0IHx8IDUwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NraXBSZVNpemVPZlNtYWxsSW1nJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplQnlQZXJjZW50JyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVBlcmNlbnQgfHwgNTBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0ZsaXAnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0ZsaXAgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0Zsb3AnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Zsb3AgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JvdGF0ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSb3RhdGUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyb3RhdGVEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucm90YXRlRGVncmVlIHx8IDkwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZW1vdmVFeGlmJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZW1vdmVFeGlmIHx8IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0FkZFdhdGVybWFyaycsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQWRkV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVHlwZScsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsndGV4dCcsICdpbWFnZSddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRnVsbFNjcmVlbldhdGVybWFyayB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0RlZ3JlZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ZvbnRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1NjYWxlUmF0aW8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0NvbG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtDb2xvciB8fCAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtJbWFnZVBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ltYWdlUGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1Bvc2l0aW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnbm9ydGgnLCAnbm9ydGhlYXN0JywgJ3NvdXRoZWFzdCcsICdzb3V0aCcsICdzb3V0aHdlc3QnLCAnbm9ydGh3ZXN0JywgJ3dlc3QnLCAnZWFzdCcsICdjZW50ZXInLCAnY2VudHJlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZm9ybWF0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5hYmxlJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRU5BQkxFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuYWJsZSB8fCBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNvbXByZXNzIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzJ1xyXG5pbXBvcnQgd2F0ZXJtYXJrIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL3dhdGVybWFyaydcclxuaW1wb3J0IHJlbmFtZSBmcm9tICcuLi9iZWZvcmV1cGxvYWQvYnVpbGRJblJlbmFtZSdcclxuXHJcbi8vIGhhbmRsZSBtb2R1bGVzIGNvbmZpZyAtPiBzYXZlIHRvIHBpY2dvIGNvbmZpZyBmaWxlXHJcbmNvbnN0IGhhbmRsZUNvbmZpZyA9IGFzeW5jIChjdHg6IElQaWNHbywgcHJvbXB0czogSVBsdWdpbkNvbmZpZ1tdLCBtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQocHJvbXB0cylcclxuICBjb25zdCBjb25maWdOYW1lID0gbW9kdWxlID09PSAndXBsb2FkZXInXHJcbiAgICA/IGBwaWNCZWQuJHtuYW1lfWBcclxuICAgIDogbW9kdWxlID09PSAndHJhbnNmb3JtZXInXHJcbiAgICAgID8gYHRyYW5zZm9ybWVyLiR7bmFtZX1gXHJcbiAgICAgIDogbW9kdWxlID09PSAnYnVpbGRpbidcclxuICAgICAgICA/IGBidWlsZEluLiR7bmFtZX1gXHJcbiAgICAgICAgOiBuYW1lXHJcbiAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgW2NvbmZpZ05hbWVdOiBhbnN3ZXJcclxuICB9KVxyXG4gIGlmIChtb2R1bGUgPT09ICd1cGxvYWRlcicpIHtcclxuICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3BpY0JlZC5jdXJyZW50JzogbmFtZSxcclxuICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IG5hbWVcclxuICAgIH0pXHJcbiAgfSBlbHNlIGlmIChtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcicpIHtcclxuICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IG5hbWVcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBzZXR0aW5nID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnc2V0JylcclxuICAgICAgLmFsaWFzKCdjb25maWcnKVxyXG4gICAgICAuYXJndW1lbnRzKCc8bW9kdWxlPiBbbmFtZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NvbmZpZ3VyZSBjb25maWcgb2YgcGljZ28gbW9kdWxlcywgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxyXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICAvLyBpZiBhIG1vZHVsZSBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcclxuICAgICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdidWlsZGluJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHdhdGVybWFyay5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAncmVuYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydjb21wcmVzcycsICd3YXRlcm1hcmsnLCAncmVuYW1lJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgYnVpbGRpbiBtb2R1bGUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5idWlsZGluID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAncmVuYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHJlbmFtZS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICd1cGxvYWRlcic6XHJcbiAgICAgICAgICAgICAgY2FzZSAndHJhbnNmb3JtZXInOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQobmFtZSlcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihgTm8gJHttb2R1bGV9IG5hbWVkICR7bmFtZX1gKTsgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke21vZHVsZX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlclttb2R1bGVdLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYENob29zZSBhKG4pICR7bW9kdWxlfWBcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAncGx1Z2luJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghbmFtZS5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHgubG9nLmVycm9yKGBObyBwbHVnaW4gbmFtZWQgJHtuYW1lfWApOyByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2luJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBwbHVnaW4nXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgYW5zd2VyLnBsdWdpbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJyk7IHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcclxuICAgICAgICAgICAgaWYgKG1vZHVsZSA9PT0gJ3BsdWdpbicpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oJ0lmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGNvbmZpZywgcGxlYXNlIHJ1biBcXCdwaWNnbyB1c2UgcGx1Z2luc1xcJycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgc2V0dGluZ1xyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luLCB0eXBlIFVuZGVmaW5hYmxlLCB0eXBlIElDTElDb25maWdzLCB0eXBlIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVzZTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VzZScpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1c2UgbW9kdWxlcyBvZiBwaWNnbycpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICBsZXQgcHJvbXB0czogYW55W10gPSBbXVxyXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xyXG4gICAgICAgICAgICAgIHVwbG9hZGVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhbiB1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnVwbG9hZGVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHBsdWdpbnM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIHBsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBjdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtpdGVtfWApKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcclxuICAgICAgICAgICAgICAgIHByb21wdHMucHVzaChjb25maWdbbW9kdWxlXSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnMnKTsgcmV0dXJuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHByb21wdHMgPSBPYmplY3Qua2V5cyhjb25maWcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBjb25maWdbaXRlbV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgZm9yIHBsdWdpbnMgb3B0aW9uIGZyb20gQXJyYXkgdG8gb2JqZWN0XHJcbiAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSBjdHguZ2V0Q29uZmlnPElTdHJpbmdLZXlNYXA8Ym9vbGVhbj4+KCdwaWNnb1BsdWdpbnMnKVxyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBsdWdpbnMpLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciBwbHVnaW5zXHJcbiAgICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICAgcGljZ29QbHVnaW5zOiBwbHVnaW5zXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgdXBsb2FkZXIgJiB0cmFuc2Zvcm1lclxyXG4gICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC5jdXJyZW50JzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcclxuICAgICAgICAgICAgICAncGljQmVkLnVwbG9hZGVyJzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcclxuICAgICAgICAgICAgICAncGljQmVkLnRyYW5zZm9ybWVyJzogYW5zd2VyLnRyYW5zZm9ybWVyIHx8ICdwYXRoJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwcm94eTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgJ3BpY0JlZC5wcm94eSc6IHByb3h5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByb3h5XHJcbiIsImltcG9ydCBtYXRjaCBmcm9tICdtaW5pbWF0Y2gnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElPcHRpb25zLCB0eXBlIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xyXG5pbXBvcnQgZWpzIGZyb20gJ2VqcydcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0ZW1wbGF0ZSBmaWxlcyB0byBkZXN0aW5hdGlvbiBmaWxlcy5cclxuICogQHBhcmFtIHtQaWNHb30gY3R4XHJcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRpb25zKG9wdGlvbnMudG1wKVxyXG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKG9wdGlvbnMudG1wLCAndGVtcGxhdGUnKVxyXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxyXG4gICAgaWYgKG9wdHMucHJvbXB0cyAmJiBvcHRzLnByb21wdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhbnN3ZXJzID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQob3B0cy5wcm9tcHRzKVxyXG4gICAgfVxyXG4gICAgbGV0IF9maWxlczogc3RyaW5nW10gPSBhd2FpdCBnbG9iYnkoWycqKi8qJ10sIHsgY3dkOiBzb3VyY2UsIGRvdDogdHJ1ZSB9KSAvLyBnZXQgZmlsZXMnIG5hbWUgYXJyYXlcclxuICAgIF9maWxlcyA9IF9maWxlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICBsZXQgZ2xvYiA9ICcnXHJcbiAgICAgIE9iamVjdC5rZXlzKG9wdHMuZmlsdGVycykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAobWF0Y2goaXRlbSwga2V5LCB7IGRvdDogdHJ1ZSB9KSkge1xyXG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChnbG9iKSB7IC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzKGN0eCwgb3B0cy5maWx0ZXJzW2dsb2JdLCBhbnN3ZXJzKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjdHgubG9nLndhcm4oJ1RlbXBsYXRlIGZpbGVzIG5vdCBmb3VuZCEnKTsgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWxlcyA9IHJlbmRlcihfZmlsZXMsIHNvdXJjZSwgYW5zd2VycylcclxuICAgIHdyaXRlRmlsZVRyZWUob3B0aW9ucy5kZXN0LCBmaWxlcylcclxuICAgIGlmICh0eXBlb2Ygb3B0cy5jb21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBvcHRzLmNvbXBsZXRlKHsgYW5zd2Vycywgb3B0aW9ucywgZmlsZXM6IF9maWxlcywgY3R4IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0cy5jb21wbGV0ZU1lc3NhZ2UpIHtcclxuICAgICAgY3R4LmxvZy5zdWNjZXNzKG9wdHMuY29tcGxldGVNZXNzYWdlKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKCdEb25lIScpXHJcbiAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcclxuICogQHBhcmFtIGN0eCBQaWNHb1xyXG4gKiBAcGFyYW0gZXhwIGNvbmRpdGlvbiBleHByZXNzaW9uXHJcbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxyXG4gKi9cclxuY29uc3QgZmlsdGVycyA9IChjdHg6IElQaWNHbywgZXhwOiBhbnksIGRhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcclxuICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbignZGF0YScsICd3aXRoIChkYXRhKSB7IHJldHVybiAnICsgZXhwICsgJ30nKVxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gZm4oZGF0YSlcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGBFcnJvciB3aGVuIGV2YWx1YXRpbmcgZmlsdGVyIGNvbmRpdGlvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgb3B0aW9uc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXHJcbiAqL1xyXG5jb25zdCBnZXRPcHRpb25zID0gKHRlbXBsYXRlUGF0aDogc3RyaW5nKTogYW55ID0+IHtcclxuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9uc1BhdGgpKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXHJcbiAgICByZXR1cm4gb3B0aW9uc1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4ge31cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXIgZmlsZXMgdG8gYSB2aXJ0dWFsIHRyZWUgb2JqZWN0XHJcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCByZW5kZXIgPSAoZmlsZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55ID0+IHtcclxuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cclxuICBmaWxlcy5mb3JFYWNoKChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihzb3VyY2UsIGZpbGVQYXRoKSwgJ3V0ZjgnKVxyXG4gICAgY29uc3QgY29udGVudCA9IGVqcy5yZW5kZXIoZmlsZSwgb3B0aW9ucylcclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xyXG4gICAgICBmaWxlVHJlZVtmaWxlUGF0aF0gPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfSlcclxuICByZXR1cm4gZmlsZVRyZWVcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyaXRlIHJlbmRlcmVkIGZpbGVzJyBjb250ZW50IHRvIHJlYWwgZmlsZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWxlc1xyXG4gKi9cclxuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xyXG4gIE9iamVjdC5rZXlzKGZpbGVzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSlcclxuICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcclxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGZpbGVzW25hbWVdKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgZmlsdGVycyxcclxuICBnZW5lcmF0ZSxcclxuICByZW5kZXIsXHJcbiAgd3JpdGVGaWxlVHJlZVxyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luaXRVdGlscydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXHJcbmltcG9ydCB7IHR5cGUgSU9wdGlvbnMsIHR5cGUgSVBsdWdpbiwgdHlwZSBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHJtIGZyb20gJ3JpbXJhZidcclxuXHJcbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcclxuICAvLyBjb25zdCBuYW1lID0gb3B0aW9ucy5pblBsYWNlID8gcGF0aC5yZWxhdGl2ZSgnLi4vJywgcHJvY2Vzcy5jd2QoKSkgOiBvcHRpb25zLnByb2plY3RcclxuICBpZiAob3B0aW9ucy5vZmZsaW5lKSB7IC8vIG9mZmxpbmUgbW9kZVxyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50ZW1wbGF0ZSkpIHtcclxuICAgICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXHJcbiAgICB9XHJcbiAgfSBlbHNlIHsgLy8gb25saW5lIG1vZGVcclxuICAgIG9wdGlvbnMudGVtcGxhdGUgPSAhb3B0aW9ucy5oYXNTbGFzaFxyXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxyXG4gICAgICA6IG9wdGlvbnMudGVtcGxhdGVcclxuICAgIGRvd25sb2FkQW5kR2VuZXJhdGUoY3R4LCBvcHRpb25zKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGRvd25sb2FkIHRlbXBsYXRlICYgZ2VuZXJhdGVcclxuICogQHBhcmFtIHsgUGljR28gfSBjdHhcclxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXHJcbiAqL1xyXG5jb25zdCBkb3dubG9hZEFuZEdlbmVyYXRlID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xyXG4gICAgcm0uc3luYyhvcHRpb25zLnRtcClcclxuICB9XHJcbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxyXG4gIGRvd25sb2FkKG9wdGlvbnMudGVtcGxhdGUsIG9wdGlvbnMudG1wLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIH0sIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICBpZiAoZXJyKSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoZXJyKTsgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGVkIScpXHJcbiAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBpbml0OiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5pdCcpXHJcbiAgICAgIC5hcmd1bWVudHMoJzx0ZW1wbGF0ZT4gW3Byb2plY3RdJylcclxuICAgICAgLm9wdGlvbignLS1jbG9uZScsICd1c2UgZ2l0IGNsb25lJylcclxuICAgICAgLm9wdGlvbignLS1vZmZsaW5lJywgJ3VzZSBjYWNoZWQgdGVtcGxhdGUnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NyZWF0ZSBwaWNnbyBwbHVnaW5cXCdzIGRldmVsb3BtZW50IHRlbXBsYXRlcycpXHJcbiAgICAgIC5hY3Rpb24oKHRlbXBsYXRlOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIC8vIFRoYW5rcyB0byB2dWUtY2xpIGluaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtY2xpL2Jsb2IvbWFzdGVyL2Jpbi92dWUtaW5pdFxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzU2xhc2ggPSB0ZW1wbGF0ZS5pbmNsdWRlcygnLycpXHJcbiAgICAgICAgICAgIGNvbnN0IGluUGxhY2UgPSAhcHJvamVjdCB8fCBwcm9qZWN0ID09PSAnLidcclxuICAgICAgICAgICAgY29uc3QgZGVzdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0IHx8ICcuJylcclxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBwcm9ncmFtLmNsb25lIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIGNvbnN0IG9mZmxpbmUgPSBwcm9ncmFtLm9mZmxpbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3QgdG1wID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNnby90ZW1wbGF0ZXMnLCB0ZW1wbGF0ZS5yZXBsYWNlKC9bLzpdL2csICctJykpIC8vIGZvciBjYWNoaW5nIHRlbXBsYXRlXHJcblxyXG4gICAgICAgICAgICBpZiAocHJvZ3JhbS5vZmZsaW5lKSB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0bXBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZSxcclxuICAgICAgICAgICAgICBwcm9qZWN0LFxyXG4gICAgICAgICAgICAgIGhhc1NsYXNoLFxyXG4gICAgICAgICAgICAgIGluUGxhY2UsXHJcbiAgICAgICAgICAgICAgZGVzdCxcclxuICAgICAgICAgICAgICBjbG9uZSxcclxuICAgICAgICAgICAgICB0bXAsXHJcbiAgICAgICAgICAgICAgb2ZmbGluZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBwcm9qZWN0IGlzIGVtcHR5IG9yIGV4aXN0XHJcbiAgICAgICAgICAgIGlmIChpblBsYWNlIHx8IGZzLmV4aXN0c1N5bmMoZGVzdCkpIHtcclxuICAgICAgICAgICAgICBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogaW5QbGFjZVxyXG4gICAgICAgICAgICAgICAgICAgID8gJ0dlbmVyYXRlIHByb2plY3QgaW4gY3VycmVudCBkaXJlY3Rvcnk/J1xyXG4gICAgICAgICAgICAgICAgICAgIDogJ1RhcmdldCBkaXJlY3RvcnkgZXhpc3RzLiBDb250aW51ZT8nLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnb2snXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXSkudGhlbigoYW5zd2VyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIub2spIHtcclxuICAgICAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBwcm9qZWN0IGlzIGdpdmVuXHJcbiAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vbignLS1oZWxwJywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZygnRXhhbXBsZXM6JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggYW4gb2ZmaWNpYWwgdGVtcGxhdGUnKSlcclxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgcGx1Z2luIG15LXByb2plY3QnKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgc3RyYWlnaHQgZnJvbSBhIGdpdGh1YiB0ZW1wbGF0ZScpKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCB1c2VybmFtZS9yZXBvIG15LXByb2plY3QnKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGluaXRcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGx1Z2luLCB0eXBlIElQaWNHbywgdHlwZSBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBpMThuOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaTE4bicpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tsYW5nXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY2hhbmdlIHBpY2dvIGxhbmd1YWdlJylcclxuICAgICAgLmFjdGlvbihhc3luYyAobGFuZzogc3RyaW5nID0gJycpID0+IHtcclxuICAgICAgICBjb25zdCBsaXN0ID0gY3R4LmkxOG4uZ2V0TGFuZ3VhZ2VMaXN0KClcclxuICAgICAgICBpZiAoIWxhbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgbmFtZTogJ2kxOG4nLFxyXG4gICAgICAgICAgICAgIGNob2ljZXM6IGxpc3QsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGxhbmd1YWdlJyxcclxuICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxzdHJpbmc+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgY3R4LmkxOG4uc2V0TGFuZ3VhZ2UoYW5zd2VyLmkxOG4pXHJcbiAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoYExhbmd1YWdlIHNldCB0byAke2Fuc3dlci5pMThufWApXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFsaXN0LmluY2x1ZGVzKGxhbmcpKSB7XHJcbiAgICAgICAgICBjdHgubG9nLndhcm4oJ05vIHN1Y2ggbGFuZ3VhZ2UnKTsgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5pMThuLnNldExhbmd1YWdlKGxhbmcpXHJcbiAgICAgICAgY3R4LmxvZy5zdWNjZXNzKGBMYW5ndWFnZSBzZXQgdG8gJHtsYW5nfWApXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpMThuXHJcbiIsImltcG9ydCB7IHR5cGUgSVBsdWdpbiwgdHlwZSBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXHJcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcclxuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcclxuaW1wb3J0IGlucXVpcmVyLCB7IHR5cGUgSW5xdWlyZXIgfSBmcm9tICdpbnF1aXJlcidcclxuaW1wb3J0IHsgdHlwZSBJUGx1Z2luLCB0eXBlIElDb21tYW5kZXIsIHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBjb21tYW5kZXJzIGZyb20gJy4uL3BsdWdpbnMvY29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcclxuXHJcbmV4cG9ydCBjbGFzcyBDb21tYW5kZXIgaW1wbGVtZW50cyBJQ29tbWFuZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5hbWUgPSAnY29tbWFuZGVyJ1xyXG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ID0gbmV3IE1hcDxzdHJpbmcsIElQbHVnaW4+KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG5cclxuICBwcm9ncmFtOiBDb21tYW5kXHJcbiAgaW5xdWlyZXI6IElucXVpcmVyXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKVxyXG4gICAgdGhpcy5pbnF1aXJlciA9IGlucXVpcmVyXHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWVcclxuICB9XHJcblxyXG4gIGluaXQgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9ncmFtXHJcbiAgICAgIC52ZXJzaW9uKHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT04sICctdiwgLS12ZXJzaW9uJylcclxuICAgICAgLm9wdGlvbignLWQsIC0tZGVidWcnLCAnZGVidWcgbW9kZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgZGVidWc6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub3B0aW9uKCctcywgLS1zaWxlbnQnLCAnc2lsZW50IG1vZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vbignY29tbWFuZDoqJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihgSW52YWxpZCBjb21tYW5kOiAke3RoaXMucHJvZ3JhbS5hcmdzLmpvaW4oJyAnKX1cXG5TZWUgLS1oZWxwIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLmApXHJcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgLy8gYnVpbHQtaW4gY29tbWFuZHNcclxuICAgIGNvbW1hbmRlcnModGhpcy5jdHgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIGlzIHJlcXVpcmVkIScpXHJcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5oYW5kbGUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbi5oYW5kbGUgbXVzdCBiZSBhIGZ1bmN0aW9uIScpXHJcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBwbHVnaW4gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgY29uc3QgY3VycmVudFBsdWdpbk5hbWUgPSBnZXRDdXJyZW50UGx1Z2luTmFtZSgpXHJcbiAgICBpZiAoY3VycmVudFBsdWdpbk5hbWUgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKGN1cnJlbnRQbHVnaW5OYW1lKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KGN1cnJlbnRQbHVnaW5OYW1lKT8ucHVzaChpZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChjdXJyZW50UGx1Z2luTmFtZSwgW2lkXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlciAocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcclxuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXHJcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRMaXN0KCkuZm9yRWFjaCgoaXRlbTogSVBsdWdpbikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGl0ZW0uaGFuZGxlKHRoaXMuY3R4KVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCAoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXHJcbiAgfVxyXG5cclxuICBnZXRMaXN0ICgpOiBJUGx1Z2luW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXHJcbiAgfVxyXG5cclxuICBnZXRJZExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbW1hbmRlclxyXG4iLCJpbXBvcnQgcGx1Z2luSGFuZGxlciBmcm9tICcuL3BsdWdpbkhhbmRsZXInXHJcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnXHJcbmltcG9ydCB1cGxvYWQgZnJvbSAnLi91cGxvYWQnXHJcbmltcG9ydCBzZXR0aW5nIGZyb20gJy4vc2V0dGluZydcclxuaW1wb3J0IHVzZSBmcm9tICcuL3VzZSdcclxuaW1wb3J0IHByb3h5IGZyb20gJy4vcHJveHknXHJcbmltcG9ydCBpbml0IGZyb20gJy4vaW5pdCdcclxuaW1wb3J0IGkxOG4gZnJvbSAnLi9pMThuJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGN0eDogSVBpY0dvKTogdm9pZCA9PiB7XHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncGx1Z2luSGFuZGxlcicsIHBsdWdpbkhhbmRsZXIpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3NldHRpbmcnLCBzZXR0aW5nKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VwbG9hZCcsIHVwbG9hZClcclxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncHJveHknLCBwcm94eSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpbml0JywgaW5pdClcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcclxufVxyXG4iLCJleHBvcnQgZW51bSBJTG9nVHlwZSB7XHJcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcclxuICBpbmZvID0gJ2luZm8nLFxyXG4gIHdhcm4gPSAnd2FybicsXHJcbiAgZXJyb3IgPSAnZXJyb3InXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIGJ5IHVzZXJzXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcclxuICBVUExPQURfUFJPR1JFU1MgPSAndXBsb2FkUHJvZ3Jlc3MnLFxyXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxyXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcclxuICBCRUZPUkVfVVBMT0FEID0gJ2JlZm9yZVVwbG9hZCcsXHJcbiAgQUZURVJfVVBMT0FEID0gJ2FmdGVyVXBsb2FkJyxcclxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXHJcbiAgSU5TVEFMTCA9ICdpbnN0YWxsJyxcclxuICBVTklOU1RBTEwgPSAndW5pbnN0YWxsJyxcclxuICBVUERBVEUgPSAndXBkYXRlJyxcclxuICBOT1RJRklDQVRJT04gPSAnbm90aWZpY2F0aW9uJ1xyXG59XHJcblxyXG4vKipcclxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBvbmx5IGJ5IHBpY2dvXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVzRXZlbnQge1xyXG4gIENPTkZJR19DSEFOR0UgPSAnQ09ORklHX0NIQU5HRSdcclxufVxyXG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJ1xyXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7XHJcbiAgdHlwZSBJTG9nQXJndlR5cGUsXHJcbiAgdHlwZSBJTG9nQXJndlR5cGVXaXRoRXJyb3IsXHJcbiAgdHlwZSBVbmRlZmluYWJsZSxcclxuICB0eXBlIElMb2dDb2xvcixcclxuICB0eXBlIElMb2dnZXIsXHJcbiAgdHlwZSBJUGljR29cclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XHJcbiAgICBbSUxvZ1R5cGUuc3VjY2Vzc106ICdncmVlbicsXHJcbiAgICBbSUxvZ1R5cGUuaW5mb106ICdibHVlJyxcclxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXHJcbiAgICBbSUxvZ1R5cGUuZXJyb3JdOiAncmVkJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbG9nTGV2ZWwhOiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIHByaXZhdGUgbG9nUGF0aCE6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTG9nICh0eXBlOiBJTG9nVHlwZSwgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgLy8gY2hlY2sgY29uZmlnLnNpbGVudFxyXG4gICAgdGhpcy5sb2dMZXZlbCA9IHRoaXMuY3R4LmdldENvbmZpZygnc2V0dGluZ3MubG9nTGV2ZWwnKVxyXG4gICAgaWYgKCF0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NpbGVudCcpICYmIHRoaXMuY2hlY2tMb2dMZXZlbCh0eXBlLCB0aGlzLmxvZ0xldmVsKSkge1xyXG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcclxuICAgICAgY29uc29sZS5sb2cobG9nSGVhZGVyLCAuLi5tc2cpXHJcbiAgICAgIHRoaXMubG9nUGF0aCA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MubG9nUGF0aCcpIHx8IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnLi9waWNsaXN0LmxvZycpXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIGZpeCBsb2cgZmlsZSBpcyB0b28gbGFyZ2UsIG5vdyB0aGUgbG9nIGZpbGUncyBkZWZhdWx0IHNpemUgaXMgMTAgTUJcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jaGVja0xvZ0ZpbGVJc0xhcmdlKHRoaXMubG9nUGF0aClcclxuICAgICAgICAgIGlmIChyZXN1bHQuaXNMYXJnZSkge1xyXG4gICAgICAgICAgICBjb25zdCB3YXJuaW5nTXNnID0gYExvZyBmaWxlIGlzIHRvbyBsYXJnZSAoPiAkeyhyZXN1bHQubG9nRmlsZVNpemVMaW1pdCEpIC8gMTAyNCAvIDEwMjQgfHwgJzEwJ30gTUIpLCByZWNyZWF0ZSBsb2cgZmlsZWBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdbUGljTGlzdCBXQVJOXTonKSwgd2FybmluZ01zZylcclxuICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZUxvZ0ZpbGUodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgICBtc2cudW5zaGlmdCh3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVXcml0ZUxvZyh0aGlzLmxvZ1BhdGgsIHR5cGUsIC4uLm1zZylcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB3aHk/Pz9cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiBjaGVja2luZyBsb2cgZmlsZSBzaXplJywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrTG9nRmlsZUlzTGFyZ2UgKGxvZ1BhdGg6IHN0cmluZyk6IHtcclxuICAgIGlzTGFyZ2U6IGJvb2xlYW5cclxuICAgIGxvZ0ZpbGVTaXplPzogbnVtYmVyXHJcbiAgICBsb2dGaWxlU2l6ZUxpbWl0PzogbnVtYmVyXHJcbiAgfSB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZSA9IGZzLnN0YXRTeW5jKGxvZ1BhdGgpLnNpemVcclxuICAgICAgY29uc3QgbG9nRmlsZVNpemVMaW1pdCA9IGZvcmNlTnVtYmVyKHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxudW1iZXI+Pignc2V0dGluZ3MubG9nRmlsZVNpemVMaW1pdCcpIHx8IDEwKSAqIDEwMjQgKiAxMDI0IC8vIDEwIE1CIGRlZmF1bHRcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc0xhcmdlOiBsb2dGaWxlU2l6ZSA+IGxvZ0ZpbGVTaXplTGltaXQsXHJcbiAgICAgICAgbG9nRmlsZVNpemUsXHJcbiAgICAgICAgbG9nRmlsZVNpemVMaW1pdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpc0xhcmdlOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZUxvZ0ZpbGUgKGxvZ1BhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcclxuICAgICAgZnMudW5saW5rU3luYyhsb2dQYXRoKVxyXG4gICAgICBmcy5jcmVhdGVGaWxlU3luYyhsb2dQYXRoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVXcml0ZUxvZyAobG9nUGF0aDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBsb2cgPSBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpfSBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dIGBcclxuICAgICAgbXNnLmZvckVhY2goKGl0ZW06IElMb2dBcmd2VHlwZVdpdGhFcnJvcikgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgbG9nICs9IGBcXG4tLS0tLS1FcnJvciBTdGFjayBCZWdpbi0tLS0tLVxcbiR7dXRpbC5mb3JtYXQoaXRlbT8uc3RhY2spfVxcbi0tLS0tLS1FcnJvciBTdGFjayBFbmQtLS0tLS0tIGBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSwgbnVsbCwgMilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxvZyArPSBgJHtpdGVtIGFzIHN0cmluZ30gYFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgbG9nICs9ICdcXG4nXHJcbiAgICAgIC8vIEEgc3luY2hyb25pemVkIGFwcHJvYWNoIHRvIGF2b2lkIGxvZyBtc2cgc2VxdWVuY2UgZXJyb3JzXHJcbiAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKGxvZ1BhdGgsIGxvZylcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIHdyaXRpbmcgbG9nIGZpbGUnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0xvZ0xldmVsICh0eXBlOiBzdHJpbmcsIGxldmVsOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGxldmVsID09PSB1bmRlZmluZWQgfHwgbGV2ZWwgPT09ICdhbGwnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcclxuICAgICAgcmV0dXJuIGxldmVsLnNvbWUoKGl0ZW06IHN0cmluZykgPT4gKGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHR5cGUgPT09IGxldmVsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWNjZXNzICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5zdWNjZXNzLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBpbmZvICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBlcnJvciAoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuZXJyb3IsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIHdhcm4gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLndhcm4sIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGRlYnVnICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXYoKSkge1xyXG4gICAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMb2dnZXJcclxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xyXG5pbXBvcnQgeyB0eXBlIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucywgdHlwZSBJTGlmZWN5Y2xlUGx1Z2lucywgdHlwZSBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbiwgdHlwZSBVbmRlZmluYWJsZSwgdHlwZSBJSW1nSW5mbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBnZXRVUkxGaWxlLCBoYW5kbGVVcmxFbmNvZGUsIGltYWdlUHJvY2VzcywgaXNVcmwsIG5lZWRDb21wcmVzcywgbmVlZEFkZFdhdGVybWFyaywgaW1hZ2VBZGRXYXRlck1hcmssIHJlbW92ZUV4aWYsIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHRmTGluazogc3RyaW5nID0gJ2h0dHBzOi8vcmVsZWFzZS5waWNsaXN0LmNuL3NpbWhlaS50dGYnXHJcbiAgdHRmUGF0aDogc3RyaW5nXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuICAgIGNvbnN0IGltZ0ZsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJylcclxuICAgIGZzLmVuc3VyZURpclN5bmMoaW1nRmxlUGF0aClcclxuICAgIGZzLmVtcHR5RGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICB0aGlzLnR0ZlBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdhc3NldHMnLCAnc2ltaGVpLnR0ZicpXHJcbiAgfVxyXG5cclxuICBhc3luYyBkb3dubG9hZFRURiAoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dERpcikpIHtcclxuICAgICAgZnMubWtkaXJTeW5jKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpKSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZS4nKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldCh0aGlzLnR0ZkxpbmssIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnR0ZlBhdGgsIHJlcy5kYXRhKVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzLicpXHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHN0YXJ0IChpbnB1dDogYW55W10pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgLy8gZW5zdXJlIGV2ZXJ5IHVwbG9hZCBwcm9jZXNzIGhhcyBhbiB1bmlxdWUgY29udGV4dFxyXG4gICAgY29uc3QgY3R4ID0gY3JlYXRlQ29udGV4dCh0aGlzLmN0eClcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGltYWdlcyBpbnB1dFxyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGFuIGFycmF5LicpXHJcbiAgICAgIH1cclxuICAgICAgY3R4LmlucHV0ID0gaW5wdXRcclxuICAgICAgY3R4LnJhd0lucHV0UGF0aCA9IFtdIGFzIHN0cmluZ1tdXHJcbiAgICAgIGN0eC5yYXdJbnB1dCA9IGNsb25lRGVlcChpbnB1dClcclxuICAgICAgY3R4Lm91dHB1dCA9IFtdIGFzIElJbWdJbmZvW11cclxuICAgICAgY29uc3QgY29tcHJlc3NPcHRpb25zID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKVxyXG4gICAgICBjb25zdCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgY29uc3QgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxyXG4gICAgICBpZiAoIXVwbG9hZGVyICYmIGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSAnc21tcydcclxuICAgICAgfSBlbHNlIGlmIChjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgICBjb21wcmVzc09wdGlvbnMucGljQmVkID0gdHlwZVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdhdGVybWFya09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcclxuICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucyB8fCB3YXRlcm1hcmtPcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAncGljbGlzdFRlbXAnKVxyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0ZW1wRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICBmcy5ta2RpclN5bmModGVtcEZpbGVQYXRoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3YXRlcm1hcmtNc2cgPSAnQWRkIHdhdGVybWFyayB0byBpbWFnZSdcclxuICAgICAgICBjb25zdCBjb21wcmVzc01zZyA9ICdDb21wcmVzcyBvciBjb252ZXJ0IGltYWdlJ1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgICAgICAgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cclxuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgICAgICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGluZm8uYnVmZmVyLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBpbmZvLmJ1ZmZlciwgY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGluZm8uYnVmZmVyLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gaW5mby5leHRuYW1lID8/ICcnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgPyBgJHtwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSl9JHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGl0ZW0pLCBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKSlcclxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZvLnJlYXNvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cclxuICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXHJcbiAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyh3YXRlcm1hcmtNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgd2F0ZXJtYXJrT3B0aW9ucywgdGhpcy50dGZQYXRoKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmVlZENvbXByZXNzKGNvbXByZXNzT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKSkge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcclxuICAgICAgICAgICAgICBpZiAocGF0aC5leHRuYW1lKGl0ZW0pID09PSAnLmhlaWMnIHx8IHBhdGguZXh0bmFtZShpdGVtKSA9PT0gJy5oZWlmJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpY0J1ZmZlciA9IGZzLnJlYWRGaWxlU3luYyhpdGVtKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpY1Jlc3VsdCA9IGF3YWl0IGhlaWNDb252ZXJ0KHtcclxuICAgICAgICAgICAgICAgICAgYnVmZmVyOiBoZWljQnVmZmVyLFxyXG4gICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdKUEVHJyxcclxuICAgICAgICAgICAgICAgICAgcXVhbGl0eTogMVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBIZWljQ29udmVydEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9LmpwZ2ApXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUsIEJ1ZmZlci5mcm9tKGhlaWNSZXN1bHQpKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3MoZnMucmVhZEZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUpLCBjb21wcmVzc09wdGlvbnMsICcuanBnJylcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3ModHJhbnNmb3JtZWRCdWZmZXIgPz8gZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCBjb21wcmVzc09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihmcy5yZWFkRmlsZVN5bmMoaXRlbSksIHBhdGguZXh0bmFtZShpdGVtKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgbmV3RXh0XHJcbiAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBjb21wcmVzc09wdGlvbnM/LmNvbnZlcnRGb3JtYXQgPz8gJ2pwZydcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3RXh0ID0gcGF0aC5leHRuYW1lKGl0ZW0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld0V4dCA9IG5ld0V4dC5zdGFydHNXaXRoKCcuJykgPyBuZXdFeHQgOiBgLiR7bmV3RXh0fWBcclxuICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgcGF0aC5leHRuYW1lKGl0ZW0pKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUoaXRlbSksIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgcGF0aC5leHRuYW1lKGl0ZW0pKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxyXG4gICAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGN0eC5pbnB1dCkge1xyXG4gICAgICAgICAgY3R4LnJhd0lucHV0UGF0aC5wdXNoKGl0ZW0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGxpZmVjeWNsZSBtYWluXHJcbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVHJhbnNmb3JtKGN0eClcclxuICAgICAgYXdhaXQgdGhpcy5kb1RyYW5zZm9ybShjdHgpXHJcbiAgICAgIGNvbnN0IHJlbmFtZUNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxyXG4gICAgICBpZiAocmVuYW1lQ29uZmlnLmVuYWJsZSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHJlbmFtZUNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICAgICAgY3R4Lm91dHB1dCA9IGN0eC5vdXRwdXQubWFwKChpdGVtOiBJSW1nSW5mbywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGZpbGVOYW1lID0gaXRlbS5maWxlTmFtZVxyXG4gICAgICAgICAgaWYgKGZvcm1hdCkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyhjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0sIGZvcm1hdClcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXHJcbiAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVVcGxvYWQoY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcclxuICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XHJcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF0cmFuc2Zvcm1lcikge1xyXG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB0cmFuc2Zvcm1lciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHRyYW5zZm9ybWVyIC0gcGF0aGApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9VUExPQUQsIGN0eClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGxldCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgIGxldCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgaWYgKCF1cGxvYWRlcikge1xyXG4gICAgICB0eXBlID0gJ3NtbXMnXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xyXG4gICAgICB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KCdzbW1zJylcclxuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHVwbG9hZGVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdXBsb2FkZXIgLSBzbW1zYClcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdXBsb2FkZXI/LmhhbmRsZShjdHgpXHJcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XHJcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIGxldCBtc2cgPSAnJ1xyXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcclxuICAgIGNvbnN0IGlzRW5jb2RlT3V0cHV0VVJMID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuY29kZU91dHB1dFVSTCcpID09PSB0cnVlXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbXNnICs9IGlzRW5jb2RlT3V0cHV0VVJMID8gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISkgOiBjdHgub3V0cHV0W2ldLmltZ1VybCFcclxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgbXNnICs9ICdcXG4nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxyXG4gICAgfVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zIChsaWZlQ3ljbGVQbHVnaW5zOiBJTGlmZWN5Y2xlUGx1Z2lucywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXHJcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcclxuICAgIGNvbnN0IGxpZmVDeWNsZU5hbWUgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldE5hbWUoKVxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxyXG4gICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0pKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG4vKipcclxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXHJcbiAqIEBwYXJhbSBjdHhcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgY29uZmlnUGF0aDogY3R4LmNvbmZpZ1BhdGgsXHJcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcclxuICAgIGxvZzogY3R4LmxvZyxcclxuICAgIGNtZDogY3R4LmNtZCxcclxuICAgIG91dHB1dDogW10sXHJcbiAgICBpbnB1dDogW10sXHJcbiAgICByYXdJbnB1dDogW10sXHJcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXHJcbiAgICBwbHVnaW5IYW5kbGVyOiBjdHgucGx1Z2luSGFuZGxlcixcclxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxyXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxyXG4gICAgVkVSU0lPTjogY3R4LlZFUlNJT04sXHJcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxyXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXHJcbiAgICBpMThuOiBjdHguaTE4bixcclxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVDb25maWc6IGN0eC5yZW1vdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdXBsb2FkOiBjdHgudXBsb2FkLmJpbmQoY3R4KSxcclxuICAgIGFkZExpc3RlbmVyOiBjdHguYWRkTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXHJcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVMaXN0ZW5lcjogY3R4LnJlbW92ZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgc2V0TWF4TGlzdGVuZXJzOiBjdHguc2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgcmF3TGlzdGVuZXJzOiBjdHgucmF3TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRMaXN0ZW5lcjogY3R4LnByZXBlbmRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJU21tc0NvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyLCBhcGlUb2tlbjogc3RyaW5nLCBiYWNrdXBEb21haW4gPSAnJyk6IElPbGRSZXFPcHRpb25zID0+IHtcclxuICBjb25zdCBkb21haW4gPSBiYWNrdXBEb21haW4gfHwgJ3NtLm1zJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtkb21haW59L2FwaS92Mi91cGxvYWRgLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXBpVG9rZW5cclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBzbWZpbGU6IHtcclxuICAgICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBzc2w6ICd0cnVlJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBzbW1zQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJylcclxuICBpZiAoIXNtbXNDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXHJcbiAgfVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgaW1hZ2UsIHNtbXNDb25maWc/LnRva2VuLCBzbW1zQ29uZmlnPy5iYWNrdXBEb21haW4pXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keS5jb2RlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLnVybFxyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEuaGFzaFxyXG4gICAgICAgIH0gZWxzZSBpZiAoYm9keS5jb2RlID09PSAnaW1hZ2VfcmVwZWF0ZWQnICYmIHR5cGVvZiBib2R5LmltYWdlcyA9PT0gJ3N0cmluZycpIHsgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndG9rZW4nLFxyXG4gICAgICBtZXNzYWdlOiAnYXBpIHRva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdiYWNrdXBEb21haW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5iYWNrdXBEb21haW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NtbXMnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElUY3l1bkNvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgQ09TIHNpZ25hdHVyZSBzdHJpbmdcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNpZ25hdHVyZSB7XHJcbiAgc2lnbmF0dXJlOiBzdHJpbmdcclxuICBhcHBJZDogc3RyaW5nXHJcbiAgYnVja2V0OiBzdHJpbmdcclxuICBzaWduVGltZTogc3RyaW5nXHJcbn1cclxuXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IElTaWduYXR1cmUgPT4ge1xyXG4gIGNvbnN0IHNlY3JldElkID0gb3B0aW9ucy5zZWNyZXRJZFxyXG4gIGNvbnN0IHNlY3JldEtleSA9IG9wdGlvbnMuc2VjcmV0S2V5XHJcbiAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkXHJcbiAgY29uc3QgYnVja2V0ID0gb3B0aW9ucy5idWNrZXRcclxuICBsZXQgc2lnbmF0dXJlXHJcbiAgbGV0IHNpZ25UaW1lOiBzdHJpbmcgPSAnJ1xyXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApXHJcbiAgICBjb25zdCBjdXJyZW50ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApIC0gMVxyXG4gICAgY29uc3QgZXhwaXJlZCA9IGN1cnJlbnQgKyAzNjAwXHJcblxyXG4gICAgY29uc3QgbXVsdGlTaWduYXR1cmUgPSBgYT0ke2FwcElkfSZiPSR7YnVja2V0fSZrPSR7c2VjcmV0SWR9JmU9JHtleHBpcmVkfSZ0PSR7Y3VycmVudH0mcj0ke3JhbmRvbX0mZj1gXHJcblxyXG4gICAgY29uc3Qgc2lnbkhleEtleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUobXVsdGlTaWduYXR1cmUpLmRpZ2VzdCgpXHJcbiAgICBjb25zdCB0ZW1wU3RyaW5nID0gQnVmZmVyLmNvbmNhdChbc2lnbkhleEtleSwgQnVmZmVyLmZyb20obXVsdGlTaWduYXR1cmUpXSlcclxuICAgIHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlbXBTdHJpbmcpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzc3Nzgjc2lnbmF0dXJlXHJcbiAgICBjb25zdCB0b2RheSA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0b2RheSArIDg2NDAwXHJcbiAgICBzaWduVGltZSA9IGAke3RvZGF5fTske3RvbW9ycm93fWBcclxuICAgIGNvbnN0IHNpZ25LZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKHNpZ25UaW1lKS5kaWdlc3QoJ2hleCcpXHJcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxyXG4gICAgY29uc3QgaHR0cFN0cmluZyA9IGBwdXRcXG4vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1cXG5cXG5ob3N0PSR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9XFxuYFxyXG4gICAgY29uc3Qgc2hhMWVkSHR0cFN0cmluZyA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGh0dHBTdHJpbmcpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGBzaGExXFxuJHtzaWduVGltZX1cXG4ke3NoYTFlZEh0dHBTdHJpbmd9XFxuYFxyXG4gICAgc2lnbmF0dXJlID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzaWduS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpXHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBzaWduYXR1cmUsXHJcbiAgICBhcHBJZCxcclxuICAgIGJ1Y2tldCxcclxuICAgIHNpZ25UaW1lXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogSVNpZ25hdHVyZSwgaW1hZ2U6IEJ1ZmZlciwgdmVyc2lvbjogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBhcmVhID0gb3B0aW9ucy5hcmVhXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aFxyXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIHVybDogYGh0dHA6Ly8ke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tL2ZpbGVzL3YyLyR7c2lnbmF0dXJlLmFwcElkfS8ke3NpZ25hdHVyZS5idWNrZXR9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZmlsZU5hbWV9YCxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIEhvc3Q6IGAke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tYCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUuc2lnbmF0dXJlLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgICAgb3A6ICd1cGxvYWQnLFxyXG4gICAgICAgIGZpbGVjb250ZW50OiBpbWFnZVxyXG4gICAgICB9LFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9YCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IGltYWdlLFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxyXG4gIGlmICghdGNZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHRjWXVuT3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHBhdGggPSB0Y1l1bk9wdGlvbnMucGF0aCA/PyAnJ1xyXG4gICAgY29uc3QgdXNlVjQgPSAhdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCdcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlLCBjdHguR1VJX1ZFUlNJT04gfHwgY3R4LlZFUlNJT04pXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzKVxyXG4gICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxyXG4gICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgICAgIGVyclxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICBsZXQgYm9keVxyXG4gICAgICAgIGlmICh1c2VWNCAmJiB0eXBlb2YgcmVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBib2R5ID0gcmVzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgaWYgKGJvZHk/LmJvZHk/LmVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBib2R5LmJvZHkuZXJyXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keT8uYm9keT8ubXNnIHx8IGJvZHk/LmJvZHk/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvblVybCA9IHRjWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgY29uc3Qgc2xpbSA9IHRjWXVuT3B0aW9ucy5zbGltID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICEhdGNZdW5PcHRpb25zLnNsaW1cclxuICAgICAgICBpZiAodXNlVjQgJiYgYm9keS5tZXNzYWdlID09PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7cGF0aH0ke2ltZy5maWxlTmFtZX1gXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Ym9keS5kYXRhLnNvdXJjZV91cmwgYXMgc3RyaW5nfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VWNCAmJiBib2R5ICYmIGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGNZdW5PcHRpb25zLmVuZHBvaW50ID8gdGNZdW5PcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke3RjWXVuT3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke3RjWXVuT3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2xpbSkge1xyXG4gICAgICAgICAgaWYgKG9wdGlvblVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsICs9ICcmaW1hZ2VTbGltJ1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnP2ltYWdlU2xpbSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKCF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGVyci5lcnJvcilcclxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgICBjb2RlOiBib2R5LmNvZGUgYXMgc3RyaW5nXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRleHQ6ICdodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg0MzInXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndmVyc2lvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgYWxpYXM6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTicpLFxyXG4gICAgICBjaG9pY2VzOiBbJ3Y0JywgJ3Y1J10sXHJcbiAgICAgIGRlZmF1bHQ6ICd2NScsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldElkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldEtleScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FwcElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFwcElkIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdlbmRwb2ludCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NsaW0nLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2xpbSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhIXVzZXJDb25maWcuc2xpbSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgY29uZmlybVRleHQgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0nKSB9LFxyXG4gICAgICBnZXQgY2FuY2VsVGV4dCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMJykgfSxcclxuICAgICAgZ2V0IHRpcHMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUCcpIH1cclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd0Y3l1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElHaXRodWJDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnLCBkYXRhOiBhbnkpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbyB9ID0gb3B0aW9uc1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGRhdGEsXHJcbiAgICBqc29uOiB0cnVlXHJcbiAgfSBhcyBjb25zdFxyXG59XHJcblxyXG5jb25zdCBnZXRPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbywgYnJhbmNoIH0gPSBvcHRpb25zXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfT9yZWY9JHticmFuY2h9YC5yZXBsYWNlKC8lMkYvZywgJy8nKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljR28nXHJcbiAgICB9LFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBnaXRodWJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpXHJcbiAgaWYgKCFnaXRodWJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBnaXRodWIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gZ2l0aHViT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0xpc3QnLFxyXG4gICAgICAgICAgYnJhbmNoOiBnaXRodWJPcHRpb25zLmJyYW5jaCxcclxuICAgICAgICAgIGNvbnRlbnQ6IGJhc2U2NEltYWdlLFxyXG4gICAgICAgICAgcGF0aDogdXBsb2FkUGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMsIGRhdGEpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IHtcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXHJcbiAgICAgICAgICAgICAgc2hhOiBzdHJpbmdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgICBpZiAoYm9keSkge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChnaXRodWJPcHRpb25zLmN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQodXBsb2FkUGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuY29udGVudC5kb3dubG9hZF91cmxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuY29udGVudC5zaGFcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgICAgaWYgKGVyci5zdGF0dXNDb2RlID09PSA0MjIpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRPcHRpb25zKGltZy5maWxlTmFtZSwgZ2l0aHViT3B0aW9ucykpIGFzIGFueVxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBpbWcuaGFzaCA9IHJlcy5zaGFcclxuICAgICAgICAgICAgICBpZiAoZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQodXBsb2FkUGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGltZy5pbWdVcmwgPSByZXMuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR2V0IENvbnRlbnRzIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElHaXRodWJDb25maWc+KCdwaWNCZWQuZ2l0aHViJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlcG8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVwbyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdicmFuY2gnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnJhbmNoIHx8ICdtYXN0ZXInLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignZ2l0aHViJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBxaW5pdSBmcm9tICdxaW5pdSdcclxuaW1wb3J0IHsgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElRaW5pdUNvbmZpZywgdHlwZSBJUGljR28sIHR5cGUgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuZnVuY3Rpb24gcG9zdE9wdGlvbnMgKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XHJcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgVXBUb2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWdCYXNlNjRcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlbGVjdEFyZWEgKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9rZW4gKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gcWluaXVPcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIHNjb3BlOiBxaW5pdU9wdGlvbnMuYnVja2V0XHJcbiAgfVxyXG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcclxuICByZXR1cm4gcHV0UG9saWN5LnVwbG9hZFRva2VuKG1hYylcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXHJcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHFpbml1IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxyXG4gICAgICAgICAgY29uc3QgdXJsT3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtib2R5LmtleSBhcyBzdHJpbmd9JHt1cmxPcHRpb25zfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjdHgubG9nLmVycm9yKCdxaW5pdSBlcnJvcicsIGJvZHkpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXHJcbiAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJSW1ndXJDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnMsIHR5cGUgSUZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4uc3RhcnRzV2l0aCgnQmVhcmVyJykgPyBhY2Nlc3NUb2tlbiA6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIDogJydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJSW1ndXJDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xyXG4gIGNvbnN0IGNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZCB8fCAnJ1xyXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xyXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gZm9ybWF0QWNjZXNzVG9rZW4ob3B0aW9ucy5hY2Nlc3NUb2tlbiB8fCAnJylcclxuICBjb25zdCBhbGJ1bSA9IG9wdGlvbnMuYWxidW0gfHwgJydcclxuICBsZXQgYXV0aG9yaXphdGlvblxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbikge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGFjY2Vzc1Rva2VuXHJcbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGBDbGllbnQtSUQgJHtjbGllbnRJZH1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxyXG4gIH1cclxuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2ltYWdlJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgSG9zdDogJ2FwaS5pbWd1ci5jb20nLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXHJcbiAgICAgIHR5cGU6ICdiYXNlNjQnLFxyXG4gICAgICBuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xyXG4gICAgbGV0IGluaXRQYWdlcyA9IDBcclxuICAgIGxldCByZXNcclxuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xyXG4gICAgZG8ge1xyXG4gICAgICBjb25zdCBnZXRBbGJ1bUhhc2hPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2FjY291bnQvJHt1c2VybmFtZX0vYWxidW1zLyR7aW5pdFBhZ2VzfWAsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICAgICAgZ2V0QWxidW1IYXNoT3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICAgICAgfVxyXG4gICAgICByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRBbGJ1bUhhc2hPcHRpb25zKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcclxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhbGJ1bUxpc3QpIHtcclxuICAgICAgICBpZiAoaXRlbS50aXRsZSA9PT0gYWxidW0pIHtcclxuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGluaXRQYWdlcysrXHJcbiAgICB9IHdoaWxlIChyZXMuYm9keS5kYXRhLmxlbmd0aCA+IDApXHJcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhLmFsYnVtID0gYWxidW1IYXNoXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgaW1ndXJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKVxyXG4gIGlmICghaW1ndXJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBpbWd1ciBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBvc3RPcHRpb25zKGN0eCwgaW1ndXJPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcclxuICAgICAgICBpZiAoYm9keS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS5saW5rXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXHJcbiAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy5pbWd1ci5jb20vYXBpL2Vycm5vLydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHN0cmluZyB8IElFcnJvclxyXG4gICAgdGhyb3cgZXJyPy5yZXNwb25zZT8uZGF0YSB8fCBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUltZ3VyQ29uZmlnPigncGljQmVkLmltZ3VyJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NsaWVudElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzVG9rZW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzVG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FsYnVtJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignaW1ndXInLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElBbGl5dW5Db25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG4vLyBnZW5lcmF0ZSBPU1Mgc2lnbmF0dXJlXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcclxuICBjb25zdCBtaW1lVHlwZSA9IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG5cclxuICBjb25zdCBzaWduU3RyaW5nID0gYFBVVFxcblxcbiR7bWltZVR5cGV9XFxuJHtkYXRlfVxcbi8ke29wdGlvbnMuYnVja2V0fS8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWBcclxuXHJcbiAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBvcHRpb25zLmFjY2Vzc0tleVNlY3JldCkudXBkYXRlKHNpZ25TdHJpbmcpLmRpZ2VzdCgnYmFzZTY0JylcclxuICByZXR1cm4gYE9TUyAke29wdGlvbnMuYWNjZXNzS2V5SWR9OiR7c2lnbmF0dXJlfWBcclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSUFsaXl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly8ke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMucGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tYCxcclxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxyXG4gICAgICBEYXRlOiBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSlcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWFnZSxcclxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGFsaVl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJylcclxuICBpZiAoIWFsaVl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGFsaVl1biBPU1MgY29uZmlnJylcclxuICB9XHJcbiAgYWxpWXVuT3B0aW9ucy5wYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoLnJlcGxhY2UoL1xcLyokLywgJycpLnJlcGxhY2UoL15cXC8qLywgJycpICsgJy8nXHJcbiAgaWYgKGFsaVl1bk9wdGlvbnMucGF0aCA9PT0gJy8nKSB7XHJcbiAgICBhbGlZdW5PcHRpb25zLnBhdGggPSAnJ1xyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IGFsaVl1bk9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoID8/ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25VcmwgPSBhbGlZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHthbGlZdW5PcHRpb25zLmJ1Y2tldH0uJHthbGlZdW5PcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlJZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlTZWNyZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5U2VjcmV0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdhbGl5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7XHJcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVUQnKVxyXG4gICAgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJVXB5dW5Db25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCB7IHNhZmVQYXJzZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IG9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvclxyXG4gIGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZFxyXG4gIGNvbnN0IG1kNVBhc3N3b3JkID0gTUQ1KHBhc3N3b3JkKVxyXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcclxuICBjb25zdCB1cmkgPSBgLyR7b3B0aW9ucy5idWNrZXR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgY29uc3QgdmFsdWUgPSBgUFVUJiR7dXJpfSYke2RhdGV9YFxyXG4gIGNvbnN0IHNpZ24gPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG1kNVBhc3N3b3JkKS51cGRhdGUodmFsdWUpLmRpZ2VzdCgnYmFzZTY0JylcclxuICByZXR1cm4gYFVQWVVOICR7b3BlcmF0b3J9OiR7c2lnbn1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tLyR7YnVja2V0fS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxyXG4gICAgICBEYXRlOiBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWFnZSxcclxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBNRDUgKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoY29udGVudCkuZGlnZXN0KCdoZXgnKVxyXG59XHJcblxyXG5jb25zdCBnZXRBbnRpTGVlY2hQYXJhbSA9IChhbnRpTGVlY2hUb2tlbjogc3RyaW5nLCBleHBpcmVUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsIG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMucGF0aCB8fCAnJ30ke2ZpbGVOYW1lfWAucmVwbGFjZSgvJTJGL2csICcvJykucmVwbGFjZSgvXlxcLysvZywgJy8nKVxyXG4gIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxyXG4gIGNvbnN0IGV4cGlyZSA9IGV4cGlyZVRpbWUgPyBub3cgKyBwYXJzZUludChleHBpcmVUaW1lLnRvU3RyaW5nKCksIDEwKSA6IG5vdyArIDE4MDBcclxuICBjb25zdCBzaWduID0gTUQ1KGAke2FudGlMZWVjaFRva2VufSYke2V4cGlyZX0mJHt1cml9YClcclxuICBjb25zdCB1cHQgPSBgJHtzaWduLnN1YnN0cmluZygxMiwgMjApfSR7ZXhwaXJlfWBcclxuICByZXR1cm4gYF91cHQ9JHt1cHR9YFxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHVweXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJylcclxuICBpZiAoIXVweXVuT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgdXBZdW4gY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBwYXRoID0gdXB5dW5PcHRpb25zLnBhdGggfHwgJydcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBzdWZmaXggPSB1cHl1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHt1cHl1bk9wdGlvbnMudXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7c3VmZml4fWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIGlmICh1cHl1bk9wdGlvbnMuYW50aUxlZWNoVG9rZW4pIHtcclxuICAgICAgICAgICAgY29uc3QgdXB0ID0gZ2V0QW50aUxlZWNoUGFyYW0odXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuLCB1cHl1bk9wdGlvbnMuZXhwaXJlVGltZSwgdXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBpbWcuaW1nVXJsLmluY2x1ZGVzKCc/JykgPyBgJHtpbWcuaW1nVXJsfSYke3VwdH1gIDogYCR7aW1nLmltZ1VybH0/JHt1cHR9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYm9keSA9IHNhZmVQYXJzZTx7IGNvZGU6IHN0cmluZyB9PihlcnIuZXJyb3IpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkuY29kZSA6IGJvZHlcclxuICAgICAgICB9KSxcclxuICAgICAgICB0ZXh0OiAnaHR0cDovL2RvY3MudXB5dW4uY29tL2FwaS9lcnJuby8nXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3BlcmF0b3InLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJykgfSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcGVyYXRvciB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FudGlMZWVjaFRva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbnRpTGVlY2hUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZXhwaXJlVGltZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZXhwaXJlVGltZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndXB5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU4nKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElXZWJkYXZQbGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHR5cGUgeyBXZWJEQVZDbGllbnQsIFdlYkRBVkNsaWVudE9wdGlvbnMgfSBmcm9tICd3ZWJkYXYnXHJcbmltcG9ydCB7IEF1dGhUeXBlLCBjcmVhdGVDbGllbnQgfSBmcm9tICd3ZWJkYXYnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCB3ZWJkYXZwbGlzdE9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpXHJcbiAgaWYgKCF3ZWJkYXZwbGlzdE9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHdlYmRhdnBsaXN0IGNvbmZpZycpXHJcbiAgfVxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC98XFwvKyQvZywgJycpXHJcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSAod2ViZGF2cGxpc3RPcHRpb25zLnNzbEVuYWJsZWQgPyAnaHR0cHM6Ly8nIDogJ2h0dHA6Ly8nKSArIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0XHJcbiAgd2ViZGF2cGxpc3RPcHRpb25zLnBhdGggPSAod2ViZGF2cGxpc3RPcHRpb25zLnBhdGggfHwgJycpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJ1xyXG4gIGNvbnN0IGF1dGhUeXBlID0gd2ViZGF2cGxpc3RPcHRpb25zLmF1dGhUeXBlIHx8ICdiYXNpYydcclxuICBjb25zdCB3ZWJwYXRoID0gKHdlYmRhdnBsaXN0T3B0aW9ucy53ZWJwYXRoIHx8ICcnKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLydcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHVwbG9hZFBhdGggPSB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xpZW50T3B0aW9uczogV2ViREFWQ2xpZW50T3B0aW9ucyA9IHtcclxuICAgICAgICAgIHVzZXJuYW1lOiB3ZWJkYXZwbGlzdE9wdGlvbnMudXNlcm5hbWUsXHJcbiAgICAgICAgICBwYXNzd29yZDogd2ViZGF2cGxpc3RPcHRpb25zLnBhc3N3b3JkLFxyXG4gICAgICAgICAgbWF4Qm9keUxlbmd0aDogNCAqIDEwMjQgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF1dGhUeXBlID09PSAnZGlnZXN0Jykge1xyXG4gICAgICAgICAgY2xpZW50T3B0aW9ucy5hdXRoVHlwZSA9IEF1dGhUeXBlLkRpZ2VzdFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGllbnQ6IFdlYkRBVkNsaWVudCA9IGNyZWF0ZUNsaWVudCh3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCwgY2xpZW50T3B0aW9ucylcclxuICAgICAgICBjb25zdCBwYXRoVG9DcmVhdGUgPSB1cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IHVwbG9hZFBhdGhcclxuICAgICAgICBpZiAocGF0aFRvQ3JlYXRlKSB7XHJcbiAgICAgICAgICBhd2FpdCBjbGllbnQuY3JlYXRlRGlyZWN0b3J5KHBhdGhUb0NyZWF0ZSwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnB1dEZpbGVDb250ZW50cyhgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBpbWFnZSwge1xyXG4gICAgICAgICAgb3ZlcndyaXRlOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnd2ViZGF2cGxpc3QnKVxyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKGltZ1RlbXBQYXRoKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhpbWdUZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjdXN0b21VcmwgfHwgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICAgICAgICAgIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt3ZWJwYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudCh3ZWJwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3VwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvd2ViZGF2cGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc3NsRW5hYmxlZCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNzbEVuYWJsZWQgPz8gZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2VicGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhdXRoVHlwZScsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRScpIH0sXHJcbiAgICAgIGNob2ljZXM6IFsnYmFzaWMnLCAnZGlnZXN0J10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXV0aFR5cGUgfHwgJ2Jhc2ljJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignd2ViZGF2cGxpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1QnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElMb2NhbENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgbG9jYWxDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMb2NhbENvbmZpZz4oJ3BpY0JlZC5sb2NhbCcpXHJcbiAgaWYgKCFsb2NhbENvbmZpZykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgbG9jYWwgY29uZmlnIScpXHJcbiAgfVxyXG4gIGNvbnN0IHVwbG9hZFBhdGggPSBsb2NhbENvbmZpZy5wYXRoIHx8ICcnXHJcbiAgbGV0IGN1c3RvbVVybCA9IGxvY2FsQ29uZmlnLmN1c3RvbVVybCB8fCAnJ1xyXG4gIGlmIChjdXN0b21VcmwpIHtcclxuICAgIGN1c3RvbVVybCA9IGN1c3RvbVVybC5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgfVxyXG4gIGxldCB3ZWJQYXRoID0gbG9jYWxDb25maWcud2ViUGF0aCB8fCAnJ1xyXG4gIGlmICh3ZWJQYXRoKSB7XHJcbiAgICB3ZWJQYXRoID0gd2ViUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJykucmVwbGFjZSgvXlxcLy8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgfVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ2xvY2FsJylcclxuICAgICAgICAgIGZzLmVuc3VyZURpclN5bmMoaW1nVGVtcFBhdGgpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHVwbG9hZFBhdGgpXHJcbiAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpLCBpbWFnZSlcclxuICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKSwgcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICdsb2NhbCcsIGltZy5maWxlTmFtZSkpXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpZiAod2ViUGF0aCkge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHdlYlBhdGgpfS8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbWcuaGFzaCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9sb2NhbC8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcclxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6ICdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHVwbG9hZCBpbWFnZScpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfV0VCUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignbG9jYWwnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBOb2RlU1NILCB0eXBlIENvbmZpZyB9IGZyb20gJ25vZGUtc3NoLW5vLWNwdS1mZWF0dXJlcydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgdHlwZSBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5jbGFzcyBTU0hDbGllbnQge1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogU1NIQ2xpZW50XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2NsaWVudDogTm9kZVNTSFxyXG4gIHByaXZhdGUgX2lzQ29ubmVjdGVkID0gZmFsc2VcclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UgKCk6IFNTSENsaWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IHRoaXMoKSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNsaWVudCAoKTogTm9kZVNTSCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50IHx8ICh0aGlzLl9jbGllbnQgPSBuZXcgTm9kZVNTSCgpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXggKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0IChjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHsgdXNlcm5hbWUsIHBhc3N3b3JkLCBwcml2YXRlS2V5LCBwYXNzcGhyYXNlIH0gPSBjb25maWdcclxuICAgIGNvbnN0IGxvZ2luSW5mbzogQ29uZmlnID0gcHJpdmF0ZUtleVxyXG4gICAgICA/IHsgdXNlcm5hbWUsIHByaXZhdGVLZXlQYXRoOiBwcml2YXRlS2V5LCBwYXNzcGhyYXNlOiBwYXNzcGhyYXNlIHx8IHVuZGVmaW5lZCB9XHJcbiAgICAgIDogeyB1c2VybmFtZSwgcGFzc3dvcmQgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgU1NIQ2xpZW50LmNsaWVudC5jb25uZWN0KHtcclxuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcclxuICAgICAgICBwb3J0OiBOdW1iZXIoY29uZmlnLnBvcnQpIHx8IDIyLFxyXG4gICAgICAgIC4uLmxvZ2luSW5mb1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IHRydWVcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBsb2FkIChsb2NhbDogc3RyaW5nLCByZW1vdGU6IHN0cmluZywgY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMuX2lzQ29ubmVjdGVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1NIIOacqui/nuaOpScpXHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZW1vdGUgPSB0aGlzLmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXHJcbiAgICAgIGF3YWl0IHRoaXMubWtkaXIocGF0aC5kaXJuYW1lKHJlbW90ZSkucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBjb25maWcpXHJcbiAgICAgIGF3YWl0IFNTSENsaWVudC5jbGllbnQucHV0RmlsZShsb2NhbCwgcmVtb3RlKVxyXG4gICAgICBjb25zdCBmaWxlTW9kZSA9IGNvbmZpZy5maWxlTW9kZSB8fCAnMDY0NCdcclxuICAgICAgaWYgKGZpbGVNb2RlICE9PSAnMDY0NCcpIHtcclxuICAgICAgICBjb25zdCBzY3JpcHQgPSBgY2htb2QgJHtmaWxlTW9kZX0gXCIke3JlbW90ZX1cImBcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG1rZGlyIChkaXJQYXRoOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCFTU0hDbGllbnQuY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0gg5pyq6L+e5o6lJylcclxuICAgIH1cclxuICAgIGNvbnN0IGRpcmVjdG9yeU1vZGUgPSBjb25maWcuZGlyTW9kZSB8fCAnMDc1NSdcclxuICAgIGlmIChkaXJlY3RvcnlNb2RlICE9PSAnMDc1NScpIHtcclxuICAgICAgY29uc3QgZGlycyA9IGRpclBhdGguc3BsaXQoJy8nKVxyXG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJ1xyXG4gICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XHJcbiAgICAgICAgaWYgKGRpcikge1xyXG4gICAgICAgICAgY3VycmVudFBhdGggKz0gYC8ke2Rpcn1gXHJcbiAgICAgICAgICBjb25zdCBzY3JpcHQgPSBgbWtkaXIgXCIke2N1cnJlbnRQYXRofVwiICYmIGNobW9kICR7ZGlyZWN0b3J5TW9kZX0gXCIke2N1cnJlbnRQYXRofVwiYFxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGBta2RpciAtcCBcIiR7ZGlyUGF0aH1cImBcclxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaG93biAocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgIGNvbnN0IFtfdXNlciwgX2dyb3VwXSA9IGdyb3VwID8gW3VzZXIsIGdyb3VwXSA6IHVzZXIuaW5jbHVkZXMoJzonKSA/IHVzZXIuc3BsaXQoJzonKSA6IFt1c2VyLCB1c2VyXVxyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IGBjaG93biAke191c2VyfToke19ncm91cH0gXCIke3JlbW90ZX1cImBcclxuICAgIHJldHVybiB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjIChzY3JpcHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IFNTSENsaWVudC5jbGllbnQuZXhlY0NvbW1hbmQoc2NyaXB0KVxyXG4gICAgcmV0dXJuIGV4ZWNSZXN1bHQuY29kZSA9PT0gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlICgpOiB2b2lkIHtcclxuICAgIFNTSENsaWVudC5jbGllbnQuZGlzcG9zZSgpXHJcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTU0hDbGllbnRcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IFNTSENsaWVudCBmcm9tICcuLi8uLi91dGlscy9zc2hDbGllbnQnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3Qgc2Z0cHBsaXN0Q29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpXHJcbiAgaWYgKCFzZnRwcGxpc3RDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNmdHBwbGlzdCBjb25maWchJylcclxuICB9XHJcbiAgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPSBOdW1iZXIoc2Z0cHBsaXN0Q29uZmlnLnBvcnQpIHx8IDIyXHJcbiAgc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPSAoc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggfHwgJycpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJ1xyXG4gIGNvbnN0IHdlYlBhdGggPSAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGggfHwgJycpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJ1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcclxuICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnc2Z0cHBsaXN0JylcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHVwbG9hZFRlbXBQYXRoKVxyXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMoaW1nVGVtcFBhdGgpXHJcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKHVwbG9hZFRlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFNTSENsaWVudC5pbnN0YW5jZVxyXG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KHNmdHBwbGlzdENvbmZpZylcclxuICAgICAgICBjb25zdCByZW1vdGVQYXRoID0gcGF0aC5qb2luKGAvJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH1gLnJlcGxhY2UoL1xcL1xcLysvZywgJy8nKSwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGF3YWl0IGNsaWVudC51cGxvYWQodGVtcEZpbGVQYXRoLCByZW1vdGVQYXRoLCBzZnRwcGxpc3RDb25maWcpXHJcbiAgICAgICAgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyICYmIGF3YWl0IGNsaWVudC5jaG93bihyZW1vdGVQYXRoLCBzZnRwcGxpc3RDb25maWcuZmlsZVVzZXIpXHJcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IHNmdHBwbGlzdENvbmZpZy5jdXN0b21VcmwgfHwgc2Z0cHBsaXN0Q29uZmlnLmhvc3RcclxuICAgICAgICBpZiAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgpIHtcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3dlYlBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHdlYlBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmcy5tb3ZlU3luYyh0ZW1wRmlsZVBhdGgsIHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKSlcclxuICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9zZnRwcGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgY2xpZW50LmNsb3NlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTZnRwUGxpc3RDb25maWc+KCdwaWNCZWQuc2Z0cHBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwb3J0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BPUlQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcml2YXRlS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByaXZhdGVLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3NwaHJhc2UnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2ZpbGVVc2VyJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlVXNlciB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZmlsZU1vZGUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVNb2RlIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc2Z0cHBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVRlbGVncmFwaENvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHR5cGUgeyBSZWFkU3RyZWFtIH0gZnJvbSAnZnMnXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChvcHRpb25zOiBJVGVsZWdyYXBoQ29uZmlnLCBpbWFnZTogUmVhZFN0cmVhbSk6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcclxuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vdGVsZWdyYS5waC91cGxvYWQnLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgZmlsZTogaW1hZ2VcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxyXG4gIH1cclxuICByZXR1cm4gcmVxdWVzdE9wdGlvbnNcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBsZXQgdGdPcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGVsZWdyYXBoQ29uZmlnPigncGljQmVkLnRlbGVncmFwaHBsaXN0JylcclxuICBpZiAoIXRnT3B0aW9ucykge1xyXG4gICAgdGdPcHRpb25zID0ge31cclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cGxvYWRUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3VwbG9hZFRlbXAnKVxyXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmModXBsb2FkVGVtcFBhdGgpXHJcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKHVwbG9hZFRlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBwb3N0T3B0aW9ucyh0Z09wdGlvbnMsIGZzLmNyZWF0ZVJlYWRTdHJlYW0odGVtcEZpbGVQYXRoKSlcclxuICAgICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXHJcbiAgICAgICAgZnMucmVtb3ZlKHRlbXBGaWxlUGF0aClcclxuICAgICAgICBpZiAoYm9keT8uWzBdPy5zcmMpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vdGVsZWdyYS5waCR7Ym9keVswXS5zcmN9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpLFxyXG4gICAgICB0ZXh0OiAnJ1xyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc3RyaW5nIHwgSUVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGVsZWdyYXBoQ29uZmlnPigncGljQmVkLnRlbGVncmFwaHBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd0ZWxlZ3JhcGhwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URUxFR1JBUEgnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IFNNTVNVcGxvYWRlciBmcm9tICcuL3NtbXMnXHJcbmltcG9ydCB0Y1l1blVwbG9hZGVyIGZyb20gJy4vdGN5dW4nXHJcbmltcG9ydCBnaXRodWJVcGxvYWRlciBmcm9tICcuL2dpdGh1YidcclxuaW1wb3J0IHFpbml1VXBsb2FkZXIgZnJvbSAnLi9xaW5pdSdcclxuaW1wb3J0IGltZ3VyVXBsb2FkZXIgZnJvbSAnLi9pbWd1cidcclxuaW1wb3J0IGFsaVl1blVwbG9hZGVyIGZyb20gJy4vYWxpeXVuJ1xyXG5pbXBvcnQgdXBZdW5VcGxvYWRlciBmcm9tICcuL3VweXVuJ1xyXG5pbXBvcnQgd2ViZGF2cGxpc3RVcGxvYWRlciBmcm9tICcuL3dlYmRhdidcclxuaW1wb3J0IGxvY2FsVXBsb2FkZXIgZnJvbSAnLi9sb2NhbCdcclxuaW1wb3J0IHNmdHBVcGxvYWRlciBmcm9tICcuL3NmdHAnXHJcbmltcG9ydCB0ZWxlZ3JhcGhVcGxvYWRlciBmcm9tICcuL3RlbGVncmFwaCdcclxuXHJcbmNvbnN0IGJ1aWxkSW5VcGxvYWRlcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGFsaVl1blVwbG9hZGVyKGN0eClcclxuICAgICAgdGNZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIFNNTVNVcGxvYWRlcihjdHgpXHJcbiAgICAgIGdpdGh1YlVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICB1cFl1blVwbG9hZGVyKGN0eClcclxuICAgICAgd2ViZGF2cGxpc3RVcGxvYWRlcihjdHgpXHJcbiAgICAgIGxvY2FsVXBsb2FkZXIoY3R4KVxyXG4gICAgICBzZnRwVXBsb2FkZXIoY3R4KVxyXG4gICAgICB0ZWxlZ3JhcGhVcGxvYWRlcihjdHgpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVXBsb2FkZXJzXHJcbiIsImltcG9ydCB7XHJcbiAgaXNVcmwsXHJcbiAgZ2V0SW1hZ2VTaXplLFxyXG4gIGdldEZTRmlsZSxcclxuICBnZXRVUkxGaWxlXHJcbn0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgdHlwZSBJSW1nSW5mbywgdHlwZSBJSW1nU2l6ZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdHM6IElJbWdJbmZvW10gPSBjdHgub3V0cHV0XHJcbiAgYXdhaXQgUHJvbWlzZS5hbGwoY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nIHwgQnVmZmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaXRlbSkpIHtcclxuICAgICAgaW5mbyA9IHtcclxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgIGJ1ZmZlcjogaXRlbSxcclxuICAgICAgICBmaWxlTmFtZTogJycsXHJcbiAgICAgICAgZXh0bmFtZTogJydcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1VybChpdGVtKSkge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXHJcbiAgICB9XHJcbiAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXHJcbiAgICAgIGNvbnN0IGV4dG5hbWUgPSBpbmZvLmV4dG5hbWUgfHwgaW1nU2l6ZS5leHRuYW1lIHx8ICcucG5nJ1xyXG4gICAgICByZXN1bHRzW2luZGV4XSA9IHtcclxuICAgICAgICBidWZmZXI6IGluZm8uYnVmZmVyLFxyXG4gICAgICAgIGZpbGVOYW1lOiBpbmZvLmZpbGVOYW1lIHx8IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfSR7ZXh0bmFtZX19YCxcclxuICAgICAgICB3aWR0aDogaW1nU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGltZ1NpemUuaGVpZ2h0LFxyXG4gICAgICAgIGV4dG5hbWU6IGluZm8uZXh0bmFtZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLmVycm9yKGluZm8ucmVhc29uKVxyXG4gICAgfVxyXG4gIH0pKVxyXG4gIC8vIHJlbW92ZSBlbXB0eSBpdGVtXHJcbiAgY3R4Lm91dHB1dCA9IHJlc3VsdHMuZmlsdGVyKGl0ZW0gPT4gaXRlbSlcclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmNvbnN0IGdldEltZ1NpemUgPSAoY3R4OiBJUGljR28sIGZpbGU6IEJ1ZmZlciwgcGF0aDogc3RyaW5nIHwgQnVmZmVyKTogSUltZ1NpemUgPT4ge1xyXG4gIGNvbnN0IGltYWdlU2l6ZSA9IGdldEltYWdlU2l6ZShmaWxlKVxyXG4gIGlmICghaW1hZ2VTaXplLnJlYWwpIHtcclxuICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKGBjYW4ndCBnZXQgJHtwYXRofSdzIGltYWdlIHNpemVgKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3R4LmxvZy53YXJuKCdjYW5cXCd0IGdldCBpbWFnZSBzaXplJylcclxuICAgIH1cclxuICAgIGN0eC5sb2cud2FybignZmFsbGJhY2sgdG8gMjAwICogMjAwJylcclxuICB9XHJcbiAgcmV0dXJuIGltYWdlU2l6ZVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgaGFuZGxlXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHJlc29sdmUgZnJvbSAncmVzb2x2ZSdcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQaWNHb1BsdWdpbiwgdHlwZSBJUGx1Z2luTG9hZGVyLCB0eXBlIElQaWNHb1BsdWdpbkludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xyXG5pbXBvcnQgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcclxuXHJcbi8qKlxyXG4gKiBMb2NhbCBwbHVnaW4gbG9hZGVyLCBmaWxlIHN5c3RlbSBpcyByZXF1aXJlZFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBsdWdpbkxvYWRlciBpbXBsZW1lbnRzIElQbHVnaW5Mb2FkZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIGxpc3Q6IHN0cmluZ1tdID0gW11cclxuICBwcml2YXRlIHJlYWRvbmx5IGZ1bGxMaXN0ID0gbmV3IFNldDxzdHJpbmc+KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJUGljR29QbHVnaW5JbnRlcmZhY2U+KClcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VQYXRoKSkge1xyXG4gICAgICBjb25zdCBwa2cgPSB7XHJcbiAgICAgICAgbmFtZTogJ3BpY2dvLXBsdWdpbnMnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgcmVwb3NpdG9yeTogJ2h0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlJyxcclxuICAgICAgICBsaWNlbnNlOiAnTUlUJ1xyXG4gICAgICB9XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGFja2FnZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBrZyksICd1dGY4JylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldCBwbHVnaW4gZW50cnlcclxuICBwcml2YXRlIHJlc29sdmVQbHVnaW4gKGN0eDogSVBpY0dvLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHJlc29sdmUuc3luYyhuYW1lLCB7IGJhc2VkaXI6IGN0eC5iYXNlRGlyIH0pXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgcmV0dXJuIHBhdGguam9pbihjdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcycsIG5hbWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBsb2FkIGFsbCB0aGlyZCBwYXJ0eSBwbHVnaW5cclxuICBsb2FkICgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgY29uc3QgcGx1Z2luRGlyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMvJylcclxuICAgIC8vIFRoYW5rcyB0byBoZXhvIC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9oZXhvanMvaGV4by9ibG9iL21hc3Rlci9saWIvaGV4by9sb2FkX3BsdWdpbnMuanNcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwbHVnaW5EaXIpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QganNvbiA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlUGF0aClcclxuICAgIGNvbnN0IGRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRlcGVuZGVuY2llcyB8fCB7fSlcclxuICAgIGNvbnN0IGRldkRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSlcclxuICAgIGNvbnN0IG1vZHVsZXMgPSBkZXBzLmNvbmNhdChkZXZEZXBzKS5maWx0ZXIoKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoIS9ecGljZ28tcGx1Z2luLXxeQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkgcmV0dXJuIGZhbHNlXHJcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJlc29sdmVQbHVnaW4odGhpcy5jdHgsIG5hbWUpXHJcbiAgICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHBhdGgpXHJcbiAgICB9KVxyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyUGx1Z2luKG1vZHVsZSlcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICByZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nLCBwbHVnaW4/OiBJUGljR29QbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ1BsZWFzZSBwcm92aWRlIHZhbGlkIHBsdWdpbicpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5mdWxsTGlzdC5hZGQobmFtZSlcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIHJlZ2lzdGVyIGxvY2FsIHBsdWdpblxyXG4gICAgICBpZiAoIXBsdWdpbikge1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHRydWUgfHwgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgICAgdGhpcy5nZXRQbHVnaW4obmFtZSkhLnJlZ2lzdGVyKHRoaXMuY3R4KVxyXG4gICAgICAgICAgY29uc3QgcGx1Z2luID0gYHBpY2dvUGx1Z2luc1ske25hbWV9XWBcclxuICAgICAgICAgIHRoaXMuY3R4LnNhdmVDb25maWcoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBbcGx1Z2luXTogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHJlZ2lzdGVyIHByb3ZpZGVkIHBsdWdpblxyXG4gICAgICAgIC8vICYmIHdvbid0IHdyaXRlIGNvbmZpZyB0byBmaWxlc1xyXG4gICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXHJcbiAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICBjb25zdCBwbHVnaW5JbnRlcmZhY2UgPSBwbHVnaW4odGhpcy5jdHgpXHJcbiAgICAgICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbkludGVyZmFjZSlcclxuICAgICAgICBwbHVnaW5JbnRlcmZhY2UucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcclxuICAgICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogYFBsdWdpbiAke25hbWV9IExvYWQgRXJyb3JgLFxyXG4gICAgICAgIGJvZHk6IGVcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXJQbHVnaW4gKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcclxuICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxyXG4gICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci51cGxvYWRlci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIudHJhbnNmb3JtZXIudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5jbWQudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHgucmVtb3ZlQ29uZmlnKCdwaWNnb1BsdWdpbnMnLCBuYW1lKVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBieSBuYW1lXHJcbiAgZ2V0UGx1Z2luIChuYW1lOiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2UgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luTWFwLmhhcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5NYXAuZ2V0KG5hbWUpXHJcbiAgICB9XHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuICAgIGNvbnN0IHBsdWdpbiA9IHJlcXVpcmUocGx1Z2luRGlyICsgbmFtZSkodGhpcy5jdHgpXHJcbiAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luKVxyXG4gICAgcmV0dXJuIHBsdWdpblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsaXN0IG9mIGVuYWJsZWQgcGx1Z2luc1xyXG4gICAqL1xyXG4gIGdldExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3RcclxuICB9XHJcblxyXG4gIGhhc1BsdWdpbiAobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mdWxsTGlzdC5oYXMobmFtZSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZnVsbCBsaXN0IG9mIHBsdWdpbnMsIHdoZXRoZXIgaXQgaXMgZW5hYmxlZCBvciBub3RcclxuICAgKi9cclxuICBnZXRGdWxsTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmZ1bGxMaXN0XVxyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBQbHVnaW5Mb2FkZXJcclxuIiwiZXhwb3J0IGNvbnN0IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgPSAncGljbGlzdC1jbGlwYm9hcmQtaW1hZ2VzJ1xyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IG9zIGZyb20gJ29zJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBpc1dzbCBmcm9tICdpcy13c2wnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi9lbnVtJ1xyXG5pbXBvcnQgbWFjQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL21hYy5hcHBsZXNjcmlwdCdcclxuaW1wb3J0IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93cy5wczEnXHJcbmltcG9ydCB3aW5kb3dzMTBDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93czEwLnBzMSdcclxuaW1wb3J0IGxpbnV4Q2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL2xpbnV4LnNoJ1xyXG5pbXBvcnQgd3NsQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dzbC5zaCdcclxuaW1wb3J0IHsgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiB9IGZyb20gJy4vc3RhdGljJ1xyXG5cclxuZXhwb3J0IHR5cGUgUGxhdGZvcm0gPSAnZGFyd2luJyB8ICd3aW4zMicgfCAnd2luMTAnIHwgJ2xpbnV4JyB8ICd3c2wnXHJcblxyXG5jb25zdCBnZXRDdXJyZW50UGxhdGZvcm0gPSAoKTogUGxhdGZvcm0gPT4ge1xyXG4gIGNvbnN0IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybVxyXG4gIGlmIChpc1dzbCkge1xyXG4gICAgcmV0dXJuICd3c2wnXHJcbiAgfVxyXG4gIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgY29uc3QgY3VycmVudE9TID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJylbMF1cclxuICAgIGlmIChjdXJyZW50T1MgPT09ICcxMCcpIHtcclxuICAgICAgcmV0dXJuICd3aW4xMCdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnd2luMzInXHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgIHJldHVybiAnZGFyd2luJ1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gJ2xpbnV4J1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgcGxhdGZvcm0yU2NyaXB0Q29udGVudDoge1xyXG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcclxufSA9IHtcclxuICBkYXJ3aW46IG1hY0NsaXBib2FyZFNjcmlwdCxcclxuICB3aW4zMjogd2luZG93c0NsaXBib2FyZFNjcmlwdCxcclxuICB3aW4xMDogd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIGxpbnV4OiBsaW51eENsaXBib2FyZFNjcmlwdCxcclxuICB3c2w6IHdzbENsaXBib2FyZFNjcmlwdFxyXG59XHJcbi8qKlxyXG4gKiBwb3dlcnNoZWxsIHdpbGwgcmVwb3J0IGVycm9yIGlmIGZpbGUgZG9lcyBub3QgaGF2ZSBhICcucHMxJyBleHRlbnNpb24sXHJcbiAqIHNvIHdlIHNob3VsZCBrZWVwIHRoZSBleHRlbnNpb24gbmFtZSBjb25zaXN0ZW50IHdpdGggY29ycmVzcG9uZGluZyBzaGVsbFxyXG4gKi9cclxuY29uc3QgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWU6IHtcclxuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXHJcbn0gPSB7XHJcbiAgZGFyd2luOiAnbWFjLmFwcGxlc2NyaXB0JyxcclxuICB3aW4zMjogJ3dpbmRvd3MucHMxJyxcclxuICB3aW4xMDogJ3dpbmRvd3MxMC5wczEnLFxyXG4gIGxpbnV4OiAnbGludXguc2gnLFxyXG4gIHdzbDogJ3dzbC5zaCdcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VGb2xkZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSKVxyXG4gIGlmICghZnMuZXhpc3RzU3luYyhpbWFnZVBhdGgpKSB7XHJcbiAgICBmcy5ta2RpclN5bmMoaW1hZ2VQYXRoKVxyXG4gIH1cclxufVxyXG5cclxuLy8gVGhhbmtzIHRvIHZzLXBpY2dvOiBodHRwczovL2dpdGh1Yi5jb20vU3BhZGVzLVMvdnMtcGljZ28vYmxvYi9tYXN0ZXIvc3JjL2V4dGVuc2lvbi50c1xyXG5jb25zdCBnZXRDbGlwYm9hcmRJbWFnZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SUNsaXBib2FyZEltYWdlPiA9PiB7XHJcbiAgY3JlYXRlSW1hZ2VGb2xkZXIoY3R4KVxyXG4gIC8vIGFkZCBhbiBjbGlwYm9hcmQgaW1hZ2UgZm9sZGVyIHRvIGNvbnRyb2wgdGhlIGltYWdlIGNhY2hlIGZpbGVcclxuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIENMSVBCT0FSRF9JTUFHRV9GT0xERVIsIGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfS5wbmdgKVxyXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxJQ2xpcGJvYXJkSW1hZ2U+KChyZXNvbHZlOiBhbnksIHJlamVjdDogYW55KTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRQbGF0Zm9ybSgpXHJcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZVtwbGF0Zm9ybV0pXHJcbiAgICAvLyBJZiB0aGUgc2NyaXB0IGRvZXMgbm90IGV4aXN0IHlldCwgd2UgbmVlZCB0byB3cml0ZSB0aGUgY29udGVudCB0byB0aGUgc2NyaXB0IGZpbGVcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhzY3JpcHRQYXRoKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFxyXG4gICAgICAgIHNjcmlwdFBhdGgsXHJcbiAgICAgICAgcGxhdGZvcm0yU2NyaXB0Q29udGVudFtwbGF0Zm9ybV0sXHJcbiAgICAgICAgJ3V0ZjgnXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIGxldCBleGVjdXRpb25cclxuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ29zYXNjcmlwdCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxyXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJyB8fCBwbGF0Zm9ybSA9PT0gJ3dpbjEwJykge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bigncG93ZXJzaGVsbCcsIFtcclxuICAgICAgICAnLW5vcHJvZmlsZScsXHJcbiAgICAgICAgJy1ub25pbnRlcmFjdGl2ZScsXHJcbiAgICAgICAgJy1ub2xvZ28nLFxyXG4gICAgICAgICctc3RhJyxcclxuICAgICAgICAnLWV4ZWN1dGlvbnBvbGljeScsICd1bnJlc3RyaWN0ZWQnLFxyXG4gICAgICAgIC8vIGZpeCB3aW5kb3dzIDEwIG5hdGl2ZSBjbWQgY3Jhc2ggYnVnIHdoZW4gXCJwaWNnbyB1cGxvYWRcIlxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlL2lzc3Vlcy8zMlxyXG4gICAgICAgIC8vICctd2luZG93c3R5bGUnLCdoaWRkZW4nLFxyXG4gICAgICAgIC8vICctbm9leGl0JyxcclxuICAgICAgICAnLWZpbGUnLCBzY3JpcHRQYXRoLFxyXG4gICAgICAgIGltYWdlUGF0aFxyXG4gICAgICBdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3NoJywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0aW9uLnN0ZG91dC5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcclxuICAgICAgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XHJcbiAgICAgICAgaWYgKGRhdGEudG9TdHJpbmcoKS50cmltKCkgPT09ICdubyB4Y2xpcCBvciB3bC1jbGlwYm9hcmQnKSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogJ3hjbGlwIG9yIHdsLWNsaXBib2FyZCBub3QgZm91bmQnLFxyXG4gICAgICAgICAgICBib2R5OiAnUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW1nUGF0aCA9IGRhdGEudG9TdHJpbmcoKS50cmltKClcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBmaWxlUGF0aCBpcyB0aGUgcmVhbCBmaWxlIGluIHN5c3RlbVxyXG4gICAgICAvLyB3ZSBzaG91bGQga2VlcCBpdCBpbnN0ZWFkIG9mIHJlbW92aW5nXHJcbiAgICAgIGxldCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSBmYWxzZVxyXG5cclxuICAgICAgLy8gaW4gbWFjT1MgaWYgeW91ciBjb3B5IHRoZSBmaWxlIGluIHN5c3RlbSwgaXQncyBiYXNlbmFtZSB3aWxsIG5vdCBlcXVhbCB0byBvdXIgZGVmYXVsdCBiYXNlbmFtZVxyXG4gICAgICBpZiAocGF0aC5iYXNlbmFtZShpbWdQYXRoKSAhPT0gcGF0aC5iYXNlbmFtZShpbWFnZVBhdGgpKSB7XHJcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggaXMgbm90IGdlbmVyYXRlIGJ5IHBpY2dvXHJcbiAgICAgICAgLy8gYnV0IHRoZSBwYXRoIGV4aXN0cywgd2Ugc2hvdWxkIGtlZXAgaXRcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xyXG4gICAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBpZiB0aGUgaW1nUGF0aCBpcyBpbnZhbGlkXHJcbiAgICAgIGlmIChpbWdQYXRoICE9PSAnbm8gaW1hZ2UnICYmICFmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYENhbid0IGZpbmQgJHtpbWdQYXRofWApKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXNvbHZlKHtcclxuICAgICAgICBpbWdQYXRoLFxyXG4gICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZ1xyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBnZXRDbGlwYm9hcmRJbWFnZVxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcblxyXG5jb25zdCBldmVudEJ1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5leHBvcnQge1xyXG4gIGV2ZW50QnVzXHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9wcm9taXNlLWZ1bmN0aW9uLWFzeW5jICovXHJcbmltcG9ydCBheGlvcywgeyB0eXBlIEF4aW9zUmVxdWVzdENvbmZpZywgdHlwZSBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIFVuZGVmaW5hYmxlLCB0eXBlIElDb25maWdDaGFuZ2VQYXlsb2FkLCB0eXBlIElDb25maWcsIHR5cGUgSVJlcXVlc3RDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnMsIHR5cGUgSVJlc3BvbnNlLCB0eXBlIElGdWxsUmVzcG9uc2UsIHR5cGUgSVJlcXVlc3QgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJ1xyXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXHJcbmltcG9ydCB0dW5uZWwgZnJvbSAndHVubmVsJ1xyXG5jb25zdCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcclxuICBtYXhWZXJzaW9uOiAnVExTdjEuMicsXHJcbiAgbWluVmVyc2lvbjogJ1RMU3YxLjInXHJcbn0pXHJcblxyXG4vLyB0aGFua3MgZm9yIGh0dHBzOi8vZ2l0aHViLmRldi9yZXF1ZXN0L3JlcXVlc3QvYmxvYi9tYXN0ZXIvaW5kZXguanNcclxuZnVuY3Rpb24gYXBwZW5kRm9ybURhdGEgKGZvcm06IEZvcm1EYXRhLCBrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAndmFsdWUnIGluIGRhdGEgJiYgJ29wdGlvbnMnIGluIGRhdGEpIHtcclxuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YS52YWx1ZSwgZGF0YS5vcHRpb25zKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEpXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXF1ZXN0SW50ZXJjZXB0b3IgKG9wdGlvbnM6IElPbGRSZXFPcHRpb25zIHwgQXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NSZXF1ZXN0Q29uZmlnICYge1xyXG4gIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxyXG59IHtcclxuICBsZXQgX19pc09sZE9wdGlvbnMgPSBmYWxzZVxyXG4gIGNvbnN0IG9wdDogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gJiB7XHJcbiAgICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cclxuICB9ID0ge1xyXG4gICAgLi4ub3B0aW9ucyxcclxuICAgIHVybDogKG9wdGlvbnMudXJsIGFzIHN0cmluZykgfHwgJycsXHJcbiAgICBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfHwge31cclxuICB9XHJcbiAgLy8gdXNlciByZXF1ZXN0IGNvbmZpZyBwcm94eVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICBsZXQgcHJveHlPcHRpb25zID0gb3B0aW9ucy5wcm94eVxyXG4gICAgaWYgKHR5cGVvZiBwcm94eU9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcHJveHlPcHRpb25zID0gbmV3IFVSTChvcHRpb25zLnByb3h5KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcHJveHlPcHRpb25zID0gZmFsc2VcclxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgfVxyXG4gICAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICAgIH1cclxuICAgIGlmIChwcm94eU9wdGlvbnMpIHtcclxuICAgICAgaWYgKG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XHJcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcclxuICAgICAgICBvcHQuaHR0cHNBZ2VudCA9IHR1bm5lbC5odHRwc092ZXJIdHRwKHtcclxuICAgICAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucz8uaG9zdG5hbWUsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucz8ucG9ydCwgMTApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHQucHJveHkgPSB7XHJcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXHJcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCwgMTApLFxyXG4gICAgICAgICAgcHJvdG9jb2w6ICdodHRwJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoJ2Zvcm1EYXRhJyBpbiBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuZm9ybURhdGEpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IG9wdGlvbnMuZm9ybURhdGFba2V5XVxyXG4gICAgICBhcHBlbmRGb3JtRGF0YShmb3JtLCBrZXksIGRhdGEpXHJcbiAgICB9XHJcbiAgICBvcHQuZGF0YSA9IGZvcm1cclxuICAgIG9wdC5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbihvcHQuaGVhZGVycyB8fCB7fSwgZm9ybS5nZXRIZWFkZXJzKCkpXHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBvbGQgb3B0aW9uXHJcbiAgICBkZWxldGUgb3B0LmZvcm1EYXRhXHJcbiAgfVxyXG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xyXG4gICAgb3B0LmRhdGEgPSBvcHRpb25zLmJvZHlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25zXHJcbiAgICBkZWxldGUgb3B0LmJvZHlcclxuICB9XHJcbiAgaWYgKCdxcycgaW4gb3B0aW9ucykge1xyXG4gICAgb3B0LnBhcmFtcyA9IG9wdGlvbnMucXNcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gIH1cclxuICBvcHQuX19pc09sZE9wdGlvbnMgPSBfX2lzT2xkT3B0aW9uc1xyXG4gIHJldHVybiBvcHRcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzcG9uc2VJbnRlcmNlcHRvciAocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpOiBJRnVsbFJlc3BvbnNlIHtcclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzcG9uc2UsXHJcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXHJcbiAgICBib2R5OiByZXNwb25zZS5kYXRhXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNwb25zZUVycm9ySGFuZGxlciAoZXJyb3I6IGFueSkge1xyXG4gIC8vIGlmIChlcnJvci5yZXNwb25zZSkge1xyXG4gIC8vICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYW5kIHRoZSBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggYSBzdGF0dXMgY29kZVxyXG4gIC8vICAgLy8gdGhhdCBmYWxscyBvdXQgb2YgdGhlIHJhbmdlIG9mIDJ4eFxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm8pXHJcbiAgLy8gfSBlbHNlIGlmIChlcnJvci5yZXF1ZXN0KSB7XHJcbiAgLy8gICAvLyBUaGUgcmVxdWVzdCB3YXMgbWFkZSBidXQgbm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkXHJcbiAgLy8gICAvLyBgZXJyb3IucmVxdWVzdGAgaXMgYW4gaW5zdGFuY2Ugb2YgWE1MSHR0cFJlcXVlc3QgaW4gdGhlIGJyb3dzZXIgYW5kIGFuIGluc3RhbmNlIG9mXHJcbiAgLy8gICAvLyBodHRwLkNsaWVudFJlcXVlc3QgaW4gbm9kZS5qc1xyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLnJlcXVlc3QpXHJcbiAgLy8gfSBlbHNlIHtcclxuICAvLyAgIC8vIFNvbWV0aGluZyBoYXBwZW5lZCBpbiBzZXR0aW5nIHVwIHRoZSByZXF1ZXN0IHRoYXQgdHJpZ2dlcmVkIGFuIEVycm9yXHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IubWVzc2FnZSlcclxuICAvLyB9XHJcbiAgY29uc3QgZXJyb3JPYmogPSB7XHJcbiAgICBtZXRob2Q6IGVycm9yPy5jb25maWc/Lm1ldGhvZD8udG9VcHBlckNhc2UoKSB8fCAnJyxcclxuICAgIHVybDogZXJyb3I/LmNvbmZpZz8udXJsIHx8ICcnLFxyXG4gICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICcnLFxyXG4gICAgc3RhY2s6IGVycm9yPy5zdGFjayB8fCB7fSxcclxuICAgIHJlc3BvbnNlOiB7XHJcbiAgICAgIHN0YXR1czogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgICAgYm9keTogZXJyb3I/LnJlc3BvbnNlPy5kYXRhIHx8ICcnXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvck9iailcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3QgaW1wbGVtZW50cyBJUmVxdWVzdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcHJveHk6IFVuZGVmaW5hYmxlPHN0cmluZz4gPSAnJ1xyXG4gIG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ID0ge31cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gICAgZXZlbnRCdXMub24oSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIChkYXRhOiBJQ29uZmlnQ2hhbmdlUGF5bG9hZDxzdHJpbmcgfCBJQ29uZmlnWydwaWNCZWQnXT4pID0+IHtcclxuICAgICAgc3dpdGNoIChkYXRhLmNvbmZpZ05hbWUpIHtcclxuICAgICAgICBjYXNlICdwaWNCZWQnOlxyXG4gICAgICAgICAgaWYgKChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKT8ucHJveHkpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm94eSA9IChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKS5wcm94eVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdwaWNCZWQucHJveHknOlxyXG4gICAgICAgICAgdGhpcy5wcm94eSA9IGRhdGEudmFsdWUgYXMgc3RyaW5nXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQucHJveHknKVxyXG4gICAgaWYgKHByb3h5KSB7XHJcbiAgICAgIHRoaXMucHJveHkgPSBwcm94eVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVQcm94eSAoKTogQXhpb3NSZXF1ZXN0Q29uZmlnWydwcm94eSddIHwgZmFsc2Uge1xyXG4gICAgaWYgKHRoaXMucHJveHkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKHRoaXMucHJveHkpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0IHx8ICcwJywgMTApLFxyXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3h5T3B0aW9ucy5wcm90b2NvbFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8vICM2NCBkeW5hbWljIGdldCBwcm94eSB2YWx1ZVxyXG4gIHJlcXVlc3Q8VCwgVSBleHRlbmRzIChcclxuICAgIElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgSU9sZFJlcU9wdGlvbnMgPyBJT2xkUmVxT3B0aW9ucyA6IElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgQXhpb3NSZXF1ZXN0Q29uZmlnID8gQXhpb3NSZXF1ZXN0Q29uZmlnIDogbmV2ZXJcclxuICApPiAob3B0aW9uczogVSk6IFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PiB7XHJcbiAgICB0aGlzLm9wdGlvbnMucHJveHkgPSB0aGlzLmhhbmRsZVByb3h5KClcclxuICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IEluZmluaXR5XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4Q29udGVudExlbmd0aCA9IEluZmluaXR5XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb3h5ICYmIG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgICBob3N0OiB0aGlzLm9wdGlvbnMucHJveHkuaG9zdCxcclxuICAgICAgICAgIHBvcnQ6IHRoaXMub3B0aW9ucy5wcm94eS5wb3J0XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLm9wdGlvbnMucHJveHkgPSBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSBodHRwc0FnZW50XHJcbiAgICB9XHJcbiAgICAvLyAhTk9USUNFIHRoaXMub3B0aW9ucyAhPT0gb3B0aW9uc1xyXG4gICAgLy8gdGhpcy5vcHRpb25zIGlzIHRoZSBkZWZhdWx0IG9wdGlvbnNcclxuICAgIGNvbnN0IGluc3RhbmNlID0gYXhpb3MuY3JlYXRlKHRoaXMub3B0aW9ucylcclxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UocmVzcG9uc2VJbnRlcmNlcHRvciwgcmVzcG9uc2VFcnJvckhhbmRsZXIpXHJcblxyXG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIG9sZCByZXF1ZXN0IG9wdGlvbnMgdG8gbmV3IG9wdGlvbnNcclxuICAgIGNvbnN0IG9wdCA9IHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zKVxyXG5cclxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIC8vIGhhbmRsZSBDb250ZW50LVR5cGVcclxuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gJydcclxuICAgICAgaWYgKG9iaj8uaGVhZGVycz8uY29udGVudFR5cGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5jb250ZW50VHlwZVxyXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uQ29udGVudFR5cGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5Db250ZW50VHlwZVxyXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uWydjb250ZW50LXR5cGUnXSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ11cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29udGVudFR5cGUgIT09ICcnICYmIG9iai5oZWFkZXJzKSB7XHJcbiAgICAgICAgb2JqLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqXHJcbiAgICB9KVxyXG4gICAgaWYgKCdyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZScgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSB7XHJcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIC8vIHVzZSBvbGQgcmVxdWVzdCBvcHRpb24gZm9ybWF0XHJcbiAgICAgICAgaWYgKG9wdC5fX2lzT2xkT3B0aW9ucykge1xyXG4gICAgICAgICAgaWYgKCdqc29uJyBpbiBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pIGFzIFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PlxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdFxyXG4iLCJpbXBvcnQgeyB0eXBlIElDb25maWcsIHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcclxuaW1wb3J0IHsgdHlwZSBJSlNPTiB9IGZyb20gJ0BwaWNnby9zdG9yZS9kaXN0L3R5cGVzJ1xyXG5cclxuY2xhc3MgREIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHJlYWRvbmx5IGRiOiBKU09OU3RvcmVcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmRiID0gbmV3IEpTT05TdG9yZSh0aGlzLmN0eC5jb25maWdQYXRoKVxyXG5cclxuICAgIGlmICghdGhpcy5kYi5oYXMoJ3BpY0JlZCcpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY0JlZCcsIHtcclxuICAgICAgICAgIHVwbG9hZGVyOiAnc21tcycsXHJcbiAgICAgICAgICBjdXJyZW50OiAnc21tcydcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kYi5oYXMoJ3BpY2dvUGx1Z2lucycpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY2dvUGx1Z2lucycsIHt9KVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlYWQgKGZsdXNoPzogYm9vbGVhbik6IElKU09OIHtcclxuICAgIHJldHVybiB0aGlzLmRiLnJlYWQoZmx1c2gpXHJcbiAgfVxyXG5cclxuICBnZXQgKGtleTogc3RyaW5nID0gJycpOiBhbnkge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICByZXR1cm4gdGhpcy5kYi5nZXQoa2V5KVxyXG4gIH1cclxuXHJcbiAgc2V0IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICB0aGlzLmRiLnNldChrZXksIHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgaGFzIChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICByZXR1cm4gdGhpcy5kYi5oYXMoa2V5KVxyXG4gIH1cclxuXHJcbiAgdW5zZXQgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLnVuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlnIChjb25maWc6IFBhcnRpYWw8SUNvbmZpZz4pOiB2b2lkIHtcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25maWcgKGNvbmZpZzogSUNvbmZpZyk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy51bnNldChuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgREJcclxuXHJcbi8vIGNvbnN0IGluaXRDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nKTogbG93ZGIuTG93ZGJTeW5jPGFueT4gPT4ge1xyXG4vLyB9XHJcblxyXG4vLyBjb25zdCBzYXZlQ29uZmlnID0gKGNvbmZpZ1BhdGg6IHN0cmluZywgY29uZmlnOiBhbnkpOiB2b2lkID0+IHtcclxuLy8gICBjb25zdCBkYiA9IGluaXRDb25maWcoY29uZmlnUGF0aClcclxuLy8gICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4vLyAgICAgZGIucmVhZCgpLnNldChuYW1lLCBjb25maWdbbmFtZV0pLndyaXRlKClcclxuLy8gICB9KVxyXG4vLyB9XHJcblxyXG4vLyBleHBvcnQge1xyXG4vLyBpbml0Q29uZmlnLFxyXG4vLyBzYXZlQ29uZmlnXHJcbi8vIH1cclxuIiwiaW1wb3J0IHNwYXduIGZyb20gJ2Nyb3NzLXNwYXduJ1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgSVJlc3VsdCxcclxuICB0eXBlIElQcm9jZXNzRW52LFxyXG4gIHR5cGUgSVBsdWdpblByb2Nlc3NSZXN1bHQsXHJcbiAgdHlwZSBJUGx1Z2luSGFuZGxlcixcclxuICB0eXBlIElQbHVnaW5IYW5kbGVyT3B0aW9ucyxcclxuICB0eXBlIFVuZGVmaW5hYmxlLFxyXG4gIHR5cGUgSVBpY0dvLFxyXG4gIHR5cGUgSVBsdWdpbkhhbmRsZXJSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGdldFByb2Nlc3NQbHVnaW5OYW1lLCBnZXROb3JtYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vaTE4bi96aC1DTidcclxuXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5IYW5kbGVyIGltcGxlbWVudHMgSVBsdWdpbkhhbmRsZXIge1xyXG4gIC8vIFRoYW5rcyB0byBmZWZsb3cgLT4gaHR0cHM6Ly9naXRodWIuY29tL2ZlZmxvdy9mZWZsb3cvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL2luc3RhbGwvcGx1Z2luLmpzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGFzeW5jIGluc3RhbGwgKHBsdWdpbnM6IHN0cmluZ1tdLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52PzogSVByb2Nlc3NFbnYpOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBzdHJpbmdbXSA9IFtdXHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcclxuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAvLyBkZXRlY3QgaWYgaGFzIGFscmVhZHkgaW5zdGFsbGVkXHJcbiAgICAgICAgLy8gb3Igd2lsbCBjYXVzZSBlcnJvclxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5wbHVnaW5Mb2FkZXIuaGFzUGx1Z2luKGl0ZW0ucGtnTmFtZSkpIHtcclxuICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChpdGVtLnBrZ05hbWUpXHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2VzcyhgUGljR28gaGFzIGFscmVhZHkgaW5zdGFsbGVkICR7aXRlbS5wa2dOYW1lfWApXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgc29tZXRoaW5nIHdyb25nLCBmaWx0ZXIgaXQgb3V0XHJcbiAgICAgICAgaWYgKCFpdGVtLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgY29uc3QgZnVsbE5hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5mdWxsTmFtZSlcclxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxyXG4gICAgaWYgKGZ1bGxOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIGluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBmdWxsTmFtZUxpc3Q6XHJcbiAgICAgIC8vIDEuIGluc3RhbGwgcmVtb3RlIHBhY2FnZVxyXG4gICAgICAvLyAyLiBpbnN0YWxsIGxvY2FsIHBhY2FnZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCdpbnN0YWxsJywgZnVsbE5hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3R4LnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbFN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGluc3RhbGxlZFBsdWdpbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbFN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgfSlcclxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1bmluc3RhbGwgKHBsdWdpbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xyXG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpLmZpbHRlcihpdGVtID0+IGl0ZW0uc3VjY2VzcylcclxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxyXG4gICAgaWYgKHBrZ05hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gdW5pbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgcGtnTmFtZUxpc3Q6XHJcbiAgICAgIC8vIG5wbSB1bmluc3RhbGwgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgndW5pbnN0YWxsJywgcGtnTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3R4LnBsdWdpbkxvYWRlci51bnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbFN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGUgKHBsdWdpbnM6IHN0cmluZ1tdLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52PzogSVByb2Nlc3NFbnYpOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1cGRhdGUgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVwZGF0ZSB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1cGRhdGUnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpciwgb3B0aW9ucywgZW52KVxyXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVTdWNjZXNzJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTJyksXHJcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxyXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlRmFpbGVkJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQnKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfSlcclxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjQ29tbWFuZCAoY21kOiBzdHJpbmcsIG1vZHVsZXM6IHN0cmluZ1tdLCB3aGVyZTogc3RyaW5nLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52OiBJUHJvY2Vzc0VudiA9IHt9KTogUHJvbWlzZTxJUmVzdWx0PiB7XHJcbiAgICAvLyBvcHRpb25zIGZpcnN0XHJcbiAgICBjb25zdCByZWdpc3RyeSA9IG9wdGlvbnMucmVnaXN0cnkgfHwgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5yZWdpc3RyeScpXHJcbiAgICBjb25zdCBwcm94eSA9IG9wdGlvbnMucHJveHkgfHwgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5wcm94eScpXHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmU6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgICBsZXQgYXJncyA9IFtjbWRdLmNvbmNhdChtb2R1bGVzKS5jb25jYXQoJy0tY29sb3I9YWx3YXlzJykuY29uY2F0KCctLXNhdmUnKVxyXG4gICAgICBpZiAocmVnaXN0cnkpIHtcclxuICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoYC0tcmVnaXN0cnk9JHtyZWdpc3RyeX1gKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm94eSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1wcm94eT0ke3Byb3h5fWApXHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBucG0gPSBzcGF3bignbnBtJywgYXJncywgeyBjd2Q6IHdoZXJlLCBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCBlbnYpIH0pXHJcblxyXG4gICAgICAgIGxldCBvdXRwdXQgPSAnJ1xyXG4gICAgICAgIG5wbS5zdGRvdXQ/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3Rkb3V0KVxyXG5cclxuICAgICAgICBucG0uc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIG91dHB1dCArPSBkYXRhXHJcbiAgICAgICAgfSkucGlwZShwcm9jZXNzLnN0ZGVycilcclxuXHJcbiAgICAgICAgbnBtLm9uKCdjbG9zZScsIChjb2RlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGlmICghY29kZSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZTogMCwgZGF0YTogb3V0cHV0IH0pXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZSwgZGF0YTogb3V0cHV0IH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBmb3IgdXNlcnMgd2hvIGhhdmVuJ3QgaW5zdGFsbGVkIG5vZGUuanNcclxuICAgICAgICBucG0ub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsICdOUE0gaXMgbm90IGluc3RhbGxlZCcpXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogdHJhbnNmb3JtIHRoZSBpbnB1dCBwbHVnaW4gbmFtZSBvciBwYXRoIHN0cmluZyB0byB2YWxpZCByZXN1bHRcclxuICogQHBhcmFtIGN0eFxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxyXG4gKi9cclxuY29uc3QgaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MgPSAoY3R4OiBJUGljR28sIG5hbWVPclBhdGg6IHN0cmluZyk6IElQbHVnaW5Qcm9jZXNzUmVzdWx0ID0+IHtcclxuICBjb25zdCByZXMgPSB7XHJcbiAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgIGZ1bGxOYW1lOiAnJyxcclxuICAgIHBrZ05hbWU6ICcnXHJcbiAgfVxyXG4gIGNvbnN0IHJlc3VsdCA9IGdldFByb2Nlc3NQbHVnaW5OYW1lKG5hbWVPclBhdGgsIGN0eC5sb2cpXHJcbiAgaWYgKCFyZXN1bHQpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgLy8gZmlyc3QgZ2V0IHJlc3VsdCB0aGVuIGRvIHRoaXMgcHJvY2Vzc1xyXG4gIC8vIG9yIHNvbWUgZXJyb3Igd2lsbCBsb2cgdHdpY2VcclxuICBjb25zdCBwa2dOYW1lID0gZ2V0Tm9ybWFsUGx1Z2luTmFtZShyZXN1bHQsIGN0eC5sb2cpXHJcbiAgaWYgKCFwa2dOYW1lKSB7XHJcbiAgICByZXR1cm4gcmVzXHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgZnVsbE5hbWU6IHJlc3VsdCxcclxuICAgIHBrZ05hbWVcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkhhbmRsZXJcclxuIiwiaW1wb3J0IHsgWkhfQ04sIHR5cGUgSUxvY2FsZXNLZXksIHR5cGUgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgdHlwZSBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJ1xyXG5cclxuaW1wb3J0IHsgT2JqZWN0QWRhcHRlciwgSTE4biB9IGZyb20gJ0BwaWNnby9pMThuJ1xyXG5pbXBvcnQgeyB0eXBlIElTdHJpbmdLZXlNYXAsIHR5cGUgSUkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXgnXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZSB9IGZyb20gJ0BwaWNnby9pMThuL2Rpc3QvdHlwZXMnXHJcbmltcG9ydCB7IEVOIH0gZnJvbSAnLi9lbidcclxuaW1wb3J0IHsgWkhfVFcgfSBmcm9tICcuL3poLVRXJ1xyXG5cclxuY29uc3QgbGFuZ3VhZ2VMaXN0OiBJU3RyaW5nS2V5TWFwPElTdHJpbmdLZXlNYXA8c3RyaW5nPj4gPSB7XHJcbiAgJ3poLUNOJzogWkhfQ04sXHJcbiAgJ3poLVRXJzogWkhfVFcsXHJcbiAgZW46IEVOXHJcbn1cclxuXHJcbmNsYXNzIEkxOG5NYW5hZ2VyIGltcGxlbWVudHMgSUkxOG5NYW5hZ2VyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGkxOG46IEkxOG5cclxuICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdEFkYXB0ZXI6IE9iamVjdEFkYXB0ZXJcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyID0gbmV3IE9iamVjdEFkYXB0ZXIobGFuZ3VhZ2VMaXN0KVxyXG4gICAgbGV0IGxhbmd1YWdlID0gdGhpcy5jdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xyXG4gICAgaWYgKCFsYW5ndWFnZUxpc3RbbGFuZ3VhZ2VdKSB7XHJcbiAgICAgIGxhbmd1YWdlID0gJ3poLUNOJyAvLyB1c2UgZGVmYXVsdFxyXG4gICAgfVxyXG4gICAgdGhpcy5pMThuID0gbmV3IEkxOG4oe1xyXG4gICAgICBhZGFwdGVyOiB0aGlzLm9iamVjdEFkYXB0ZXIsXHJcbiAgICAgIGRlZmF1bHRMYW5ndWFnZTogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgICB0aGlzLmxvYWRPdXR0ZXJJMThuKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZE91dHRlckkxOG4gKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaTE4bkZvbGRlciA9IHRoaXMuZ2V0T3V0dGVySTE4bkZvbGRlcigpXHJcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGkxOG5Gb2xkZXIsIHtcclxuICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZVxyXG4gICAgfSlcclxuICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgIGlmIChmaWxlLmlzRmlsZSgpICYmIGZpbGUubmFtZS5lbmRzV2l0aCgnLnltbCcpKSB7XHJcbiAgICAgICAgY29uc3QgaTE4bkZpbGVQYXRoID0gcGF0aC5qb2luKGkxOG5Gb2xkZXIsIGZpbGUubmFtZSlcclxuICAgICAgICBjb25zdCBpMThuRmlsZSA9IGZzLnJlYWRGaWxlU3luYyhpMThuRmlsZVBhdGgsICd1dGY4JylcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgaTE4bkZpbGVPYmogPSB5YW1sLmxvYWQoaTE4bkZpbGUpIGFzIElMb2NhbGVzXHJcbiAgICAgICAgICBsYW5ndWFnZUxpc3RbZmlsZS5uYW1lLnJlcGxhY2UoL1xcLnltbCQvLCAnJyldID0gaTE4bkZpbGVPYmpcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPdXR0ZXJJMThuRm9sZGVyICgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaTE4bkZvbGRlciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnaTE4bi1jbGknKVxyXG4gICAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyhpMThuRm9sZGVyKSkge1xyXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGkxOG5Gb2xkZXIpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gaTE4bkZvbGRlclxyXG4gIH1cclxuXHJcbiAgdHJhbnNsYXRlPFQgZXh0ZW5kcyBzdHJpbmc+KGtleTogSUxvY2FsZXNLZXkgfCBULCBhcmdzPzogSVN0cmluZ0tleU1hcDxzdHJpbmc+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmkxOG4udHJhbnNsYXRlKGtleSwgYXJncykgfHwga2V5XHJcbiAgfVxyXG5cclxuICBzZXRMYW5ndWFnZSAobGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pMThuLnNldExhbmd1YWdlKGxhbmd1YWdlKVxyXG4gICAgdGhpcy5jdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdzZXR0aW5ncy5sYW5ndWFnZSc6IGxhbmd1YWdlXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkTG9jYWxlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmICghb3JpZ2luTG9jYWxlcykge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld0xvY2FsZXMgPSBtZXJnZShvcmlnaW5Mb2NhbGVzLCBsb2NhbGVzKVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbmV3TG9jYWxlcylcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBhZGRMYW5ndWFnZSAobGFuZ3VhZ2U6IHN0cmluZywgbG9jYWxlczogSUxvY2FsZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3JpZ2luTG9jYWxlcyA9IHRoaXMub2JqZWN0QWRhcHRlci5nZXRMb2NhbGUobGFuZ3VhZ2UpXHJcbiAgICBpZiAob3JpZ2luTG9jYWxlcykge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMub2JqZWN0QWRhcHRlci5zZXRMb2NhbGUobGFuZ3VhZ2UsIGxvY2FsZXMpXHJcbiAgICBsYW5ndWFnZUxpc3RbbGFuZ3VhZ2VdID0gbG9jYWxlc1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGdldExhbmd1YWdlTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxhbmd1YWdlTGlzdClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgSTE4bk1hbmFnZXJcclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IFpIX0NOID0ge1xyXG4gIFVQTE9BRF9GQUlMRUQ6ICfkuIrkvKDlpLHotKUnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55piv5ZCm5q2j56GuJyxcclxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueS7peWPiue9kee7nCcsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICfplJnor6/noIHvvJoke2NvZGV977yM6K+35omT5byA5rWP6KeI5Zmo57KY6LS05Zyw5Z2A5p+l55yL55u45YWz5Y6f5ZugJyxcclxuICBTRVJWRVJfRVJST1I6ICfmnI3liqHnq6/lh7rplJnvvIzor7fph43or5UnLFxyXG4gIEFVVEhfRkFJTEVEOiAn6K6k6K+B5aSx6LSlJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICflpIfnlKjkuIrkvKDln5/lkI0nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIGxvY2FsXHJcbiAgUElDQkVEX0xPQ0FMOiAn5pys5Zyw5LiK5LygJyxcclxuICBQSUNCRURfTE9DQUxfUEFUSDogJ+iuvuWumui3r+W+hCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ+S+i+WmgiAvdXNyL2xvY2FsL2ltYWdlcy8nLFxyXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOS6juaLvOaOpee9keWdgOi3r+W+hCcsXHJcblxyXG4gIC8vIEFsaS1jbG91ZFxyXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6K6+5a6aS2V5SWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICforr7lrppLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJpvc3MtY24tYmVpamluZycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gVGVuY2VudC1jbG91ZFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfohb7orq/kupFDT1MnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ+iuvuWumlNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+iuvuWumkFwcElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6K6+5a6a5o6l5YWl54K5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ+S+i+Wmgu+8mjEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaYXAtYmVpamluZycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlTW9ncjInLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ+aegeaZuuWOi+e8qScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDogJ+WbvueJh+aegeaZuuWOi+e8qe+8jOivpuaDheivt+WPguiAg1vmlofmoaPor7TmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+W8gOWQrycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ+WFs+mXrScsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6K6+5a6a5LuT5bqT5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6K6+5a6a5YiG5pSv5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+iuvuWumkFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICforr7lrprorr/pl67nvZHlnYAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICforr7lrppDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6K6+5a6aYWNjZXNzVG9rZW4nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+iuvuWumuebuOWGjOWQjScsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAn6K6+5a6a5Luj55CGJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ+WMv+WQjeS4iuS8oOaXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICfkvovlpoLvvJp0ZXN0JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAn5Y+I5ouN5LqRJyxcclxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICforr7lrprmk43kvZzlkZgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+iuvuWumuaTjeS9nOWRmOWvhueggScsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICforr7lrprliqDpgJ/ln5/lkI0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+iuvuWumumYsuebl+mTvlRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICforr7lrprov4fmnJ/ml7bpl7Qo56eSKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2cGxpc3RcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6K6+5a6a5o6l5Y+j572R5Z2AJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+WQr+eUqFNTTCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R5Z2A6Lev5b6EJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICforr7lrprorqTor4HmlrnlvI8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pe25ZCv55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YaF572uU0ZUUCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAn6K6+5a6a5Li75py6JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ+iuvuWumuengemSpScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICforr7lrprnp4HpkqXlr4bnoIEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ+iuvuWumuaWh+S7tueUqOaItzrnu4QnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAn6K6+5a6a5paH5Lu25p2D6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6K6+5a6a5paH5Lu25aS55p2D6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mjEuMS4xLjMnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAn6buY6K6kMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i+k+WFpeengemSpeWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICfkvovlpoLvvJp3d3c6ZGF0YScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ+S+i+Wmgu+8mjA3NzUnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+iuvuWumuawtOWNsOexu+WeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6K+36YCJ5oup5rC05Y2w57G75Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pe25ZCv55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICforr7lrprmsLTljbDop5LluqYnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6K6+5a6a5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfor7fovpPlhaXmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+iuvuWumuawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6K6+5a6a5rC05Y2w55u45a+55LqO5Zu+54mH55qE5q+U5L6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ivt+i+k+WFpTAtMeeahOWwj+aVsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6K6+5a6a5rC05Y2w5a2X5L2T6aKc6ImyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ivt+i+k+WFpXJnYuminOiJsuWAvCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K6+5a6a5rC05Y2w5Zu+54mH6Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWbvueJh+i3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICforr7lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfor7fpgInmi6nmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICforr7lrprph43lkb3lkI3moLzlvI8nLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWQr+eUqOmHjeWRveWQjScsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+iuvuWumuWbvueJh+i0qOmHjycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfor7fovpPlhaUwLTEwMOeahOaVtOaVsCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbov5vooYzmoLzlvI/ovazmjaInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovazmjaLml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+iuvuWumui9rOaNouagvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfor7fpgInmi6novazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbov5vooYzlm77niYfnvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+iuvuWumue8qeaUvuWuveW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+iuvuWumue8qeaUvumrmOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOi/m+ihjOe8qeaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57yp5pS+5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9rOWbvueJhycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovazlm77niYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+iuvuWumue8qeaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7Pov4flsI/lm77nvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbov5vooYzlm77niYfml4vovawnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9rOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICforr7lrprml4vovazop5LluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfor7fovpPlhaXmlbDlrZfvvIzlj6/kuLrotJ/mlbAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuS/oeaBrycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbkv6Hmga/ml7blkK/nlKgnLFxyXG5cclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo4XmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijheWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijheWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCN5oiW5ZCI5rOV5a6J6KOF6Lev5b6EJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovb3miJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246L295aSx6LSlJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovb3lpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi9veWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElMb2NhbGVzS2V5ID0ga2V5b2YgdHlwZW9mIFpIX0NOXHJcbmV4cG9ydCB0eXBlIElMb2NhbGVzID0gdHlwZW9mIFpIX0NOXHJcbiIsImltcG9ydCB7IHR5cGUgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBaSF9UVzogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprmmK/lkKbmraPnoronLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5Y+K57ay6LevJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivO+8miR7Y29kZX3vvIzoq4vmiZPplovngI/opr3lmajosrzkuIrlnLDlnYDmn6XnnIvnm7jpl5zljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXHJcbiAgQVVUSF9GQUlMRUQ6ICfoqo3orYnlpLHmlZcnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+WCmeeUqOS4iuWCs+e2suWdgCcsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO57ay6aCB6aGv56S655qE6Lev5b6RJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICfoqK3lrppLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWumktleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6Kit5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6Kit5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICfoqK3lrprmjqXlhaXpu54nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAnU2V0IEltYWdlU2xpbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDogJ0ltYWdlIGV4dHJlbWVseSBpbnRlbGxpZ2VudCBjb21wcmVzc2lvbiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBbZG9jdW1lbnQgZGVzY3JpcHRpb25dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ09QRU4nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICdDTE9TRScsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6Kit5a6a5YCJ5bqr5ZCN56ixJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6Kit5a6a5YiG5pSv5ZCN56ixJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+ioreWumkFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICfoqK3lrproqKrllY/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICfoqK3lrppDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6Kit5a6aYWNjZXNzVG9rZW4nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+ioreWumuebuOewv+WQjScsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAn6Kit5a6aUFJPWFknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5YKz5pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+ioreWumuaTjeS9nOWToScsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6Kit5a6a5pON5L2c5ZOh5a+G56K8JyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+ioreWumuWKoOmAn+e2suWdgCcsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAn6Kit5a6a6Ziy55uc6Y+IVG9rZW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ+ioreWumumBjuacn+aZgumWkyjnp5IpJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ+i8uOWFpeaTjeS9nOWToeWvhueivCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG5cclxuICAvLyB3ZWJkYXZcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6Kit5a6aQVBJ5Li75qmfJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pmC5ZWf55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+ioreWumuWvhueivCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+ioreWumuiqjeitieaWueW8jycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee2suWdgOaZguS9v+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHNmdHBwbGlzdFxyXG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhafnva5TRlRQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+ioreWumuerr+WPoycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+ioreWumuWvhueivCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6Kit5a6a56eB6ZGwJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+ioreWumuengemRsOWvhueivCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6Kit5a6a5LiK5YKz6Lev5b6RJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICfoqK3lrprntrLnq5not6/lvpEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6Kit5a6a5paH5Lu255So5oi2Oue1hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICfoqK3lrprmlofku7bmrIrpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICfoqK3lrprmlofku7blpL7mrIrpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5joqo0yMicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6Ly45YWl56eB6ZGw5a+G56K8JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee2suWdgOaZguS9v+eUqCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaC77yaMDc3NScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAn5piv5ZCm5re75Yqg5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAn6ZyA6KaB5re75Yqg5rC05Y2w5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6Kit5a6a5rC05Y2w6aGe5Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICfoq4vpgbjmk4fmsLTljbDpoZ7lnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+aYr+WQpuWFqOWxj+awtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ+ioreWumuawtOWNsOinkuW6picsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICfoqK3lrprmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ+iri+i8uOWFpeawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAn6Kit5a6a5rC05Y2w5a2X6auUJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5a2X6auU5paH5Lu26Lev5b6RJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU86ICfoqK3lrprmsLTljbDlnJbniYfmr5TkvosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAn6KuL6Ly45YWlMC0x55qE5pW45a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICfoqK3lrprmsLTljbDlrZfpq5TpoY/oibInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAn6KuL6Ly45YWlcmdi6aGP6Imy5YC8JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICfoqK3lrprmsLTljbDlnJbniYfot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5ZyW54mH6Lev5b6RJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ+ioreWumuawtOWNsOS9jee9ricsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+iri+mBuOaTh+awtOWNsOS9jee9ricsXHJcblxyXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+ioreWumumHjeWRveWQjeagvOW8jycsXHJcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAn5piv5ZCm5ZWf55So6YeN5ZG95ZCNJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAn6Kit5a6a5ZyW54mH6LOq6YePJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+iri+i8uOWFpTAtMTAw55qE5pW05pW4JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpumAsuihjOagvOW8j+i9ieaPmycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ+mcgOimgei9ieaPm+aZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6Kit5a6a6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+iri+mBuOaTh+i9ieaPm+agvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ+aYr+WQpumAsuihjOWclueJh+e4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57iu5pS+5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6Kit5a6a57iu5pS+5a+s5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6Kit5a6a57iu5pS+6auY5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAn5piv5ZCm5oyJ55m+5YiG5q+U6YCy6KGM57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAn5piv5ZCm5Z6C55u057+76L2J5ZyW54mHJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxPUDogJ+aYr+WQpuawtOW5s+e/u+i9ieWclueJhycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6Kit5a6a57iu5pS+55m+5YiG5q+UJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+iri+i8uOWFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ+aYr+WQpui3s+mBjuWwj+Wclue4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpumAsuihjOWclueJh+aXi+i9iScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2J5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ+ioreWumuaXi+i9ieinkuW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+iri+i8uOWFpeaVuOWtl++8jOWPr+eCuuiyoOaVuCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG6LOH6KiKJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAn6ZyA6KaB56e76ZmkRVhJRuizh+ioiuaZguWVn+eUqCcsXHJcblxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWuieijneaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOd5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICfmj5Lku7blronoo53lpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLHmiJbmraPnorrnmoTlronoo53ot6/lvpEnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi8ieaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovInlpLHmlZcnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246LyJ5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ixJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAn5o+S5Lu25pu05paw5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosSdcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgRU46IElMb2NhbGVzID0ge1xyXG4gIFVQTE9BRF9GQUlMRUQ6ICdVcGxvYWQgZmFpbGVkJyxcclxuICBDSEVDS19TRVRUSU5HUzogJ1BsZWFzZSBjaGVjayB5b3VyIHNldHRpbmdzJyxcclxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ1BsZWFzZSBjaGVjayB5b3VyIHNldHRpbmdzIGFuZCBuZXR3b3JrJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ0Vycm9yIGNvZGU6ICR7Y29kZX0sIHBsZWFzZSBvcGVuIHRoZSBicm93c2VyIGFuZCBwYXN0ZSB0aGUgYWRkcmVzcyB0byBzZWUgdGhlIHJlYXNvbicsXHJcbiAgU0VSVkVSX0VSUk9SOiAnU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyJyxcclxuICBBVVRIX0ZBSUxFRDogJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcsXHJcblxyXG4gIC8vIHNtbXNcclxuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcclxuICBQSUNCRURfU01NU19UT0tFTjogJ1NldCBUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ1NldCBCYWNrdXAgVXBsb2FkIERvbWFpbicsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAnRXguIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICdMb2NhbCcsXHJcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ0V4LiAvVXNlcnMvbmFtZS9QaWN0dXJlcy8nLFxyXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAnU2V0IFdlYiBQYXRoJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSB1cmwgcGF0aCcsXHJcblxyXG4gIC8vIEFsaS1jbG91ZFxyXG4gIFBJQ0JFRF9BTElDTE9VRDogJ0FsaSBDbG91ZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAnU2V0IEtleUlkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAnU2V0IEtleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBvc3MtY24tYmVpamluZycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gVGVuY2VudC1jbG91ZFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICdUZW5jZW50IENsb3VkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDaG9vc2UgQ09TIHZlcnNpb24nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICdTZXQgU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ1NldCBBcHBJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICdFeC4gMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gYXAtYmVpamluZycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cDovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ+alteaZuuWjk+e4ricsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ+mXnOmWiScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICfplovllZMnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6ICflnJbniYfmpbXmmbrlo5PnuK7vvIzoqbPmg4Xoq4vlj4PogINb5paH5qqU6Kqq5piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2LzQ5MjU5KScsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ1NldCBSZXBvIE5hbWUnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ1NldCBCcmFuY2gnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAnRXguIHVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICdFeC4gbWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAnUWluaXUnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICdTZXQgQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICdTZXQgVVJMJyxcclxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAnRXguIHowJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAnRXguID9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ0V4LiBodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuXHJcbiAgLy8gdGVsZWdyYXBoXHJcbiAgUElDQkVEX1RFTEVHUkFQSDogJ1RlbGVncmFwaCcsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ1NldCBDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAnU2V0IEFjY2VzcyBUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAnU2V0IEFsYnVtIE5hbWUnLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ1NldCBQcm94eScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIGFzIGFub255bW91cycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAnVXB5dW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICdTZXQgT3BlcmF0b3InLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ1NldCBPcGVyYXRvciBQYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ1NldCBVUkwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAnU2V0IEFudGktTGVlY2ggVG9rZW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ1NldCBFeHBpcmUgVGltZShzZWNvbmRzKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICdFeC4gbWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIG9wZXJhdG9yIHBhc3N3b3JkJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICdFeC4gaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ0V4LiAhaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICdTZXQgQXV0aCBUeXBlJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ1NGVFAgQnVpbGRpbicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ1NldCBQb3J0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICdTZXQgUHJpdmF0ZSBLZXknLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnU2V0IFByaXZhdGUgS2V5IFBhc3NwaHJhc2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ1NldCBGaWxlIFVzZXI6R3JvdXAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAnU2V0IEZpbGUgTW9kZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ1NldCBEaXJlY3RvcnkgTW9kZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICdEZWZhdWx0IDIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ0V4LiAvVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnUGxlYXNlIHR5cGUgdGhlIHByaXZhdGUga2V5IHBhc3NwaHJhc2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAnRXguIHd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAnRXguIDA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ0V4LiAwNzc1JyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAnU2V0IHJlbmFtZSBmb3JtYXQnLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ0VuYWJsZSByZW5hbWUnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ1doZXRoZXIgdG8gYWRkIHdhdGVybWFyaycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ1NldCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAnUGxlYXNlIHNlbGVjdCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIGZ1bGwtc2NyZWVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAnU2V0IHdhdGVybWFyayBhbmdsZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICdTZXQgd2F0ZXJtYXJrIHRleHQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ1BsZWFzZSBlbnRlciB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgZm9udCBmaWxlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ1NldCB0aGUgcmF0aW8gb2YgdGhlIHdhdGVybWFyayB0byB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICdTZXQgd2F0ZXJtYXJrIGZvbnQgY29sb3InLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAnUGxlYXNlIGVudGVyIHRoZSBSR0IgY29sb3IgdmFsdWUnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ1NldCB3YXRlcm1hcmsgcG9zaXRpb24nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ1NldCBpbWFnZSBxdWFsaXR5JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ1BsZWFzZSBlbnRlciBhbiBpbnRlZ2VyIGJldHdlZW4gMC0xMDAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAnV2hldGhlciB0byBwZXJmb3JtIGZvcm1hdCBjb252ZXJzaW9uJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAnRW5hYmxlIHdoZW4gZm9ybWF0IGNvbnZlcnNpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ1NldCBjb252ZXJzaW9uIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICdQbGVhc2Ugc2VsZWN0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICdFbmFibGUgd2hlbiBpbWFnZSByZXNpemluZyBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ1NldCByZXNpemluZyB3aWR0aCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ1NldCByZXNpemluZyBoZWlnaHQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UgYnkgcGVyY2VudGFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAnRW5hYmxlIHdoZW4gcmVzaXppbmcgYnkgcGVyY2VudGFnZSBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIHZlcnRpY2FsbHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAnV2hldGhlciB0byBmbGlwIHRoZSBpbWFnZSBob3Jpem9udGFsbHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ1NldCByZXNpemluZyBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ1doZXRoZXIgdG8gc2tpcCByZXNpemluZyBvZiBzbWFsbCBpbWFnZXMnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICdXaGV0aGVyIHRvIHJvdGF0ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ0VuYWJsZSB3aGVuIGltYWdlIHJvdGF0aW9uIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ1NldCByb3RhdGlvbiBhbmdsZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlciwgY2FuIGJlIG5lZ2F0aXZlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ1doZXRoZXIgdG8gcmVtb3ZlIEVYSUYgaW5mb3JtYXRpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICdFbmFibGUgd2hlbiByZW1vdmluZyBFWElGIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkJyxcclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lIG9yIHZhbGlkIGluc3RhbGxhdGlvbiBwYXRoJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gdW5pbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICdQbHVnaW4gdXBkYXRlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnXHJcbn1cclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcydcclxuaW1wb3J0IENvbW1hbmRlciBmcm9tICcuLi9saWIvQ29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9saWIvTG9nZ2VyJ1xyXG5pbXBvcnQgTGlmZWN5Y2xlIGZyb20gJy4vTGlmZWN5Y2xlJ1xyXG5pbXBvcnQgTGlmZWN5Y2xlUGx1Z2lucywgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4uL2xpYi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5pbXBvcnQgdXBsb2FkZXJzIGZyb20gJy4uL3BsdWdpbnMvdXBsb2FkZXInXHJcbmltcG9ydCB0cmFuc2Zvcm1lcnMgZnJvbSAnLi4vcGx1Z2lucy90cmFuc2Zvcm1lcidcclxuaW1wb3J0IFBsdWdpbkxvYWRlciBmcm9tICcuLi9saWIvUGx1Z2luTG9hZGVyJ1xyXG5pbXBvcnQgeyBnZXQsIHNldCwgdW5zZXQgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IHR5cGUgSUhlbHBlciwgdHlwZSBJSW1nSW5mbywgdHlwZSBJQ29uZmlnLCB0eXBlIElQaWNHbywgdHlwZSBJU3RyaW5nS2V5TWFwLCB0eXBlIElQbHVnaW5Mb2FkZXIsIHR5cGUgSUkxOG5NYW5hZ2VyLCB0eXBlIElQaWNHb1BsdWdpbiwgdHlwZSBJUGljR29QbHVnaW5JbnRlcmZhY2UsIHR5cGUgSVJlcXVlc3QgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IGdldENsaXBib2FyZEltYWdlIGZyb20gJy4uL3V0aWxzL2dldENsaXBib2FyZEltYWdlJ1xyXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9saWIvUmVxdWVzdCdcclxuaW1wb3J0IERCIGZyb20gJy4uL3V0aWxzL2RiJ1xyXG5pbXBvcnQgUGx1Z2luSGFuZGxlciBmcm9tICcuLi9saWIvUGx1Z2luSGFuZGxlcidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCwgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcclxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJMThuTWFuYWdlciB9IGZyb20gJy4uL2kxOG4nXHJcblxyXG5leHBvcnQgY2xhc3MgUGljR28gZXh0ZW5kcyBFdmVudEVtaXR0ZXIgaW1wbGVtZW50cyBJUGljR28ge1xyXG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcclxuICBwcml2YXRlIGxpZmVjeWNsZSE6IExpZmVjeWNsZVxyXG4gIHByaXZhdGUgZGIhOiBEQlxyXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZ1xyXG4gIGJhc2VEaXIhOiBzdHJpbmdcclxuICBoZWxwZXIhOiBJSGVscGVyXHJcbiAgbG9nOiBMb2dnZXJcclxuICBjbWQ6IENvbW1hbmRlclxyXG4gIG91dHB1dDogSUltZ0luZm9bXVxyXG4gIGlucHV0OiBhbnlbXVxyXG4gIHJhd0lucHV0OiBhbnlbXVxyXG4gIHBsdWdpbkhhbmRsZXI6IFBsdWdpbkhhbmRsZXJcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xyXG4gICAqXHJcbiAgICogdXNlIHJlcXVlc3QgaW5zdGVhZFxyXG4gICAqL1xyXG4gIFJlcXVlc3QhOiBSZXF1ZXN0XHJcbiAgaTE4biE6IElJMThuTWFuYWdlclxyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cclxuICBHVUlfVkVSU0lPTj86IHN0cmluZ1xyXG5cclxuICBnZXQgcGx1Z2luTG9hZGVyICgpOiBJUGx1Z2luTG9hZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yIChjb25maWdQYXRoOiBzdHJpbmcgPSAnJykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jb25maWdQYXRoID0gY29uZmlnUGF0aFxyXG4gICAgdGhpcy5vdXRwdXQgPSBbXVxyXG4gICAgdGhpcy5pbnB1dCA9IFtdXHJcbiAgICB0aGlzLnJhd0lucHV0ID0gW11cclxuICAgIHRoaXMuaGVscGVyID0ge1xyXG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXHJcbiAgICAgIHVwbG9hZGVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndXBsb2FkZXInKSxcclxuICAgICAgYmVmb3JlVHJhbnNmb3JtUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVRyYW5zZm9ybVBsdWdpbnMnKSxcclxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcclxuICAgICAgYWZ0ZXJVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYWZ0ZXJVcGxvYWRQbHVnaW5zJylcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxyXG4gICAgdGhpcy5sb2cgPSBuZXcgTG9nZ2VyKHRoaXMpXHJcbiAgICB0aGlzLmNtZCA9IG5ldyBDb21tYW5kZXIodGhpcylcclxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXHJcbiAgICB0aGlzLmluaXRDb25maWcoKVxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZ1BhdGggKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5jb25maWdQYXRoID0gaG9tZWRpcigpICsgJy8ucGljbGlzdC9jb25maWcuanNvbidcclxuICAgIH1cclxuICAgIGlmIChwYXRoLmV4dG5hbWUodGhpcy5jb25maWdQYXRoKS50b1VwcGVyQ2FzZSgpICE9PSAnLkpTT04nKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnUGF0aCA9ICcnXHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcclxuICAgIH1cclxuICAgIHRoaXMuYmFzZURpciA9IHBhdGguZGlybmFtZSh0aGlzLmNvbmZpZ1BhdGgpXHJcbiAgICBjb25zdCBleGlzdCA9IGZzLnBhdGhFeGlzdHNTeW5jKHRoaXMuY29uZmlnUGF0aClcclxuICAgIGlmICghZXhpc3QpIHtcclxuICAgICAgZnMuZW5zdXJlRmlsZVN5bmMoYCR7dGhpcy5jb25maWdQYXRofWApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDb25maWcgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYiA9IG5ldyBEQih0aGlzKVxyXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYi5yZWFkKHRydWUpIGFzIElDb25maWdcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBpbml0IDE4biBhdCBmaXJzdFxyXG4gICAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bk1hbmFnZXIodGhpcylcclxuICAgICAgdGhpcy5SZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpcylcclxuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVyID0gbmV3IFBsdWdpbkxvYWRlcih0aGlzKVxyXG4gICAgICAvLyBsb2FkIHNlbGYgcGx1Z2luc1xyXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgncGljZ28nKVxyXG4gICAgICB1cGxvYWRlcnModGhpcykucmVnaXN0ZXIodGhpcylcclxuICAgICAgdHJhbnNmb3JtZXJzKHRoaXMpLnJlZ2lzdGVyKHRoaXMpXHJcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCcnKVxyXG4gICAgICAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICB0aGlzLmxpZmVjeWNsZSA9IG5ldyBMaWZlY3ljbGUodGhpcylcclxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIC0xKVxyXG4gICAgICB0aGlzLmxvZy5lcnJvcihlKVxyXG4gICAgICB0aHJvdyBlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBlYXNpbHkgbWFubnVhbGx5IGxvYWQgYSBwbHVnaW5cclxuICAgKiBpZiBwcm92aWRlIHBsdWdpbiBuYW1lLCB3aWxsIHJlZ2lzdGVyIHBsdWdpbiBieSBuYW1lXHJcbiAgICogb3IganVzdCBpbnN0YW50aWF0ZSBhIHBsdWdpblxyXG4gICAqL1xyXG4gIHVzZSAocGx1Z2luOiBJUGljR29QbHVnaW4sIG5hbWU/OiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2Uge1xyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgdGhpcy5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4obmFtZSwgcGx1Z2luKVxyXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSBwbHVnaW4odGhpcylcclxuICAgICAgcmV0dXJuIHBsdWdpbkluc3RhbmNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckNvbW1hbmRzICgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuY21kLmluaXQoKVxyXG4gICAgICB0aGlzLmNtZC5sb2FkQ29tbWFuZHMoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnPFQ+IChuYW1lPzogc3RyaW5nKTogVCB7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZyBhcyB1bmtub3duIGFzIFRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBnZXQodGhpcy5fY29uZmlnLCBuYW1lKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbmZpZyAoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcclxuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcclxuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENvbmZpZyhjb25maWcpXHJcbiAgICB0aGlzLmRiLnNhdmVDb25maWcoY29uZmlnKVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29uZmlnIChrZXk6IHN0cmluZywgcHJvcE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cclxuICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KGtleSkpIHtcclxuICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke2tleX0gY2FuJ3QgYmUgcmVtb3ZlZGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy51bnNldENvbmZpZyhrZXksIHByb3BOYW1lKVxyXG4gICAgdGhpcy5kYi51bnNldChrZXksIHByb3BOYW1lKVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnIChjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KG5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke25hbWV9IGNhbid0IGJlIG1vZGlmaWVkYClcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXHJcbiAgICAgICAgZGVsZXRlIGNvbmZpZ1tuYW1lXVxyXG4gICAgICB9XHJcbiAgICAgIHNldCh0aGlzLl9jb25maWcsIG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgICAgZXZlbnRCdXMuZW1pdChJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwge1xyXG4gICAgICAgIGNvbmZpZ05hbWU6IG5hbWUsXHJcbiAgICAgICAgdmFsdWU6IGNvbmZpZ1tuYW1lXVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHVuc2V0Q29uZmlnIChrZXk6IHN0cmluZywgcHJvcE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cclxuICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KGtleSkpIHtcclxuICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke2tleX0gY2FuJ3QgYmUgdW5zZXRgKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHVuc2V0KHRoaXMuZ2V0Q29uZmlnKGtleSksIHByb3BOYW1lKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJlcXVlc3QgKCk6IElSZXF1ZXN0WydyZXF1ZXN0J10ge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVxdWVzdC5yZXF1ZXN0LmJpbmQodGhpcy5SZXF1ZXN0KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkIChpbnB1dD86IGFueVtdKTogUHJvbWlzZTxJSW1nSW5mb1tdIHwgRXJyb3I+IHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XHJcbiAgICAgIHRoaXMubG9nLmVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcclxuICAgICAgcmV0dXJuIFtdXHJcbiAgICB9XHJcbiAgICAvLyB1cGxvYWQgZnJvbSBjbGlwYm9hcmRcclxuICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxyXG4gICAgICAgIGlmIChpbWdQYXRoID09PSAnbm8gaW1hZ2UnKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIG5vdCBmb3VuZCBpbiBjbGlwYm9hcmQnKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9uY2UoSUJ1aWxkSW5FdmVudC5GQUlMRUQsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAvLyDliKDpmaQgcGljZ28g55Sf5oiQ55qE5Zu+54mH5paH5Lu277yM5L6L5aaCIGB+Ly5waWNnby8yMDIwMDYyMTIwNTcyMC5wbmdgXHJcbiAgICAgICAgICAgICAgZnMucmVtb3ZlKGltZ1BhdGgpLmNhdGNoKChlKSA9PiB7IHRoaXMubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLm9uY2UoJ2ZpbmlzaGVkJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xyXG4gICAgICAgICAgICAgIGZzLnJlbW92ZShpbWdQYXRoKS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KFtpbWdQYXRoXSlcclxuICAgICAgICAgIHJldHVybiBvdXRwdXRcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB1cGxvYWQgZnJvbSBwYXRoXHJcbiAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChpbnB1dClcclxuICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IEltZ0Zyb21QYXRoIGZyb20gJy4vcGF0aCdcclxuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXHJcblxyXG5jb25zdCBidWlsZEluVHJhbnNmb3JtZXJzOiBJUGljR29QbHVnaW4gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlZ2lzdGVyIChjdHg6IElQaWNHbykge1xyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXHJcbiJdLCJuYW1lcyI6WyJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwiY21kIiwicHJvZ3JhbSIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsaWFzIiwib3B0aW9uIiwiYWN0aW9uIiwicGx1Z2lucyIsInByb3h5IiwicmVnaXN0cnkiLCJvcHRpb25zIiwiaW5zdGFsbCIsImNhdGNoIiwiZSIsImxvZyIsImVycm9yIiwidW5pbnN0YWxsIiwidXBkYXRlIiwiY29uZmlnIiwicmFuZG9tU3RyaW5nR2VuZXJhdG9yIiwibGVuZ3RoIiwiY2hhcnMiLCJBcnJheSIsImZyb20iLCJtYXAiLCJjaGFyQXQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJqb2luIiwicmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIiwib2xkTmFtZSIsImN1c3RvbUZvcm1hdCIsImFmZml4RmlsZU5hbWUiLCJjb252ZXJzaW9uTWFwIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwidG9TdHJpbmciLCJzbGljZSIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicGF0aCIsImJhc2VuYW1lIiwiZXh0bmFtZSIsImRpZ2VzdCIsInV1aWR2NCIsInY0IiwicmVwbGFjZSIsIm5vdyIsInVuZGVmaW5lZCIsIk9iamVjdCIsImtleXMiLCJzb21lIiwiaXRlbSIsImluY2x1ZGVzIiwiZXh0IiwibmV3TmFtZSIsInJlZHVjZSIsImFjYyIsImN1ciIsIlJlZ0V4cCIsIl9yZXN1bHQiLCJrZXkiLCJjb3VudCIsIm1heCIsImRpcm5hbWUiLCJzcGxpdCIsInNlcCIsImEiLCJiIiwiaXNVcmwiLCJ1cmwiLCJ0ZXN0IiwiaXNVcmxFbmNvZGUiLCJkZWNvZGVVUkkiLCJoYW5kbGVVcmxFbmNvZGUiLCJlbmNvZGVVUkkiLCJnZXRJbWFnZVNpemUiLCJmaWxlIiwid2lkdGgiLCJoZWlnaHQiLCJ0eXBlIiwiaW1hZ2VTaXplIiwicmVhbCIsImdldEZTRmlsZSIsImFzeW5jIiwiZmlsZVBhdGgiLCJmaWxlTmFtZSIsImJ1ZmZlciIsImZzIiwicmVhZEZpbGUiLCJzdWNjZXNzIiwiX2EiLCJyZWFzb24iLCJnZXRVUkxGaWxlIiwidGltZW91dElkIiwicmVxdWVzdEZuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXMiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcCIsImRhdGEiLCJjbGVhclRpbWVvdXQiLCJ1cmxQYXRoIiwiVVJMIiwicGF0aG5hbWUiLCJzZWFyY2hQYXJhbXMiLCJnZXQiLCJzdGFydHNXaXRoIiwibWVzc2FnZSIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJnZXRQbHVnaW5OYW1lVHlwZSIsIm5hbWUiLCJpc1NpbXBsZU5hbWUiLCJuYW1lT3JQYXRoIiwiaXNBYnNvbHV0ZSIsInBsdWdpblBhdGgiLCJwcm9jZXNzIiwiY3dkIiwiZXhpc3RzU3luYyIsImhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSIsInNjb3BlIiwiZ2V0UHJvY2Vzc1BsdWdpbk5hbWUiLCJsb2dnZXIiLCJjb25zb2xlIiwiaGFuZGxlVW5peFN0eWxlUGF0aCIsIndhcm4iLCJnZXROb3JtYWxQbHVnaW5OYW1lIiwicmVtb3ZlUGx1Z2luVmVyc2lvbiIsInBhY2thZ2VKU09OUGF0aCIsInBvc2l4IiwicGtnIiwicmVhZEpTT05TeW5jIiwicGF0aFN0ciIsInJlZyIsIm1hdGNoQXJyIiwibWF0Y2giLCJjb25maWdCbGFja0xpc3QiLCJpc0NvbmZpZ0tleUluQmxhY2tMaXN0IiwiYmxhY2tJdGVtIiwiaXNJbnB1dENvbmZpZ1ZhbGlkIiwiaXNBcnJheSIsInNhZmVQYXJzZSIsInN0ciIsIkpTT04iLCJwYXJzZSIsImZvcmNlTnVtYmVyIiwibnVtIiwiaXNOYU4iLCJOdW1iZXIiLCJpc0RldiIsImVudiIsIk5PREVfRU5WIiwiZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCIsIl9fZGlybmFtZSIsIkFkZFdhdGVybWFyayIsImltZyIsIndhdGVybWFya1R5cGUiLCJkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgiLCJpc0Z1bGxTY3JlZW5XYXRlcm1hcmsiLCJ3YXRlcm1hcmtEZWdyZWUiLCJ0ZXh0Iiwid2F0ZXJtYXJrRm9udFBhdGgiLCJ3YXRlcm1hcmtTY2FsZVJhdGlvIiwid2F0ZXJtYXJrQ29sb3IiLCJ3YXRlcm1hcmtJbWFnZVBhdGgiLCJwb3NpdGlvbiIsImltYWdlIiwic2hhcnAiLCJhbmltYXRlZCIsImltZ1dpZHRoIiwibWV0YWRhdGEiLCJ3YXRlcm1hcmsiLCJ0b0J1ZmZlciIsImNvbG9yIiwiZm9udEZhbWlseSIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJmaWxsIiwidGV4dFNWRyIsIlRleHRUb1NWRyIsImxvYWRTeW5jIiwiZ2V0U1ZHIiwiQnVmZmVyIiwidGV4dDJTVkciLCJ3YXRlcm1hcmtXaWR0aCIsIndhdGVybWFya0hlaWdodCIsImdldFNpemUiLCJ3YXRlcm1hcmtSZXNpemVXaWR0aCIsIndhdGVybWFya1Jlc2l6ZUhlaWdodCIsInJlc2l6ZSIsImZpdCIsInJvdGF0ZSIsImJhY2tncm91bmQiLCJyIiwiZyIsImFscGhhIiwiY3JlYXRlV2F0ZXJtYXJrIiwiY29tcG9zaXRlIiwiaW5wdXQiLCJncmF2aXR5IiwidGlsZSIsInZhbGlkUGFyYW0iLCJwYXJhbXMiLCJldmVyeSIsInBhcmFtIiwiYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QiLCJpbWFnZUV4dExpc3QiLCJpbWFnZUFkZFdhdGVyTWFyayIsIndhdGVybWFya1RleHQiLCJ3YXRlcm1hcmtQb3NpdGlvbiIsImZvcm1hdE9wdGlvbnMiLCJxdWFsaXR5IiwiaXNDb252ZXJ0IiwiY29udmVydEZvcm1hdCIsImlzUmVTaXplIiwicmVTaXplSGVpZ2h0IiwicmVTaXplV2lkdGgiLCJza2lwUmVTaXplT2ZTbWFsbEltZyIsImlzUmVTaXplQnlQZXJjZW50IiwicmVTaXplUGVyY2VudCIsImlzUm90YXRlIiwiaXNGbGlwIiwiaXNGbG9wIiwicm90YXRlRGVncmVlIiwicGljQmVkIiwiaW1hZ2VQcm9jZXNzIiwicmF3Rm9ybWF0IiwidG9Mb3dlckNhc2UiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJyb3VuZCIsInNjYWxlUmF0aW8iLCJmbGlwIiwiZmxvcCIsIm5ld0Zvcm1hdCIsInRvRm9ybWF0IiwiZm9ybWF0IiwiaW1hZ2VGb3JtYXRMaXN0IiwibmVlZEFkZFdhdGVybWFyayIsIndhdGVybWFya09wdGlvbnMiLCJmaWxlRXh0IiwiaXNBZGRXYXRlcm1hcmsiLCJuZWVkQ29tcHJlc3MiLCJjb21wcmVzc09wdGlvbnMiLCJub3JtYWxpemVkRXh0IiwicmVtb3ZlRXhpZiIsInVwbG9hZCIsImFyZ3VtZW50cyIsImlucHV0TGlzdCIsImZpbHRlciIsImV4aXN0IiwiY29tcHJlc3MiLCJ1c2VyQ29uZmlnIiwiZ2V0Q29uZmlnIiwiaTE4biIsInRyYW5zbGF0ZSIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImNob2ljZXMiLCJpc1JlbW92ZUV4aWYiLCJyZW5hbWUiLCJlbmFibGUiLCJoYW5kbGVDb25maWciLCJwcm9tcHRzIiwibW9kdWxlIiwiYW5zd2VyIiwiaW5xdWlyZXIiLCJwcm9tcHQiLCJjb25maWdOYW1lIiwic2F2ZUNvbmZpZyIsInNldHRpbmciLCJidWlsZGluIiwiaGVscGVyIiwiZ2V0SWRMaXN0IiwicGx1Z2luTG9hZGVyIiwiZ2V0UGx1Z2luIiwiZ2V0RnVsbExpc3QiLCJfYiIsInBsdWdpbiIsImluZm8iLCJhcmd2IiwidXNlIiwidXBsb2FkZXIiLCJ0cmFuc2Zvcm1lciIsInB1c2giLCJmb3JFYWNoIiwicGljZ29QbHVnaW5zIiwic2V0Q29uZmlnIiwiZ2VuZXJhdGUiLCJvcHRzIiwiZ2V0T3B0aW9ucyIsInRtcCIsInNvdXJjZSIsImFuc3dlcnMiLCJfZmlsZXMiLCJnbG9iYnkiLCJkb3QiLCJnbG9iIiwiZmlsdGVycyIsImZpbGVzIiwicmVuZGVyIiwid3JpdGVGaWxlVHJlZSIsImRlc3QiLCJjb21wbGV0ZSIsImNvbXBsZXRlTWVzc2FnZSIsImV4cCIsImZuIiwiRnVuY3Rpb24iLCJzdHJpbmdpZnkiLCJ0ZW1wbGF0ZVBhdGgiLCJvcHRpb25zUGF0aCIsInJlcXVpcmUiLCJmaWxlVHJlZSIsInJlYWRGaWxlU3luYyIsImNvbnRlbnQiLCJlanMiLCJpc0J1ZmZlciIsImRpciIsImVuc3VyZURpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwicnVuIiwib2ZmbGluZSIsInRlbXBsYXRlIiwiaGFzU2xhc2giLCJkb3dubG9hZEFuZEdlbmVyYXRlIiwicm0iLCJzeW5jIiwiZG93bmxvYWQiLCJjbG9uZSIsImVyciIsImluaXQiLCJwcm9qZWN0IiwiaW5QbGFjZSIsImhvbWVkaXIiLCJvayIsIm9uIiwiY2hhbGsiLCJncmF5IiwibGFuZyIsImxpc3QiLCJnZXRMYW5ndWFnZUxpc3QiLCJzZXRMYW5ndWFnZSIsIkxpZmVjeWNsZVBsdWdpbnMiLCJjb25zdHJ1Y3RvciIsInRoaXMiLCJNYXAiLCJwbHVnaW5JZE1hcCIsInJlZ2lzdGVyIiwiaWQiLCJUeXBlRXJyb3IiLCJoYXMiLCJzZXQiLCJjdXJyZW50UGx1Z2luIiwidW5yZWdpc3RlciIsInBsdWdpbk5hbWUiLCJwbHVnaW5MaXN0IiwiZGVsZXRlIiwiZ2V0TmFtZSIsImdldExpc3QiLCJ2YWx1ZXMiLCJzZXRDdXJyZW50UGx1Z2luTmFtZSIsIkNvbW1hbmRlciIsIkNvbW1hbmQiLCJ2ZXJzaW9uIiwiZGVidWciLCJzaWxlbnQiLCJhcmdzIiwiZXhpdCIsImN1cnJlbnRQbHVnaW5OYW1lIiwibG9hZENvbW1hbmRzIiwiSUxvZ1R5cGUiLCJJQnVpbGRJbkV2ZW50IiwiSUJ1c0V2ZW50IiwiTG9nZ2VyIiwibGV2ZWwiLCJoYW5kbGVMb2ciLCJtc2ciLCJsb2dMZXZlbCIsImNoZWNrTG9nTGV2ZWwiLCJsb2dIZWFkZXIiLCJ0b1VwcGVyQ2FzZSIsImxvZ1BhdGgiLCJiYXNlRGlyIiwicmVzdWx0IiwiY2hlY2tMb2dGaWxlSXNMYXJnZSIsImlzTGFyZ2UiLCJ3YXJuaW5nTXNnIiwieWVsbG93IiwicmVjcmVhdGVMb2dGaWxlIiwidW5zaGlmdCIsImhhbmRsZVdyaXRlTG9nIiwibG9nRmlsZVNpemUiLCJzdGF0U3luYyIsInNpemUiLCJsb2dGaWxlU2l6ZUxpbWl0IiwidW5saW5rU3luYyIsImNyZWF0ZUZpbGVTeW5jIiwiZGF5anMiLCJFcnJvciIsInV0aWwiLCJzdGFjayIsImFwcGVuZEZpbGVTeW5jIiwiTGlmZWN5Y2xlIiwiRXZlbnRFbWl0dGVyIiwic3VwZXIiLCJ0dGZMaW5rIiwidGVtcEZpbGVQYXRoIiwiaW1nRmxlUGF0aCIsImVtcHR5RGlyU3luYyIsInR0ZlBhdGgiLCJvdXRwdXREaXIiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJheGlvcyIsImNvbmZpZ1BhdGgiLCJvdXRwdXQiLCJyYXdJbnB1dCIsIlJlcXVlc3QiLCJWRVJTSU9OIiwiR1VJX1ZFUlNJT04iLCJiaW5kIiwicmVtb3ZlQ29uZmlnIiwidW5zZXRDb25maWciLCJhZGRMaXN0ZW5lciIsIm9uY2UiLCJyZW1vdmVMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImxpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImVtaXQiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0IiwicmF3SW5wdXRQYXRoIiwiY2xvbmVEZWVwIiwid2F0ZXJtYXJrTXNnIiwiY29tcHJlc3NNc2ciLCJhbGxTZXR0bGVkIiwiaW5kZXgiLCJ0cmFuc2Zvcm1lZEJ1ZmZlciIsImRvd25sb2FkVFRGIiwiX2MiLCJfZCIsIm5ld0V4dCIsIl9lIiwiX2YiLCJ0ZW1wRmlsZSIsImdldFRpbWUiLCJoZWljQnVmZmVyIiwiaGVpY1Jlc3VsdCIsImhlaWNDb252ZXJ0IiwidGVtcEhlaWNDb252ZXJ0RmlsZSIsIl9nIiwiYmVmb3JlVHJhbnNmb3JtIiwiZG9UcmFuc2Zvcm0iLCJyZW5hbWVDb25maWciLCJiZWZvcmVVcGxvYWQiLCJkb1VwbG9hZCIsImFmdGVyVXBsb2FkIiwiRkFJTEVEIiwiVVBMT0FEX1BST0dSRVNTIiwiQkVGT1JFX1RSQU5TRk9STSIsImhhbmRsZVBsdWdpbnMiLCJiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zIiwiY3VycmVudFRyYW5zZm9ybWVyIiwiQkVGT1JFX1VQTE9BRCIsImJlZm9yZVVwbG9hZFBsdWdpbnMiLCJvdXRwdXRJbWciLCJBRlRFUl9VUExPQUQiLCJhZnRlclVwbG9hZFBsdWdpbnMiLCJpc0VuY29kZU91dHB1dFVSTCIsImkiLCJpbWdVcmwiLCJiYXNlNjRJbWFnZSIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJBdXRob3JpemF0aW9uIiwiZm9ybURhdGEiLCJzbWZpbGUiLCJ2YWx1ZSIsImZpbGVuYW1lIiwic3NsIiwic21tc0NvbmZpZyIsImltZ0xpc3QiLCJwb3N0Q29uZmlnIiwidG9rZW4iLCJib2R5IiwiY29kZSIsImhhc2giLCJpbWFnZXMiLCJOT1RJRklDQVRJT04iLCJ0aXRsZSIsInByZWZpeCIsImdlbmVyYXRlU2lnbmF0dXJlIiwic2VjcmV0SWQiLCJzZWNyZXRLZXkiLCJhcHBJZCIsImJ1Y2tldCIsInNpZ25hdHVyZSIsInNpZ25UaW1lIiwidG9kYXkiLCJzaWduS2V5IiwiY3JlYXRlSG1hYyIsImVuZHBvaW50IiwiYXJlYSIsImh0dHBTdHJpbmciLCJzdHJpbmdUb1NpZ24iLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsImNvbmNhdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIkhvc3QiLCJtaW1lIiwibG9va3VwIiwib3AiLCJmaWxlY29udGVudCIsInRjWXVuT3B0aW9ucyIsImN1c3RvbVVybCIsInVzZVY0Iiwic3RhdHVzQ29kZSIsIm9wdGlvblVybCIsInNsaW0iLCJzb3VyY2VfdXJsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwidGlwcyIsInJlcG8iLCJqc29uIiwiYnJhbmNoIiwiZ2l0aHViT3B0aW9ucyIsInVwbG9hZFBhdGgiLCJkb3dubG9hZF91cmwiLCJzaGEiLCJpbWdCYXNlNjQiLCJzZWxlY3RBcmVhIiwiZ2V0VG9rZW4iLCJxaW5pdU9wdGlvbnMiLCJhY2Nlc3NLZXkiLCJtYWMiLCJxaW5pdSIsImF1dGgiLCJNYWMiLCJycyIsIlB1dFBvbGljeSIsInVwbG9hZFRva2VuIiwiYmFzZVVybCIsInVybE9wdGlvbnMiLCJyZXNwb25zZSIsImNsaWVudElkIiwidXNlcm5hbWUiLCJhY2Nlc3NUb2tlbiIsImZvcm1hdEFjY2Vzc1Rva2VuIiwiYWxidW0iLCJhdXRob3JpemF0aW9uIiwicmVxdWVzdE9wdGlvbnMiLCJpbml0UGFnZXMiLCJhbGJ1bUhhc2giLCJnZXRBbGJ1bUhhc2hPcHRpb25zIiwidGltZW91dCIsImFsYnVtTGlzdCIsImltZ3VyT3B0aW9ucyIsImxpbmsiLCJkZWxldGVoYXNoIiwiZGF0ZSIsInRvVVRDU3RyaW5nIiwic2lnblN0cmluZyIsImFjY2Vzc0tleVNlY3JldCIsImFjY2Vzc0tleUlkIiwiYWxpWXVuT3B0aW9ucyIsIm9wZXJhdG9yIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJwYXNzd29yZCIsImdldEFudGlMZWVjaFBhcmFtIiwiYW50aUxlZWNoVG9rZW4iLCJleHBpcmVUaW1lIiwidXJpIiwiZXhwaXJlIiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ1cHl1bk9wdGlvbnMiLCJzdWZmaXgiLCJ1cHQiLCJ3ZWJkYXZwbGlzdE9wdGlvbnMiLCJob3N0Iiwic3NsRW5hYmxlZCIsImF1dGhUeXBlIiwid2VicGF0aCIsImNsaWVudE9wdGlvbnMiLCJtYXhCb2R5TGVuZ3RoIiwibWF4Q29udGVudExlbmd0aCIsIkF1dGhUeXBlIiwiRGlnZXN0IiwiY2xpZW50IiwiY3JlYXRlQ2xpZW50IiwicGF0aFRvQ3JlYXRlIiwiY3JlYXRlRGlyZWN0b3J5IiwicHV0RmlsZUNvbnRlbnRzIiwib3ZlcndyaXRlIiwiaW1nVGVtcFBhdGgiLCJpbWdUZW1wRmlsZVBhdGgiLCJnYWxsZXJ5UGF0aCIsImxvY2FsQ29uZmlnIiwid2ViUGF0aCIsImNvcHlGaWxlU3luYyIsIlNTSENsaWVudCIsIl9pc0Nvbm5lY3RlZCIsImluc3RhbmNlIiwiX2luc3RhbmNlIiwiX2NsaWVudCIsIk5vZGVTU0giLCJjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgiLCJwcml2YXRlS2V5IiwicGFzc3BocmFzZSIsImxvZ2luSW5mbyIsInByaXZhdGVLZXlQYXRoIiwiY29ubmVjdCIsInBvcnQiLCJsb2NhbCIsInJlbW90ZSIsIm1rZGlyIiwicHV0RmlsZSIsImZpbGVNb2RlIiwic2NyaXB0IiwiZXhlYyIsImRpclBhdGgiLCJpc0Nvbm5lY3RlZCIsImRpcmVjdG9yeU1vZGUiLCJkaXJNb2RlIiwiZGlycyIsImN1cnJlbnRQYXRoIiwidXNlciIsImdyb3VwIiwiX3VzZXIiLCJfZ3JvdXAiLCJleGVjQ29tbWFuZCIsImNsb3NlIiwiZGlzcG9zZSIsInNmdHBwbGlzdENvbmZpZyIsInVwbG9hZFRlbXBQYXRoIiwicmVtb3RlUGF0aCIsImZpbGVVc2VyIiwiY2hvd24iLCJtb3ZlU3luYyIsInRnT3B0aW9ucyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZW1vdmUiLCJzcmMiLCJidWlsZEluVXBsb2FkZXJzIiwiYWxpWXVuVXBsb2FkZXIiLCJ0Y1l1blVwbG9hZGVyIiwiU01NU1VwbG9hZGVyIiwiZ2l0aHViVXBsb2FkZXIiLCJxaW5pdVVwbG9hZGVyIiwiaW1ndXJVcGxvYWRlciIsInVwWXVuVXBsb2FkZXIiLCJ3ZWJkYXZwbGlzdFVwbG9hZGVyIiwibG9jYWxVcGxvYWRlciIsInNmdHBVcGxvYWRlciIsInRlbGVncmFwaFVwbG9hZGVyIiwiZ2V0SW1nU2l6ZSIsIkltZ0Zyb21QYXRoIiwicmVzdWx0cyIsImltZ1NpemUiLCJJbWdGcm9tQmFzZTY0IiwiUGx1Z2luTG9hZGVyIiwiZnVsbExpc3QiLCJTZXQiLCJwbHVnaW5NYXAiLCJwYWNrYWdlUGF0aCIsInJlcG9zaXRvcnkiLCJsaWNlbnNlIiwicmVzb2x2ZVBsdWdpbiIsImJhc2VkaXIiLCJsb2FkIiwicGx1Z2luRGlyIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJtb2R1bGVzIiwicmVnaXN0ZXJQbHVnaW4iLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJ1bnJlZ2lzdGVyUGx1Z2luIiwiaGFzUGx1Z2luIiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwic3Bhd24iLCJzdGRvdXQiLCJ0cmltIiwiaW1nUGF0aCIsInNob3VsZEtlZXBBZnRlclVwbG9hZGluZyIsImV2ZW50QnVzIiwiaHR0cHNBZ2VudCIsImh0dHBzIiwiQWdlbnQiLCJtYXhWZXJzaW9uIiwibWluVmVyc2lvbiIsImFwcGVuZEZvcm1EYXRhIiwiZm9ybSIsImFwcGVuZCIsInJlc3BvbnNlSW50ZXJjZXB0b3IiLCJhc3NpZ24iLCJzdGF0dXMiLCJyZXNwb25zZUVycm9ySGFuZGxlciIsImVycm9yT2JqIiwiQ09ORklHX0NIQU5HRSIsImhhbmRsZVByb3h5IiwicHJveHlPcHRpb25zIiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsIkluZmluaXR5IiwidHVubmVsIiwiaHR0cHNPdmVySHR0cCIsImNyZWF0ZSIsImludGVyY2VwdG9ycyIsIm9wdCIsIl9faXNPbGRPcHRpb25zIiwiRm9ybURhdGEiLCJnZXRIZWFkZXJzIiwicXMiLCJyZXF1ZXN0SW50ZXJjZXB0b3IiLCJvYmoiLCJDb250ZW50VHlwZSIsIkRCIiwiZGIiLCJKU09OU3RvcmUiLCJyZWFkIiwiZmx1c2giLCJ1bnNldCIsIlBsdWdpbkhhbmRsZXIiLCJpbnN0YWxsZWRQbHVnaW5zIiwicHJvY2Vzc1BsdWdpbnMiLCJoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyIsInBrZ05hbWUiLCJmdWxsTmFtZUxpc3QiLCJmdWxsTmFtZSIsInBrZ05hbWVMaXN0Iiwid2hlcmUiLCJucG0iLCJwaXBlIiwic3RkZXJyIiwibGFuZ3VhZ2VMaXN0IiwiVVBMT0FEX0ZBSUxFRCIsIkNIRUNLX1NFVFRJTkdTIiwiQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksiLCJVUExPQURfRkFJTEVEX1JFQVNPTiIsIlNFUlZFUl9FUlJPUiIsIkFVVEhfRkFJTEVEIiwiUElDQkVEX1NNTVMiLCJQSUNCRURfU01NU19UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfTE9DQUwiLCJQSUNCRURfTE9DQUxfUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfTE9DQUxfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX1dFQlBBVEgiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIIiwiUElDQkVEX0FMSUNMT1VEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCIsIlBJQ0JFRF9BTElDTE9VRF9CVUNLRVQiLCJQSUNCRURfQUxJQ0xPVURfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9BTElDTE9VRF9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTiIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9URUxFR1JBUEgiLCJQSUNCRURfSU1HVVIiLCJQSUNCRURfSU1HVVJfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfVVNFUk5BTUUiLCJQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX0FMQlVNIiwiUElDQkVEX0lNR1VSX1BST1hZIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTiIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfVVBZVU4iLCJQSUNCRURfVVBZVU5fQlVDS0VUIiwiUElDQkVEX1VQWVVOX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX1BBU1NXT1JEIiwiUElDQkVEX1VQWVVOX1BBVEgiLCJQSUNCRURfVVBZVU5fVVJMIiwiUElDQkVEX1VQWVVOX09QVElPTlMiLCJQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTiIsIlBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRSIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1QiLCJQSUNCRURfU0ZUUFBMSVNUX0hPU1QiLCJQSUNCRURfU0ZUUFBMSVNUX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFIiwiUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSIiwiUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERSIsIkJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMSVAiLCJCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRyIsIkJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRiIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUYiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQiLCJlbiIsIkkxOG5NYW5hZ2VyIiwib2JqZWN0QWRhcHRlciIsIk9iamVjdEFkYXB0ZXIiLCJsYW5ndWFnZSIsIkkxOG4iLCJhZGFwdGVyIiwiZGVmYXVsdExhbmd1YWdlIiwibG9hZE91dHRlckkxOG4iLCJpMThuRm9sZGVyIiwiZ2V0T3V0dGVySTE4bkZvbGRlciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImlzRmlsZSIsImVuZHNXaXRoIiwiaTE4bkZpbGVQYXRoIiwiaTE4bkZpbGUiLCJpMThuRmlsZU9iaiIsInlhbWwiLCJwYXRoRXhpc3RzU3luYyIsImFkZExvY2FsZSIsImxvY2FsZXMiLCJvcmlnaW5Mb2NhbGVzIiwiZ2V0TG9jYWxlIiwibmV3TG9jYWxlcyIsIm1lcmdlIiwic2V0TG9jYWxlIiwiYWRkTGFuZ3VhZ2UiLCJQaWNHbyIsIl9wbHVnaW5Mb2FkZXIiLCJpbml0Q29uZmlnUGF0aCIsImluaXRDb25maWciLCJlbnN1cmVGaWxlU3luYyIsIl9jb25maWciLCJ1cGxvYWRlcnMiLCJsaWZlY3ljbGUiLCJyZWdpc3RlckNvbW1hbmRzIiwicHJvcE5hbWUiLCJzdGFydCJdLCJtYXBwaW5ncyI6InduQ0FFQSxNQUFNQSxHQUF5QixDQUM3QkMsT0FBU0MsSUFFUCxNQUFNQyxFQUFNRCxFQUFJQyxJQUNoQkEsRUFBSUMsUUFDREMsUUFBUSx3QkFDUkMsWUFBWSx3QkFDWkMsTUFBTSxPQUNOQyxPQUFPLHNCQUF1QixvQ0FDOUJBLE9BQU8sNEJBQTZCLDRDQUNwQ0MsUUFBTyxDQUFDQyxFQUFtQk4sS0FDMUIsTUFBTU8sTUFBRUEsRUFBS0MsU0FBRUEsR0FBYVIsRUFDdEJTLEVBQVUsQ0FDZEYsTUFBQUEsRUFDQUMsU0FBQUEsR0FFRlYsRUFBSUYsY0FBY2MsUUFBUUosRUFBU0csR0FBU0UsT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsU0FFN0ViLEVBQUlDLFFBQ0RDLFFBQVEsMEJBQ1JFLE1BQU0sTUFDTkQsWUFBWSwwQkFDWkcsUUFBUUMsSUFDUFIsRUFBSUYsY0FBY21CLFVBQVVULEdBQVNLLE9BQU9DLElBQVFkLEVBQUllLElBQUlDLE1BQU1GLFNBRXRFYixFQUFJQyxRQUNEQyxRQUFRLHVCQUNSQyxZQUFZLHVCQUNaRSxPQUFPLHNCQUF1Qiw0QkFDOUJBLE9BQU8sNEJBQTZCLG9DQUNwQ0MsUUFBTyxDQUFDQyxFQUFtQk4sS0FDMUIsTUFBTU8sTUFBRUEsRUFBS0MsU0FBRUEsR0FBYVIsRUFDdEJTLEVBQVUsQ0FDZEYsTUFBQUEsRUFDQUMsU0FBQUEsR0FFRlYsRUFBSUYsY0FBY29CLE9BQU9WLEVBQVNHLEdBQVNFLE9BQU9DLElBQWVkLEVBQUllLElBQUlDLE1BQU1GLFdDcENqRkssR0FBa0IsQ0FDdEJwQixPQUFTQyxJQUNLQSxFQUFJQyxJQUNaQyxRQUNESSxPQUFPLHNCQUF1QixxQkNZL0IsU0FBVWMsR0FBdUJDLEdBQ3JDLE1BQU1DLEVBQVEsaUVBQ2QsT0FBT0MsTUFBTUMsS0FBSyxDQUFFSCxPQUFBQSxJQUFVSSxLQUFJLElBQU1ILEVBQU1JLE9BQU9DLEtBQUtDLE1BQU1ELEtBQUtFLFNBQVdQLEVBQU1ELFdBQVVTLEtBQUssYUFXdkZDLEdBQWdDQyxFQUFpQkMsRUFBc0JDLEdBQ3JGLE1BQU1DLEVBQThDLENBQ2xELE1BQU8sS0FBTSxJQUFJQyxNQUFPQyxjQUFjQyxXQUN0QyxNQUFPLEtBQU0sSUFBSUYsTUFBT0MsY0FBY0MsV0FBV0MsTUFBTSxHQUN2RCxNQUFPLElBQXdELE1BQWpELElBQUlILE1BQU9JLFdBQWEsR0FBR0YsV0FBV2pCLE9BQWUsS0FBSSxJQUFJZSxNQUFPSSxXQUFhLE1BQU8sSUFBSUosTUFBT0ksV0FBYSxHQUFHRixXQUNqSSxNQUFPLElBQWlELEtBQTNDLElBQUlGLE1BQU9LLFVBQVVILFdBQVdqQixPQUFlLEtBQUksSUFBSWUsTUFBT0ssYUFBYyxJQUFJTCxNQUFPSyxVQUFVSCxXQUM5RyxNQUFPLElBQWtELEtBQTVDLElBQUlGLE1BQU9NLFdBQVdKLFdBQVdqQixPQUFlLEtBQUksSUFBSWUsTUFBT00sY0FBZSxJQUFJTixNQUFPTSxXQUFXSixXQUNqSCxNQUFPLElBQW9ELEtBQTlDLElBQUlGLE1BQU9PLGFBQWFMLFdBQVdqQixPQUFlLEtBQUksSUFBSWUsTUFBT08sZ0JBQWlCLElBQUlQLE1BQU9PLGFBQWFMLFdBQ3ZILE1BQU8sSUFBb0QsS0FBOUMsSUFBSUYsTUFBT1EsYUFBYU4sV0FBV2pCLE9BQWUsS0FBSSxJQUFJZSxNQUFPUSxnQkFBaUIsSUFBSVIsTUFBT1EsYUFBYU4sV0FDdkgsUUFBUyxJQUFNTyxFQUFBQSxRQUFPQyxXQUFXLE9BQU81QixPQUFPNkIsVUFBS0MsU0FBU2hCLEVBQVNlLEVBQUFBLFFBQUtFLFFBQVFqQixLQUFXa0IsT0FBTyxPQUNyRyxXQUFZLElBQU1MLEVBQU0sUUFBQ0MsV0FBVyxPQUFPNUIsT0FBTzZCLEVBQUFBLFFBQUtDLFNBQVNoQixFQUFTZSxFQUFJLFFBQUNFLFFBQVFqQixLQUFXa0IsT0FBTyxPQUFPWCxNQUFNLEVBQUcsSUFDeEgsV0FBWSxJQUFNbkIsR0FBc0IsSUFDeEMsV0FBWSxJQUFNQSxHQUFzQixJQUN4QyxhQUFjLElBQU1jLEVBQWdCYSxFQUFBQSxRQUFLQyxTQUFTZCxFQUFlYSxFQUFBQSxRQUFLRSxRQUFRZixJQUFrQmEsRUFBSSxRQUFDQyxTQUFTaEIsRUFBU2UsRUFBQUEsUUFBS0UsUUFBUWpCLElBQ3BJLFNBQVUsSUFBTW1CLEVBQU1DLEtBQUdDLFFBQVEsS0FBTSxJQUN2QyxjQUFlLElBQU0xQixLQUFLQyxNQUFNUSxLQUFLa0IsTUFBUSxLQUFNaEIsWUFFckQsUUFBcUJpQixJQUFqQnRCLElBQWdDdUIsT0FBT0MsS0FBS3RCLEdBQWV1QixNQUFLQyxHQUFRMUIsRUFBYTJCLFNBQVNELE9BQVcxQixFQUFhMkIsU0FBUyxlQUNqSSxPQUFPNUIsRUFFVCxNQUFNNkIsRUFBTWQsRUFBQUEsUUFBS0UsUUFBUWpCLEdBQ3pCLElBQUk4QixFQUFVTixPQUFPQyxLQUFLdEIsR0FBZTRCLFFBQU8sQ0FBQ0MsRUFBS0MsSUFDN0NELEVBQUlYLFFBQVEsSUFBSWEsT0FBT0QsRUFBSyxLQUFNOUIsRUFBYzhCLE9BQ3REaEMsR0FBZ0I0QixFQU9uQixPQU5BQyxFQUFVQSxFQUFRVCxRQUFRLDZCQUE2QixDQUFDYyxFQUFTQyxFQUFLQyxLQUNwRUEsRUFBUTFDLEtBQUsyQyxJQUFJLEVBQUdELEdBQVMsR0FHN0IsT0FGY3RCLEVBQUksUUFBQ3dCLFFBQVF2QyxHQUFTd0MsTUFBTXpCLEVBQUFBLFFBQUswQixLQUNuQ2xDLE1BQU0sRUFBSThCLEdBQU9OLFFBQU8sQ0FBQ1csRUFBR0MsSUFBTSxHQUFHRCxLQUFLQyxNQUMzQ3RCLFFBQVEsS0FBTSxPQUVwQlMsRUFHRixNQUFNYyxHQUFTQyxHQUF5QixlQUFpQkMsS0FBS0QsR0FFeERFLEdBQWVGLElBQzFCQSxFQUFNQSxHQUFPLEdBQ2IsSUFFRSxPQUFPQSxJQUFRRyxVQUFVSCxHQUN6QixNQUFPL0QsR0FDUCxPQUFPLElBR0VtRSxHQUFtQkosSUFDekJFLEdBQVlGLEtBQ2ZBLEVBQU1LLFVBQVVMLElBRVhBLEdBR0lNLEdBQWdCQyxJQUMzQixJQUNFLE1BQU1DLE1BQUVBLEVBQVEsRUFBQ0MsT0FBRUEsRUFBUyxFQUFDQyxLQUFFQSxHQUFTQyxZQUFVSixHQUVsRCxNQUFPLENBQ0xLLE1BQU0sRUFDTkosTUFBQUEsRUFDQUMsT0FBQUEsRUFDQXJDLFFBTGNzQyxFQUFPLElBQUlBLElBQVMsUUFPcEMsTUFBT3pFLEdBRVAsTUFBTyxDQUNMMkUsTUFBTSxFQUNOSixNQUFPLElBQ1BDLE9BQVEsSUFDUnJDLFFBQVMsVUFLRnlDLEdBQVlDLE1BQU9DLElBQzlCLElBQ0UsTUFBTyxDQUNMM0MsUUFBU0YsRUFBQUEsUUFBS0UsUUFBUTJDLEdBQ3RCQyxTQUFVOUMsRUFBQUEsUUFBS0MsU0FBUzRDLEdBQ3hCRSxhQUFjQyxFQUFBQSxRQUFHQyxTQUFTSixHQUMxQkssU0FBUyxHQUVYLE1BQU1DLEdBQ04sTUFBTyxDQUNMQyxPQUFRLGFBQWFQLFVBQ3JCSyxTQUFTLEtBS0ZHLEdBQWFULE1BQU9kLEVBQWE3RSxLQUU1QyxJQUFJcUcsRUFESnhCLEVBQU1JLEdBQWdCSixHQUV0QixNQUFNeUIsRUFBWSxJQUFJQyxTQUFpQyxDQUFDQyxFQUFTQyxLQUMvRCxpQkFDRSxJQUNFLE1BQU1DLFFBQVkxRyxFQUFJMkcsUUFBUSxDQUM1QkMsT0FBUSxVQUNSL0IsRUFDQWdDLHlCQUF5QixFQUN6QkMsYUFBYyxnQkFFYkMsTUFBTUMsR0FDRUEsRUFBS0MsT0FFaEJDLGFBQWFiLEdBQ2IsTUFBTWMsRUFBVSxJQUFJQyxFQUFBQSxJQUFJdkMsR0FBS3dDLFNBQzdCLElBQUlwRSxFQUFVLEdBQ2QsSUFFRUEsRUFEa0IsSUFBSW1FLEVBQUFBLElBQUl2QyxHQUFLeUMsYUFDWEMsSUFBSSxXQUFheEUsRUFBQUEsUUFBS0UsUUFBUWtFLElBQVksR0FDOUQsTUFBT25HLEdBQ1BpQyxFQUFVRixFQUFBQSxRQUFLRSxRQUFRa0UsSUFBWSxJQUVoQ2xFLEVBQVF1RSxXQUFXLE1BQVF2RSxJQUM5QkEsRUFBVSxJQUFJQSxLQUVoQnVELEVBQVEsQ0FDTlYsT0FBUVksRUFDUmIsU0FBVTlDLEVBQUFBLFFBQUtDLFNBQVNtRSxHQUN4QmxFLFFBQUFBLEVBQ0FnRCxTQUFTLElBRVgsTUFBT2pGLEdBQ1BrRyxhQUFhYixHQUNiRyxFQUFRLENBQ05QLFNBQVMsRUFFVEUsT0FBUSxXQUFXdEIsWUFBNEIsVUFBZDdELE1BQUFBLE9BQUssRUFBTEEsRUFBT3lHLGVBQU8sSUFBQXZCLEVBQUFBLEVBQUksU0FsQ3pELEdBcUNLckYsTUFBTTRGLE1BRVBpQixFQUFpQixJQUFJbkIsU0FBa0NDLElBQzNESCxFQUFZc0IsWUFBVyxLQUNyQm5CLEVBQVEsQ0FDTlAsU0FBUyxFQUNURSxPQUFRLFdBQVd0QixnQkFFcEIsUUFFTCxPQUFPMEIsUUFBUXFCLEtBQUssQ0FBQ3RCLEVBQVdvQixLQVlyQkcsR0FBcUJDLEdBQzVCLHlCQUF5QmhELEtBQUtnRCxHQUN6QixRQUNFQSxFQUFLTixXQUFXLGlCQUNsQixTQUNFTyxHQUFhRCxHQUNmLFNBRUYsVUFVSUMsR0FBZ0JDLElBQzNCLEdBQUlqRixFQUFJLFFBQUNrRixXQUFXRCxHQUNsQixPQUFPLEVBRVQsTUFBTUUsRUFBYW5GLEVBQUFBLFFBQUtqQixLQUFLcUcsUUFBUUMsTUFBT0osR0FDNUMsT0FBSWpDLEVBQUUsUUFBQ3NDLFdBQVdILE1BR2RGLEVBQVdwRSxTQUFTLE9BQVFvRSxFQUFXcEUsU0FBUyxRQTZCekMwRSxHQUEyQixDQUFDUixFQUFjUyxFQUFRLEtBQ3pEQSxFQUNLLElBQUlBLGtCQUFzQlQsSUFFMUIsZ0JBQWdCQSxJQWNkVSxHQUF1QixDQUFDUixFQUFvQlMsRUFBNEJDLFdBRW5GLE9BRHVCYixHQUFrQkcsSUFFdkMsSUFBSyxTQUNMLElBQUssUUFDSCxPQUFPQSxFQUNULElBQUssU0FDSCxPQUFPTSxHQUF5Qk4sR0FDbEMsUUFBUyxDQUdQLElBQUlFLEVBQWFGLEVBQ2pCLE9BQUlqRixFQUFBQSxRQUFLa0YsV0FBV0QsSUFBZWpDLEVBQUFBLFFBQUdzQyxXQUFXTCxHQUN4Q1csR0FBb0JULElBRzdCQSxFQUFhbkYsRUFBSSxRQUFDakIsS0FBS3FHLFFBQVFDLE1BQU9KLEdBQ2xDakMsRUFBRSxRQUFDc0MsV0FBV0gsR0FDVFMsR0FBb0JULElBRzdCTyxFQUFPRyxLQUFLLHFCQUFxQlosS0FDMUIsUUFpQkFhLEdBQXNCLENBQUNiLEVBQW9CUyxFQUE0QkMsaUJBRWxGLE9BRHVCYixHQUFrQkcsSUFFdkMsSUFBSyxTQUNILE9BQU9jLEdBQW9CZCxHQUM3QixJQUFLLFFBQ0gsT0FBT2MsR0FBb0JkLEdBQVksR0FDekMsSUFBSyxTQUNILE9BQU9jLEdBQW9CUixHQUF5Qk4sSUFDdEQsUUFBUyxDQUlQLElBQUtqQyxFQUFFLFFBQUNzQyxXQUFXTCxHQUVqQixPQURBUyxFQUFPRyxLQUFLLHNCQUFzQlosS0FDM0IsR0FFVCxNQUFNZSxFQUFrQmhHLEVBQUFBLFFBQUtpRyxNQUFNbEgsS0FBS2tHLEVBQVksZ0JBQ3BELEdBQUtqQyxFQUFFLFFBQUNzQyxXQUFXVSxHQUdaLENBQ0wsTUFBTUUsRUFBTWxELEVBQUUsUUFBQ21ELGFBQWFILElBQW9CLEdBQ2hELE9BQWUsUUFBVjdDLEVBQUErQyxFQUFJbkIsWUFBTSxJQUFBNUIsT0FBQSxFQUFBQSxFQUFBdEMsU0FBUyxrQkFJakJxRixFQUFJbkIsTUFIVFcsRUFBT0csS0FBSywyQ0FBMkNLLEVBQUluQixNQUFrQixzREFDdEUsSUFMVCxPQURBVyxFQUFPRyxLQUFLLHNCQUFzQlosS0FDM0IsTUFvQkZXLEdBQXVCUSxHQUNsQkEsRUFBUTNFLE1BQU16QixFQUFJLFFBQUMwQixLQUNwQjNDLEtBQUssS0FVVGdILEdBQXNCLENBQUNkLEVBQW9CTyxHQUFpQixLQUN2RSxHQUFLUCxFQUFXcEUsU0FBUyxLQUVsQixDQUNMLElBQUl3RixFQUFNLGtDQUVOYixJQUNGYSxFQUFNLDRDQUVSLE1BQU1DLEVBQVdyQixFQUFXc0IsTUFBTUYsR0FDbEMsT0FBS0MsRUFJSUEsRUFBUyxJQUhoQlgsUUFBUUUsS0FBSyxpQ0FDTlosR0FWVCxPQUFPQSxHQXFCRXVCLEdBQWtCLEdBTWxCQyxHQUEwQnBGLEdBQzlCbUYsR0FBZ0I3RixNQUFLK0YsR0FBYXJGLEVBQUlvRCxXQUFXaUMsS0FVN0NDLEdBQXNCdkksR0FFYixpQkFBWEEsSUFDTkksTUFBTW9JLFFBQVF4SSxJQUNmcUMsT0FBT0MsS0FBS3RDLEdBQVFFLE9BQVMsRUFPM0IsU0FBVXVJLEdBQWNDLEdBQzVCLElBQ0UsT0FBT0MsS0FBS0MsTUFBTUYsR0FDbEIsTUFBTzdJLEdBQ1AsT0FBTzZJLEdBbUJKLE1BQU1HLEdBQWMsQ0FBQ0MsRUFBdUIsSUFDMUNDLE1BQU1DLE9BQU9GLElBQVEsRUFBSUUsT0FBT0YsR0FHNUJHLEdBQVEsSUFDYSxnQkFBekJqQyxRQUFRa0MsSUFBSUMsU0E0QnJCLE1BQU1DLEdBQTRCeEgsRUFBSSxRQUFDakIsS0FBSzBJLFVBQVcsU0FBVSxlQUUxRDdFLGVBQWU4RSxHQUNwQkMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsR0FFQUgsR0FBdUJBLEdBQXVCQSxFQUFzQixHQUFLQSxFQUFzQixFQUFJLElBQU9BLEVBQzFHLE1BQU1JLEVBQVFDLEVBQUFBLFFBQU1aLEVBQUssQ0FBRWEsVUFBVSxLQUM3QmxHLE1BQU9tRyxFQUFXLFdBQWNILEVBQU1JLFdBQ3hDQyxRQXVCUi9GLGVBQ0VnRixFQUNBQyxFQUNBRyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBSyxFQUFtQixJQUNuQlYsRUFBMEIsR0FFMUIsSUFBSVksRUFDa0IsVUFBbEJmLEdBQ0ZRLEVBQXFCQSxHQUFzQlosR0FDM0NtQixRQUFrQkosRUFBSyxRQUFDSCxHQUFvQlEsWUFFNUNELFFBOUVKL0YsZUFDRWlGLEVBQ0FHLEVBQ0FhLEVBQ0FDLEdBRUFkLEVBQVFBLEdBQU8sS0FDZmMsRUFBY0EsR0FBYWpCLEVBRTNCLE1BQ01qSyxFQUF1QyxDQUMzQ21MLE9BQVEsTUFDUkMsV0FBWSxDQUNWQyxLQUxKSixFQUFTQSxHQUFRLDhCQVFYSyxFQVBXQyxFQUFBQSxRQUFVQyxTQUFTTixHQU9YTyxPQUFPckIsRUFBTXBLLEdBRXRDLE9BRFkwTCxPQUFPN0ssS0FBS3lLLEdBNkRKSyxDQUNoQjFCLEVBQ0FHLEVBQ0FHLEVBQ0FGLEdBQXFCSixHQUd6QixNQUFRdkYsTUFBT2tILEVBQWdCakgsT0FBUWtILFNBZXpDN0csZUFBd0IwRixHQUN0QixNQUFNaEcsTUFBRUEsRUFBS0MsT0FBRUEsU0FBaUJnRyxFQUFBQSxRQUFNRCxHQUFPSSxXQUM3QyxNQUFPLENBQUVwRyxNQUFPQSxHQUFTLElBQUtDLE9BQVFBLEdBQVUsS0FqQmlCbUgsQ0FDL0RmLEdBRUlnQixFQUF1Qi9LLEtBQUtDLE1BQU00SixFQUFXeEIsR0FBWWlCLElBQ3pEMEIsRUFBd0JoTCxLQUFLQyxNQUNoQzhLLEVBQXVCRixFQUFtQkQsR0FFN0MsYUFBYWpCLEVBQUssUUFBQ0ksR0FDaEJrQixPQUFPRixFQUFzQkMsRUFBdUIsQ0FDbkRFLElBQUssV0FFTkMsT0FBT2hDLEVBQWlCLENBQUVpQyxXQUFZLENBQUVDLEVBQUcsSUFBS0MsRUFBRyxJQUFLdEksRUFBRyxJQUFLdUksTUFBTyxLQUN2RXZCLFdBMURxQndCLENBQ3RCeEMsRUFDQUMsRUFDQUcsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUssRUFDQVYsR0FXRixhQVR5Qk8sRUFDdEIrQixVQUFVLENBQ1QsQ0FDRUMsTUFBTzNCLEVBQ1A0QixRQUFTbEMsR0FBWSxZQUNyQm1DLEtBQU0xQyxLQUdUYyxXQStDTCxNQUFNNkIsR0FBYSxJQUFJQyxJQUNkQSxFQUFPQyxPQUFNQyxHQUNkQSxNQUFBQSxJQUdpQixpQkFBVkEsRUFDUSxLQUFWQSxFQUVZLGlCQUFWQSxFQUNGQSxFQUFRLEVBRUksaUJBQVZBLEdBQ0ZuSyxPQUFPQyxLQUFLa0ssR0FBT3RNLE9BQVMsS0FNbkN1TSxHQUE2QixDQUNqQyxPQUNBLEtBQ0EsT0FDQSxNQUNBLE9BQ0EsUUFDQSxPQUNBLE1BQ0EsTUFDQSxNQUNBLFNBQ0EsWUFDQSxNQUNBLE1BQ0EsTUFDQSxNQUNBLE1BQ0EsT0FDQSxNQUNBLElBQ0EsUUFPSUMsR0FBZSxDQUFDLE1BQU8sT0FBUSxNQUFPLE9BQVEsTUFBTyxPQUFRLE1BQU8sTUFBTyxNQUFPLE9BQVEsT0FBUSxRQUVqR2xJLGVBQWVtSSxHQUFtQnBELEVBQWEvSixFQUFtQ2lLLEdBQ3ZGLElBQ0UsSUFBSVMsRUFBcUJDLEVBQUFBLFFBQU1aLEVBQUssQ0FBRWEsVUFBVSxJQWdCaEQsT0FmSWlDLEdBQVc3TSxFQUFRb04saUJBQ3JCMUMsRUFBUUMsRUFBSyxjQUFPYixHQUNsQkMsRUFDQS9KLEVBQVFnSyxlQUFpQixPQUN6QkMsRUFDQWpLLEVBQVFrSyxzQkFDUmIsR0FBWXJKLEVBQVFtSyxpQkFDcEJuSyxFQUFRb04sY0FDUnBOLEVBQVFxSyxrQkFDUmhCLEdBQVlySixFQUFRc0sscUJBQ3BCdEssRUFBUXVLLGVBQ1J2SyxFQUFRd0ssbUJBQ1J4SyxFQUFRcU4sbUJBQ1AsQ0FBRXpDLFVBQVUsV0FFSkYsRUFBTU0sV0FDbkIsTUFBTzNLLEdBRVAsT0FEQTBILFFBQVEzSCxJQUFJQyxHQUNMMEosR0FJWCxTQUFTdUQsR0FBZXROLEdBQ3RCLE1BQU8sQ0FDTHVOLFFBQVNsRSxHQUFZckosRUFBUXVOLFNBQzdCQyxVQUFXeE4sRUFBUXdOLFlBQWEsRUFDaENDLGNBQWV6TixFQUFReU4sZUFBaUIsTUFDeENDLFNBQVUxTixFQUFRME4sV0FBWSxFQUM5QkMsYUFBY3RFLEdBQVlySixFQUFRMk4sY0FDbENDLFlBQWF2RSxHQUFZckosRUFBUTROLGFBQ2pDQyxxQkFBc0I3TixFQUFRNk4sdUJBQXdCLEVBQ3REQyxrQkFBbUI5TixFQUFROE4sb0JBQXFCLEVBQ2hEQyxjQUFlMUUsR0FBWXJKLEVBQVErTixlQUNuQ0MsU0FBVWhPLEVBQVFnTyxXQUFZLEVBQzlCQyxPQUFRak8sRUFBUWlPLFNBQVUsRUFDMUJDLE9BQVFsTyxFQUFRa08sU0FBVSxFQUMxQkMsYUFBYzlFLEdBQVlySixFQUFRbU8sY0FDbENDLE9BQVFwTyxFQUFRb08sUUFBVSxRQUl2QnBKLGVBQWVxSixHQUFjdEUsRUFBYS9KLEVBQWtDc08sR0FDakZ0TyxFQUFVc04sR0FBY3ROLEdBQ3hCLElBRUUsR0FEQXNPLEVBQVlBLEVBQVVDLGNBQWM3TCxRQUFRLElBQUssS0FDNUN3SyxHQUFhakssU0FBU3FMLEdBQ3pCLE9BQU92RSxFQUVULElBQUlXLEVBQXFCQyxFQUFBQSxRQUFNWixFQUFLLENBQUVhLFVBQVUsSUFDNUMyQyxFQUFVLElBSWQsR0FISVYsR0FBVzdNLEVBQVF1TixVQUFZdk4sRUFBUXVOLFFBQVcsTUFDcERBLEVBQVV2TixFQUFRdU4sU0FFaEJ2TixFQUFROE4sbUJBQ1YsR0FBSWpCLEdBQVc3TSxFQUFRK04sZUFBZ0IsQ0FDckMsTUFBTVMsUUFBbUI5RCxFQUFNSSxXQUFXMUUsTUFBSzBFLEdBQVlBLEVBQVNwRyxRQUM5RCtKLFFBQW9CL0QsRUFBTUksV0FBVzFFLE1BQUswRSxHQUFZQSxFQUFTbkcsU0FDakU2SixHQUFjQyxJQUNoQi9ELEVBQVFBLEVBQU11QixPQUNaakwsS0FBSzBOLE1BQU1GLEVBQWF4TyxFQUFRK04sY0FBaUIsS0FDakQvTSxLQUFLME4sTUFBTUQsRUFBY3pPLEVBQVErTixjQUFpQixLQUNsRCxDQUNFN0IsSUFBSyxrQkFJUixHQUFJbE0sRUFBUTBOLFNBQ2pCLEdBQXFDLGlCQUF6QjFOLEVBQVEyTixjQUE2QjNOLEVBQVEyTixhQUFlLEdBQXNDLGlCQUF4QjNOLEVBQVE0TixhQUE0QjVOLEVBQVE0TixZQUFjLEVBQzlJbEQsRUFBUUEsRUFBTXVCLE9BQ1pqTSxFQUFRNE4sWUFDUjVOLEVBQVEyTixhQUNSLENBQ0V6QixJQUFLLGNBR0osR0FBcUMsaUJBQXpCbE0sRUFBUTJOLGNBQTZCM04sRUFBUTJOLGFBQWUsSUFBc0MsaUJBQXhCM04sRUFBUTROLGFBQW9ELElBQXhCNU4sRUFBUTROLGFBQW9CLENBQzNKLE1BQU1ZLFFBQW1COUQsRUFBTUksV0FBVzFFLE1BQUswRSxHQUFZQSxFQUFTcEcsUUFDOUQrSixRQUFvQi9ELEVBQU1JLFdBQVcxRSxNQUFLMEUsR0FBWUEsRUFBU25HLFNBQ3JFLEdBQUk2SixHQUFjQyxLQUNYek8sRUFBUTZOLHNCQUF5QjdOLEVBQVE2TixzQkFBd0I3TixFQUFRMk4sYUFBZWMsR0FBYyxDQUN6RyxNQUFNRSxFQUFhM08sRUFBUTJOLGFBQWVjLEVBQzFDL0QsRUFBUUEsRUFBTXVCLE9BQ1pqTCxLQUFLME4sTUFBTUYsRUFBYUcsR0FDeEIzTyxFQUFRMk4sYUFDUixDQUNFekIsSUFBSyxpQkFLUixHQUFvQyxpQkFBeEJsTSxFQUFRNE4sYUFBNEI1TixFQUFRNE4sWUFBYyxJQUF1QyxpQkFBekI1TixFQUFRMk4sY0FBc0QsSUFBekIzTixFQUFRMk4sY0FBcUIsQ0FDM0osTUFBTWEsUUFBbUI5RCxFQUFNSSxXQUFXMUUsTUFBSzBFLEdBQVlBLEVBQVNwRyxRQUM5RCtKLFFBQW9CL0QsRUFBTUksV0FBVzFFLE1BQUswRSxHQUFZQSxFQUFTbkcsU0FDckUsR0FBSTZKLEdBQWNDLEtBQ1h6TyxFQUFRNk4sc0JBQXlCN04sRUFBUTZOLHNCQUF3QjdOLEVBQVE0TixZQUFjWSxHQUFhLENBQ3ZHLE1BQU1HLEVBQWEzTyxFQUFRNE4sWUFBY1ksRUFDekM5RCxFQUFRQSxFQUFNdUIsT0FDWmpNLEVBQVE0TixZQUNSNU0sS0FBSzBOLE1BQU1ELEVBQWNFLEdBQ3pCLENBQ0V6QyxJQUFLLFlBaUJqQixHQVZJbE0sRUFBUWdPLFVBQVloTyxFQUFRbU8sZUFDOUJ6RCxFQUFRQSxFQUFNeUIsT0FBT25NLEVBQVFtTyxhQUFjLENBQUUvQixXQUFZLENBQUVDLEVBQUcsSUFBS0MsRUFBRyxJQUFLdEksRUFBRyxJQUFLdUksTUFBTyxNQUV4RnZNLEVBQVFpTyxTQUNWbEcsUUFBUTNILElBQUksUUFDWnNLLEVBQVFBLEVBQU1rRSxRQUVaNU8sRUFBUWtPLFNBQ1Z4RCxFQUFRQSxFQUFNbUUsUUFFWjdPLEVBQVF3TixVQUFXLENBQ3JCLElBQUlzQixFQUFZOU8sRUFBUXlOLGVBQWlCLE1BQ2xCLFVBQW5Cek4sRUFBUW9PLFFBQW9DLFNBQWRVLElBQ2hDQSxFQUFZLE9BRWRwRSxFQUFRQSxFQUFNcUUsU0FBU0QsRUFBVyxDQUNoQ3ZCLFFBQUFBLFNBSUE3QyxFQURFNEQsSUF2SWlCVSxFQXVJY1YsRUF0SWhDckIsR0FBMkJoSyxTQUFTK0wsSUF1STdCdEUsRUFBTXFFLFNBQVNULEVBQWtCLENBQ3ZDZixRQUFBQSxJQUdNN0MsRUFBTXFFLFNBQVMsTUFBTyxDQUM1QnhCLFFBQUFBLElBSU4sYUFBYTdDLEVBQU1NLFdBQ25CLE1BQU8zSyxHQUVQLE9BREEwSCxRQUFRM0gsSUFBSUMsR0FDTDBKLEVBcEplLElBQUNpRixFQXdKM0IsTUFBTUMsR0FBa0IsQ0FBQyxNQUFPLE9BQVEsTUFBTyxPQUFRLE1BQU8sT0FBUSxNQUFPLE1BQU8sTUFBTyxPQUFRLE9BQVEsT0FBUSxPQUV0R0MsR0FBbUIsQ0FBQ0MsRUFBd0RDLEtBQ3ZGQSxFQUFVQSxFQUFRYixjQUFjN0wsUUFBUSxJQUFLLE1BQ3BDeU0sS0FBc0JBLEVBQWlCRSxnQkFBa0JKLEdBQWdCaE0sU0FBU21NLElBR2hGRSxHQUFlLENBQUNDLEVBQXNESCxLQUNqRixNQUFNSSxFQUFnQkosRUFBUWIsY0FBYzdMLFFBQVEsSUFBSyxJQUV6RCxJQUFLdU0sR0FBZ0JoTSxTQUFTdU0sS0FBbUJELEVBQy9DLE9BQU8sRUFHVCxNQUFNaEMsUUFDSkEsRUFBT08sa0JBQ1BBLEVBQWlCQyxjQUNqQkEsRUFBYUwsU0FDYkEsRUFBUUMsYUFDUkEsRUFBWUMsWUFDWkEsRUFBV0ksU0FDWEEsRUFBUUcsYUFDUkEsRUFBWVgsVUFDWkEsRUFBU0MsY0FDVEEsRUFBYVEsT0FDYkEsRUFBTUMsT0FDTkEsR0FDRVosR0FBY2lDLEdBRWxCLEdBQUkxQyxHQUFXVSxJQUFZQSxFQUFXLElBQ3BDLE9BQU8sRUFFVCxHQUFJTyxHQUFxQmpCLEdBQVdrQixHQUNsQyxPQUFPLEVBRVQsR0FBSUwsSUFBc0MsaUJBQWpCQyxHQUE2QkEsRUFBZSxHQUE4QixpQkFBaEJDLEdBQTRCQSxFQUFjLEdBQzNILE9BQU8sRUFFVCxHQUFJSSxHQUFZRyxFQUNkLE9BQU8sRUFFVCxHQUFJRixHQUFVQyxFQUNaLE9BQU8sRUFFVCxHQUFJVixFQUFXLENBRWIsT0FBTzRCLEtBRFczQixHQUFpQixPQUdyQyxPQUFPLEdBR0lnQyxHQUFhekssTUFBTytFLEVBQWFxRixLQUM1Q0EsRUFBVUEsRUFBUWIsY0FBYzdMLFFBQVEsSUFBSyxJQUN4Q3VNLEdBQWdCaE0sU0FBU21NLFNBR2pCekUsRUFBSyxRQUFDWixFQUFLLENBQ3RCYSxVQUFVLElBQ1RJLFdBSk1qQiw2RkExdkJMLFNBQXVDMUksR0FDM0MsTUFBTyxHQUFHTCxLQUFLQyxNQUFNUSxLQUFLa0IsTUFBUSxPQUFRbEMsR0FBc0IsS0FBSzJCLEVBQUFBLFFBQUtFLFFBQVFqQiw4Q0FHcENBLEVBQWlCWCxFQUFpQixHQUNoRixNQUFPLEdBQUdELEdBQXNCQyxLQUFVMEIsRUFBQUEsUUFBS0UsUUFBUWpCLDhMQWlNZDhGLEdBQ3JDLHlCQUF5QmhELEtBQUtnRCxHQUN6QkEsRUFBS3pFLFFBQVEseUJBQTBCLElBRXZDeUUsRUFBS3pFLFFBQVEsZ0JBQWlCLDRPQTJNbkIsSUFDWSxlQUF6QjhFLFFBQVFrQyxJQUFJQyxrSEN4YXJCLE1BQU0rRixHQUFrQixDQUN0QnRRLE9BQVNDLElBQ0tBLEVBQUlDLElBQ1pDLFFBQ0RDLFFBQVEsVUFDUkMsWUFBWSxvQkFDWmtRLFVBQVUsY0FDVmpRLE1BQU0sS0FDTkUsUUFBUThNLElBQ1AsV0FDRSxNQUFNa0QsRUFBWWxELEVBQ2Y1TCxLQUFLa0MsR0FDR2lCLEdBQU1qQixHQUFRQSxFQUFPWixFQUFBQSxRQUFLeUQsUUFBUTdDLEtBRTFDNk0sUUFBUTdNLElBQ1AsTUFBTThNLEVBQVExSyxFQUFBQSxRQUFHc0MsV0FBVzFFLElBQVNpQixHQUFNakIsR0FJM0MsT0FISzhNLEdBQ0h6USxFQUFJZSxJQUFJNkgsS0FBSyxHQUFHakYscUJBRVg4TSxXQUVMelEsRUFBSXFRLE9BQU9FLElBWm5CLEdBYUsxUCxPQUFPQyxJQUFRZCxFQUFJZSxJQUFJQyxNQUFNRixXQ2tGMUMsSUFBZTRQLEdBMUdDMVEsSUFDZCxNQUFNMlEsRUFBYTNRLEVBQUk0USxVQUFtQyxxQkFBdUIsR0FzR2pGLE1BckdnQyxDQUM5QixDQUNFOUksS0FBTSxVQUNOdkMsS0FBTSxRQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsNkJBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVd6QyxTQUFXLEtBRWpDLENBQ0VwRyxLQUFNLFlBQ052QyxLQUFNLFVBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwrQkFDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV3hDLFlBQWEsR0FFbkMsQ0FDRXJHLEtBQU0sZ0JBQ052QyxLQUFNLE9BQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixtQ0FDdERDLFVBQVUsRUFDVkUsUUFBUyxDQUFDLE9BQVEsS0FBTSxPQUFRLE1BQU8sT0FBUSxRQUFTLE9BQVEsTUFBTyxNQUFPLE1BQU8sU0FBVSxZQUFhLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxPQUFRLE1BQU8sSUFBSyxRQUNuS0QsUUFBUyxPQUVYLENBQ0VsSixLQUFNLFdBQ052QyxLQUFNLFVBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qiw4QkFDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV3RDLFdBQVksR0FFbEMsQ0FDRXZHLEtBQU0sY0FDTnZDLEtBQU0sUUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLGlDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXcEMsYUFBZSxLQUVyQyxDQUNFekcsS0FBTSxlQUNOdkMsS0FBTSxRQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsa0NBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVdyQyxjQUFnQixLQUV0QyxDQUNFeEcsS0FBTSx1QkFDTnZDLEtBQU0sVUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDBDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXbkMsdUJBQXdCLEdBRTlDLENBQ0UxRyxLQUFNLG9CQUNOdkMsS0FBTSxVQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsdUNBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVdsQyxvQkFBcUIsR0FFM0MsQ0FDRTNHLEtBQU0sZ0JBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixtQ0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV2pDLGVBQWlCLElBRXZDLENBQ0U1RyxLQUFNLFNBQ052QyxLQUFNLFVBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qiw0QkFDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBVy9CLFNBQVUsR0FFaEMsQ0FDRTlHLEtBQU0sU0FDTnZDLEtBQU0sVUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDRCQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXOUIsU0FBVSxHQUVoQyxDQUNFL0csS0FBTSxXQUNOdkMsS0FBTSxVQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsOEJBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVdoQyxXQUFZLEdBRWxDLENBQ0U3RyxLQUFNLGVBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixrQ0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBVzdCLGNBQWdCLElBRXRDLENBQ0VoSCxLQUFNLGVBQ052QyxLQUFNLFVBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixrQ0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV08sZUFBZ0IsS0NyQjFDLElBQWV4RixHQS9FQzFMLElBQ2QsTUFBTTJRLEVBQWEzUSxFQUFJNFEsVUFBb0Msc0JBQXdCLEdBMkVuRixNQTFFZ0MsQ0FDOUIsQ0FDRTlJLEtBQU0saUJBQ052QyxLQUFNLFVBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixxQ0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV1gsaUJBQWtCLEdBRXhDLENBQ0VsSSxLQUFNLGdCQUNOdkMsS0FBTSxPQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsb0NBQ3REQyxVQUFVLEVBQ1ZFLFFBQVMsQ0FBQyxPQUFRLFNBQ2xCRCxRQUFTTCxFQUFXaEcsZUFBaUIsUUFFdkMsQ0FDRTdDLEtBQU0sd0JBQ052QyxLQUFNLFVBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qiw0Q0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBVzlGLHdCQUF5QixHQUUvQyxDQUNFL0MsS0FBTSxrQkFDTnZDLEtBQU0sUUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHNDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXN0YsaUJBQW1CLEdBRXpDLENBQ0VoRCxLQUFNLGdCQUNOdkMsS0FBTSxRQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsb0NBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVc1QyxlQUFpQixJQUV2QyxDQUNFakcsS0FBTSxvQkFDTnZDLEtBQU0sUUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDRDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXM0YsbUJBQXFCLElBRTNDLENBQ0VsRCxLQUFNLHNCQUNOdkMsS0FBTSxRQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIseUNBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVcxRixxQkFBdUIsS0FFN0MsQ0FDRW5ELEtBQU0saUJBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qix5Q0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV3pGLGdCQUFrQiw2QkFFeEMsQ0FDRXBELEtBQU0scUJBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qix5Q0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV3hGLG9CQUFzQixJQUU1QyxDQUNFckQsS0FBTSxvQkFDTnZDLEtBQU0sT0FDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHdDQUN0REMsVUFBVSxFQUNWRSxRQUFTLENBQUMsUUFBUyxZQUFhLFlBQWEsUUFBUyxZQUFhLFlBQWEsT0FBUSxPQUFRLFNBQVUsVUFDMUdELFFBQVNMLEVBQVczQyxtQkFBcUIsZUNwRC9DLElBQWVtRCxHQXJCQ25SLElBQ2QsTUFBTTJRLEVBQWEzUSxFQUFJNFEsVUFBZSxtQkFBcUIsR0FpQjNELE1BaEJnQyxDQUM5QixDQUNFOUksS0FBTSxTQUNOdkMsS0FBTSxRQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsMEJBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVdoQixRQUFVLGNBRWhDLENBQ0U3SCxLQUFNLFNBQ052QyxLQUFNLFVBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwwQkFDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV1MsU0FBVSxLQ1pwQyxNQUFNQyxHQUFlMUwsTUFBTzNGLEVBQWFzUixFQUEwQkMsRUFBZ0J6SixLQUNqRixNQUFNMEosUUFBZXhSLEVBQUlDLElBQUl3UixTQUFTQyxPQUFPSixHQUN2Q0ssRUFBd0IsYUFBWEosRUFDZixVQUFVekosSUFDQyxnQkFBWHlKLEVBQ0UsZUFBZXpKLElBQ0osWUFBWHlKLEVBQ0UsV0FBV3pKLElBQ1hBLEVBQ1I5SCxFQUFJNFIsV0FBVyxDQUNiRCxDQUFDQSxHQUFhSCxJQUVELGFBQVhELEVBQ0Z2UixFQUFJNFIsV0FBVyxDQUNiLGlCQUFrQjlKLEVBQ2xCLGtCQUFtQkEsSUFFRCxnQkFBWHlKLEdBQ1R2UixFQUFJNFIsV0FBVyxDQUNiLHFCQUFzQjlKLEtBS3RCK0osR0FBVSxDQUNkOVIsT0FBU0MsSUFDS0EsRUFBSUMsSUFDWkMsUUFDREMsUUFBUSxPQUNSRSxNQUFNLFVBQ05pUSxVQUFVLG1CQUNWbFEsWUFBWSwwRUFDWkcsUUFBTyxDQUFDZ1IsRUFBZ0J6SixLQUN2QixtQkFDRSxJQUlFLE9BQVF5SixHQUNOLElBQUssVUFDSCxHQUFhLGFBQVR6SixRQUNJdUosR0FBYXJSLEVBQUswUSxHQUFnQjFRLEdBQU11UixFQUFRekosUUFDakQsR0FBYSxjQUFUQSxRQUNIdUosR0FBYXJSLEVBQUswTCxHQUFpQjFMLEdBQU11UixFQUFRekosUUFDbEQsR0FBYSxXQUFUQSxRQUNIdUosR0FBYXJSLEVBQUttUixHQUFjblIsR0FBTXVSLEVBQVF6SixPQUMvQyxDQUNMLE1BQU13SixFQUFVLENBQ2QsQ0FDRS9MLEtBQU0sT0FDTnVDLEtBQU0sVUFDTm1KLFFBQVMsQ0FBQyxXQUFZLFlBQWEsVUFDbkN4SixRQUFTLDRCQUdQK0osUUFBZXhSLEVBQUlDLElBQUl3UixTQUFTQyxPQUEyQkosR0FDMUMsYUFBbkJFLEVBQU9NLGNBQ0hULEdBQWFyUixFQUFLMFEsR0FBZ0IxUSxHQUFNdVIsRUFBUUMsRUFBT00sU0FDakMsY0FBbkJOLEVBQU9NLGNBQ1ZULEdBQWFyUixFQUFLMEwsR0FBaUIxTCxHQUFNdVIsRUFBUUMsRUFBT00sU0FDbEMsV0FBbkJOLEVBQU9NLGVBQ1ZULEdBQWFyUixFQUFLbVIsR0FBY25SLEdBQU11UixFQUFRQyxFQUFPTSxTQUcvRCxNQUNGLElBQUssV0FDTCxJQUFLLGNBQ0gsR0FBSWhLLEVBQU0sQ0FDUixNQUFNbkUsRUFBTzNELEVBQUkrUixPQUFPUixHQUFRaEssSUFBSU8sR0FDcEMsSUFBS25FLEVBQzBDLFlBQTdDM0QsRUFBSWUsSUFBSUMsTUFBTSxNQUFNdVEsV0FBZ0J6SixLQUVsQ25FLEVBQUt4QyxjQUNEa1EsR0FBYXJSLEVBQUsyRCxFQUFLeEMsT0FBT25CLEdBQU11UixFQUFRekosT0FFL0MsQ0FDTCxNQUFNd0osRUFBVSxDQUNkLENBQ0UvTCxLQUFNLE9BQ051QyxLQUFNLEdBQUd5SixJQUNUTixRQUFTalIsRUFBSStSLE9BQU9SLEdBQVFTLFlBQzVCdkssUUFBUyxlQUFlOEosTUFJdEJDLFFBQWV4UixFQUFJQyxJQUFJd1IsU0FBU0MsT0FBMkJKLEdBQzNEM04sRUFBTzNELEVBQUkrUixPQUFPUixHQUFRaEssSUFBSWlLLEVBQU9ELEtBQ3ZDNU4sTUFBQUEsU0FBQUEsRUFBTXhDLGVBQ0ZrUSxHQUFhclIsRUFBSzJELEVBQUt4QyxPQUFPbkIsR0FBTXVSLEVBQVFDLEVBQU9ELElBRzdELE1BQ0YsSUFBSyxTQUNILEdBQUl6SixFQUFNLENBSVIsR0FIS0EsRUFBS2xFLFNBQVMsbUJBQ2pCa0UsRUFBTyxnQkFBZ0JBLE1BRXJCdEUsT0FBT0MsS0FBS3pELEVBQUk0USxVQUFVLGlCQUFpQmhOLFNBQVNrRSxHQUtaLFlBQTFDOUgsRUFBSWUsSUFBSUMsTUFBTSxtQkFBbUI4RyxNQUpLLFFBQWxDNUIsRUFBQWxHLEVBQUlpUyxhQUFhQyxVQUFVcEssVUFBTyxJQUFBNUIsT0FBQSxFQUFBQSxFQUFBL0UsZUFDOUJrUSxHQUFhclIsRUFBS0EsRUFBSWlTLGFBQWFDLFVBQVVwSyxHQUFPM0csT0FBUW5CLEdBQU0sU0FBVThILE9BS2pGLENBQ0wsTUFBTXdKLEVBQVUsQ0FDZCxDQUNFL0wsS0FBTSxPQUNOdUMsS0FBTSxTQUNObUosUUFBU2pSLEVBQUlpUyxhQUFhRSxjQUMxQjFLLFFBQVMsb0JBR1ArSixRQUFleFIsRUFBSUMsSUFBSXdSLFNBQVNDLE9BQVlKLElBQ0wsUUFBekNjLEVBQUFwUyxFQUFJaVMsYUFBYUMsVUFBVVYsRUFBT2EsZUFBTyxJQUFBRCxPQUFBLEVBQUFBLEVBQUVqUixlQUN2Q2tRLEdBQWFyUixFQUFLQSxFQUFJaVMsYUFBYUMsVUFBVVYsRUFBT2EsUUFBU2xSLE9BQVFuQixHQUFNLFNBQVV3UixFQUFPYSxRQUd0RyxNQUNGLFFBRTZFLE9BRDNFclMsRUFBSWUsSUFBSTZILEtBQUssbUJBQW1CMkksVUFDaEN2UixFQUFJZSxJQUFJNkgsS0FBSyw2REFFakI1SSxFQUFJZSxJQUFJa0YsUUFBUSxrQ0FDRCxXQUFYc0wsR0FDRnZSLEVBQUllLElBQUl1UixLQUFLLGtFQUVmLE1BQU94UixHQUVQLEdBREFkLEVBQUllLElBQUlDLE1BQU1GLEdBQ1ZxSCxRQUFRb0ssS0FBSzNPLFNBQVMsV0FDeEIsTUFBTTlDLElBakdaLEdBb0dLRCxPQUFPQyxJQUFRZCxFQUFJZSxJQUFJQyxNQUFNRixXQ3pJcEMwUixHQUFlLENBQ25CelMsT0FBUTRGLE1BQU8zRixJQUNiLE1BQU1DLEVBQU1ELEVBQUlDLElBQ2hCQSxFQUFJQyxRQUNEQyxRQUFRLE9BQ1JtUSxVQUFVLFlBQ1ZsUSxZQUFZLHdCQUNaRyxRQUFRZ1IsSUFDUCxXQUNFLElBR0UsSUFBSUQsRUFBaUIsR0FDckIsTUFBTW5RLEVBQXNCLENBQzFCc1IsU0FBVSxDQUNSbE4sS0FBTSxPQUNOdUMsS0FBTSxXQUNOTCxRQUFTLGtCQUNUd0osUUFBU2pSLEVBQUkrUixPQUFPVSxTQUFTVCxZQUM3QmhCLFFBQVNoUixFQUFJNFEsVUFBVSxvQkFBc0I1USxFQUFJNFEsVUFBVSxtQkFBcUIsUUFFbEY4QixZQUFhLENBQ1huTixLQUFNLE9BQ051QyxLQUFNLGNBQ05MLFFBQVMsb0JBQ1R3SixRQUFTalIsRUFBSStSLE9BQU9XLFlBQVlWLFlBQ2hDaEIsUUFBU2hSLEVBQUk0USxVQUErQix1QkFBeUIsUUFFdkVwUSxRQUFTLENBQ1ArRSxLQUFNLFdBQ051QyxLQUFNLFVBQ05MLFFBQVMsY0FDVHdKLFFBQVNqUixFQUFJaVMsYUFBYUUsY0FDMUJuQixRQUFTeE4sT0FBT0MsS0FBS3pELEVBQUk0USxVQUFVLGlCQUFpQkosUUFBUTdNLEdBQWlCM0QsRUFBSTRRLFVBQVUsZ0JBQWdCak4sU0FJL0csR0FBSTROLEVBQVEsQ0FDVixJQUFJcFEsRUFBT29RLEdBSTJELE9BRHBFdlIsRUFBSWUsSUFBSTZILEtBQUssbUJBQW1CMkksVUFDaEN2UixFQUFJZSxJQUFJNkgsS0FBSyxzREFIYjBJLEVBQVFxQixLQUFLeFIsRUFBT29RLFNBTXRCRCxFQUFVOU4sT0FBT0MsS0FBS3RDLEdBQVFNLEtBQUtrQyxHQUFpQnhDLEVBQU93QyxLQUU3RCxNQUFNNk4sUUFBZXZSLEVBQUl3UixTQUFTQyxPQUFZSixHQUc5QyxHQUFJRSxFQUFPaFIsUUFBUyxDQUNsQixNQUFNQSxFQUFVUixFQUFJNFEsVUFBa0MsZ0JBQ3REcE4sT0FBT0MsS0FBS2pELEdBQVNvUyxTQUFTalAsSUFDeEI2TixFQUFPaFIsUUFBUW9ELFNBQVNELEdBQzFCbkQsRUFBUW1ELElBQVEsRUFFaEJuRCxFQUFRbUQsSUFBUSxLQUlwQjNELEVBQUk0UixXQUFXLENBQ2JpQixhQUFjclMsSUFJbEJSLEVBQUk0UixXQUFXLENBQ2IsaUJBQWtCSixFQUFPaUIsVUFBWXpTLEVBQUk0USxVQUFrQixrQkFDM0Qsa0JBQW1CWSxFQUFPaUIsVUFBWXpTLEVBQUk0USxVQUFrQixrQkFDNUQscUJBQXNCWSxFQUFPa0IsYUFBZSxTQUU5QzFTLEVBQUllLElBQUlrRixRQUFRLGtDQUNoQixNQUFPbkYsR0FFUCxHQURBZCxFQUFJZSxJQUFJQyxNQUFNRixHQUNWcUgsUUFBUW9LLEtBQUszTyxTQUFTLFdBQ3hCLE1BQU05QyxJQWxFWixHQXFFS0QsT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsV0M3RXBDTCxHQUFpQixDQUNyQlYsT0FBU0MsSUFDS0EsRUFBSUMsSUFDWkMsUUFDREksT0FBTyxvQkFBcUIsMkJBQTRCRyxJQUN2RFQsRUFBSThTLFVBQVUsQ0FDWixlQUFnQnJTLFNDSXBCc1MsR0FBV3BOLE1BQU8zRixFQUFhVyxLQUNuQyxJQUNFLE1BQU1xUyxFQUFPQyxHQUFXdFMsRUFBUXVTLEtBQzFCQyxFQUFTcFEsRUFBQUEsUUFBS2pCLEtBQUtuQixFQUFRdVMsSUFBSyxZQUN0QyxJQUFJRSxFQUFVLEdBQ1ZKLEVBQUsxQixTQUFXMEIsRUFBSzFCLFFBQVFqUSxPQUFTLElBQ3hDK1IsUUFBZ0JwVCxFQUFJQyxJQUFJd1IsU0FBU0MsT0FBT3NCLEVBQUsxQixVQUUvQyxJQUFJK0IsUUFBeUJDLFVBQU8sQ0FBQyxRQUFTLENBQUVsTCxJQUFLK0ssRUFBUUksS0FBSyxJQWNsRSxHQWJBRixFQUFTQSxFQUFPN0MsUUFBUTdNLElBQ3RCLElBQUk2UCxFQUFPLEdBTVgsT0FMQWhRLE9BQU9DLEtBQUt1UCxFQUFLUyxTQUFTYixTQUFTeE8sSUFDN0JrRixFQUFBQSxRQUFNM0YsRUFBTVMsRUFBSyxDQUFFbVAsS0FBSyxNQUMxQkMsRUFBTzdQLE9BR1A2UCxHQUNLQyxHQUFRelQsRUFBS2dULEVBQUtTLFFBQVFELEdBQU9KLE1BS3RCLElBQWxCQyxFQUFPaFMsT0FDa0MsWUFBM0NyQixFQUFJZSxJQUFJNkgsS0FBSyw2QkFFZixNQUFNOEssRUFBUUMsR0FBT04sRUFBUUYsRUFBUUMsR0FDckNRLEdBQWNqVCxFQUFRa1QsS0FBTUgsR0FDQyxtQkFBbEJWLEVBQUtjLFVBQ2RkLEVBQUtjLFNBQVMsQ0FBRVYsUUFBQUEsRUFBU3pTLFFBQUFBLEVBQVMrUyxNQUFPTCxFQUFRclQsSUFBQUEsSUFFL0NnVCxFQUFLZSxpQkFDUC9ULEVBQUllLElBQUlrRixRQUFRK00sRUFBS2UsaUJBRXZCL1QsRUFBSWUsSUFBSWtGLFFBQVEsU0FDaEIsTUFBT25GLEdBQ1BkLEVBQUllLElBQUlDLE1BQU1GLEtBVVoyUyxHQUFVLENBQUN6VCxFQUFhZ1UsRUFBVS9NLEtBRXRDLE1BQU1nTixFQUFLLElBQUlDLFNBQVMsT0FBUSx3QkFBMEJGLEVBQU0sS0FDaEUsSUFDRSxPQUFPQyxFQUFHaE4sR0FDVixNQUFPbkcsR0FFUCxPQURBZCxFQUFJZSxJQUFJQyxNQUFNLDJDQUEyQzhJLEtBQUtxSyxVQUFVSCxPQUNqRSxJQVFMZixHQUFjbUIsSUFDbEIsTUFBTUMsRUFBY3RSLEVBQUksUUFBQ2pCLEtBQUtzUyxFQUFjLFlBQzVDLEdBQUlyTyxFQUFFLFFBQUNzQyxXQUFXZ00sR0FBYyxDQUc5QixPQURnQkMsUUFBUUQsR0FHeEIsTUFBTyxJQVFMVixHQUFTLENBQUNELEVBQWlCUCxFQUFnQnhTLEtBQy9DLE1BQU00VCxFQUFzQixHQVE1QixPQVBBYixFQUFNZCxTQUFTaE4sSUFDYixNQUFNUixFQUFPVyxVQUFHeU8sYUFBYXpSLEVBQUksUUFBQ2pCLEtBQUtxUixFQUFRdk4sR0FBVyxRQUNwRDZPLEVBQVVDLEVBQUcsUUFBQ2YsT0FBT3ZPLEVBQU16RSxJQUM3QjBMLE9BQU9zSSxTQUFTRixJQUFZLFFBQVEzUCxLQUFLMlAsTUFDM0NGLEVBQVMzTyxHQUFZNk8sTUFHbEJGLEdBUUhYLEdBQWdCLENBQUNnQixFQUFhbEIsS0FDbENsUSxPQUFPQyxLQUFLaVEsR0FBT2QsU0FBUzlLLElBQzFCLE1BQU1sQyxFQUFXN0MsRUFBSSxRQUFDakIsS0FBSzhTLEVBQUs5TSxHQUNoQy9CLEVBQUFBLFFBQUc4TyxjQUFjOVIsRUFBQUEsUUFBS3dCLFFBQVFxQixJQUM5QkcsRUFBQUEsUUFBRytPLGNBQWNsUCxFQUFVOE4sRUFBTTVMLFFDbkcvQmlOLEdBQU0sQ0FBQy9VLEVBQWFXLEtBRXBCQSxFQUFRcVUsUUFDTmpQLFVBQUdzQyxXQUFXMUgsRUFBUXNVLFVBQ3hCbEMsR0FBUy9TLEVBQUtXLEdBQVNFLE9BQU9DLElBQVFkLEVBQUllLElBQUlDLE1BQU1GLE1BRXBEZCxFQUFJZSxJQUFJQyxNQUFNLGtCQUFrQkwsRUFBUXNVLHVCQUcxQ3RVLEVBQVFzVSxTQUFZdFUsRUFBUXVVLFNBRXhCdlUsRUFBUXNVLFNBRFIsd0JBQTBCdFUsRUFBUXNVLFNBRXRDRSxHQUFvQm5WLEVBQUtXLEtBU3ZCd1UsR0FBc0IsQ0FBQ25WLEVBQWFXLEtBQ3BDb0YsVUFBR3NDLFdBQVcxSCxFQUFRdVMsTUFDeEJrQyxFQUFBQSxRQUFHQyxLQUFLMVUsRUFBUXVTLEtBRWxCbFQsRUFBSWUsSUFBSXVSLEtBQUsscUNBQ2JnRCxFQUFBQSxRQUFTM1UsRUFBUXNVLFNBQVV0VSxFQUFRdVMsSUFBSyxDQUFFcUMsTUFBTzVVLEVBQVE0VSxRQUFVQyxJQUM3REEsRUFDRnhWLEVBQUllLElBQUlDLE1BQU13VSxJQUVoQnhWLEVBQUllLElBQUlrRixRQUFRLGtDQUNoQjhNLEdBQVMvUyxFQUFLVyxHQUFTRSxPQUFPQyxJQUFRZCxFQUFJZSxJQUFJQyxNQUFNRixXQUlsRDJVLEdBQWdCLENBQ3BCMVYsT0FBUTRGLE1BQU8zRixJQUNEQSxFQUFJQyxJQUNaQyxRQUNEQyxRQUFRLFFBQ1JtUSxVQUFVLHdCQUNWaFEsT0FBTyxVQUFXLGlCQUNsQkEsT0FBTyxZQUFhLHVCQUNwQkYsWUFBWSwrQ0FDWkcsUUFBTyxDQUFDMFUsRUFBa0JTLEVBQWlCeFYsS0FDMUMsV0FFRSxJQUNFLE1BQU1nVixFQUFXRCxFQUFTclIsU0FBUyxLQUM3QitSLEdBQVdELEdBQXVCLE1BQVpBLEVBQ3RCN0IsRUFBTzlRLEVBQUksUUFBQ3lELFFBQVFrUCxHQUFXLEtBQy9CSCxFQUFRclYsRUFBUXFWLFFBQVMsRUFDekJQLEVBQVU5VSxFQUFROFUsVUFBVyxFQUM3QjlCLEVBQU1uUSxFQUFBQSxRQUFLakIsS0FBSzhULFlBQVcsbUJBQW9CWCxFQUFTNVIsUUFBUSxRQUFTLE1BRTNFbkQsRUFBUThVLFVBQ1ZDLEVBQVcvQixHQUdiLE1BQU12UyxFQUFVLENBQ2RzVSxTQUFBQSxFQUNBUyxRQUFBQSxFQUNBUixTQUFBQSxFQUNBUyxRQUFBQSxFQUNBOUIsS0FBQUEsRUFDQTBCLE1BQUFBLEVBQ0FyQyxJQUFBQSxFQUNBOEIsUUFBQUEsR0FJRVcsR0FBVzVQLEVBQUFBLFFBQUdzQyxXQUFXd0wsU0FDckI3VCxFQUFJQyxJQUFJd1IsU0FBU0MsT0FBTyxDQUM1QixDQUNFbk0sS0FBTSxVQUNOa0MsUUFBU2tPLEVBQ0wseUNBQ0EscUNBQ0o3TixLQUFNLFFBRVBmLE1BQU15SyxJQUNIQSxFQUFPcUUsSUFDVGQsR0FBSS9VLEVBQUtXLE1BSWJvVSxHQUFJL1UsRUFBS1csR0FFWCxNQUFPRyxHQUVQLEdBREFkLEVBQUllLElBQUlDLE1BQU1GLEdBQ1ZxSCxRQUFRb0ssS0FBSzNPLFNBQVMsV0FDeEIsTUFBTTlDLElBOUNaLEdBaURLRCxPQUFPQyxJQUFRZCxFQUFJZSxJQUFJQyxNQUFNRixTQUVuQ2dWLEdBQUcsVUFBVSxLQUNacE4sUUFBUTNILE1BQ1IySCxRQUFRM0gsSUFBSSxhQUNaMkgsUUFBUTNILE1BQ1IySCxRQUFRM0gsSUFBSWdWLEVBQUFBLFFBQU1DLEtBQUssdURBQ3ZCdE4sUUFBUTNILElBQUksb0NBQ1oySCxRQUFRM0gsTUFDUjJILFFBQVEzSCxJQUFJZ1YsRUFBQUEsUUFBTUMsS0FBSyw2REFDdkJ0TixRQUFRM0gsSUFBSSwyQ0FDWjJILFFBQVEzSCxXQ2hIVjhQLEdBQWdCLENBQ3BCOVEsT0FBU0MsSUFDS0EsRUFBSUMsSUFDWkMsUUFDREMsUUFBUSxRQUNSbVEsVUFBVSxVQUNWbFEsWUFBWSx5QkFDWkcsUUFBT29GLE1BQU9zUSxFQUFlLE1BQzVCLE1BQU1DLEVBQU9sVyxFQUFJNlEsS0FBS3NGLGtCQUN0QixJQUFLRixFQUFNLENBQ1QsTUFBTTNFLEVBQVUsQ0FDZCxDQUNFL0wsS0FBTSxPQUNOdUMsS0FBTSxPQUNObUosUUFBU2lGLEVBQ1R6TyxRQUFTLG9CQUNUdUosUUFBU2hSLEVBQUk0USxVQUFVLHNCQUF3QixVQUc3Q1ksUUFBZXhSLEVBQUlDLElBQUl3UixTQUFTQyxPQUE4QkosR0FHcEUsT0FGQXRSLEVBQUk2USxLQUFLdUYsWUFBWTVFLEVBQU9YLFdBQzVCN1EsRUFBSWUsSUFBSWtGLFFBQVEsbUJBQW1CdUwsRUFBT1gsUUFHdkNxRixFQUFLdFMsU0FBU3FTLElBR25CalcsRUFBSTZRLEtBQUt1RixZQUFZSCxHQUNyQmpXLEVBQUllLElBQUlrRixRQUFRLG1CQUFtQmdRLE1BSGpDalcsRUFBSWUsSUFBSTZILEtBQUssK0JDekJWeU4sR0FNWEMsWUFBYXhPLEdBQ1h5TyxLQUFLek8sS0FBT0EsRUFDWnlPLEtBQUtMLEtBQU8sSUFBSU0sSUFDaEJELEtBQUtFLFlBQWMsSUFBSUQsSUFHekJFLFNBQVVDLEVBQVl0RSxTQUNwQixJQUFLc0UsRUFBSSxNQUFNLElBQUlDLFVBQVUsbUJBQzdCLEdBQTZCLG1CQUFsQnZFLEVBQU90UyxPQUF1QixNQUFNLElBQUk2VyxVQUFVLHFDQUM3RCxHQUFJTCxLQUFLTCxLQUFLVyxJQUFJRixHQUFLLE1BQU0sSUFBSUMsVUFBVSxHQUFHTCxLQUFLek8sc0JBQXNCNk8sTUFDekVKLEtBQUtMLEtBQUtZLElBQUlILEVBQUl0RSxHQUNkZ0UsR0FBaUJVLGdCQUNmUixLQUFLRSxZQUFZSSxJQUFJUixHQUFpQlUsZUFDYyxRQUF0RDdRLEVBQUFxUSxLQUFLRSxZQUFZbFAsSUFBSThPLEdBQWlCVSxzQkFBZ0IsSUFBQTdRLEdBQUFBLEVBQUF5TSxLQUFLZ0UsR0FFM0RKLEtBQUtFLFlBQVlLLElBQUlULEdBQWlCVSxjQUFlLENBQUNKLEtBSzVESyxXQUFZQyxHQUNWLEdBQUlWLEtBQUtFLFlBQVlJLElBQUlJLEdBQWEsQ0FDcEMsTUFBTUMsRUFBYVgsS0FBS0UsWUFBWWxQLElBQUkwUCxHQUN4Q0MsTUFBQUEsR0FBQUEsRUFBWXRFLFNBQVNQLElBQ25Ca0UsS0FBS0wsS0FBS2lCLE9BQU85RSxPQUt2QitFLFVBQ0UsT0FBT2IsS0FBS3pPLEtBR2RQLElBQUtvUCxHQUNILE9BQU9KLEtBQUtMLEtBQUszTyxJQUFJb1AsR0FHdkJVLFVBQ0UsTUFBTyxJQUFJZCxLQUFLTCxLQUFLb0IsVUFHdkJ0RixZQUNFLE1BQU8sSUFBSXVFLEtBQUtMLEtBQUt6UyxTQUlsQixNQUFNOFQsR0FBdUIsQ0FBQ3pQLEVBQXNCLFFBQ3pEdU8sR0FBaUJVLGNBQWdCalAsU0NoRHRCMFAsR0FVWGxCLFlBQWF0VyxHQVRJdVcsS0FBSXpPLEtBQUcsWUFFUHlPLEtBQUFMLEtBQU8sSUFBSU0sSUFDWEQsS0FBQUUsWUFBYyxJQUFJRCxJQU9qQ0QsS0FBS3JXLFFBQVUsSUFBSXVYLEVBQUFBLFFBQ25CbEIsS0FBSzlFLFNBQVdBLFVBQ2hCOEUsS0FBS3ZXLElBQU1BLEVBR2JvWCxVQUNFLE9BQU9iLEtBQUt6TyxLQUdkMk4sT0NqQmEsSUFBQ3pWLEVEa0JadVcsS0FBS3JXLFFBQ0Z3WCxRQUFRLFFBQTJCLGlCQUNuQ3BYLE9BQU8sY0FBZSxjQUFjLEtBQ25DaVcsS0FBS3ZXLElBQUk4UyxVQUFVLENBQ2pCNkUsT0FBTyxPQUdWclgsT0FBTyxlQUFnQixlQUFlLEtBQ3JDaVcsS0FBS3ZXLElBQUk4UyxVQUFVLENBQ2pCOEUsUUFBUSxPQUdYOUIsR0FBRyxhQUFhLEtBQ2ZTLEtBQUt2VyxJQUFJZSxJQUFJQyxNQUFNLG9CQUFvQnVWLEtBQUtyVyxRQUFRMlgsS0FBSy9WLEtBQUssc0RBQzlEcUcsUUFBUTJQLEtBQUssT0NoQ0w5WCxFRG9DRHVXLEtBQUt2VyxLQ25DZEMsSUFBSXlXLFNBQVMsZ0JBQWlCNVcsSUFDbENFLEVBQUlDLElBQUl5VyxTQUFTLFNBQVV2VixJQUMzQm5CLEVBQUlDLElBQUl5VyxTQUFTLFVBQVc3RSxJQUM1QjdSLEVBQUlDLElBQUl5VyxTQUFTLFNBQVVyRyxJQUMzQnJRLEVBQUlDLElBQUl5VyxTQUFTLE1BQU9sRSxJQUN4QnhTLEVBQUlDLElBQUl5VyxTQUFTLFFBQVNqVyxJQUMxQlQsRUFBSUMsSUFBSXlXLFNBQVMsT0FBUWpCLElBQ3pCelYsRUFBSUMsSUFBSXlXLFNBQVMsT0FBUTdGLElEK0J6QjZGLFNBQVVDLEVBQVl0RSxTQUNwQixJQUFLc0UsRUFBSSxNQUFNLElBQUlDLFVBQVUscUJBQzdCLEdBQTZCLG1CQUFsQnZFLEVBQU90UyxPQUF1QixNQUFNLElBQUk2VyxVQUFVLHFDQUM3RCxHQUFJTCxLQUFLTCxLQUFLVyxJQUFJRixHQUFLLE1BQU0sSUFBSUMsVUFBVSxHQUFHTCxLQUFLek8sNkJBQTZCNk8sTUFDaEZKLEtBQUtMLEtBQUtZLElBQUlILEVBQUl0RSxHQUNsQixNQUFNMEYsRURLRDFCLEdBQWlCVSxjQ0pJLE9BQXRCZ0IsSUFDRXhCLEtBQUtFLFlBQVlJLElBQUlrQixHQUNrQixRQUF6QzdSLEVBQUFxUSxLQUFLRSxZQUFZbFAsSUFBSXdRLFVBQW9CLElBQUE3UixHQUFBQSxFQUFBeU0sS0FBS2dFLEdBRTlDSixLQUFLRSxZQUFZSyxJQUFJaUIsRUFBbUIsQ0FBQ3BCLEtBSy9DSyxXQUFZQyxHQUNWLEdBQUlWLEtBQUtFLFlBQVlJLElBQUlJLEdBQWEsQ0FDcEMsTUFBTUMsRUFBYVgsS0FBS0UsWUFBWWxQLElBQUkwUCxHQUN4Q0MsTUFBQUEsR0FBQUEsRUFBWXRFLFNBQVNQLElBQ25Ca0UsS0FBS0wsS0FBS2lCLE9BQU85RSxPQUt2QjJGLGVBQ0V6QixLQUFLYyxVQUFVekUsU0FBU2pQLElBQ3RCLElBQ0VBLEVBQUs1RCxPQUFPd1csS0FBS3ZXLEtBQ2pCLE1BQU9jLEdBQ1B5VixLQUFLdlcsSUFBSWUsSUFBSUMsTUFBTUYsT0FLekJ5RyxJQUFLb1AsR0FDSCxPQUFPSixLQUFLTCxLQUFLM08sSUFBSW9QLEdBR3ZCVSxVQUNFLE1BQU8sSUFBSWQsS0FBS0wsS0FBS29CLFVBR3ZCdEYsWUFDRSxNQUFPLElBQUl1RSxLQUFLTCxLQUFLelMsU0U1RnpCLElBQVl3VSxHQVVBQyxHQWdCQUMsSUExQlosU0FBWUYsR0FDVkEsRUFBQSxRQUFBLFVBQ0FBLEVBQUEsS0FBQSxPQUNBQSxFQUFBLEtBQUEsT0FDQUEsRUFBQSxNQUFBLFFBSkYsQ0FBWUEsS0FBQUEsR0FLWCxLQUtELFNBQVlDLEdBQ1ZBLEVBQUEsZ0JBQUEsaUJBQ0FBLEVBQUEsT0FBQSxTQUNBQSxFQUFBLGlCQUFBLGtCQUNBQSxFQUFBLGNBQUEsZUFDQUEsRUFBQSxhQUFBLGNBQ0FBLEVBQUEsU0FBQSxXQUNBQSxFQUFBLFFBQUEsVUFDQUEsRUFBQSxVQUFBLFlBQ0FBLEVBQUEsT0FBQSxTQUNBQSxFQUFBLGFBQUEsZUFWRixDQUFZQSxLQUFBQSxHQVdYLEtBS0QsU0FBWUMsR0FDVkEsRUFBQSxjQUFBLGdCQURGLENBQVlBLEtBQUFBLEdBRVgsV0NaWUMsR0FXWDlCLFlBQWF0VyxHQVZJdVcsS0FBQThCLE1BQVEsQ0FDdkIsQ0FBQ0osR0FBU2hTLFNBQVUsUUFDcEIsQ0FBQ2dTLEdBQVMzRixNQUFPLE9BQ2pCLENBQUMyRixHQUFTclAsTUFBTyxTQUNqQixDQUFDcVAsR0FBU2pYLE9BQVEsT0FPbEJ1VixLQUFLdlcsSUFBTUEsRUFHTHNZLFVBQVcvUyxLQUFtQmdULEdBR3BDLEdBREFoQyxLQUFLaUMsU0FBV2pDLEtBQUt2VyxJQUFJNFEsVUFBVSxzQkFDOUIyRixLQUFLdlcsSUFBSTRRLFVBQStCLFdBQWEyRixLQUFLa0MsY0FBY2xULEVBQU1nUixLQUFLaUMsVUFBVyxDQUNqRyxNQUFNRSxFQUFZM0MsRUFBSyxRQUFDUSxLQUFLOEIsTUFBTTlTLElBQW9CLFlBQVlBLEVBQUtvVCxtQkFDeEVqUSxRQUFRM0gsSUFBSTJYLEtBQWNILEdBQzFCaEMsS0FBS3FDLFFBQVVyQyxLQUFLdlcsSUFBSTRRLFVBQStCLHFCQUF1QjdOLEVBQUksUUFBQ2pCLEtBQUt5VSxLQUFLdlcsSUFBSTZZLFFBQVMsaUJBQzFHbFIsWUFBVyxLQUVULElBQ0UsTUFBTW1SLEVBQVN2QyxLQUFLd0Msb0JBQW9CeEMsS0FBS3FDLFNBQzdDLEdBQUlFLEVBQU9FLFFBQVMsQ0FDbEIsTUFBTUMsRUFBYSw0QkFBNkJILEVBQXdCLGlCQUFJLEtBQU8sTUFBUSw4QkFDM0ZwUSxRQUFRM0gsSUFBSWdWLEVBQUssUUFBQ21ELE9BQU8sbUJBQW9CRCxHQUM3QzFDLEtBQUs0QyxnQkFBZ0I1QyxLQUFLcUMsU0FDMUJMLEVBQUlhLFFBQVFILEdBRWQxQyxLQUFLOEMsZUFBZTlDLEtBQUtxQyxRQUFTclQsS0FBU2dULEdBQzNDLE1BQU96WCxHQUVQNEgsUUFBUTFILE1BQU0sNENBQTZDRixNQUU1RCxJQUlDaVksb0JBQXFCSCxHQUszQixHQUFJN1MsRUFBRSxRQUFDc0MsV0FBV3VRLEdBQVUsQ0FDMUIsTUFBTVUsRUFBY3ZULEVBQUUsUUFBQ3dULFNBQVNYLEdBQVNZLEtBQ25DQyxFQUE2RyxLQUExRnpQLEdBQVl1TSxLQUFLdlcsSUFBSTRRLFVBQStCLDhCQUFnQyxJQUFhLEtBQzFILE1BQU8sQ0FDTG9JLFFBQVNNLEVBQWNHLEVBQ3ZCSCxZQUFBQSxFQUNBRyxpQkFBQUEsR0FHSixNQUFPLENBQ0xULFNBQVMsR0FJTEcsZ0JBQWlCUCxHQUNuQjdTLEVBQUUsUUFBQ3NDLFdBQVd1USxLQUNoQjdTLFVBQUcyVCxXQUFXZCxHQUNkN1MsVUFBRzRULGVBQWVmLElBSWRTLGVBQWdCVCxFQUFpQnJULEtBQWlCZ1QsR0FDeEQsSUFDRSxJQUFJeFgsRUFBTSxHQUFHNlksRUFBSyxVQUFHakssT0FBTyxtQ0FBbUNwSyxFQUFLb1Qsa0JBQ3BFSixFQUFJM0YsU0FBU2pQLElBQ1BBLGFBQWdCa1csT0FBa0IsVUFBVHRVLEVBQzNCeEUsR0FBTyxvQ0FBb0MrWSxFQUFBQSxRQUFLbkssT0FBT2hNLE1BQUFBLFNBQUFBLEVBQU1vVywwQ0FFekMsaUJBQVRwVyxJQUNUQSxFQUFPbUcsS0FBS3FLLFVBQVV4USxFQUFNLEtBQU0sSUFFcEM1QyxHQUFPLEdBQUc0QyxTQUdkNUMsR0FBTyxLQUVQZ0YsRUFBQUEsUUFBR2lVLGVBQWVwQixFQUFTN1gsR0FDM0IsTUFBT0QsR0FDUDRILFFBQVExSCxNQUFNLHNDQUF1Q0YsSUFJakQyWCxjQUFlbFQsRUFBYzhTLEdBQ25DLFlBQWM5VSxJQUFWOFUsR0FBaUMsUUFBVkEsSUFHdkI5VyxNQUFNb0ksUUFBUTBPLEdBQ1RBLEVBQU0zVSxNQUFNQyxHQUFrQkEsSUFBUzRCLEdBQWlCLFFBQVQ1QixJQUUvQzRCLElBQVM4UyxHQUlwQnBTLFdBQVlzUyxHQUNWaEMsS0FBSytCLFVBQVVMLEdBQVNoUyxXQUFZc1MsR0FHdENqRyxRQUFTaUcsR0FDUGhDLEtBQUsrQixVQUFVTCxHQUFTM0YsUUFBU2lHLEdBR25DdlgsU0FBVXVYLEdBQ1JoQyxLQUFLK0IsVUFBVUwsR0FBU2pYLFNBQVV1WCxHQUdwQzNQLFFBQVMyUCxHQUNQaEMsS0FBSytCLFVBQVVMLEdBQVNyUCxRQUFTMlAsR0FHbkNaLFNBQVVZLEdBQ0puTyxNQUNGbU0sS0FBSytCLFVBQVVMLEdBQVMzRixRQUFTaUcsSUMxSGpDLE1BQU8wQixXQUFrQkMsRUFBQUEsYUFLN0I1RCxZQUFhdFcsR0FDWG1hLFFBSmU1RCxLQUFPNkQsUUFBVyx3Q0FLakM3RCxLQUFLdlcsSUFBTUEsRUFDWCxNQUFNcWEsRUFBZXRYLEVBQUFBLFFBQUtqQixLQUFLOUIsRUFBSTZZLFFBQVMsZUFDdEN5QixFQUFhdlgsRUFBQUEsUUFBS2pCLEtBQUs5QixFQUFJNlksUUFBUyxXQUMxQzlTLFVBQUc4TyxjQUFjeUYsR0FDakJ2VSxVQUFHd1UsYUFBYUYsR0FDaEI5RCxLQUFLaUUsUUFBVXpYLEVBQUFBLFFBQUtqQixLQUFLOUIsRUFBSTZZLFFBQVMsU0FBVSxjQUdsRGxULG9CQUNFLE1BQU04VSxFQUFZMVgsRUFBSSxRQUFDd0IsUUFBUWdTLEtBQUtpRSxTQUlwQyxHQUhLelUsRUFBRSxRQUFDc0MsV0FBV29TLElBQ2pCMVUsRUFBRSxRQUFDMlUsVUFBVUQsRUFBVyxDQUFFRSxXQUFXLElBRWxDNVUsRUFBQUEsUUFBR3NDLFdBQVdrTyxLQUFLaUUsU0FZdEIsT0FBTyxFQVhQakUsS0FBS3ZXLElBQUllLElBQUl1UixLQUFLLHNCQUNsQixJQUNFLE1BQU01TCxRQUFZa1UsRUFBSyxRQUFDclQsSUFBSWdQLEtBQUs2RCxRQUFTLENBQUV0VCxhQUFjLGdCQUcxRCxPQUZBZixFQUFFLFFBQUMrTyxjQUFjeUIsS0FBS2lFLFFBQVM5VCxFQUFJTyxNQUNuQ3NQLEtBQUt2VyxJQUFJZSxJQUFJdVIsS0FBSywrQkFDWCxFQUNQLE1BQU94UixHQUVQLE9BREF5VixLQUFLdlcsSUFBSWUsSUFBSUMsTUFBTSw4QkFDWixHQU9iMkUsWUFBYTBILEdBRVgsTUFBTXJOLEVDM0NtQixDQUFDQSxJQUNyQixDQUNMNmEsV0FBWTdhLEVBQUk2YSxXQUNoQmhDLFFBQVM3WSxFQUFJNlksUUFDYjlYLElBQUtmLEVBQUllLElBQ1RkLElBQUtELEVBQUlDLElBQ1Q2YSxPQUFRLEdBQ1J6TixNQUFPLEdBQ1AwTixTQUFVLEdBQ1Y5SSxhQUFjalMsRUFBSWlTLGFBQ2xCblMsY0FBZUUsRUFBSUYsY0FDbkJrYixRQUFTaGIsRUFBSWdiLFFBQ2JqSixPQUFRL1IsRUFBSStSLE9BQ1prSixRQUFTamIsRUFBSWliLFFBQ2JDLFlBQWFsYixFQUFJa2IsWUFDakJ2VSxRQUFTM0csRUFBSTJHLFFBQ2JrSyxLQUFNN1EsRUFBSTZRLEtBQ1ZELFVBQVc1USxFQUFJNFEsVUFBVXVLLEtBQUtuYixHQUM5QjRSLFdBQVk1UixFQUFJNFIsV0FBV3VKLEtBQUtuYixHQUNoQ29iLGFBQWNwYixFQUFJb2IsYUFBYUQsS0FBS25iLEdBQ3BDOFMsVUFBVzlTLEVBQUk4UyxVQUFVcUksS0FBS25iLEdBQzlCcWIsWUFBYXJiLEVBQUlxYixZQUFZRixLQUFLbmIsR0FDbENxUSxPQUFRclEsRUFBSXFRLE9BQU84SyxLQUFLbmIsR0FDeEJzYixZQUFhdGIsRUFBSXNiLFlBQVlILEtBQUtuYixHQUNsQzhWLEdBQUk5VixFQUFJOFYsR0FBR3FGLEtBQUtuYixHQUNoQnViLEtBQU12YixFQUFJdWIsS0FBS0osS0FBS25iLEdBQ3BCd2IsZUFBZ0J4YixFQUFJd2IsZUFBZUwsS0FBS25iLEdBQ3hDeWIsSUFBS3piLEVBQUl5YixJQUFJTixLQUFLbmIsR0FDbEIwYixtQkFBb0IxYixFQUFJMGIsbUJBQW1CUCxLQUFLbmIsR0FDaEQyYixnQkFBaUIzYixFQUFJMmIsZ0JBQWdCUixLQUFLbmIsR0FDMUM0YixnQkFBaUI1YixFQUFJNGIsZ0JBQWdCVCxLQUFLbmIsR0FDMUM2YixVQUFXN2IsRUFBSTZiLFVBQVVWLEtBQUtuYixHQUM5QjhiLGFBQWM5YixFQUFJOGIsYUFBYVgsS0FBS25iLEdBQ3BDK2IsS0FBTS9iLEVBQUkrYixLQUFLWixLQUFLbmIsR0FDcEJnYyxjQUFlaGMsRUFBSWdjLGNBQWNiLEtBQUtuYixHQUN0Q2ljLGdCQUFpQmpjLEVBQUlpYyxnQkFBZ0JkLEtBQUtuYixHQUMxQ2tjLG9CQUFxQmxjLEVBQUlrYyxvQkFBb0JmLEtBQUtuYixHQUNsRG1jLFdBQVluYyxFQUFJbWMsV0FBV2hCLEtBQUtuYixLRE1wQm9jLENBQWM3RixLQUFLdlcsS0FDL0IsSUFFRSxJQUFLdUIsTUFBTW9JLFFBQVEwRCxHQUNqQixNQUFNLElBQUl3TSxNQUFNLDJCQUVsQjdaLEVBQUlxTixNQUFRQSxFQUNack4sRUFBSXFjLGFBQWUsR0FDbkJyYyxFQUFJK2EsU0FBV3VCLFlBQVVqUCxHQUN6QnJOLEVBQUk4YSxPQUFTLEdBQ2IsTUFBTTVLLEVBQWtCbFEsRUFBSTRRLFVBQW1DLG9CQUN6RHJMLEVBQU92RixFQUFJNFEsVUFBK0Isb0JBQXNCNVEsRUFBSTRRLFVBQStCLG1CQUFxQixRQUM3RzVRLEVBQUkrUixPQUFPVSxTQUFTbEwsSUFBSWhDLElBQ3hCMkssRUFDZkEsRUFBZ0JuQixPQUFTLE9BQ2hCbUIsSUFDVEEsRUFBZ0JuQixPQUFTeEosR0FFM0IsTUFBTXVLLEVBQW1COVAsRUFBSTRRLFVBQW9DLHFCQUNqRSxHQUFJVixHQUFtQkosRUFBa0IsQ0FDdkMsTUFBTXVLLEVBQWV0WCxFQUFBQSxRQUFLakIsS0FBSzlCLEVBQUk2WSxRQUFTLGVBQ3ZDOVMsRUFBRSxRQUFDc0MsV0FBV2dTLElBQ2pCdFUsVUFBRzJVLFVBQVVMLEdBRWYsTUFBTWtDLEVBQWUseUJBQ2ZDLEVBQWMsa0NBQ2RqVyxRQUFRa1csV0FBV3pjLEVBQUlxTixNQUFNNUwsS0FBSWtFLE1BQU9oQyxFQUFjK1ksdUJBQzFELElBQUlwSyxFQUNKLEdBQUkxTixHQUFNakIsR0FBTyxDQUdmLEdBRkEzRCxFQUFJcWMsYUFBY0ssR0FBUy9ZLEVBQzNCMk8sUUFBYWxNLEdBQVd6QyxFQUFNM0QsSUFDMUJzUyxFQUFLck0sVUFBV3FNLEVBQUt4TSxPQW1DdkIsTUFBTSxJQUFJK1QsTUFBTXZILEVBQUtuTSxRQW5DVSxDQUMvQixJQUFJd1csRUFDSixHQUFJOU0sR0FBaUJDLEVBQThCLFFBQVo1SixFQUFBb00sRUFBS3JQLGVBQU8sSUFBQWlELEVBQUFBLEVBQUksSUFBSyxPQUM3QnFRLEtBQUtxRyxlQUloQzVjLEVBQUllLElBQUl1UixLQUFLaUssR0FDYkksUUFBMEI3TyxHQUFrQndFLEVBQUt4TSxPQUFRZ0ssRUFBa0J5RyxLQUFLaUUsVUFIaEZqRSxLQUFLdlcsSUFBSWUsSUFBSTZILEtBQUssaURBY3RCLEdBUklxSCxHQUFhQyxFQUE2QixRQUFaa0MsRUFBQUUsRUFBS3JQLGVBQU8sSUFBQW1QLEVBQUFBLEVBQUksTUFDaERwUyxFQUFJZSxJQUFJdVIsS0FBS2tLLEdBQ2JHLFFBQTBCM04sR0FBYTJOLE1BQUFBLEVBQUFBLEVBQXFCckssRUFBS3hNLE9BQVFvSyxFQUE2QixRQUFaMk0sRUFBQXZLLEVBQUtyUCxlQUFPLElBQUE0WixFQUFBQSxFQUFJLE1BRXZHRixJQUFxQnpNLE1BQUFBLE9BQWUsRUFBZkEsRUFBaUJnQixnQkFDekNsUixFQUFJZSxJQUFJdVIsS0FBSyxxQkFDYnFLLFFBQTBCdk0sR0FBV2tDLEVBQUt4TSxPQUF3QixRQUFoQmdYLEVBQUF4SyxFQUFLclAsZUFBVyxJQUFBNlosRUFBQUEsRUFBQSxLQUVoRUgsRUFBbUIsQ0FDckIsSUFBSUksRUFFRkEsR0FERTdNLE1BQUFBLFNBQUFBLEVBQWlCL0IsV0FDd0IsUUFBbEM2TyxFQUFBOU0sTUFBQUEsT0FBQSxFQUFBQSxFQUFpQjlCLHFCQUFpQixJQUFBNE8sRUFBQUEsRUFBQSxNQUV0QixRQUFaQyxFQUFBM0ssRUFBS3JQLGVBQU8sSUFBQWdhLEVBQUFBLEVBQUksR0FFM0JGLEVBQVNBLEVBQU92VixXQUFXLEtBQU91VixFQUFTLElBQUlBLElBQy9DLE1BQU1HLEVBQVduYSxFQUFBQSxRQUFLakIsS0FBS3VZLEVBQWMsR0FBRy9ILEVBQUt6TSxTQUM3QyxHQUFHOUMsRUFBSSxRQUFDQyxTQUFTc1AsRUFBS3pNLFNBQVU5QyxFQUFBQSxRQUFLRSxRQUFRcVAsRUFBS3pNLGFBQWFrWCxLQUMvRCxJQUFJM2EsTUFBTythLFlBQVlKLEtBQzNCL2MsRUFBSXFjLGFBQWNLLEdBQVMzWixFQUFBQSxRQUFLakIsS0FBS2lCLEVBQUFBLFFBQUt3QixRQUFRWixHQUFPWixFQUFBQSxRQUFLQyxTQUFTa2EsSUFDdkVuWCxFQUFBQSxRQUFHK08sY0FBY29JLEVBQVVQLEdBQzNCM2MsRUFBSXFOLE1BQU1xUCxHQUFTUSxRQUtsQixDQUNMLElBQUlQLEVBRUosR0FEQTNjLEVBQUlxYyxhQUFjSyxHQUFTL1ksRUFDdkJrTSxHQUFpQkMsRUFBa0IvTSxFQUFBQSxRQUFLRSxRQUFRVSxJQUFRLE9BQzdCNFMsS0FBS3FHLGVBSWhDNWMsRUFBSWUsSUFBSXVSLEtBQUtpSyxHQUNiSSxRQUEwQjdPLEdBQWtCL0gsRUFBQUEsUUFBR3lPLGFBQWE3USxHQUFPbU0sRUFBa0J5RyxLQUFLaUUsVUFIMUZqRSxLQUFLdlcsSUFBSWUsSUFBSTZILEtBQUssaURBTXRCLEdBQUlxSCxHQUFhQyxFQUFpQm5OLEVBQUFBLFFBQUtFLFFBQVFVLElBRTdDLEdBREEzRCxFQUFJZSxJQUFJdVIsS0FBS2tLLEdBQ2MsVUFBdkJ6WixFQUFJLFFBQUNFLFFBQVFVLElBQTRDLFVBQXZCWixFQUFBQSxRQUFLRSxRQUFRVSxHQUFtQixDQUNwRSxNQUFNeVosRUFBYXJYLEVBQUFBLFFBQUd5TyxhQUFhN1EsR0FDN0IwWixRQUFtQkMsV0FBWSxDQUNuQ3hYLE9BQVFzWCxFQUNSek4sT0FBUSxPQUNSekIsUUFBUyxJQUVMcVAsRUFBc0J4YSxFQUFBQSxRQUFLakIsS0FBS3VZLEVBQWMsR0FBR3RYLEVBQUFBLFFBQUtDLFNBQVNXLEVBQU1aLEVBQUFBLFFBQUtFLFFBQVFVLFdBQ3hGb0MsRUFBRSxRQUFDK08sY0FBY3lJLEVBQXFCbFIsT0FBTzdLLEtBQUs2YixJQUNsRFYsUUFBMEIzTixHQUFhakosVUFBR3lPLGFBQWErSSxHQUFzQnJOLEVBQWlCLGFBRTlGeU0sUUFBMEIzTixHQUFhMk4sTUFBQUEsRUFBQUEsRUFBcUI1VyxFQUFFLFFBQUN5TyxhQUFhN1EsR0FBT3VNLEVBQWlCbk4sRUFBSSxRQUFDRSxRQUFRVSxJQU9ySCxJQUpLZ1osSUFBcUJ6TSxNQUFBQSxPQUFlLEVBQWZBLEVBQWlCZ0IsZ0JBQ3pDbFIsRUFBSWUsSUFBSXVSLEtBQUsscUJBQ2JxSyxRQUEwQnZNLEdBQVdySyxFQUFBQSxRQUFHeU8sYUFBYTdRLEdBQU9aLFVBQUtFLFFBQVFVLEtBRXZFZ1osRUFBbUIsQ0FDckIsSUFBSUksRUFFRkEsR0FERTdNLE1BQUFBLFNBQUFBLEVBQWlCL0IsV0FDd0IsUUFBbENxUCxFQUFBdE4sTUFBQUEsT0FBQSxFQUFBQSxFQUFpQjlCLHFCQUFpQixJQUFBb1AsRUFBQUEsRUFBQSxNQUVsQ3phLEVBQUksUUFBQ0UsUUFBUVUsR0FFeEJvWixFQUFTQSxFQUFPdlYsV0FBVyxLQUFPdVYsRUFBUyxJQUFJQSxJQUMvQyxNQUFNRyxFQUFXbmEsRUFBQUEsUUFBS2pCLEtBQUt1WSxFQUFjLEdBQUd0WCxFQUFBQSxRQUFLQyxTQUFTVyxFQUFNWixFQUFJLFFBQUNFLFFBQVFVLE1BQVNvWixLQUN0Ri9jLEVBQUlxYyxhQUFjSyxHQUFTM1osRUFBQUEsUUFBS2pCLEtBQUtpQixFQUFJLFFBQUN3QixRQUFRWixHQUFPLEdBQUdaLEVBQUFBLFFBQUtDLFNBQVNXLEVBQU1aLEVBQUFBLFFBQUtFLFFBQVFVLE1BQVNvWixLQUN0R2hYLEVBQUFBLFFBQUcrTyxjQUFjb0ksRUFBVVAsR0FDM0IzYyxFQUFJcU4sTUFBTXFQLEdBQVNRLGFBS3pCLElBQUssTUFBTXZaLEtBQVEzRCxFQUFJcU4sTUFDckJyTixFQUFJcWMsYUFBYTFKLEtBQUtoUCxTQUlwQjRTLEtBQUtrSCxnQkFBZ0J6ZCxTQUNyQnVXLEtBQUttSCxZQUFZMWQsR0FDdkIsTUFBTTJkLEVBQWUzZCxFQUFJNFEsVUFBZSxtQkFBcUIsR0FDN0QsR0FBSStNLEVBQWF2TSxPQUFRLENBQ3ZCLE1BQU16QixFQUFTZ08sRUFBYWhPLFFBQVUsYUFDdEMzUCxFQUFJOGEsT0FBUzlhLEVBQUk4YSxPQUFPclosS0FBSSxDQUFDa0MsRUFBZ0IrWSxLQUMzQyxJQUFJN1csRUFBV2xDLEVBQUtrQyxTQVNwQixPQVJJOEosSUFDRjlKLEVBQVc5RCxHQUErQi9CLEVBQUlxYyxhQUFjSyxHQUFRL00sR0FDcEU5SixFQUFXQSxFQUFTeEMsUUFBUSxPQUFRLEtBQ1QsTUFBdkJ3QyxFQUFTdEQsT0FBTyxLQUNsQnNELEdBQXNCNlcsRUFBTXBhLGFBR2hDcUIsRUFBS2tDLFNBQVdBLEVBQ1RsQyxLQU9YLGFBSk00UyxLQUFLcUgsYUFBYTVkLFNBQ2xCdVcsS0FBS3NILFNBQVM3ZCxHQUNwQkEsRUFBSXFOLE1BQVFyTixFQUFJK2EsZUFDVnhFLEtBQUt1SCxZQUFZOWQsR0FDaEJBLEVBQ1AsTUFBT2MsR0FLUCxHQUpBZCxFQUFJZSxJQUFJNkgsS0FBS3NQLEdBQWM2RixRQUMzQi9kLEVBQUkrYixLQUFLN0QsR0FBYzhGLGlCQUFrQixHQUN6Q2hlLEVBQUkrYixLQUFLN0QsR0FBYzZGLE9BQVFqZCxHQUMvQmQsRUFBSWUsSUFBSUMsTUFBTUYsR0FDVmQsRUFBSTRRLFVBQStCLFNBQ3JDLE1BQU05UCxFQUVSLE9BQU9kLEdBSUgyRixzQkFBdUIzRixHQUs3QixPQUpBQSxFQUFJK2IsS0FBSzdELEdBQWM4RixnQkFBaUIsR0FDeENoZSxFQUFJK2IsS0FBSzdELEdBQWMrRixpQkFBa0JqZSxHQUN6Q0EsRUFBSWUsSUFBSXVSLEtBQUssMEJBQ1BpRSxLQUFLMkgsY0FBY2xlLEVBQUkrUixPQUFPb00sdUJBQXdCbmUsR0FDckRBLEVBR0QyRixrQkFBbUIzRixHQUN6QkEsRUFBSStiLEtBQUs3RCxHQUFjOEYsZ0JBQWlCLElBQ3hDLE1BQU16WSxFQUFPdkYsRUFBSTRRLFVBQStCLHVCQUF5QixPQUN6RSxJQUFJd04sRUFBcUI3WSxFQUNyQm1OLEVBQWMxUyxFQUFJK1IsT0FBT1csWUFBWW5MLElBQUloQyxHQVE3QyxPQVBLbU4sSUFDSEEsRUFBYzFTLEVBQUkrUixPQUFPVyxZQUFZbkwsSUFBSSxRQUN6QzZXLEVBQXFCLE9BQ3JCcGUsRUFBSWUsSUFBSTZILEtBQUssNEJBQTRCckQsNENBRTNDdkYsRUFBSWUsSUFBSXVSLEtBQUssMkNBQTJDOEwsWUFDbEQxTCxNQUFBQSxPQUFBLEVBQUFBLEVBQWEzUyxPQUFPQyxJQUNuQkEsRUFHRDJGLG1CQUFvQjNGLEdBSzFCLE9BSkFBLEVBQUkrYixLQUFLN0QsR0FBYzhGLGdCQUFpQixJQUN4Q2hlLEVBQUllLElBQUl1UixLQUFLLGlCQUNidFMsRUFBSStiLEtBQUs3RCxHQUFjbUcsY0FBZXJlLFNBQ2hDdVcsS0FBSzJILGNBQWNsZSxFQUFJK1IsT0FBT3VNLG9CQUFxQnRlLEdBQ2xEQSxFQUdEMkYsZUFBZ0IzRixHQUN0QixJQUFJdUYsRUFBT3ZGLEVBQUk0USxVQUErQixvQkFBc0I1USxFQUFJNFEsVUFBK0IsbUJBQXFCLE9BQ3hINkIsRUFBV3pTLEVBQUkrUixPQUFPVSxTQUFTbEwsSUFBSWhDLEdBQ25DNlksRUFBcUI3WSxFQUNwQmtOLElBQ0hsTixFQUFPLE9BQ1A2WSxFQUFxQixPQUNyQjNMLEVBQVd6UyxFQUFJK1IsT0FBT1UsU0FBU2xMLElBQUksUUFDbkN2SCxFQUFJZSxJQUFJNkgsS0FBSyx5QkFBeUJyRCx5Q0FFeEN2RixFQUFJZSxJQUFJdVIsS0FBSyxxQ0FBcUM4TCxZQUM1QzNMLE1BQUFBLE9BQUEsRUFBQUEsRUFBVTFTLE9BQU9DLElBQ3ZCLElBQUssTUFBTXVlLEtBQWF2ZSxFQUFJOGEsT0FDMUJ5RCxFQUFVaFosS0FBT0EsRUFFbkIsT0FBT3ZGLEVBR0QyRixrQkFBbUIzRixHQUN6QkEsRUFBSStiLEtBQUs3RCxHQUFjc0csYUFBY3hlLEdBQ3JDQSxFQUFJK2IsS0FBSzdELEdBQWM4RixnQkFBaUIsV0FDbEN6SCxLQUFLMkgsY0FBY2xlLEVBQUkrUixPQUFPME0sbUJBQW9CemUsR0FDeEQsSUFBSXVZLEVBQU0sR0FDVixNQUFNbFgsRUFBU3JCLEVBQUk4YSxPQUFPelosT0FDcEJxZCxHQUF3RixJQUFwRTFlLEVBQUk0USxVQUFnQyw0QkFDOUQsSUFBSyxJQUFJK04sRUFBSSxFQUFHQSxFQUFJdGQsRUFBUXNkLFNBQ1UsSUFBekIzZSxFQUFJOGEsT0FBTzZELEdBQUdDLFNBQ3ZCckcsR0FBT21HLEVBQW9CelosR0FBZ0JqRixFQUFJOGEsT0FBTzZELEdBQUdDLFFBQVc1ZSxFQUFJOGEsT0FBTzZELEdBQUdDLE9BQzlFRCxJQUFNdGQsRUFBUyxJQUNqQmtYLEdBQU8sY0FHSnZZLEVBQUk4YSxPQUFPNkQsR0FBR0UsbUJBQ2Q3ZSxFQUFJOGEsT0FBTzZELEdBQUc3WSxPQUl2QixPQUZBOUYsRUFBSStiLEtBQUs3RCxHQUFjNEcsU0FBVTllLEdBQ2pDQSxFQUFJZSxJQUFJa0YsUUFBUSxLQUFLc1MsS0FDZHZZLEVBR0QyRixvQkFBcUJvWixFQUFxQy9lLEdBQ2hFLE1BQU1RLEVBQVV1ZSxFQUFpQjFILFVBQzNCMkgsRUFBY0QsRUFBaUIvTSxZQUMvQmlOLEVBQWdCRixFQUFpQjNILFVBVXZDLGFBVE03USxRQUFRMlksSUFBSTFlLEVBQVFpQixLQUFJa0UsTUFBTzBNLEVBQWlCcUssS0FDcEQsSUFDRTFjLEVBQUllLElBQUl1UixLQUFLLEdBQUcyTSxNQUFrQkQsRUFBWXRDLG9CQUN4Q3JLLEVBQU90UyxPQUFPQyxHQUNwQixNQUFPYyxHQUVQLE1BREFkLEVBQUllLElBQUlDLE1BQU0sR0FBR2llLE1BQWtCRCxFQUFZdEMsWUFDekM1YixPQUdIZCxHRTdSWCxNQUFNbWYsR0FBYyxDQUFDdFosRUFBa0J3RixFQUFlK1QsRUFBa0JDLEVBQWUsTUFFOUUsQ0FDTHpZLE9BQVEsT0FDUi9CLElBQUssV0FIUXdhLEdBQWdCLHdCQUk3QkMsUUFBUyxDQUNQQyxZQUFhLHNCQUNiLGFBQWMsVUFDZEMsY0FBZUosR0FFakJLLFNBQVUsQ0FDUkMsT0FBUSxDQUNOQyxNQUFPdFUsRUFDUDFLLFFBQVMsQ0FDUGlmLFNBQVUvWixJQUdkZ2EsSUFBSyxVQUtMOWYsR0FBUzRGLE1BQU8zRixJQUNwQixNQUFNOGYsRUFBYTlmLEVBQUk0USxVQUF1QixlQUM5QyxJQUFLa1AsRUFDSCxNQUFNLElBQUlqRyxNQUFNLDZCQUVsQixNQUFNa0csRUFBVS9mLEVBQUk4YSxPQUNwQixJQUFLLE1BQU1wUSxLQUFPcVYsRUFDaEIsR0FBSXJWLEVBQUk3RSxVQUFZNkUsRUFBSTVFLE9BQVEsQ0FDOUIsSUFBSXVGLEVBQVFYLEVBQUk1RSxRQUNYdUYsR0FBU1gsRUFBSW1VLGNBQ2hCeFQsRUFBUWdCLE9BQU83SyxLQUFLa0osRUFBSW1VLFlBQWEsV0FFdkMsTUFBTW1CLEVBQWFiLEdBQVl6VSxFQUFJN0UsU0FBVXdGLEVBQU95VSxNQUFBQSxTQUFBQSxFQUFZRyxNQUFPSCxNQUFBQSxPQUFVLEVBQVZBLEVBQVlULGNBQ25GLElBQ0UsTUFBTTNZLFFBQW9CMUcsRUFBSTJHLFFBQVFxWixHQUNoQ0UsRUFBT3BXLEtBQUtDLE1BQU1yRCxHQUN4QixHQUFrQixZQUFkd1osRUFBS0MsWUFDQXpWLEVBQUltVSxtQkFDSm5VLEVBQUk1RSxPQUNYNEUsRUFBSWtVLE9BQVNzQixFQUFLalosS0FBS3BDLElBQ3ZCNkYsRUFBSTBWLEtBQU9GLEVBQUtqWixLQUFLbVosU0FDaEIsQ0FBQSxHQUFrQixtQkFBZEYsRUFBS0MsTUFBb0QsaUJBQWhCRCxFQUFLRyxPQVN2RCxNQUpBcmdCLEVBQUkrYixLQUFLN0QsR0FBY29JLGFBQWMsQ0FDbkNDLE1BQU92Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLGlCQUN2Q29QLEtBQU1BLEVBQUt6WSxVQUVQLElBQUlvUyxNQUFNcUcsRUFBS3pZLGdCQVJkaUQsRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BQ1g0RSxFQUFJa1UsT0FBU3NCLEVBQUtHLFFBUXBCLE1BQU92ZixHQUVQLE1BREFkLEVBQUllLElBQUlDLE1BQU1GLEdBQ1JBLEdBSVosT0FBT2QsR0FHSG1CLEdBQVVuQixJQUNkLE1BQU0yUSxFQUFhM1EsRUFBSTRRLFVBQXVCLGdCQUFrQixHQXNCaEUsTUFyQmdDLENBQzlCLENBQ0U5SSxLQUFNLFFBQ05MLFFBQVMsWUFDVGxDLEtBQU0sUUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHNCQUN0REUsUUFBU0wsRUFBV3NQLE9BQVMsR0FDN0JsUCxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sZUFDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsOEJBQ25EckosY0FDRixPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLHNDQUVyQ3pRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDhCQUN0REUsUUFBU0wsRUFBVzBPLGNBQWdCLEdBQ3BDdE8sVUFBVSxLQ3hFaEIsTUFBTTBQLEdBQW9CLENBQUM5ZixFQUF1QmtGLEtBQ2hELE1BQU02YSxFQUFXL2YsRUFBUStmLFNBQ25CQyxFQUFZaGdCLEVBQVFnZ0IsVUFDcEJDLEVBQVFqZ0IsRUFBUWlnQixNQUNoQkMsRUFBU2xnQixFQUFRa2dCLE9BQ3ZCLElBQUlDLEVBQ0FDLEVBQW1CLEdBQ3ZCLEdBQUtwZ0IsRUFBUStXLFNBQStCLE9BQXBCL1csRUFBUStXLFFBVXpCLENBRUwsTUFBTXNKLEVBQVFyZixLQUFLQyxPQUFNLElBQUlRLE1BQU8rYSxVQUFZLEtBRWhENEQsRUFBVyxHQUFHQyxLQURHQSxFQUFRLFFBRXpCLE1BQU1DLEVBQVVwZSxFQUFBQSxRQUFPcWUsV0FBVyxPQUFRUCxHQUFXemYsT0FBTzZmLEdBQVU3ZCxPQUFPLE9BQ3ZFaWUsRUFBV3hnQixFQUFRd2dCLFNBQVd4Z0IsRUFBUXdnQixTQUFXLE9BQU94Z0IsRUFBUXlnQixvQkFDaEVDLEVBQWEsU0FBUzFnQixFQUFRb0MsT0FBTzhDLGFBQW9CbEYsRUFBUWtnQixVQUFVTSxNQUUzRUcsRUFBZSxTQUFTUCxNQURMbGUsVUFBT0MsV0FBVyxRQUFRNUIsT0FBT21nQixHQUFZbmUsT0FBTyxXQUU3RTRkLEVBQVlqZSxFQUFNLFFBQUNxZSxXQUFXLE9BQVFELEdBQVMvZixPQUFPb2dCLEdBQWNwZSxPQUFPLFdBcEIzQixDQUNoRCxNQUFNckIsRUFBU0YsS0FBS0MsTUFBc0IsS0FBaEJELEtBQUtFLFVBQ3pCMGYsRUFBVTVmLEtBQUtDLE9BQU0sSUFBSVEsTUFBTythLFVBQVksS0FBUSxFQUdwRHFFLEVBQWlCLEtBQUtaLE9BQVdDLE9BQVlILE9BRm5DYSxFQUFVLFVBRW9EQSxPQUFhMWYsT0FFckY0ZixFQUFhNWUsVUFBT3FlLFdBQVcsT0FBUVAsR0FBV3pmLE9BQU9zZ0IsR0FBZ0J0ZSxTQUN6RXdlLEVBQWFyVixPQUFPc1YsT0FBTyxDQUFDRixFQUFZcFYsT0FBTzdLLEtBQUtnZ0IsS0FDMURWLEVBQVl6VSxPQUFPN0ssS0FBS2tnQixHQUFZcGYsU0FBUyxVQWEvQyxNQUFPLENBQ0x3ZSxVQUFBQSxFQUNBRixNQUFBQSxFQUNBQyxPQUFBQSxFQUNBRSxTQUFBQSxJQUlFNUIsR0FBYyxDQUFDeGUsRUFBdUJrRixFQUFrQmliLEVBQXVCelYsRUFBZXFNLEtBQ2xHLE1BQU0wSixFQUFPemdCLEVBQVF5Z0IsS0FDZnJlLEVBQU9wQyxFQUFRb0MsS0FDckIsR0FBS3BDLEVBQVErVyxTQUErQixPQUFwQi9XLEVBQVErVyxRQWdCekIsQ0FDTCxNQUFNeUosRUFBV3hnQixFQUFRd2dCLFNBQVd4Z0IsRUFBUXdnQixTQUFXLE9BQU94Z0IsRUFBUXlnQixvQkFDdEUsTUFBTyxDQUNMeGEsT0FBUSxNQUNSL0IsSUFBSyxVQUFVbEUsRUFBUWtnQixVQUFVTSxLQUFZUyxtQkFBbUI3ZSxLQUFRNmUsbUJBQW1CL2IsS0FDM0Z5WixRQUFTLENBQ1B1QyxLQUFNLEdBQUdsaEIsRUFBUWtnQixVQUFVTSxJQUMzQjNCLGNBQWUsOEJBQThCN2UsRUFBUStmLHdCQUF3QkksRUFBVUMsdUJBQXVCRCxFQUFVQyw2REFBNkRELEVBQVVBLFlBQy9MdkIsWUFBYXVDLEdBQUksUUFBQ0MsT0FBT2xjLElBQWEsMkJBQ3RDLGFBQWMsU0FBUzZSLGVBRXpCd0ksS0FBTTdVLEVBQ054RSx5QkFBeUIsR0EzQjNCLE1BQU8sQ0FDTEQsT0FBUSxPQUNSL0IsSUFBSyxVQUFVdWMsZ0NBQW1DTixFQUFVRixTQUFTRSxFQUFVRCxVQUFVM2IsVUFBVW5DLEtBQVE4QyxJQUMzR3laLFFBQVMsQ0FDUHVDLEtBQU0sR0FBR1Qsc0JBQ1Q1QixjQUFlc0IsRUFBVUEsVUFDekJ2QixZQUFhLHNCQUNiLGFBQWMsU0FBUzdILGVBRXpCK0gsU0FBVSxDQUNSdUMsR0FBSSxTQUNKQyxZQUFhNVcsR0FFZnhFLHlCQUF5QixJQW1CekI5RyxHQUFTNEYsTUFBTzNGLGdCQUNwQixNQUFNa2lCLEVBQWVsaUIsRUFBSTRRLFVBQXdCLGdCQUNqRCxJQUFLc1IsRUFDSCxNQUFNLElBQUlySSxNQUFNLGlDQUVsQixJQUNFLE1BQU1rRyxFQUFVL2YsRUFBSThhLE9BQ2RxSCxFQUFZRCxFQUFhQyxVQUN6QnBmLEVBQXdCLFFBQWpCbUQsRUFBQWdjLEVBQWFuZixZQUFJLElBQUFtRCxFQUFBQSxFQUFJLEdBQzVCa2MsR0FBU0YsRUFBYXhLLFNBQW9DLE9BQXpCd0ssRUFBYXhLLFFBQ3BELElBQUssTUFBTWhOLEtBQU9xVixFQUNoQixHQUFJclYsRUFBSTdFLFVBQVk2RSxFQUFJNUUsT0FBUSxDQUM5QixNQUFNZ2IsRUFBWUwsR0FBa0J5QixFQUFjeFgsRUFBSTdFLFVBQ3RELElBQUtpYixFQUNILE9BQU8sRUFFVCxJQUFJelYsRUFBUVgsRUFBSTVFLFFBQ1h1RixHQUFTWCxFQUFJbVUsY0FDaEJ4VCxFQUFRZ0IsT0FBTzdLLEtBQUtrSixFQUFJbVUsWUFBYSxXQUV2QyxNQUFNbGUsRUFBVXdlLEdBQVkrQyxFQUFjeFgsRUFBSTdFLFNBQVVpYixFQUFXelYsRUFBT3JMLEVBQUlrYixhQUFlbGIsRUFBSWliLFNBQzNGdlUsUUFBWTFHLEVBQUkyRyxRQUFRaEcsR0FDM0JvRyxNQUFNTCxHQUFhQSxJQUNuQjdGLE9BQU8yVSxJQUNDLENBQ0w2TSxXQUFZLElBQ1puQyxLQUFNLENBQ0ozSCxJQUFLdlksRUFBSTZRLEtBQUtDLFVBQXVCLGVBQ3JDMEUsSUFBQUEsT0FJUixJQUFJMEssRUFNSixHQUpFQSxFQURFa0MsR0FBd0IsaUJBQVIxYixFQUNYb0QsS0FBS0MsTUFBTXJELEdBRVhBLEVBRWUsTUFBcEJ3WixFQUFLbUMsV0FDUCxNQUFnQixRQUFaalEsRUFBQThOLE1BQUFBLE9BQUksRUFBSkEsRUFBTUEsWUFBTSxJQUFBOU4sT0FBQSxFQUFBQSxFQUFBb0QsS0FDUjBLLEVBQUtBLEtBQUsxSyxJQUVWLElBQUlxRSxPQUFnQixRQUFWZ0QsRUFBQXFELE1BQUFBLE9BQUksRUFBSkEsRUFBTUEsWUFBSSxJQUFBckQsT0FBQSxFQUFBQSxFQUFFdEUsT0FBbUIsUUFBWnVFLEVBQUFvRCxNQUFBQSxPQUFBLEVBQUFBLEVBQU1BLFlBQU0sSUFBQXBELE9BQUEsRUFBQUEsRUFBQXJWLFVBR25ELE1BQU02YSxFQUFZSixFQUFhdmhCLFNBQVcsR0FDcEM0aEIsT0FBNkJoZixJQUF0QjJlLEVBQWFLLFFBQStCTCxFQUFhSyxLQUN0RSxHQUFJSCxHQUEwQixZQUFqQmxDLEVBQUt6WSxlQUNUaUQsRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BRVQ0RSxFQUFJa1UsT0FERnVELEVBQ1csR0FBR0EsS0FBYXBmLElBQU8ySCxFQUFJN0UsV0FFM0IsR0FBR3FhLEVBQUtqWixLQUFLdWIsYUFBdUJGLFFBRTlDLENBQUEsR0FBS0YsSUFBU2xDLEdBQTRCLE1BQXBCQSxFQUFLbUMsV0FVaEMsTUFBTSxJQUFJeEksTUFBTW5ULEVBQUl3WixLQUFLM0gsS0FQekIsVUFGTzdOLEVBQUltVSxtQkFDSm5VLEVBQUk1RSxPQUNQcWMsRUFDRnpYLEVBQUlrVSxPQUFTLEdBQUd1RCxLQUFhUCxtQkFBbUI3ZSxLQUFRNmUsbUJBQW1CbFgsRUFBSTdFLFlBQVl5YyxJQUFZamYsUUFBUSxPQUFRLFNBQ2xILENBQ0wsTUFBTThkLEVBQVdlLEVBQWFmLFNBQVdlLEVBQWFmLFNBQVcsT0FBT2UsRUFBYWQsb0JBQ3JGMVcsRUFBSWtVLE9BQVMsV0FBV3NELEVBQWFyQixVQUFVTSxLQUFZUyxtQkFBbUI3ZSxLQUFRNmUsbUJBQW1CbFgsRUFBSTdFLFlBQVl5YyxJQUFZamYsUUFBUSxPQUFRLE1BS3JKa2YsSUFFQTdYLEVBQUlrVSxRQURGMEQsRUFDWSxhQUVBLGNBS3RCLE9BQU90aUIsRUFDUCxNQUFPd1YsR0FDUCxJQUFLME0sRUFBYXhLLFNBQW9DLE9BQXpCd0ssRUFBYXhLLFFBQ3hDLElBQ0UsTUFBTXdJLEVBQU9wVyxLQUFLQyxNQUFNeUwsRUFBSXhVLE9BQzVCaEIsRUFBSStiLEtBQUs3RCxHQUFjb0ksYUFBYyxDQUNuQ0MsTUFBT3ZnQixFQUFJNlEsS0FBS0MsVUFBdUIsaUJBQ3ZDb1AsS0FBTWxnQixFQUFJNlEsS0FBS0MsVUFBdUIsdUJBQXdCLENBQzVEcVAsS0FBTUQsRUFBS0MsT0FFYnBWLEtBQU0sd0RBRVIsTUFBT2pLLElBRVgsTUFBTTBVLElBSUpyVSxHQUFVbkIsSUFDZCxNQUFNMlEsRUFBYTNRLEVBQUk0USxVQUF3QixpQkFBbUIsR0FpR2xFLE1BaEdnQyxDQUM5QixDQUNFOUksS0FBTSxVQUNOdkMsS0FBTSxPQUNObEYsTUFBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLCtCQUN2Q0csUUFBUyxDQUFDLEtBQU0sTUFDaEJELFFBQVMsS0FDVEQsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFdBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixpQ0FDdERFLFFBQVNMLEVBQVcrUCxVQUFZLEdBQ2hDM1AsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFlBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixrQ0FDdERFLFFBQVNMLEVBQVdnUSxXQUFhLEdBQ2pDNVAsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFNBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwrQkFDdERFLFFBQVNMLEVBQVdrUSxRQUFVLEdBQzlCOVAsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFFBQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLDhCQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDhCQUN0REUsUUFBU0wsRUFBV2lRLE9BQVMsR0FDekJuWixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsc0NBQ3hEQyxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sT0FDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsNkJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsNkJBQ3RERSxRQUFTTCxFQUFXeVEsTUFBUSxHQUN4QjNaLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1QixxQ0FDeERDLFVBQVUsR0FFWixDQUNFakosS0FBTSxXQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1QixpQ0FDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixpQ0FDdERFLFFBQVNMLEVBQVd3USxVQUFZLEdBQzVCMVosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLHlDQUN4REMsVUFBVSxHQUVaLENBQ0VqSixLQUFNLE9BQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLDZCQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDZCQUN0REUsUUFBU0wsRUFBVzVOLE1BQVEsR0FDeEIwRSxjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIscUNBQ3hEQyxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sWUFDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsa0NBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsa0NBQ3RERSxRQUFTTCxFQUFXd1IsV0FBYSxHQUM3QjFhLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1QiwwQ0FDeERDLFVBQVUsR0FFWixDQUNFakosS0FBTSxVQUNOdkMsS0FBTSxRQUNOeUwsUUFBU0wsRUFBV2hRLFNBQVcsR0FDM0I2ZixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLGdDQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLGdDQUNsRHJKLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1Qix3Q0FDeERDLFVBQVUsR0FFWixDQUNFakosS0FBTSxPQUNOdkMsS0FBTSxVQUNOeUwsYUFBNkJ6TixJQUFwQm9OLEVBQVc0UixRQUErQjVSLEVBQVc0UixLQUMxRC9CLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsNkJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsNkJBQ3REQyxVQUFVLEVBQ04wUixrQkFBaUIsT0FBT3ppQixFQUFJNlEsS0FBS0MsVUFBdUIscUNBQ3hENFIsaUJBQWdCLE9BQU8xaUIsRUFBSTZRLEtBQUtDLFVBQXVCLG9DQUN2RDZSLFdBQVUsT0FBTzNpQixFQUFJNlEsS0FBS0MsVUFBdUIsb0NDaFIzRCxNQUFNcU8sR0FBYyxDQUFDdFosRUFBa0JsRixFQUF3QnNHLEtBQzdELE1BQU1sRSxFQUFPcEMsRUFBUW9DLE1BQVEsSUFDdkJrZCxNQUFFQSxFQUFLMkMsS0FBRUEsR0FBU2ppQixFQUN4QixNQUFPLENBQ0xpRyxPQUFRLE1BQ1IvQixJQUFLLGdDQUFnQytkLGNBQWlCaEIsbUJBQW1CN2UsS0FBUTZlLG1CQUFtQi9iLEtBQVl4QyxRQUFRLE9BQVEsS0FDaElpYyxRQUFTLENBQ1BFLGNBQWUsU0FBU1MsSUFDeEIsYUFBYyxVQUNkLGVBQWdCNkIsR0FBSSxRQUFDQyxPQUFPbGMsSUFBYSw0QkFFM0NxYSxLQUFNalosRUFDTjRiLE1BQU0sSUFJSjVQLEdBQWEsQ0FBQ3BOLEVBQWtCbEYsS0FDcEMsTUFBTW9DLEVBQU9wQyxFQUFRb0MsTUFBUSxJQUN2QmtkLE1BQUVBLEVBQUsyQyxLQUFFQSxFQUFJRSxPQUFFQSxHQUFXbmlCLEVBQ2hDLE1BQU8sQ0FDTGlHLE9BQVEsTUFDUi9CLElBQUssZ0NBQWdDK2QsY0FBaUJoQixtQkFBbUI3ZSxLQUFRNmUsbUJBQW1CL2IsVUFBaUJpZCxJQUFTemYsUUFBUSxPQUFRLEtBQzlJaWMsUUFBUyxDQUNQRSxjQUFlLFNBQVNTLElBQ3hCLGFBQWMsU0FFaEI0QyxNQUFNLElBSUo5aUIsR0FBUzRGLE1BQU8zRixJQUNwQixNQUFNK2lCLEVBQWdCL2lCLEVBQUk0USxVQUF5QixpQkFDbkQsSUFBS21TLEVBQ0gsTUFBTSxJQUFJbEosTUFBTSw0QkFFbEIsSUFDRSxNQUFNa0csRUFBVS9mLEVBQUk4YSxPQUNka0ksRUFBYUQsRUFBY2hnQixNQUFRLEdBQ3pDLElBQUssTUFBTTJILEtBQU9xVixFQUNoQixHQUFJclYsRUFBSTdFLFVBQVk2RSxFQUFJNUUsT0FBUSxDQUM5QixNQUFNK1ksRUFBY25VLEVBQUltVSxhQUFleFMsT0FBTzdLLEtBQUtrSixFQUFJNUUsUUFBUXhELFNBQVMsVUFDbEUyRSxFQUFPLENBQ1hRLFFBQVMsb0JBQ1RxYixPQUFRQyxFQUFjRCxPQUN0QnJPLFFBQVNvSyxFQUNUOWIsS0FBTWlnQixFQUFhOWQsVUFBVXdGLEVBQUk3RSxXQUU3Qm1hLEVBQWFiLEdBQVl6VSxFQUFJN0UsU0FBVWtkLEVBQWU5YixHQUM1RCxJQUNFLE1BQU1pWixRQUtJbGdCLEVBQUkyRyxRQUFRcVosR0FDdEIsSUFBSUUsRUFVRixNQUFNLElBQUlyRyxNQUFNLHlDQVRUblAsRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BQ1BpZCxFQUFjWixVQUNoQnpYLEVBQUlrVSxPQUFTLEdBQUdtRSxFQUFjWixhQUFhUCxtQkFBbUJvQixLQUFjcEIsbUJBQW1CbFgsRUFBSTdFLFlBQVl4QyxRQUFRLE9BQVEsS0FFL0hxSCxFQUFJa1UsT0FBU3NCLEVBQUt6TCxRQUFRd08sYUFFNUJ2WSxFQUFJMFYsS0FBT0YsRUFBS3pMLFFBQVF5TyxJQUkxQixNQUFPMU4sR0FDUCxHQUF1QixNQUFuQkEsRUFBSTZNLFdBZU4sTUFBTTdNLEVBZm9CLFFBQ25COUssRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BQ1gsTUFBTVksUUFBWTFHLEVBQUkyRyxRQUFRc00sR0FBV3ZJLEVBQUk3RSxTQUFVa2QsSUFDdkQsSUFBSXZmLE9BQU9DLEtBQUtpRCxHQUFLckYsT0FRbkIsTUFBTSxJQUFJd1ksTUFBTSx3Q0FQaEJuUCxFQUFJMFYsS0FBTzFaLEVBQUl3YyxJQUNYSCxFQUFjWixVQUNoQnpYLEVBQUlrVSxPQUFTLEdBQUdtRSxFQUFjWixhQUFhUCxtQkFBbUJvQixLQUFjcEIsbUJBQW1CbFgsRUFBSTdFLFlBQVl4QyxRQUFRLE9BQVEsS0FFL0hxSCxFQUFJa1UsT0FBU2xZLEVBQUl1YyxlQVc3QixPQUFPampCLEVBQ1AsTUFBT3dWLEdBS1AsTUFKQXhWLEVBQUkrYixLQUFLN0QsR0FBY29JLGFBQWMsQ0FDbkNDLE1BQU92Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLGlCQUN2Q29QLEtBQU1sZ0IsRUFBSTZRLEtBQUtDLFVBQXVCLGdDQUVsQzBFLElBSUpyVSxHQUFVbkIsSUFDZCxNQUFNMlEsRUFBYTNRLEVBQUk0USxVQUF5QixrQkFBb0IsR0E4Q3BFLE1BN0NnQyxDQUM5QixDQUNFOUksS0FBTSxPQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1Qix1QkFDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qix1QkFDbERySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsK0JBQ3hERSxRQUFTTCxFQUFXaVMsTUFBUSxHQUM1QjdSLFVBQVUsR0FFWixDQUNFakosS0FBTSxTQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1Qix5QkFDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qix5QkFDbERySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsaUNBQ3hERSxRQUFTTCxFQUFXbVMsUUFBVSxTQUM5Qi9SLFVBQVUsR0FFWixDQUNFakosS0FBTSxRQUNOdkMsS0FBTSxRQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsd0JBQ3RERSxRQUFTTCxFQUFXc1AsT0FBUyxHQUM3QmxQLFVBQVUsR0FFWixDQUNFakosS0FBTSxPQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1Qix1QkFDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qix1QkFDbERySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsK0JBQ3hERSxRQUFTTCxFQUFXNU4sTUFBUSxHQUM1QmdPLFVBQVUsR0FFWixDQUNFakosS0FBTSxZQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1Qiw0QkFDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qiw0QkFDbERySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsb0NBQ3hERSxRQUFTTCxFQUFXd1IsV0FBYSxHQUNqQ3BSLFVBQVUsS0M3SWhCLFNBQVNvTyxHQUFheGUsRUFBdUJrRixFQUFrQm9hLEVBQWVrRCxHQUM1RSxNQUFNL0IsRUFjUixTQUFxQkEsR0FDbkIsTUFBZ0IsT0FBVEEsRUFBZ0IsR0FBSyxJQUFNQSxFQWZyQmdDLENBQVd6aUIsRUFBUXlnQixNQUFRLE1BQ2xDcmUsRUFBT3BDLEVBQVFvQyxNQUFRLEdBRTdCLE1BQU8sQ0FDTDZELE9BQVEsT0FDUi9CLElBQUssZ0JBQWdCdWMsOEJBSEEvVSxPQUFPN0ssS0FBS3VCLEVBQU84QyxFQUFVLFNBQVN2RCxTQUFTLFVBQVVlLFFBQVEsTUFBTyxLQUFLQSxRQUFRLE1BQU8sT0FJakhpYyxRQUFTLENBQ1BFLGNBQWUsV0FBV1MsSUFDMUIsZUFBZ0I2QixHQUFJLFFBQUNDLE9BQU9sYyxJQUFhLDRCQUUzQ3FhLEtBQU1pRCxHQVFWLFNBQVNFLEdBQVVDLEdBQ2pCLE1BQU1DLEVBQVlELEVBQWFDLFVBQ3pCNUMsRUFBWTJDLEVBQWEzQyxVQUN6QjZDLEVBQU0sSUFBSUMsR0FBQUEsUUFBTUMsS0FBS3hnQixPQUFPeWdCLElBQUlKLEVBQVc1QyxHQUMzQ2hnQixFQUFVLENBQ2Q0SCxNQUFPK2EsRUFBYXpDLFFBR3RCLE9BRGtCLElBQUk0QyxHQUFLLFFBQUNHLEdBQUdDLFVBQVVsakIsR0FDeEJtakIsWUFBWU4sR0FHL0IsTUFBTXpqQixHQUFTNEYsTUFBTzNGLElBQ3BCLE1BQU1zakIsRUFBZXRqQixFQUFJNFEsVUFBd0IsZ0JBQ2pELElBQUswUyxFQUNILE1BQU0sSUFBSXpKLE1BQU0sMkJBRWxCLElBQ0UsTUFBTWtHLEVBQVUvZixFQUFJOGEsT0FDcEIsSUFBSyxNQUFNcFEsS0FBT3FWLEVBQ2hCLEdBQUlyVixFQUFJN0UsVUFBWTZFLEVBQUk1RSxPQUFRLENBQzlCLE1BQU0rWSxFQUFjblUsRUFBSW1VLGFBQWV4UyxPQUFPN0ssS0FBS2tKLEVBQUk1RSxRQUFReEQsU0FBUyxVQUNsRTNCLEVBQVV3ZSxHQUFZbUUsRUFBYzVZLEVBQUk3RSxTQUFVd2QsR0FBU0MsR0FBZXpFLEdBQzFFblksUUFBWTFHLEVBQUkyRyxRQUFRaEcsR0FDeEJ1ZixFQUFPcFcsS0FBS0MsTUFBTXJELEdBQ3hCLEtBQUl3WixNQUFBQSxTQUFBQSxFQUFNOWIsS0FZUixNQUxBcEUsRUFBSStiLEtBQUs3RCxHQUFjb0ksYUFBYyxDQUNuQ0MsTUFBT3ZnQixFQUFJNlEsS0FBS0MsVUFBdUIsaUJBQ3ZDb1AsS0FBTUEsRUFBSzNILE1BRWJ2WSxFQUFJZSxJQUFJQyxNQUFNLGNBQWVrZixHQUN2QixJQUFJckcsTUFBTSxpQkFaSCxRQUNOblAsRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BQ1gsTUFBTWllLEVBQVVULEVBQWF6ZSxJQUN2Qm1mLEVBQWFWLEVBQWEzaUIsU0FBVyxHQUMzQytKLEVBQUlrVSxPQUFTLEdBQUdtRixLQUFXN0QsRUFBSzliLE1BQWdCNGYsS0FXdEQsT0FBT2hrQixFQUNQLE1BQU93VixHQUNQLEdBQW9CLGtCQUFoQkEsRUFBSS9OLFNBRUYrTixFQUFJeU8sU0FBVSxDQUNoQixNQUFNampCLEVBQVF3VSxFQUFJeU8sU0FBUy9ELEtBQzNCbGdCLEVBQUkrYixLQUFLN0QsR0FBY29JLGFBQWMsQ0FDbkNDLE1BQU92Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLGlCQUN2Q29QLEtBQU1sZixFQUFNQSxRQUlsQixNQUFNd1UsSUFJSnJVLEdBQVVuQixJQUNkLE1BQU0yUSxFQUFhM1EsRUFBSTRRLFVBQXdCLGlCQUFtQixHQTREbEUsTUEzRGdDLENBQzlCLENBQ0U5SSxLQUFNLFlBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwyQkFDdERFLFFBQVNMLEVBQVc0UyxXQUFhLEdBQ2pDeFMsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFlBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwyQkFDdERFLFFBQVNMLEVBQVdnUSxXQUFhLEdBQ2pDNVAsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFNBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qix3QkFDdERFLFFBQVNMLEVBQVdrUSxRQUFVLEdBQzlCOVAsVUFBVSxHQUVaLENBQ0VqSixLQUFNLE1BQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLHFCQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHFCQUNsRHJKLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1Qiw2QkFDeERFLFFBQVNMLEVBQVc5TCxLQUFPLEdBQzNCa00sVUFBVSxHQUVaLENBQ0VqSixLQUFNLE9BQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLHNCQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHNCQUNsRHJKLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1Qiw4QkFDeERFLFFBQVNMLEVBQVd5USxNQUFRLEdBQzVCclEsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFVBQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLHlCQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHlCQUNsRHJKLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1QixpQ0FDeERFLFFBQVNMLEVBQVdoUSxTQUFXLEdBQy9Cb1EsVUFBVSxHQUVaLENBQ0VqSixLQUFNLE9BQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLHNCQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHNCQUNsRHJKLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1Qiw4QkFDeERFLFFBQVNMLEVBQVc1TixNQUFRLEdBQzVCZ08sVUFBVSxLQ3ZJaEIsTUFFTW9PLEdBQWN4WixNQUFPM0YsRUFBYVcsRUFBdUJrRixFQUFrQnNkLEtBQy9FLE1BQU1lLEVBQVd2akIsRUFBUXVqQixVQUFZLEdBQy9CQyxFQUFXeGpCLEVBQVF3akIsVUFBWSxHQUMvQkMsRUFMa0IsQ0FBQ0EsR0FBZ0NBLEVBQWNBLEVBQVk1YyxXQUFXLFVBQVk0YyxFQUFjLFVBQVVBLElBQWdCLEdBSzlIQyxDQUFrQjFqQixFQUFReWpCLGFBQWUsSUFDdkRFLEVBQVEzakIsRUFBUTJqQixPQUFTLEdBQy9CLElBQUlDLEVBQ0osR0FBSUosR0FBWUMsRUFDZEcsRUFBZ0JILE1BQ1gsQ0FBQSxJQUFJRixFQUdULE1BQU0sSUFBSXJLLE1BQU0sdUNBRmhCMEssRUFBZ0IsYUFBYUwsSUFJL0IsTUFBTU0sRUFBaUMsQ0FDckM1ZCxPQUFRLE9BQ1IvQixJQUFLLGdDQUNMeWEsUUFBUyxDQUNQRSxjQUFlK0UsRUFDZixlQUFnQixzQkFDaEIxQyxLQUFNLGdCQUNOLGFBQWMsV0FFaEJwQyxTQUFVLENBQ1JwVSxNQUFPOFgsRUFDUDVkLEtBQU0sU0FDTnVDLEtBQU1qQyxFQUNOekYsWUFBYSwwQkFHakIsR0FBSStqQixHQUFZQyxHQUFlRSxFQUFPLENBQ3BDLElBQ0k1ZCxFQURBK2QsRUFBWSxFQUVaQyxFQUFZLEdBQ2hCLEVBQUcsQ0FDRCxNQUFNQyxFQUFzQyxDQUMxQy9kLE9BQVEsTUFDUi9CLElBQUssbUNBQW1Dc2YsWUFBbUJNLElBQzNEbkYsUUFBUyxDQUNQRSxjQUFlK0UsR0FFakIxQixNQUFNLEVBQ05oYyx5QkFBeUIsRUFDekIrZCxRQUFTLEtBTVgsR0FKSWprQixFQUFRRixRQUNWa2tCLEVBQW9CbGtCLE1BQVFFLEVBQVFGLE9BRXRDaUcsUUFBWTFHLEVBQUkyRyxRQUFRZ2UsR0FDQyxNQUFuQmplLEVBQUkyYixhQUFzQjNiLEVBQUl3WixLQUFLamEsUUFDdkMsTUFBTSxJQUFJNFQsTUFBTSxrQ0FFbEIsTUFBTWdMLEVBQVluZSxFQUFJd1osS0FBS2paLEtBQzNCLElBQUssTUFBTXRELEtBQVFraEIsRUFDakIsR0FBSWxoQixFQUFLNGMsUUFBVStELEVBQU8sQ0FDeEJJLEVBQVkvZ0IsRUFBS2dULEdBQ2pCLE1BR0o4TixVQUNPL2QsRUFBSXdaLEtBQUtqWixLQUFLNUYsT0FBUyxHQUM1QnFqQixHQUFhRixFQUFlL0UsV0FDOUIrRSxFQUFlL0UsU0FBUzZFLE1BQVFJLEdBTXBDLE9BSEkvakIsRUFBUUYsUUFDVitqQixFQUFlL2pCLE1BQVFFLEVBQVFGLE9BRTFCK2pCLEdBR0h6a0IsR0FBUzRGLE1BQU8zRixVQUNwQixNQUFNOGtCLEVBQWU5a0IsRUFBSTRRLFVBQXdCLGdCQUNqRCxJQUFLa1UsRUFDSCxNQUFNLElBQUlqTCxNQUFNLDJCQUVsQixJQUNFLE1BQU1rRyxFQUFVL2YsRUFBSThhLE9BQ3BCLElBQUssTUFBTXBRLEtBQU9xVixFQUNoQixHQUFJclYsRUFBSTdFLFVBQVk2RSxFQUFJNUUsT0FBUSxDQUM5QixNQUFNK1ksRUFBY25VLEVBQUltVSxhQUFleFMsT0FBTzdLLEtBQUtrSixFQUFJNUUsUUFBUXhELFNBQVMsVUFDbEUzQixRQUFnQndlLEdBQVluZixFQUFLOGtCLEVBQWNwYSxFQUFJN0UsU0FBVWdaLEdBQzdEblksUUFBb0IxRyxFQUFJMkcsUUFBUWhHLEdBQ2hDdWYsRUFBc0IsaUJBQVJ4WixFQUFtQm9ELEtBQUtDLE1BQU1yRCxHQUFPQSxFQUN6RCxJQUFJd1osRUFBS2phLFFBTVAsTUFBTSxJQUFJNFQsTUFBTSx5Q0FMVG5QLEVBQUltVSxtQkFDSm5VLEVBQUk1RSxPQUNYNEUsRUFBSWtVLE9BQVNzQixFQUFLalosS0FBSzhkLEtBQ3ZCcmEsRUFBSTBWLEtBQU9GLEVBQUtqWixLQUFLK2QsV0FNM0IsT0FBT2hsQixFQUNQLE1BQU93VixHQU9QLE1BTkF4VixFQUFJK2IsS0FBSzdELEdBQWNvSSxhQUFjLENBQ25DQyxNQUFPdmdCLEVBQUk2USxLQUFLQyxVQUF1QixpQkFDdkNvUCxLQUFNbGdCLEVBQUk2USxLQUFLQyxVQUF1Qiw4QkFDdEMvRixLQUFNLHNDQUdXLFFBQWI3RSxFQUFBc1AsTUFBQUEsT0FBRyxFQUFIQSxFQUFLeU8sZ0JBQVEsSUFBQS9kLE9BQUEsRUFBQUEsRUFBRWUsT0FBUXVPLElBSTNCclUsR0FBVW5CLElBQ2QsTUFBTTJRLEVBQWEzUSxFQUFJNFEsVUFBd0IsaUJBQW1CLEdBZ0RsRSxNQS9DZ0MsQ0FDOUIsQ0FDRTlJLEtBQU0sV0FDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsMEJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsMEJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLGtDQUN4REUsUUFBU0wsRUFBV3VULFVBQVksR0FDaENuVCxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sV0FDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsMEJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsMEJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLGtDQUN4REUsUUFBU0wsRUFBV3dULFVBQVksR0FDaENwVCxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sY0FDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsOEJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsOEJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLHNDQUN4REUsUUFBU0wsRUFBV3lULGFBQWUsR0FDbkNyVCxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sUUFDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsdUJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsdUJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLCtCQUN4REUsUUFBU0wsRUFBVzJULE9BQVMsR0FDN0J2VCxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sUUFDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsdUJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsdUJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLCtCQUN4REUsUUFBU0wsRUFBV2xRLE9BQVMsR0FDN0JzUSxVQUFVLEtDdEpoQixNQUFNMFAsR0FBb0IsQ0FBQzlmLEVBQXdCa0YsS0FDakQsTUFBTW9mLEdBQU8sSUFBSTdpQixNQUFPOGlCLGNBR2xCQyxFQUFhLFVBRkZyRCxHQUFJLFFBQUNDLE9BQU9sYyxJQUFhLCtCQUVBb2YsT0FBVXRrQixFQUFRa2dCLFVBQVVsZ0IsRUFBUW9DLE9BQU84QyxJQUUvRWliLEVBQVlqZSxFQUFBQSxRQUFPcWUsV0FBVyxPQUFRdmdCLEVBQVF5a0IsaUJBQWlCbGtCLE9BQU9pa0IsR0FBWWppQixPQUFPLFVBQy9GLE1BQU8sT0FBT3ZDLEVBQVEwa0IsZUFBZXZFLEtBR2pDM0IsR0FBYyxDQUFDeGUsRUFBd0JrRixFQUFrQmliLEVBQW1CelYsS0FDekUsQ0FDTHpFLE9BQVEsTUFDUi9CLElBQUssV0FBV2xFLEVBQVFrZ0IsVUFBVWxnQixFQUFReWdCLHFCQUFxQlEsbUJBQW1CamhCLEVBQVFvQyxRQUFRNmUsbUJBQW1CL2IsS0FBWXhDLFFBQVEsT0FBUSxLQUNqSmljLFFBQVMsQ0FDUHVDLEtBQU0sR0FBR2xoQixFQUFRa2dCLFVBQVVsZ0IsRUFBUXlnQixvQkFDbkM1QixjQUFlc0IsRUFDZjFlLE1BQU0sSUFBSUEsTUFBTzhpQixjQUNqQixlQUFnQnBELEdBQUFBLFFBQUtDLE9BQU9sYyxJQUU5QnFhLEtBQU03VSxFQUNOeEUseUJBQXlCLElBSXZCOUcsR0FBUzRGLE1BQU8zRixVQUNwQixNQUFNc2xCLEVBQWdCdGxCLEVBQUk0USxVQUF5QixpQkFDbkQsSUFBSzBVLEVBQ0gsTUFBTSxJQUFJekwsTUFBTSxnQ0FFbEJ5TCxFQUFjdmlCLEtBQU91aUIsRUFBY3ZpQixLQUFLTSxRQUFRLE9BQVEsSUFBSUEsUUFBUSxPQUFRLElBQU0sSUFDdkQsTUFBdkJpaUIsRUFBY3ZpQixPQUNoQnVpQixFQUFjdmlCLEtBQU8sSUFFdkIsSUFDRSxNQUFNZ2QsRUFBVS9mLEVBQUk4YSxPQUNkcUgsRUFBWW1ELEVBQWNuRCxVQUMxQnBmLEVBQXlCLFFBQWxCbUQsRUFBQW9mLEVBQWN2aUIsWUFBSSxJQUFBbUQsRUFBQUEsRUFBSSxHQUNuQyxJQUFLLE1BQU13RSxLQUFPcVYsRUFDaEIsR0FBSXJWLEVBQUk3RSxVQUFZNkUsRUFBSTVFLE9BQVEsQ0FDOUIsTUFBTWdiLEVBQVlMLEdBQWtCNkUsRUFBZTVhLEVBQUk3RSxVQUN2RCxJQUFJd0YsRUFBUVgsRUFBSTVFLFFBQ1h1RixHQUFTWCxFQUFJbVUsY0FDaEJ4VCxFQUFRZ0IsT0FBTzdLLEtBQUtrSixFQUFJbVUsWUFBYSxXQUV2QyxNQUFNbGUsRUFBVXdlLEdBQVltRyxFQUFlNWEsRUFBSTdFLFNBQVVpYixFQUFXelYsR0FFcEUsR0FBd0IsYUFETHJMLEVBQUkyRyxRQUFRaEcsSUFDdEIwaEIsV0FVUCxNQUFNLElBQUl4SSxNQUFNLGlCQVZXLFFBQ3BCblAsRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BQ1gsTUFBTXdjLEVBQVlnRCxFQUFjM2tCLFNBQVcsR0FFekMrSixFQUFJa1UsT0FERnVELEVBQ1csR0FBR0EsS0FBYVAsbUJBQW1CN2UsS0FBUTZlLG1CQUFtQmxYLEVBQUk3RSxZQUFZeWMsSUFBWWpmLFFBQVEsT0FBUSxLQUUxRyxXQUFXaWlCLEVBQWN6RSxVQUFVeUUsRUFBY2xFLHFCQUFxQlEsbUJBQW1CN2UsS0FBUTZlLG1CQUFtQmxYLEVBQUk3RSxZQUFZeWMsSUFBWWpmLFFBQVEsT0FBUSxNQU9yTCxPQUFPckQsRUFDUCxNQUFPd1YsR0FLUCxNQUpBeFYsRUFBSStiLEtBQUs3RCxHQUFjb0ksYUFBYyxDQUNuQ0MsTUFBT3ZnQixFQUFJNlEsS0FBS0MsVUFBdUIsaUJBQ3ZDb1AsS0FBTWxnQixFQUFJNlEsS0FBS0MsVUFBdUIsb0JBRWxDMEUsSUFJSnJVLEdBQVVuQixJQUNkLE1BQU0yUSxFQUFhM1EsRUFBSTRRLFVBQXlCLGtCQUFvQixHQTREcEUsTUEzRGdDLENBQzlCLENBQ0U5SSxLQUFNLGNBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixnQ0FDdERFLFFBQVNMLEVBQVcwVSxhQUFlLEdBQ25DdFUsVUFBVSxHQUVaLENBQ0VqSixLQUFNLGtCQUNOdkMsS0FBTSxRQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsb0NBQ3RERSxRQUFTTCxFQUFXeVUsaUJBQW1CLEdBQ3ZDclUsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFNBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwyQkFDdERFLFFBQVNMLEVBQVdrUSxRQUFVLEdBQzlCOVAsVUFBVSxHQUVaLENBQ0VqSixLQUFNLE9BQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLHlCQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHlCQUN0REUsUUFBU0wsRUFBV3lRLE1BQVEsR0FDeEIzWixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsaUNBQ3hEQyxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sT0FDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIseUJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIseUJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLGlDQUN4REUsUUFBU0wsRUFBVzVOLE1BQVEsR0FDNUJnTyxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sWUFDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsOEJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsOEJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLHNDQUN4REUsUUFBU0wsRUFBV3dSLFdBQWEsR0FDakNwUixVQUFVLEdBRVosQ0FDRWpKLEtBQU0sVUFDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsNEJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsNEJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLG9DQUN4REUsUUFBU0wsRUFBV2hRLFNBQVcsR0FDL0JvUSxVQUFVLEtDaEloQixNQUFNMFAsR0FBb0IsQ0FBQzlmLEVBQXVCa0YsS0FDaEQsTUFBTTlDLEVBQU9wQyxFQUFRb0MsTUFBUSxHQUN2QndpQixFQUFXNWtCLEVBQVE0a0IsU0FFbkJDLEVBQWNDLEdBREg5a0IsRUFBUStrQixVQUVuQlQsR0FBTyxJQUFJN2lCLE1BQU84aUIsY0FFbEJ2RixFQUFRLE9BREYsSUFBSWhmLEVBQVFrZ0IsVUFBVWUsbUJBQW1CN2UsS0FBUTZlLG1CQUFtQi9iLEtBQVl4QyxRQUFRLE9BQVEsUUFDaEY0aEIsSUFFNUIsTUFBTyxTQUFTTSxLQURIMWlCLEVBQUFBLFFBQU9xZSxXQUFXLE9BQVFzRSxHQUFhdGtCLE9BQU95ZSxHQUFPemMsT0FBTyxhQUlyRWljLEdBQWMsQ0FBQ3hlLEVBQXVCa0YsRUFBa0JpYixFQUFtQnpWLEtBQy9FLE1BQU13VixFQUFTbGdCLEVBQVFrZ0IsT0FDakI5ZCxFQUFPcEMsRUFBUW9DLE1BQVEsR0FDN0IsTUFBTyxDQUNMNkQsT0FBUSxNQUNSL0IsSUFBSyw0QkFBNEJnYyxLQUFVZSxtQkFBbUI3ZSxLQUFRNmUsbUJBQW1CL2IsS0FBWXhDLFFBQVEsT0FBUSxLQUNySGljLFFBQVMsQ0FDUEUsY0FBZXNCLEVBQ2YxZSxNQUFNLElBQUlBLE1BQU84aUIsY0FDakIsZUFBZ0JwRCxHQUFJLFFBQUNDLE9BQU9sYyxJQUFhLDRCQUUzQ3FhLEtBQU03VSxFQUNOeEUseUJBQXlCLElBSTdCLFNBQVM0ZSxHQUFLaFIsR0FDWixPQUFPNVIsRUFBTSxRQUFDQyxXQUFXLE9BQU81QixPQUFPdVQsR0FBU3ZSLE9BQU8sT0FHekQsTUFBTXlpQixHQUFvQixDQUFDQyxFQUF3QkMsRUFBeUNsbEIsRUFBdUJrRixLQUNqSCxNQUFNaWdCLEVBQU0sSUFBSW5sQixFQUFRb0MsTUFBUSxLQUFLOEMsSUFBV3hDLFFBQVEsT0FBUSxLQUFLQSxRQUFRLFFBQVMsS0FDaEZDLEVBQU0zQixLQUFLME4sT0FBTSxJQUFJak4sTUFBTythLFVBQVksS0FDeEM0SSxFQUFTRixFQUFhdmlCLEVBQU0waUIsU0FBU0gsRUFBV3ZqQixXQUFZLElBQU1nQixFQUFNLEtBRzlFLE1BQU8sUUFESyxHQURDbWlCLEdBQUksR0FBR0csS0FBa0JHLEtBQVVELEtBQzVCRyxVQUFVLEdBQUksTUFBTUYsT0FJcENobUIsR0FBUzRGLE1BQU8zRixJQUNwQixNQUFNa21CLEVBQWVsbUIsRUFBSTRRLFVBQXdCLGdCQUNqRCxJQUFLc1YsRUFDSCxNQUFNLElBQUlyTSxNQUFNLDJCQUVsQixJQUNFLE1BQU1rRyxFQUFVL2YsRUFBSThhLE9BQ2QvWCxFQUFPbWpCLEVBQWFuakIsTUFBUSxHQUNsQyxJQUFLLE1BQU0ySCxLQUFPcVYsRUFDaEIsR0FBSXJWLEVBQUk3RSxVQUFZNkUsRUFBSTVFLE9BQVEsQ0FDOUIsSUFBSXVGLEVBQVFYLEVBQUk1RSxRQUNYdUYsR0FBU1gsRUFBSW1VLGNBQ2hCeFQsRUFBUWdCLE9BQU83SyxLQUFLa0osRUFBSW1VLFlBQWEsV0FFdkMsTUFBTWlDLEVBQVlMLEdBQWtCeUYsRUFBY3hiLEVBQUk3RSxVQUNoRGxGLEVBQVV3ZSxHQUFZK0csRUFBY3hiLEVBQUk3RSxTQUFVaWIsRUFBV3pWLEdBQzdEOGEsRUFBU0QsRUFBYXZsQixTQUFXLEdBRXZDLEdBQXdCLGFBRExYLEVBQUkyRyxRQUFRaEcsSUFDdEIwaEIsV0FTUCxNQUFNLElBQUl4SSxNQUFNLGlCQUxoQixVQUhPblAsRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BQ1g0RSxFQUFJa1UsT0FBUyxHQUFHc0gsRUFBYXJoQixPQUFPK2MsbUJBQW1CN2UsS0FBUTZlLG1CQUFtQmxYLEVBQUk3RSxZQUFZc2dCLElBQVM5aUIsUUFBUSxPQUFRLEtBQ3ZINmlCLEVBQWFOLGVBQWdCLENBQy9CLE1BQU1RLEVBQU1ULEdBQWtCTyxFQUFhTixlQUFnQk0sRUFBYUwsV0FBWUssRUFBY3hiLEVBQUk3RSxVQUN0RzZFLEVBQUlrVSxPQUFTbFUsRUFBSWtVLE9BQU9oYixTQUFTLEtBQU8sR0FBRzhHLEVBQUlrVSxVQUFVd0gsSUFBUSxHQUFHMWIsRUFBSWtVLFVBQVV3SCxLQU8xRixPQUFPcG1CLEVBQ1AsTUFBT3dWLEdBQ1AsR0FBb0Isa0JBQWhCQSxFQUFJL04sUUFDTnpILEVBQUkrYixLQUFLN0QsR0FBY29JLGFBQWMsQ0FDbkNDLE1BQU92Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLGlCQUN2Q29QLEtBQU1sZ0IsRUFBSTZRLEtBQUtDLFVBQXVCLHdCQUVuQyxDQUNMLE1BQU1vUCxFQUFPdFcsR0FBNEI0TCxFQUFJeFUsT0FDN0NoQixFQUFJK2IsS0FBSzdELEdBQWNvSSxhQUFjLENBQ25DQyxNQUFPdmdCLEVBQUk2USxLQUFLQyxVQUF1QixpQkFDdkNvUCxLQUFNbGdCLEVBQUk2USxLQUFLQyxVQUF1Qix1QkFBd0IsQ0FDNURxUCxLQUFzQixpQkFBVEQsRUFBb0JBLEVBQUtDLEtBQU9ELElBRS9DblYsS0FBTSxxQ0FHVixNQUFNeUssSUFJSnJVLEdBQVVuQixJQUNkLE1BQU0yUSxFQUFhM1EsRUFBSTRRLFVBQXdCLGlCQUFtQixHQTBFbEUsTUF6RWdDLENBQzlCLENBQ0U5SSxLQUFNLFNBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qix3QkFDdERFLFFBQVNMLEVBQVdrUSxRQUFVLEdBQzlCOVAsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFdBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwwQkFDbEQwUCxhQUNGLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLDBCQUVyQ3JKLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1QixrQ0FDeERFLFFBQVNMLEVBQVc0VSxVQUFZLEdBQ2hDeFUsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFdBQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLGtDQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDBCQUNsRHJKLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1QixrQ0FDeERFLFFBQVNMLEVBQVcrVSxVQUFZLEdBQ2hDM1UsVUFBVSxHQUVaLENBQ0VqSixLQUFNLE1BQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixxQkFDbERySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsNkJBQ3hERSxRQUFTTCxFQUFXOUwsS0FBTyxHQUMzQmtNLFVBQVUsR0FFWixDQUNFakosS0FBTSxVQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1Qix5QkFDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qix5QkFDbERySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsaUNBQ3hERSxRQUFTTCxFQUFXaFEsU0FBVyxHQUMvQm9RLFVBQVUsR0FFWixDQUNFakosS0FBTSxPQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1QixzQkFDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixzQkFDbERySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsOEJBQ3hERSxRQUFTTCxFQUFXNU4sTUFBUSxHQUM1QmdPLFVBQVUsR0FFWixDQUNFakosS0FBTSxpQkFDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsa0NBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsa0NBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLGtDQUN4REUsUUFBU0wsRUFBV2lWLGdCQUFrQixHQUN0QzdVLFVBQVUsR0FFWixDQUNFakosS0FBTSxhQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1Qiw2QkFDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qiw2QkFDbERySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsNkJBQ3hERSxRQUFTTCxFQUFXa1YsWUFBYyxHQUNsQzlVLFVBQVUsS0NyS2hCLE1BQU1oUixHQUFTNEYsTUFBTzNGLElBQ3BCLE1BQU1xbUIsRUFBcUJybUIsRUFBSTRRLFVBQThCLHNCQUM3RCxJQUFLeVYsRUFDSCxNQUFNLElBQUl4TSxNQUFNLGlDQUVsQndNLEVBQW1CQyxLQUFPRCxFQUFtQkMsS0FBS2pqQixRQUFRLHFCQUFzQixJQUNoRmdqQixFQUFtQkMsTUFBUUQsRUFBbUJFLFdBQWEsV0FBYSxXQUFhRixFQUFtQkMsS0FDeEdELEVBQW1CdGpCLE1BQVFzakIsRUFBbUJ0akIsTUFBUSxJQUFJTSxRQUFRLGFBQWMsSUFBTSxJQUN0RixNQUFNbWpCLEVBQVdILEVBQW1CRyxVQUFZLFFBQzFDQyxHQUFXSixFQUFtQkksU0FBVyxJQUFJcGpCLFFBQVEsYUFBYyxJQUFNLElBQy9FLElBQ0UsTUFBTTBjLEVBQVUvZixFQUFJOGEsT0FDZHFILEVBQVlrRSxFQUFtQmxFLFVBQy9CYSxFQUFhcUQsRUFBbUJ0akIsS0FDdEMsSUFBSyxNQUFNMkgsS0FBT3FWLEVBQ2hCLEdBQUlyVixFQUFJN0UsVUFBWTZFLEVBQUk1RSxPQUFRLENBQzlCLElBQUl1RixFQUFRWCxFQUFJNUUsUUFDWHVGLEdBQVNYLEVBQUltVSxjQUNoQnhULEVBQVFnQixPQUFPN0ssS0FBS2tKLEVBQUltVSxZQUFhLFdBRXZDLE1BQU02SCxFQUFxQyxDQUN6Q3ZDLFNBQVVrQyxFQUFtQmxDLFNBQzdCdUIsU0FBVVcsRUFBbUJYLFNBQzdCaUIsY0FBZSxXQUNmQyxpQkFBa0IsWUFFSCxXQUFiSixJQUNGRSxFQUFjRixTQUFXSyxFQUFRQSxTQUFDQyxRQUVwQyxNQUFNQyxFQUF1QkMsRUFBWUEsYUFBQ1gsRUFBbUJDLEtBQU1JLEdBQzdETyxFQUE4QixNQUFmakUsRUFBcUIsR0FBS0EsRUFDM0NpRSxTQUNJRixFQUFPRyxnQkFBZ0JELEVBQWMsQ0FBRXRNLFdBQVcsSUFLMUQsVUFIa0JvTSxFQUFPSSxnQkFBZ0IsR0FBR25FLElBQWF0WSxFQUFJN0UsV0FBV3hDLFFBQVEsYUFBYyxJQUFLZ0ksRUFBTyxDQUN4RytiLFdBQVcsSUFpQlgsTUFBTSxJQUFJdk4sTUFBTSxpQkFmVCxDQUNQLE1BQU13TixFQUFjdGtCLEVBQUFBLFFBQUtqQixLQUFLOUIsRUFBSTZZLFFBQVMsVUFBVyxlQUNoRHlPLEVBQWtCdmtCLEVBQUFBLFFBQUtqQixLQUFLdWxCLEVBQWEzYyxFQUFJN0UsVUFDbkRFLFVBQUc4TyxjQUFjd1MsR0FDakJ0aEIsRUFBQUEsUUFBRytPLGNBQWN3UyxFQUFpQmpjLFVBQzNCWCxFQUFJbVUsbUJBQ0puVSxFQUFJNUUsT0FDWCxNQUFNaWUsRUFBVTVCLEdBQWFrRSxFQUFtQkMsS0FDNUNELEVBQW1CSSxRQUNyQi9iLEVBQUlrVSxPQUFTLEdBQUdtRixLQUF1QixNQUFaMEMsRUFBa0IsR0FBSzdFLG1CQUFtQjZFLEtBQVc3RSxtQkFBbUJsWCxFQUFJN0UsWUFBWXhDLFFBQVEsT0FBUSxLQUVuSXFILEVBQUlrVSxPQUFTLEdBQUdtRixLQUEwQixNQUFmZixFQUFxQixHQUFLcEIsbUJBQW1Cb0IsS0FBY3BCLG1CQUFtQmxYLEVBQUk3RSxZQUFZeEMsUUFBUSxPQUFRLEtBRTNJcUgsRUFBSTZjLFlBQWMsc0NBQXNDM0YsbUJBQW1CbFgsRUFBSTdFLGFBTXJGLE9BQU83RixFQUNQLE1BQU93VixHQUtQLE1BSkF4VixFQUFJK2IsS0FBSzdELEdBQWNvSSxhQUFjLENBQ25DQyxNQUFPdmdCLEVBQUk2USxLQUFLQyxVQUF1QixpQkFDdkNvUCxLQUFNbGdCLEVBQUk2USxLQUFLQyxVQUF1QixvQkFFbEMwRSxJQUlKclUsR0FBVW5CLFVBQ2QsTUFBTTJRLEVBQWEzUSxFQUFJNFEsVUFBOEIsdUJBQXlCLEdBd0U5RSxNQXZFZ0MsQ0FDOUIsQ0FDRTlJLEtBQU0sT0FDTnZDLEtBQU0sUUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDRCQUN0REUsUUFBU0wsRUFBVzJWLE1BQVEsR0FDNUJ2VixVQUFVLEdBRVosQ0FDRWpKLEtBQU0sYUFDTnZDLEtBQU0sVUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLGtDQUN0REMsVUFBVSxFQUNWQyxnQkFBUzlLLEVBQUF5SyxFQUFXNFYsMkJBQ2hCL0YsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1QixrQ0FDbkRySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsMkNBRTFELENBQ0VoSixLQUFNLFdBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixnQ0FDdERFLFFBQVNMLEVBQVd3VCxVQUFZLEdBQ2hDcFQsVUFBVSxFQUNOeVAsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1QixnQ0FDbkRySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIseUNBRTFELENBQ0VoSixLQUFNLFdBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixnQ0FDdERFLFFBQVNMLEVBQVcrVSxVQUFZLEdBQ2hDM1UsVUFBVSxFQUNOeVAsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1QixnQ0FDbkRySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIseUNBRTFELENBQ0VoSixLQUFNLE9BQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qiw0QkFDdERFLFFBQVNMLEVBQVc1TixNQUFRLEdBQzVCZ08sVUFBVSxFQUNOeVAsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1Qiw0QkFDbkRySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIscUNBRTFELENBQ0VoSixLQUFNLFVBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixvQ0FDdERFLFFBQVNMLEVBQVc1TixNQUFRLEdBQzVCZ08sVUFBVSxFQUNOeVAsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1QixvQ0FDbkRySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsNkNBRTFELENBQ0VoSixLQUFNLFlBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixpQ0FDdERFLFFBQVNMLEVBQVd3UixXQUFhLEdBQ2pDcFIsVUFBVSxFQUNOeVAsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1QixpQ0FDbkRySixjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsMENBRTFELENBQ0VoSixLQUFNLFdBQ052QyxLQUFNLE9BQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixnQ0FDdERHLFFBQVMsQ0FBQyxRQUFTLFVBQ25CRCxRQUFTTCxFQUFXNlYsVUFBWSxRQUNoQ3pWLFVBQVUsS0MxSWhCLE1BQU1oUixHQUFTNEYsTUFBTzNGLElBQ3BCLE1BQU13bkIsRUFBY3huQixFQUFJNFEsVUFBd0IsZ0JBQ2hELElBQUs0VyxFQUNILE1BQU0sSUFBSTNOLE1BQU0sOEJBRWxCLE1BQU1tSixFQUFhd0UsRUFBWXprQixNQUFRLEdBQ3ZDLElBQUlvZixFQUFZcUYsRUFBWXJGLFdBQWEsR0FDckNBLElBQ0ZBLEVBQVlBLEVBQVU5ZSxRQUFRLE1BQU8sS0FFdkMsSUFBSW9rQixFQUFVRCxFQUFZQyxTQUFXLEdBQ2pDQSxJQUNGQSxFQUFVQSxFQUFRcGtCLFFBQVEsTUFBTyxLQUFLQSxRQUFRLE1BQU8sSUFBSUEsUUFBUSxNQUFPLEtBRTFFLE1BQU0wYyxFQUFVL2YsRUFBSThhLE9BQ3BCLElBQUssTUFBTXBRLEtBQU9xVixFQUNoQixHQUFJclYsRUFBSTdFLFVBQVk2RSxFQUFJNUUsT0FBUSxDQUM5QixJQUFJdUYsRUFBUVgsRUFBSTVFLFFBQ1h1RixHQUFTWCxFQUFJbVUsY0FDaEJ4VCxFQUFRZ0IsT0FBTzdLLEtBQUtrSixFQUFJbVUsWUFBYSxXQUV2QyxJQUNFLElBQ0UsTUFBTXdJLEVBQWN0a0IsRUFBQUEsUUFBS2pCLEtBQUs5QixFQUFJNlksUUFBUyxVQUFXLFNBQ3REOVMsVUFBRzhPLGNBQWN3UyxHQUNqQnRoQixVQUFHOE8sY0FBY21PLEdBQ2pCamQsVUFBRytPLGNBQWMvUixFQUFBQSxRQUFLakIsS0FBS2toQixFQUFZdFksRUFBSTdFLFVBQVd3RixHQUN0RHRGLEVBQUUsUUFBQzJoQixhQUFhM2tCLFVBQUtqQixLQUFLa2hCLEVBQVl0WSxFQUFJN0UsVUFBVzlDLEVBQUFBLFFBQUtqQixLQUFLOUIsRUFBSTZZLFFBQVMsVUFBVyxRQUFTbk8sRUFBSTdFLGtCQUM3RjZFLEVBQUltVSxtQkFDSm5VLEVBQUk1RSxPQUdQNEUsRUFBSWtVLE9BRkp1RCxFQUNFc0YsRUFDVyxHQUFHdEYsS0FBYVAsbUJBQW1CNkYsTUFBWTdGLG1CQUFtQmxYLEVBQUk3RSxZQUFZeEMsUUFBUSxPQUFRLEtBRWxHLEdBQUc4ZSxLQUFhUCxtQkFBbUJsWCxFQUFJN0UsWUFBWXhDLFFBQVEsT0FBUSxLQUdyRU4sVUFBS2pCLEtBQUtraEIsRUFBWXRZLEVBQUk3RSxVQUV6QzZFLEVBQUkwVixLQUFPcmQsVUFBS2pCLEtBQUtraEIsRUFBWXRZLEVBQUk3RSxVQUNyQzZFLEVBQUk2YyxZQUFjLGdDQUFnQzNGLG1CQUFtQmxYLEVBQUk3RSxZQUN6RSxNQUFPL0UsR0FLUCxNQUpBZCxFQUFJK2IsS0FBSzdELEdBQWNvSSxhQUFjLENBQ25DQyxNQUFPdmdCLEVBQUk2USxLQUFLQyxVQUF1QixpQkFDdkNvUCxLQUFNLDJCQUVGLElBQUlyRyxNQUFNLDJCQUVsQixNQUFPL1ksR0FFUCxNQURBZCxFQUFJZSxJQUFJQyxNQUFNRixHQUNSQSxHQUlaLE9BQU9kLEdBR0htQixHQUFVbkIsSUFDZCxNQUFNMlEsRUFBYTNRLEVBQUk0USxVQUF3QixpQkFBbUIsR0E4QmxFLE1BN0JnQyxDQUM5QixDQUNFOUksS0FBTSxPQUNOdkMsS0FBTSxRQUNGaWIsYUFBWSxPQUFPeGdCLEVBQUk2USxLQUFLQyxVQUF1QixzQkFDbkR6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixzQkFDdERFLFFBQVNMLEVBQVc1TixNQUFRLEdBQ3hCMEUsY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLDhCQUN4REMsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFlBQ052QyxLQUFNLFFBQ0ZpYixhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLDJCQUNuRHpRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDJCQUN0REUsUUFBU0wsRUFBV3dSLFdBQWEsR0FDN0IxYSxjQUFhLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsbUNBQ3hEQyxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sVUFDTnZDLEtBQU0sUUFDRmxGLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLHlCQUN0REUsUUFBU0wsRUFBVzhXLFNBQVcsR0FDL0IxVyxVQUFVLEVBQ055UCxhQUFZLE9BQU94Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLHlCQUNuRHJKLGNBQWEsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1QixvQ0N2RjlELE1BQU02VyxHQUFOclIsY0FHVUMsS0FBWXFSLGNBQUcsRUFFTEMsc0JBQ2hCLE9BQU90UixLQUFLdVIsWUFBY3ZSLEtBQUt1UixVQUFZLElBQUl2UixNQUcvQndRLG9CQUNoQixPQUFPeFEsS0FBS3dSLFVBQVl4UixLQUFLd1IsUUFBVSxJQUFJQyxFQUFPQSxTQUc1Q0MseUJBQTBCbGxCLEdBQ2hDLE9BQU9BLEVBQUtNLFFBQVEsTUFBTyxLQUd0QnNDLGNBQWV4RSxHQUNwQixNQUFNZ2pCLFNBQUVBLEVBQVF1QixTQUFFQSxFQUFRd0MsV0FBRUEsRUFBVUMsV0FBRUEsR0FBZWhuQixFQUNqRGluQixFQUFvQkYsRUFDdEIsQ0FBRS9ELFNBQUFBLEVBQVVrRSxlQUFnQkgsRUFBWUMsV0FBWUEsUUFBYzVrQixHQUNsRSxDQUFFNGdCLFNBQUFBLEVBQVV1QixTQUFBQSxHQUNoQixJQU9FLGFBTk1pQyxHQUFVWixPQUFPdUIsdUJBQ3JCaEMsS0FBTW5sQixFQUFPbWxCLEtBQ2JpQyxLQUFNcGUsT0FBT2hKLEVBQU9vbkIsT0FBUyxJQUMxQkgsSUFFTDdSLEtBQUtxUixjQUFlLEdBQ2IsRUFDUCxNQUFPcFMsR0FDUCxNQUFNLElBQUlxRSxNQUFNckUsSUFJYjdQLGFBQWM2aUIsRUFBZUMsRUFBZ0J0bkIsR0FDbEQsSUFBS29WLEtBQUtxUixhQUNSLE1BQU0sSUFBSS9OLE1BQU0sV0FFbEIsSUFDRTRPLEVBQVNsUyxLQUFLMFIseUJBQXlCUSxTQUNqQ2xTLEtBQUttUyxNQUFNM2xCLEVBQUksUUFBQ3dCLFFBQVFra0IsR0FBUXBsQixRQUFRLGFBQWMsSUFBS2xDLFNBQzNEd21CLEdBQVVaLE9BQU80QixRQUFRSCxFQUFPQyxHQUN0QyxNQUFNRyxFQUFXem5CLEVBQU95bkIsVUFBWSxPQUNwQyxHQUFpQixTQUFiQSxFQUFxQixDQUN2QixNQUFNQyxFQUFTLFNBQVNELE1BQWFILEtBRXJDLGFBRHFCbFMsS0FBS3VTLEtBQUtELEdBR2pDLE9BQU8sRUFDUCxNQUFPclQsR0FDUCxPQUFPLEdBSUg3UCxZQUFhb2pCLEVBQWlCNW5CLEdBQ3BDLElBQUt3bUIsR0FBVVosT0FBT2lDLGNBQ3BCLE1BQU0sSUFBSW5QLE1BQU0sV0FFbEIsTUFBTW9QLEVBQWdCOW5CLEVBQU8rbkIsU0FBVyxPQUN4QyxHQUFzQixTQUFsQkQsRUFBMEIsQ0FDNUIsTUFBTUUsRUFBT0osRUFBUXZrQixNQUFNLEtBQzNCLElBQUk0a0IsRUFBYyxHQUNsQixJQUFLLE1BQU14VSxLQUFPdVUsRUFDaEIsR0FBSXZVLEVBQUssQ0FDUHdVLEdBQWUsSUFBSXhVLElBQ25CLE1BQU1pVSxFQUFTLFVBQVVPLGVBQXlCSCxNQUFrQkcsV0FDOUQ3UyxLQUFLdVMsS0FBS0QsUUFHZixDQUNMLE1BQU1BLEVBQVMsYUFBYUUsV0FDdEJ4UyxLQUFLdVMsS0FBS0QsSUFJYmxqQixZQUFhOGlCLEVBQWdCWSxFQUFjQyxHQUNoRGIsRUFBU2xTLEtBQUswUix5QkFBeUJRLEdBQ3ZDLE1BQU9jLEVBQU9DLEdBQVVGLEVBQVEsQ0FBQ0QsRUFBTUMsR0FBU0QsRUFBS3psQixTQUFTLEtBQU95bEIsRUFBSzdrQixNQUFNLEtBQU8sQ0FBQzZrQixFQUFNQSxHQUV4RlIsRUFBUyxTQUFTVSxLQUFTQyxNQUFXZixLQUM1QyxPQUFPbFMsS0FBS3VTLEtBQUtELEdBR1hsakIsV0FBWWtqQixHQUVsQixPQUEyQixXQURGbEIsR0FBVVosT0FBTzBDLFlBQVlaLElBQ3BDMUksS0FHYnVKLFFBQ0wvQixHQUFVWixPQUFPNEMsVUFDakJwVCxLQUFLcVIsY0FBZSxHQ3hGeEIsTUFBTTduQixHQUFTNEYsTUFBTzNGLElBQ3BCLE1BQU00cEIsRUFBa0I1cEIsRUFBSTRRLFVBQTRCLG9CQUN4RCxJQUFLZ1osRUFDSCxNQUFNLElBQUkvUCxNQUFNLGtDQUVsQitQLEVBQWdCckIsS0FBT3BlLE9BQU95ZixFQUFnQnJCLE9BQVMsR0FDdkRxQixFQUFnQjVHLFlBQWM0RyxFQUFnQjVHLFlBQWMsSUFBSTNmLFFBQVEsYUFBYyxJQUFNLElBQzVGLE1BQU1va0IsR0FBV21DLEVBQWdCbkMsU0FBVyxJQUFJcGtCLFFBQVEsYUFBYyxJQUFNLElBQzVFLElBQ0UsTUFBTTBjLEVBQVUvZixFQUFJOGEsT0FDcEIsSUFBSyxNQUFNcFEsS0FBT3FWLEVBQ2hCLEdBQUlyVixFQUFJN0UsVUFBWTZFLEVBQUk1RSxPQUFRLENBQzlCLElBQUl1RixFQUFRWCxFQUFJNUUsUUFDWHVGLEdBQVNYLEVBQUltVSxjQUNoQnhULEVBQVFnQixPQUFPN0ssS0FBS2tKLEVBQUltVSxZQUFhLFdBRXZDLE1BQU1nTCxFQUFpQjltQixFQUFBQSxRQUFLakIsS0FBSzlCLEVBQUk2WSxRQUFTLGNBQ3hDd08sRUFBY3RrQixFQUFBQSxRQUFLakIsS0FBSzlCLEVBQUk2WSxRQUFTLFVBQVcsYUFDdEQ5UyxVQUFHOE8sY0FBY2dWLEdBQ2pCOWpCLFVBQUc4TyxjQUFjd1MsR0FDakIsTUFBTWhOLEVBQWV0WCxFQUFBQSxRQUFLakIsS0FBSytuQixFQUFnQm5mLEVBQUk3RSxVQUNuREUsRUFBQUEsUUFBRytPLGNBQWN1RixFQUFjaFAsR0FDL0IsTUFBTTBiLEVBQVNZLEdBQVVFLGVBQ25CZCxFQUFPdUIsUUFBUXNCLEdBQ3JCLE1BQU1FLEVBQWEvbUIsRUFBSSxRQUFDakIsS0FBSyxJQUFJOG5CLEVBQWdCNUcsYUFBYTNmLFFBQVEsU0FBVSxLQUFNcUgsRUFBSTdFLGdCQUNwRmtoQixFQUFPMVcsT0FBT2dLLEVBQWN5UCxFQUFZRixHQUM5Q0EsRUFBZ0JHLGdCQUFrQmhELEVBQU9pRCxNQUFNRixFQUFZRixFQUFnQkcsaUJBQ3BFcmYsRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BQ1gsTUFBTWllLEVBQVU2RixFQUFnQnpILFdBQWF5SCxFQUFnQnRELEtBQ3pEc0QsRUFBZ0JuQyxRQUNsQi9jLEVBQUlrVSxPQUFTLEdBQUdtRixLQUF1QixNQUFaMEQsRUFBa0IsR0FBSzdGLG1CQUFtQjZGLEtBQVc3RixtQkFBbUJsWCxFQUFJN0UsWUFBWXhDLFFBQVEsT0FBUSxLQUVuSXFILEVBQUlrVSxPQUFTLEdBQUdtRixLQUEwQyxNQUEvQjZGLEVBQWdCNUcsV0FBcUIsR0FBS3BCLG1CQUFtQmdJLEVBQWdCNUcsY0FBY3BCLG1CQUFtQmxYLEVBQUk3RSxZQUFZeEMsUUFBUSxPQUFRLEtBRTNLMEMsVUFBR2trQixTQUFTNVAsRUFBY3RYLEVBQUksUUFBQ2pCLEtBQUt1bEIsRUFBYTNjLEVBQUk3RSxXQUNyRDZFLEVBQUk2YyxZQUFjLG9DQUFvQzNGLG1CQUFtQmxYLEVBQUk3RSxZQUM3RWtoQixFQUFPMkMsUUFHWCxPQUFPMXBCLEVBQ1AsTUFBT3dWLEdBS1AsTUFKQXhWLEVBQUkrYixLQUFLN0QsR0FBY29JLGFBQWMsQ0FDbkNDLE1BQU92Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLGlCQUN2Q29QLEtBQU1sZ0IsRUFBSTZRLEtBQUtDLFVBQXVCLG9CQUVsQzBFLElBSUpyVSxHQUFVbkIsSUFDZCxNQUFNMlEsRUFBYTNRLEVBQUk0USxVQUE0QixxQkFBdUIsR0FxSDFFLE1BcEhnQyxDQUM5QixDQUNFOUksS0FBTSxPQUNOdkMsS0FBTSxRQUNGbEYsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsMEJBQ2xEckosY0FDRixPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLGtDQUV6Q0UsUUFBU0wsRUFBVzJWLE1BQVEsR0FDNUJ2VixVQUFVLEdBRVosQ0FDRWpKLEtBQU0sT0FDTnZDLEtBQU0sUUFDRmtDLGNBQ0YsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1QixrQ0FFckN6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwwQkFDdERFLFFBQVNMLEVBQVc0WCxNQUFRLEdBQzVCeFgsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFdBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qiw4QkFDdERFLFFBQVNMLEVBQVd3VCxVQUFZLEdBQ2hDcFQsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFdBQ052QyxLQUFNLFFBQ0ZsRixZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1Qiw4QkFDdERFLFFBQVNMLEVBQVcrVSxVQUFZLEdBQ2hDM1UsVUFBVSxHQUVaLENBQ0VqSixLQUFNLGFBQ052QyxLQUFNLFFBQ0ZrQyxjQUNGLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsd0NBRXJDelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsZ0NBQ3RERSxRQUFTTCxFQUFXdVgsWUFBYyxHQUNsQ25YLFVBQVUsR0FFWixDQUNFakosS0FBTSxhQUNOdkMsS0FBTSxRQUNGa0MsY0FDRixPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLG1EQUVyQ3pRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDJDQUN0REUsUUFBU0wsRUFBV3dYLFlBQWMsR0FDbENwWCxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sYUFDTnZDLEtBQU0sUUFDRmtDLGNBQ0YsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1Qix3Q0FFckN6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QixnQ0FDdERFLFFBQVNMLEVBQVdxUyxZQUFjLEdBQ2xDalMsVUFBVSxHQUVaLENBQ0VqSixLQUFNLFlBQ052QyxLQUFNLFFBQ0ZrQyxjQUNGLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsdUNBRXJDelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsK0JBQ3RERSxRQUFTTCxFQUFXd1IsV0FBYSxHQUNqQ3BSLFVBQVUsR0FFWixDQUNFakosS0FBTSxVQUNOdkMsS0FBTSxRQUNGa0MsY0FDRixPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLDBDQUVyQ3pRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLGtDQUN0REUsUUFBU0wsRUFBVzhXLFNBQVcsR0FDL0IxVyxVQUFVLEdBRVosQ0FDRWpKLEtBQU0sV0FDTnZDLEtBQU0sUUFDRmtDLGNBQ0YsT0FBT3pILEVBQUk2USxLQUFLQyxVQUF1Qix1Q0FFckN6USxZQUFXLE9BQU9MLEVBQUk2USxLQUFLQyxVQUF1QiwrQkFDdERFLFFBQVNMLEVBQVdvWixVQUFZLEdBQ2hDaFosVUFBVSxHQUVaLENBQ0VqSixLQUFNLFdBQ052QyxLQUFNLFFBQ0ZrQyxjQUNGLE9BQU96SCxFQUFJNlEsS0FBS0MsVUFBdUIsdUNBRXJDelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsK0JBQ3RERSxRQUFTTCxFQUFXaVksVUFBWSxHQUNoQzdYLFVBQVUsR0FFWixDQUNFakosS0FBTSxVQUNOdkMsS0FBTSxRQUNGa0MsY0FDRixPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLHNDQUVyQ3pRLFlBQVcsT0FBT0wsRUFBSTZRLEtBQUtDLFVBQXVCLDhCQUN0REUsUUFBU0wsRUFBV3VZLFNBQVcsR0FDL0JuWSxVQUFVLEtDcktoQixNQUFNb08sR0FBY3haLE1BQU9oRixFQUEyQjBLLEtBQ3BELE1BQU1tWixFQUFpQyxDQUNyQzVkLE9BQVEsT0FDUi9CLElBQUssNEJBQ0x5YSxRQUFTLENBQ1AsZUFBZ0IsdUJBRWxCRyxTQUFVLENBQ1JyYSxLQUFNaUcsSUFNVixPQUhJMUssRUFBUUYsUUFDVitqQixFQUFlL2pCLE1BQVFFLEVBQVFGLE9BRTFCK2pCLEdBR0h6a0IsR0FBUzRGLE1BQU8zRixZQUNwQixJQUFJa3FCLEVBQVlscUIsRUFBSTRRLFVBQTRCLHlCQUMzQ3NaLElBQ0hBLEVBQVksSUFFZCxJQUNFLE1BQU1uSyxFQUFVL2YsRUFBSThhLE9BQ3BCLElBQUssTUFBTXBRLEtBQU9xVixFQUNoQixHQUFJclYsRUFBSTdFLFVBQVk2RSxFQUFJNUUsT0FBUSxDQUM5QixJQUFJdUYsRUFBUVgsRUFBSTVFLFFBQ1h1RixHQUFTWCxFQUFJbVUsY0FDaEJ4VCxFQUFRZ0IsT0FBTzdLLEtBQUtrSixFQUFJbVUsWUFBYSxXQUV2QyxNQUFNZ0wsRUFBaUI5bUIsRUFBQUEsUUFBS2pCLEtBQUs5QixFQUFJNlksUUFBUyxjQUM5QzlTLFVBQUc4TyxjQUFjZ1YsR0FDakIsTUFBTXhQLEVBQWV0WCxFQUFBQSxRQUFLakIsS0FBSytuQixFQUFnQm5mLEVBQUk3RSxVQUNuREUsRUFBQUEsUUFBRytPLGNBQWN1RixFQUFjaFAsR0FDL0IsTUFBTTFLLFFBQWdCd2UsR0FBWStLLEVBQVdua0IsRUFBQUEsUUFBR29rQixpQkFBaUI5UCxJQUMzRDNULFFBQW9CMUcsRUFBSTJHLFFBQVFoRyxHQUNoQ3VmLEVBQXNCLGlCQUFSeFosRUFBbUJvRCxLQUFLQyxNQUFNckQsR0FBT0EsRUFFekQsR0FEQVgsVUFBR3FrQixPQUFPL1AsS0FDSyxRQUFYblUsRUFBQWdhLE1BQUFBLE9BQUksRUFBSkEsRUFBTyxVQUFJLElBQUFoYSxPQUFBLEVBQUFBLEVBQUFta0IsS0FLYixNQUFNLElBQUl4USxNQUFNLHlDQUpUblAsRUFBSW1VLG1CQUNKblUsRUFBSTVFLE9BQ1g0RSxFQUFJa1UsT0FBUyxxQkFBcUJzQixFQUFLLEdBQUdtSyxNQU1oRCxPQUFPcnFCLEVBQ1AsTUFBT3dWLEdBT1AsTUFOQXhWLEVBQUkrYixLQUFLN0QsR0FBY29JLGFBQWMsQ0FDbkNDLE1BQU92Z0IsRUFBSTZRLEtBQUtDLFVBQXVCLGlCQUN2Q29QLEtBQU1sZ0IsRUFBSTZRLEtBQUtDLFVBQXVCLDhCQUN0Qy9GLEtBQU0sTUFHVyxRQUFicUgsRUFBQW9ELE1BQUFBLE9BQUcsRUFBSEEsRUFBS3lPLGdCQUFRLElBQUE3UixPQUFBLEVBQUFBLEVBQUVuTCxPQUFRdU8sSUFJM0JyVSxHQUFVbkIsR0FFa0IsQ0FDOUIsQ0FDRThILEtBQU0sUUFDTnZDLEtBQU0sUUFDRmliLGFBQVksT0FBT3hnQixFQUFJNlEsS0FBS0MsVUFBdUIsdUJBQ25EelEsWUFBVyxPQUFPTCxFQUFJNlEsS0FBS0MsVUFBdUIsdUJBQ2xEckosY0FBYSxPQUFPekgsRUFBSTZRLEtBQUtDLFVBQXVCLCtCQUN4REUsU0FSZWhSLEVBQUk0USxVQUE0QiwwQkFBNEIsSUFRdkRuUSxPQUFTLEdBQzdCc1EsVUFBVSxJQy9EaEIsTUFBTXVaLEdBQWlDLEtBQzlCLENBQ0w1VCxTQUFVMVcsSVArSFUsU0FBVUEsR0FDaENBLEVBQUkrUixPQUFPVSxTQUFTaUUsU0FBUyxTQUFVLENBQ2pDNU8sV0FDRixPQUFPOUgsRUFBSTZRLEtBQUtDLFVBQXVCLDJCQUV6Qy9RLFVBQ0FvQixLT3BJRW9wQixDQUFldnFCLEdYMlFHLFNBQVVBLEdBQ2hDQSxFQUFJK1IsT0FBT1UsU0FBU2lFLFNBQVMsUUFBUyxDQUNoQzVPLFdBQVUsT0FBTzlILEVBQUk2USxLQUFLQyxVQUF1QiwrQkFDckQvUSxVQUNBb0IsS1c5UUVxcEIsQ0FBY3hxQixHWjRFSSxTQUFVQSxHQUNoQ0EsRUFBSStSLE9BQU9VLFNBQVNpRSxTQUFTLE9BQVEsQ0FDL0I1TyxXQUFVLE9BQU85SCxFQUFJNlEsS0FBS0MsVUFBdUIsdUJBQ3JEL1EsVUFDQW9CLEtZL0VFc3BCLENBQWF6cUIsR1Z1SUssU0FBVUEsR0FDaENBLEVBQUkrUixPQUFPVSxTQUFTaUUsU0FBUyxTQUFVLENBQ2pDNU8sV0FBVSxPQUFPOUgsRUFBSTZRLEtBQUtDLFVBQXVCLHlCQUNyRC9RLFVBQ0FvQixLVTFJRXVwQixDQUFlMXFCLEdUOEhHLFNBQVVBLEdBQ2hDQSxFQUFJK1IsT0FBT1UsU0FBU2lFLFNBQVMsUUFBUyxDQUNoQzVPLFdBQVUsT0FBTzlILEVBQUk2USxLQUFLQyxVQUF1Qix3QkFDckQvUSxVQUNBb0IsS1NqSUV3cEIsQ0FBYzNxQixHUitJSSxTQUFVQSxHQUNoQ0EsRUFBSStSLE9BQU9VLFNBQVNpRSxTQUFTLFFBQVMsQ0FDaEM1TyxXQUFVLE9BQU85SCxFQUFJNlEsS0FBS0MsVUFBdUIsd0JBQ3JEL1EsVUFDQW9CLEtRbEpFeXBCLENBQWM1cUIsR044SkksU0FBVUEsR0FDaENBLEVBQUkrUixPQUFPVSxTQUFTaUUsU0FBUyxRQUFTLENBQ2hDNU8sV0FBVSxPQUFPOUgsRUFBSTZRLEtBQUtDLFVBQXVCLHdCQUNyRC9RLFVBQ0FvQixLTWpLRTBwQixDQUFjN3FCLEdMZ0lJLFNBQVVBLEdBQ2hDQSxFQUFJK1IsT0FBT1UsU0FBU2lFLFNBQVMsY0FBZSxDQUN0QzVPLFdBQVUsT0FBTzlILEVBQUk2USxLQUFLQyxVQUF1Qiw4QkFDckQvUSxVQUNBb0IsS0tuSUUycEIsQ0FBb0I5cUIsR0owRUYsU0FBVUEsR0FDaENBLEVBQUkrUixPQUFPVSxTQUFTaUUsU0FBUyxRQUFTLENBQ2hDNU8sV0FBVSxPQUFPOUgsRUFBSTZRLEtBQUtDLFVBQXVCLHdCQUNyRC9RLFVBQ0FvQixLSTdFRTRwQixDQUFjL3FCLEdGMEpJLFNBQVVBLEdBQ2hDQSxFQUFJK1IsT0FBT1UsU0FBU2lFLFNBQVMsWUFBYSxDQUNwQzVPLFdBQVUsT0FBTzlILEVBQUk2USxLQUFLQyxVQUF1Qiw0QkFDckQvUSxVQUNBb0IsS0U3SkU2cEIsQ0FBYWhyQixHRHlESyxTQUFVQSxHQUNoQ0EsRUFBSStSLE9BQU9VLFNBQVNpRSxTQUFTLGlCQUFrQixDQUN6QzVPLFdBQVUsT0FBTzlILEVBQUk2USxLQUFLQyxVQUF1Qiw0QkFDckQvUSxHQUNBb0IsT0FBQUEsS0M1REU4cEIsQ0FBa0JqckIsTUNrQmxCa3JCLEdBQWEsQ0FBQ2xyQixFQUFhb0YsRUFBY3JDLEtBQzdDLE1BQU15QyxFQUFZTCxHQUFhQyxHQVMvQixPQVJLSSxFQUFVQyxPQUNPLGlCQUFUMUMsRUFDVC9DLEVBQUllLElBQUk2SCxLQUFLLGFBQWE3RixrQkFFMUIvQyxFQUFJZSxJQUFJNkgsS0FBSyx3QkFFZjVJLEVBQUllLElBQUk2SCxLQUFLLDBCQUVScEQsR0FHVCxJQUFlMmxCLEdBQUEsUUFoREF4bEIsTUFBTzNGLElBQ3BCLE1BQU1vckIsRUFBc0JwckIsRUFBSThhLE9BK0JoQyxhQTlCTXZVLFFBQVEyWSxJQUFJbGYsRUFBSXFOLE1BQU01TCxLQUFJa0UsTUFBT2hDLEVBQXVCK1ksS0FDNUQsSUFBSXBLLEVBYUosR0FYRUEsRUFERWpHLE9BQU9zSSxTQUFTaFIsR0FDWCxDQUNMc0MsU0FBUyxFQUNUSCxPQUFRbkMsRUFDUmtDLFNBQVUsR0FDVjVDLFFBQVMsSUFFRjJCLEdBQU1qQixTQUNGeUMsR0FBV3pDLEVBQU0zRCxTQUVqQjBGLEdBQVUvQixHQUVyQjJPLEVBQUtyTSxTQUFXcU0sRUFBS3hNLE9BQVEsQ0FDL0IsTUFBTXVsQixFQUFVSCxHQUFXbHJCLEVBQUtzUyxFQUFLeE0sT0FBUW5DLEdBQ3ZDVixFQUFVcVAsRUFBS3JQLFNBQVdvb0IsRUFBUXBvQixTQUFXLE9BQ25EbW9CLEVBQVExTyxHQUFTLENBQ2Y1VyxPQUFRd00sRUFBS3hNLE9BQ2JELFNBQVV5TSxFQUFLek0sVUFBWSxHQUFHK1QsRUFBSyxVQUFHakssT0FBTyxvQkFBb0IxTSxLQUNqRW9DLE1BQU9nbUIsRUFBUWhtQixNQUNmQyxPQUFRK2xCLEVBQVEvbEIsT0FDaEJyQyxRQUFTcVAsRUFBS3JQLGNBR2hCakQsRUFBSWUsSUFBSUMsTUFBTXNSLEVBQUtuTSxZQUl2Qm5HLEVBQUk4YSxPQUFTc1EsRUFBUTVhLFFBQU83TSxHQUFRQSxJQUM3QjNELElDbkNULElBQWVzckIsR0FBQSxDQUNidnJCLE9BTmE0RixNQUFPM0YsSUFDcEJBLEVBQUk4YSxPQUFPbkksUUFBUTNTLEVBQUlxTixPQUNoQnJOLFVDT0l1ckIsR0FLWGpWLFlBQWF0VyxHQUhMdVcsS0FBSUwsS0FBYSxHQUNSSyxLQUFBaVYsU0FBVyxJQUFJQyxJQUNmbFYsS0FBQW1WLFVBQVksSUFBSWxWLElBRS9CRCxLQUFLdlcsSUFBTUEsRUFDWHVXLEtBQUtkLE9BR0NBLE9BQ04sTUFBTWtXLEVBQWM1b0IsRUFBQUEsUUFBS2pCLEtBQUt5VSxLQUFLdlcsSUFBSTZZLFFBQVMsZ0JBQ2hELElBQUs5UyxFQUFFLFFBQUNzQyxXQUFXc2pCLEdBQWMsQ0FDL0IsTUFBTTFpQixFQUFNLENBQ1ZuQixLQUFNLGdCQUNOMUgsWUFBYSxnQkFDYndyQixXQUFZLHNDQUNaQyxRQUFTLE9BRVg5bEIsRUFBRSxRQUFDK08sY0FBYzZXLEVBQWE3aEIsS0FBS3FLLFVBQVVsTCxHQUFNLFNBSy9DNmlCLGNBQWU5ckIsRUFBYThILEdBQ2xDLElBQ0UsT0FBT3RCLEdBQUFBLFFBQVE2TyxLQUFLdk4sRUFBTSxDQUFFaWtCLFFBQVMvckIsRUFBSTZZLFVBQ3pDLE1BQU9yRCxHQUNQLE9BQU96UyxFQUFBQSxRQUFLakIsS0FBSzlCLEVBQUk2WSxRQUFTLGVBQWdCL1EsSUFLbERra0IsT0FDRSxNQUFNTCxFQUFjNW9CLEVBQUFBLFFBQUtqQixLQUFLeVUsS0FBS3ZXLElBQUk2WSxRQUFTLGdCQUMxQ29ULEVBQVlscEIsRUFBQUEsUUFBS2pCLEtBQUt5VSxLQUFLdlcsSUFBSTZZLFFBQVMsaUJBRTlDLElBQUs5UyxFQUFFLFFBQUNzQyxXQUFXNGpCLEdBQ2pCLE9BQU8sRUFFVCxNQUFNcEosRUFBTzljLEVBQUFBLFFBQUdtRCxhQUFheWlCLEdBQ3ZCTyxFQUFPMW9CLE9BQU9DLEtBQUtvZixFQUFLc0osY0FBZ0IsSUFDeENDLEVBQVU1b0IsT0FBT0MsS0FBS29mLEVBQUt3SixpQkFBbUIsSUFDOUNDLEVBQVVKLEVBQUt2SyxPQUFPeUssR0FBUzViLFFBQVExSSxJQUMzQyxJQUFLLHdDQUF3Q2hELEtBQUtnRCxHQUFPLE9BQU8sRUFDaEUsTUFBTS9FLEVBQU93VCxLQUFLdVYsY0FBY3ZWLEtBQUt2VyxJQUFLOEgsR0FDMUMsT0FBTy9CLEVBQUUsUUFBQ3NDLFdBQVd0RixNQUV2QixJQUFLLE1BQU13TyxLQUFVK2EsRUFDbkIvVixLQUFLZ1csZUFBZWhiLEdBRXRCLE9BQU8sRUFHVGdiLGVBQWdCemtCLEVBQWN1SyxHQUM1QixHQUFLdkssR0FBd0IsaUJBQVRBLEVBQXBCLENBSUF5TyxLQUFLaVYsU0FBU2dCLElBQUkxa0IsR0FDbEIsSUFFRSxHQUFLdUssRUFhRSxDQUdMa0UsS0FBS0wsS0FBS3ZELEtBQUs3SyxHQUNmeVAsR0FBcUJ6UCxHQUNyQixNQUFNMmtCLEVBQWtCcGEsRUFBT2tFLEtBQUt2VyxLQUNwQ3VXLEtBQUttVixVQUFVNVUsSUFBSWhQLEVBQU0ya0IsR0FDekJBLEVBQWdCL1YsU0FBU0gsS0FBS3ZXLFVBbkI5QixJQUFtRCxJQUEvQ3VXLEtBQUt2VyxJQUFJNFEsVUFBVSxnQkFBZ0I5SSxXQUFvRXZFLElBQS9DZ1QsS0FBS3ZXLElBQUk0USxVQUFVLGdCQUFnQjlJLEtBQXdCLENBQ3JIeU8sS0FBS0wsS0FBS3ZELEtBQUs3SyxHQUNmeVAsR0FBcUJ6UCxHQUVyQnlPLEtBQUtyRSxVQUFVcEssR0FBTzRPLFNBQVNILEtBQUt2VyxLQUNwQyxNQUFNcVMsRUFBUyxnQkFBZ0J2SyxLQUMvQnlPLEtBQUt2VyxJQUFJNFIsV0FDUCxDQUNFUyxDQUFDQSxJQUFTLEtBYWxCLE1BQU92UixHQUNQeVYsS0FBS21WLFVBQVV2VSxPQUFPclAsR0FDdEJ5TyxLQUFLTCxLQUFPSyxLQUFLTCxLQUFLMUYsUUFBUTdNLEdBQWlCQSxJQUFTbUUsSUFDeER5TyxLQUFLaVYsU0FBU3JVLE9BQU9yUCxHQUNyQnlPLEtBQUt2VyxJQUFJZSxJQUFJQyxNQUFNRixHQUNuQnlWLEtBQUt2VyxJQUFJK2IsS0FBSzdELEdBQWNvSSxhQUFjLENBQ3hDQyxNQUFPLFVBQVV6WSxlQUNqQm9ZLEtBQU1wZixVQW5DUnlWLEtBQUt2VyxJQUFJZSxJQUFJNkgsS0FBSywrQkF3Q3RCOGpCLGlCQUFrQjVrQixHQUNoQnlPLEtBQUtMLEtBQU9LLEtBQUtMLEtBQUsxRixRQUFRN00sR0FBaUJBLElBQVNtRSxJQUN4RHlPLEtBQUtpVixTQUFTclUsT0FBT3JQLEdBQ3JCeU8sS0FBS21WLFVBQVV2VSxPQUFPclAsR0FDdEJ5UCxHQUFxQnpQLEdBQ3JCeU8sS0FBS3ZXLElBQUkrUixPQUFPVSxTQUFTdUUsV0FBV2xQLEdBQ3BDeU8sS0FBS3ZXLElBQUkrUixPQUFPVyxZQUFZc0UsV0FBV2xQLEdBQ3ZDeU8sS0FBS3ZXLElBQUkrUixPQUFPb00sdUJBQXVCbkgsV0FBV2xQLEdBQ2xEeU8sS0FBS3ZXLElBQUkrUixPQUFPdU0sb0JBQW9CdEgsV0FBV2xQLEdBQy9DeU8sS0FBS3ZXLElBQUkrUixPQUFPME0sbUJBQW1CekgsV0FBV2xQLEdBQzlDeU8sS0FBS3ZXLElBQUlDLElBQUkrVyxXQUFXbFAsR0FDeEJ5TyxLQUFLdlcsSUFBSW9iLGFBQWEsZUFBZ0J0VCxHQUl4Q29LLFVBQVdwSyxHQUNULEdBQUl5TyxLQUFLbVYsVUFBVTdVLElBQUkvTyxHQUNyQixPQUFPeU8sS0FBS21WLFVBQVVua0IsSUFBSU8sR0FFNUIsTUFBTW1rQixFQUFZbHBCLEVBQUFBLFFBQUtqQixLQUFLeVUsS0FBS3ZXLElBQUk2WSxRQUFTLGlCQUV4Q3hHLEVBQVNpQyxRQUFRMlgsRUFBWW5rQixFQUFwQndNLENBQTBCaUMsS0FBS3ZXLEtBRTlDLE9BREF1VyxLQUFLbVYsVUFBVTVVLElBQUloUCxFQUFNdUssR0FDbEJBLEVBTVRnRixVQUNFLE9BQU9kLEtBQUtMLEtBR2R5VyxVQUFXN2tCLEdBQ1QsT0FBT3lPLEtBQUtpVixTQUFTM1UsSUFBSS9PLEdBTTNCcUssY0FDRSxNQUFPLElBQUlvRSxLQUFLaVYsV0NuSmIsTUNvQ0RvQixHQUVGLENBQ0ZDLDJxQ0FDQUMsaXdCQUNBQyxnNENBQ0FDLGs1Q0FDQUMsa3VCQU1JQyxHQUVGLENBQ0ZMLE9BQVEsa0JBQ1JDLE1BQU8sY0FDUEMsTUFBTyxnQkFDUEMsTUFBTyxXQUNQQyxJQUFLLFVBV1AsTUFBTUUsR0FBb0J4bkIsTUFBTzNGLEtBUmpDLFNBQTRCQSxHQUMxQixNQUFNb3RCLEVBQVlycUIsRUFBQUEsUUFBS2pCLEtBQUs5QixFQUFJNlksUUQ1REksNEJDNkQvQjlTLEVBQUUsUUFBQ3NDLFdBQVcra0IsSUFDakJybkIsVUFBRzJVLFVBQVUwUyxHQU1mQyxDQUFrQnJ0QixHQUVsQixNQUFNb3RCLEVBQVlycUIsRUFBSSxRQUFDakIsS0FBSzlCLEVBQUk2WSxRRHRFSSwyQkNzRTZCLEdBQUdlLEVBQUFBLFVBQVFqSyxPQUFPLHlCQUNuRixhQUFhLElBQUlwSixTQUF5QixDQUFDQyxFQUFjQyxLQUN2RCxNQUFNNm1CLEVBdkRpQixNQUN6QixNQUFNQSxFQUFXbmxCLFFBQVFtbEIsU0FDekIsR0FBSUMsV0FDRixNQUFPLE1BRVQsR0FBaUIsVUFBYkQsRUFFRixNQUFrQixPQURBRSxFQUFBQSxRQUFHQyxVQUFVanBCLE1BQU0sS0FBSyxHQUVqQyxRQUVBLFFBRUosTUFBaUIsV0FBYjhvQixFQUNGLFNBRUEsU0F3Q1VJLEdBQ1hDLEVBQWE1cUIsRUFBSSxRQUFDakIsS0FBSzlCLEVBQUk2WSxRQUFTcVUsR0FBd0JJLElBU2xFLElBQUlNLEVBUEM3bkIsRUFBRSxRQUFDc0MsV0FBV3NsQixJQUNqQjVuQixFQUFFLFFBQUMrTyxjQUNENlksRUFDQWYsR0FBdUJVLEdBQ3ZCLFFBS0ZNLEVBRGUsV0FBYk4sRUFDVU8sRUFBS0EsTUFBQyxZQUFhLENBQUNGLEVBQVlQLElBQ3RCLFVBQWJFLEdBQXFDLFVBQWJBLEVBQ3JCTyxFQUFLQSxNQUFDLGFBQWMsQ0FDOUIsYUFDQSxrQkFDQSxVQUNBLE9BQ0EsbUJBQW9CLGVBS3BCLFFBQVNGLEVBQ1RQLElBR1VTLEVBQUtBLE1BQUMsS0FBTSxDQUFDRixFQUFZUCxJQUd2Q1EsRUFBVUUsT0FBT2hZLEdBQUcsUUFBUzdPLElBQzNCLEdBQWlCLFVBQWJxbUIsR0FDNkIsNkJBQTNCcm1CLEVBQUszRSxXQUFXeXJCLE9BS2xCLE9BSkEvdEIsRUFBSStiLEtBQUs3RCxHQUFjb0ksYUFBYyxDQUNuQ0MsTUFBTyxrQ0FDUEwsS0FBTSxnRkFFRHpaLEVBQU8sSUFBSW9ULE1BQU0sZ0ZBRzVCLE1BQU1tVSxFQUFVL21CLEVBQUszRSxXQUFXeXJCLE9BSWhDLElBQUlFLEdBQTJCLEVBVy9CLEdBUklsckIsRUFBQUEsUUFBS0MsU0FBU2dyQixLQUFhanJCLEVBQUFBLFFBQUtDLFNBQVNvcUIsSUFHdkNybkIsRUFBRSxRQUFDc0MsV0FBVzJsQixLQUNoQkMsR0FBMkIsR0FJZixhQUFaRCxJQUEyQmpvQixFQUFFLFFBQUNzQyxXQUFXMmxCLEdBQzNDLE9BQU92bkIsRUFBTyxJQUFJb1QsTUFBTSxjQUFjbVUsTUFHeEN4bkIsRUFBUSxDQUNOd25CLFFBQUFBLEVBQ0FDLHlCQUFBQSxXQ3BJRkMsR0FBVyxJQUFJaFUsRUFBQUEsYUNRZmlVLEdBQWEsSUFBSUMsR0FBSyxRQUFDQyxNQUFNLENBQ2pDQyxXQUFZLFVBQ1pDLFdBQVksWUFJZCxTQUFTQyxHQUFnQkMsRUFBZ0JycUIsRUFBYTZDLEdBQ2hDLGlCQUFUQSxHQUFxQixVQUFXQSxHQUFRLFlBQWFBLEVBQzlEd25CLEVBQUtDLE9BQU90cUIsRUFBSzZDLEVBQUswWSxNQUFPMVksRUFBS3RHLFNBRWxDOHRCLEVBQUtDLE9BQU90cUIsRUFBSzZDLEdBd0VyQixTQUFTMG5CLEdBQXFCMUssR0FDNUIsT0FBQXpnQixPQUFBb3JCLE9BQUFwckIsT0FBQW9yQixPQUFBLEdBQ0szSyxHQUFRLENBQ1g1QixXQUFZNEIsRUFBUzRLLE9BQ3JCM08sS0FBTStELEVBQVNoZCxPQUluQixTQUFTNm5CLEdBQXNCOXRCLHFCQWM3QixNQUFNK3RCLEVBQVcsQ0FDZm5vQixnQkFBUXdMLEVBQWUsUUFBZmxNLEVBQUFsRixNQUFBQSxPQUFLLEVBQUxBLEVBQU9HLGNBQVEsSUFBQStFLE9BQUEsRUFBQUEsRUFBQVUsNkJBQVErUixnQkFBaUIsR0FDaEQ5VCxLQUFvQixRQUFmZ1ksRUFBQTdiLE1BQUFBLE9BQUEsRUFBQUEsRUFBT0csY0FBUSxJQUFBMGIsT0FBQSxFQUFBQSxFQUFBaFksTUFBTyxHQUMzQndkLFlBQTZCLFFBQWpCdkYsRUFBQTliLE1BQUFBLE9BQUEsRUFBQUEsRUFBT2lqQixnQkFBVSxJQUFBbkgsT0FBQSxFQUFBQSxFQUFBK1IsU0FBVSxFQUN2Q3BuQixTQUFTekcsTUFBQUEsU0FBQUEsRUFBT3lHLFVBQVcsR0FDM0JzUyxPQUFPL1ksTUFBQUEsU0FBQUEsRUFBTytZLFFBQVMsR0FDdkJrSyxTQUFVLENBQ1I0SyxRQUF5QixRQUFqQjdSLEVBQUFoYyxNQUFBQSxPQUFBLEVBQUFBLEVBQU9pakIsZ0JBQVUsSUFBQWpILE9BQUEsRUFBQUEsRUFBQTZSLFNBQVUsRUFDbkN4TSxZQUE2QixRQUFqQnBGLEVBQUFqYyxNQUFBQSxPQUFBLEVBQUFBLEVBQU9pakIsZ0JBQVUsSUFBQWhILE9BQUEsRUFBQUEsRUFBQTRSLFNBQVUsRUFDdkMzTyxNQUF1QixRQUFqQjFDLEVBQUF4YyxNQUFBQSxPQUFBLEVBQUFBLEVBQU9pakIsZ0JBQVUsSUFBQXpHLE9BQUEsRUFBQUEsRUFBQXZXLE9BQVEsS0FHbkMsT0FBT1YsUUFBUUUsT0FBT3NvQixTQUdYL1QsR0FJWDFFLFlBQWF0VyxHQUZMdVcsS0FBSzlWLE1BQXdCLEdBQ3JDOFYsS0FBTzVWLFFBQTRCLEdBRWpDNFYsS0FBS3ZXLElBQU1BLEVBQ1h1VyxLQUFLZCxPQUNMeVksR0FBU3BZLEdBQUdxQyxHQUFVNlcsZUFBZ0IvbkIsVUFDcEMsT0FBUUEsRUFBSzBLLFlBQ1gsSUFBSyxVQUNrQyxVQUFoQzFLLEVBQUswWSxhQUEyQixJQUFBelosT0FBQSxFQUFBQSxFQUFFekYsU0FDckM4VixLQUFLOVYsTUFBU3dHLEVBQUswWSxNQUE0QmxmLE9BRWpELE1BQ0YsSUFBSyxlQUNIOFYsS0FBSzlWLE1BQVF3RyxFQUFLMFksVUFNbEJsSyxPQUNOLE1BQU1oVixFQUFROFYsS0FBS3ZXLElBQUk0USxVQUErQixnQkFDbERuUSxJQUNGOFYsS0FBSzlWLE1BQVFBLEdBSVR3dUIsY0FDTixHQUFJMVksS0FBSzlWLE1BQ1AsSUFDRSxNQUFNeXVCLEVBQWUsSUFBSTluQixFQUFBQSxJQUFJbVAsS0FBSzlWLE9BQ2xDLE1BQU8sQ0FDTDZsQixLQUFNNEksRUFBYUMsU0FDbkI1RyxLQUFNdkMsU0FBU2tKLEVBQWEzRyxNQUFRLElBQUssSUFDekM2RyxTQUFVRixFQUFhRSxVQUV6QixNQUFPdHVCLElBR1gsT0FBTyxFQUlUNkYsUUFFSWhHLFNBQ0Y0VixLQUFLNVYsUUFBUUYsTUFBUThWLEtBQUswWSxjQUMxQjFZLEtBQUs1VixRQUFRMmUsUUFBVTNlLEVBQVEyZSxTQUFXLEdBQzFDL0ksS0FBSzVWLFFBQVFnbUIsY0FBZ0IwSSxFQUFBQSxFQUM3QjlZLEtBQUs1VixRQUFRaW1CLGlCQUFtQnlJLEVBQUFBLEVBQzVCOVksS0FBSzVWLFFBQVFGLGdCQUFTeUYsRUFBQXZGLEVBQVFrRSwwQkFBSzJDLFdBQVcsY0FDaEQrTyxLQUFLNVYsUUFBUXd0QixXQUFhbUIsR0FBQUEsUUFBT0MsY0FBYyxDQUM3Qzl1QixNQUFPLENBQ0w2bEIsS0FBTS9QLEtBQUs1VixRQUFRRixNQUFNNmxCLEtBQ3pCaUMsS0FBTWhTLEtBQUs1VixRQUFRRixNQUFNOG5CLFFBRzdCaFMsS0FBSzVWLFFBQVFGLE9BQVEsR0FFckI4VixLQUFLNVYsUUFBUXd0QixXQUFhQSxHQUk1QixNQUFNdEcsRUFBV2pOLEVBQUssUUFBQzRVLE9BQU9qWixLQUFLNVYsU0FDbkNrbkIsRUFBUzRILGFBQWF4TCxTQUFTelIsSUFBSW1jLEdBQXFCRyxJQUd4RCxNQUFNWSxFQTdLVixTQUE2Qi91QixTQUczQixJQUFJZ3ZCLEdBQWlCLEVBQ3JCLE1BQU1ELGlDQUdEL3VCLEdBQU8sQ0FDVmtFLElBQU1sRSxFQUFRa0UsS0FBa0IsR0FDaEN5YSxRQUFTM2UsRUFBUTJlLFNBQVcsS0FHOUIsR0FBSTNlLEVBQVFGLE1BQU8sQ0FDakIsSUFBSXl1QixFQUFldnVCLEVBQVFGLE1BQzNCLEdBQTRCLGlCQUFqQnl1QixFQUEyQixDQUNwQyxJQUNFQSxFQUFlLElBQUk5bkIsRUFBQUEsSUFBSXpHLEVBQVFGLE9BQy9CLE1BQU9LLEdBQ1BvdUIsR0FBZSxFQUNmUSxFQUFJanZCLE9BQVEsRUFDWmlJLFFBQVExSCxNQUFNRixHQUVoQjZ1QixHQUFpQixFQUVmVCxhQUNFaHBCLEVBQUF2RixFQUFRa0UsMEJBQUsyQyxXQUFXLGNBQzFCa29CLEVBQUlqdkIsT0FBUSxFQUNaaXZCLEVBQUl2QixXQUFhbUIsR0FBTSxRQUFDQyxjQUFjLENBQ3BDOXVCLE1BQU8sQ0FDTDZsQixLQUFNNEksTUFBQUEsT0FBQSxFQUFBQSxFQUFjQyxTQUNwQjVHLEtBQU12QyxTQUFTa0osTUFBQUEsT0FBQSxFQUFBQSxFQUFjM0csS0FBTSxRQUl2Q21ILEVBQUlqdkIsTUFBUSxDQUNWNmxCLEtBQU00SSxFQUFhQyxTQUNuQjVHLEtBQU12QyxTQUFTa0osRUFBYTNHLEtBQU0sSUFDbEM2RyxTQUFVLFNBS2xCLEdBQUksYUFBY3p1QixFQUFTLENBQ3pCLE1BQU04dEIsRUFBTyxJQUFJbUIsR0FBQUEsUUFDakIsSUFBSyxNQUFNeHJCLEtBQU96RCxFQUFROGUsU0FFeEIrTyxHQUFlQyxFQUFNcnFCLEVBRFJ6RCxFQUFROGUsU0FBU3JiLElBR2hDc3JCLEVBQUl6b0IsS0FBT3duQixFQUNYaUIsRUFBSXBRLFFBQVU5YixPQUFPb3JCLE9BQU9jLEVBQUlwUSxTQUFXLEdBQUltUCxFQUFLb0IsY0FDcERGLEdBQWlCLFNBRVZELEVBQUlqUSxTQWFiLE1BWEksU0FBVTllLElBQ1ordUIsRUFBSXpvQixLQUFPdEcsRUFBUXVmLEtBQ25CeVAsR0FBaUIsU0FFVkQsRUFBSXhQLE1BRVQsT0FBUXZmLElBQ1YrdUIsRUFBSWppQixPQUFTOU0sRUFBUW12QixHQUNyQkgsR0FBaUIsR0FFbkJELEVBQUlDLGVBQWlCQSxFQUNkRCxFQTRHT0ssQ0FBbUJwdkIsR0FvQi9CLE9BbEJBa25CLEVBQVM0SCxhQUFhOW9CLFFBQVE2TCxLQUFJLFNBQVV3ZCxhQUUxQyxJQUFJelEsRUFBYyxHQWNsQixPQWJrQixRQUFkclosRUFBQThwQixNQUFBQSxPQUFHLEVBQUhBLEVBQUsxUSxlQUFTLElBQUFwWixPQUFBLEVBQUFBLEVBQUFxWixjQUNoQkEsRUFBY3lRLEVBQUkxUSxRQUFRQyxtQkFDbkJ5USxFQUFJMVEsUUFBUUMsY0FDSSxRQUFkbk4sRUFBQTRkLE1BQUFBLE9BQUcsRUFBSEEsRUFBSzFRLGVBQVMsSUFBQWxOLE9BQUEsRUFBQUEsRUFBQTZkLGNBQ3ZCMVEsRUFBY3lRLEVBQUkxUSxRQUFRMlEsbUJBQ25CRCxFQUFJMVEsUUFBUTJRLGNBQ0UsUUFBWnBULEVBQUFtVCxNQUFBQSxPQUFHLEVBQUhBLEVBQUsxUSxlQUFPLElBQUF6QyxPQUFBLEVBQUFBLEVBQUcsbUJBQ3hCMEMsRUFBY3lRLEVBQUkxUSxRQUFRLHVCQUNuQjBRLEVBQUkxUSxRQUFRLGlCQUVELEtBQWhCQyxHQUFzQnlRLEVBQUkxUSxVQUM1QjBRLEVBQUkxUSxRQUFRLGdCQUFrQkMsR0FFekJ5USxLQUVMLDRCQUE2QnJ2QixHQUFXQSxFQUFRa0csd0JBQzNDZ2hCLEVBQVNsaEIsUUFBUStvQixHQUVqQjdILEVBQVNsaEIsUUFBUStvQixHQUFLM29CLE1BQUtMLEdBRTVCZ3BCLEVBQUlDLGVBQ0YsU0FBVWh2QixFQUNSQSxFQUFRa2lCLEtBQ0huYyxFQUFJTyxVQURiLEVBSU82QyxLQUFLcUssVUFBVXpOLEVBQUlPLE1BR3JCUCxFQUFJTyxRQ25PckIsTUFBTWlwQixHQUdKNVosWUFBYXRXLEdBSVgsR0FIQXVXLEtBQUt2VyxJQUFNQSxFQUNYdVcsS0FBSzRaLEdBQUssSUFBSUMsRUFBQUEsVUFBVTdaLEtBQUt2VyxJQUFJNmEsYUFFNUJ0RSxLQUFLNFosR0FBR3RaLElBQUksVUFDZixJQUNFTixLQUFLNFosR0FBR3JaLElBQUksU0FBVSxDQUNwQnJFLFNBQVUsT0FDVjhPLFFBQVMsU0FFWCxNQUFPemdCLEdBRVAsTUFEQXlWLEtBQUt2VyxJQUFJZSxJQUFJQyxNQUFNRixHQUNiQSxFQUdWLElBQUt5VixLQUFLNFosR0FBR3RaLElBQUksZ0JBQ2YsSUFDRU4sS0FBSzRaLEdBQUdyWixJQUFJLGVBQWdCLElBQzVCLE1BQU9oVyxHQUVQLE1BREF5VixLQUFLdlcsSUFBSWUsSUFBSUMsTUFBTUYsR0FDYkEsR0FLWnV2QixLQUFNQyxHQUNKLE9BQU8vWixLQUFLNFosR0FBR0UsS0FBS0MsR0FHdEIvb0IsSUFBS25ELEVBQWMsSUFFakIsT0FEQW1TLEtBQUs4WixNQUFLLEdBQ0g5WixLQUFLNFosR0FBRzVvQixJQUFJbkQsR0FHckIwUyxJQUFLMVMsRUFBYXViLEdBQ2hCcEosS0FBSzhaLE1BQUssR0FDVjlaLEtBQUs0WixHQUFHclosSUFBSTFTLEVBQUt1YixHQUduQjlJLElBQUt6UyxHQUVILE9BREFtUyxLQUFLOFosTUFBSyxHQUNIOVosS0FBSzRaLEdBQUd0WixJQUFJelMsR0FHckJtc0IsTUFBT25zQixFQUFhdWIsR0FFbEIsT0FEQXBKLEtBQUs4WixNQUFLLEdBQ0g5WixLQUFLNFosR0FBR0ksTUFBTW5zQixFQUFLdWIsR0FHNUIvTixXQUFZelEsR0FDVnFDLE9BQU9DLEtBQUt0QyxHQUFReVIsU0FBUzlLLElBQzNCeU8sS0FBS08sSUFBSWhQLEVBQU0zRyxFQUFPMkcsT0FJMUJzVCxhQUFjamEsR0FDWnFDLE9BQU9DLEtBQUt0QyxHQUFReVIsU0FBUzlLLElBQzNCeU8sS0FBS2dhLE1BQU16b0IsRUFBTTNHLEVBQU8yRyxjQ2pEakIwb0IsR0FHWGxhLFlBQWF0VyxHQUNYdVcsS0FBS3ZXLElBQU1BLEVBR2IyRixjQUFlbkYsRUFBbUJHLEVBQWlDLEdBQUkwSixHQUNyRSxNQUFNb21CLEVBQTZCLEdBQzdCQyxFQUFpQmx3QixFQUNwQmlCLEtBQUtrQyxHQUFpQmd0QixHQUF3QnBhLEtBQUt2VyxJQUFLMkQsS0FDeEQ2TSxRQUFRN00sR0FHSDRTLEtBQUt2VyxJQUFJaVMsYUFBYTBhLFVBQVVocEIsRUFBS2l0QixVQUN2Q0gsRUFBaUI5ZCxLQUFLaFAsRUFBS2l0QixTQUMzQnJhLEtBQUt2VyxJQUFJZSxJQUFJa0YsUUFBUSwrQkFBK0J0QyxFQUFLaXRCLFlBQ2xELEtBR0pqdEIsRUFBS3NDLFVBS1I0cUIsRUFBZUgsRUFBZWp2QixLQUFJa0MsR0FBUUEsRUFBS210QixXQUMvQ0MsRUFBY0wsRUFBZWp2QixLQUFJa0MsR0FBUUEsRUFBS2l0QixVQUNwRCxHQUFJQyxFQUFheHZCLE9BQVMsRUFBRyxDQUkzQixNQUFNeVgsUUFBZXZDLEtBQUtrVCxZQUFZLFVBQVdvSCxFQUFjdGEsS0FBS3ZXLElBQUk2WSxRQUFTbFksRUFBUzBKLEdBQzFGLEdBQUt5TyxFQUFPcUgsS0FjTCxDQUNMLE1BQU0zSyxFQUFNZSxLQUFLdlcsSUFBSTZRLEtBQUtDLFVBQXVCLDhDQUErQyxDQUM5RnFQLEtBQU0sR0FBR3JILEVBQU9xSCxPQUNoQmxaLEtBQU02UixFQUFPN1IsT0FFZnNQLEtBQUt2VyxJQUFJZSxJQUFJQyxNQUFNd1UsR0FDbkJlLEtBQUt2VyxJQUFJK2IsS0FBSyxnQkFBaUIsQ0FDN0J3RSxNQUFPaEssS0FBS3ZXLElBQUk2USxLQUFLQyxVQUF1Qix3Q0FDNUNvUCxLQUFNMUssSUFNUixNQUp5QyxDQUN2Q3ZQLFNBQVMsRUFDVGlhLEtBQU0xSyxHQXpCUnViLEVBQVluZSxTQUFTcUUsSUFDbkJWLEtBQUt2VyxJQUFJaVMsYUFBYXNhLGVBQWV0VixNQUV2Q1YsS0FBS3ZXLElBQUllLElBQUlrRixRQUFRc1EsS0FBS3ZXLElBQUk2USxLQUFLQyxVQUF1QiwwQ0FDMUR5RixLQUFLdlcsSUFBSStiLEtBQUssaUJBQWtCLENBQzlCd0UsTUFBT2hLLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIseUNBQzVDb1AsS0FBTSxJQUFJNlEsS0FBZ0JOLEtBTTVCLE1BSndDLENBQ3RDeHFCLFNBQVMsRUFDVGlhLEtBQU0sSUFBSTZRLEtBQWdCTixJQW1CekIsR0FBZ0MsSUFBNUJBLEVBQWlCcHZCLE9BQWMsQ0FDeEMsTUFBTW1VLEVBQU1lLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIsZ0RBQ2pEeUYsS0FBS3ZXLElBQUllLElBQUlDLE1BQU13VSxHQUNuQmUsS0FBS3ZXLElBQUkrYixLQUFLLGdCQUFpQixDQUM3QndFLE1BQU9oSyxLQUFLdlcsSUFBSTZRLEtBQUtDLFVBQXVCLHdDQUM1Q29QLEtBQU0xSyxJQU1SLE1BSnlDLENBQ3ZDdlAsU0FBUyxFQUNUaWEsS0FBTTFLLEdBSVJlLEtBQUt2VyxJQUFJZSxJQUFJa0YsUUFBUXNRLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIsMENBQzFEeUYsS0FBS3ZXLElBQUkrYixLQUFLLGlCQUFrQixDQUM5QndFLE1BQU9oSyxLQUFLdlcsSUFBSTZRLEtBQUtDLFVBQXVCLHlDQUM1Q29QLEtBQU0sSUFBSTZRLEtBQWdCTixLQU01QixNQUp3QyxDQUN0Q3hxQixTQUFTLEVBQ1RpYSxLQUFNLElBQUk2USxLQUFnQk4sSUFNaEM5cUIsZ0JBQWlCbkYsR0FDZixNQUNNdXdCLEVBRGlCdndCLEVBQVFpQixLQUFLa0MsR0FBaUJndEIsR0FBd0JwYSxLQUFLdlcsSUFBSzJELEtBQU82TSxRQUFPN00sR0FBUUEsRUFBS3NDLFVBQy9FeEUsS0FBSWtDLEdBQVFBLEVBQUtpdEIsVUFDcEQsR0FBSUcsRUFBWTF2QixPQUFTLEVBQUcsQ0FHMUIsTUFBTXlYLFFBQWV2QyxLQUFLa1QsWUFBWSxZQUFhc0gsRUFBYXhhLEtBQUt2VyxJQUFJNlksU0FDekUsR0FBS0MsRUFBT3FILEtBY0wsQ0FDTCxNQUFNM0ssRUFBTWUsS0FBS3ZXLElBQUk2USxLQUFLQyxVQUF1QixnREFBaUQsQ0FDaEdxUCxLQUFNLEdBQUdySCxFQUFPcUgsT0FDaEJsWixLQUFNNlIsRUFBTzdSLE9BRWZzUCxLQUFLdlcsSUFBSWUsSUFBSUMsTUFBTXdVLEdBQ25CZSxLQUFLdlcsSUFBSStiLEtBQUssa0JBQW1CLENBQy9Cd0UsTUFBT2hLLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIsMENBQzVDb1AsS0FBTTFLLElBTVIsTUFKeUMsQ0FDdkN2UCxTQUFTLEVBQ1RpYSxLQUFNMUssR0F6QlJ1YixFQUFZbmUsU0FBU3FFLElBQ25CVixLQUFLdlcsSUFBSWlTLGFBQWF5YSxpQkFBaUJ6VixNQUV6Q1YsS0FBS3ZXLElBQUllLElBQUlrRixRQUFRc1EsS0FBS3ZXLElBQUk2USxLQUFLQyxVQUF1Qiw0Q0FDMUR5RixLQUFLdlcsSUFBSStiLEtBQUssbUJBQW9CLENBQ2hDd0UsTUFBT2hLLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIsMkNBQzVDb1AsS0FBTTZRLElBTVIsTUFKd0MsQ0FDdEM5cUIsU0FBUyxFQUNUaWEsS0FBTTZRLEdBbUJMLENBQ0wsTUFBTXZiLEVBQU1lLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIsZ0RBQ2pEeUYsS0FBS3ZXLElBQUllLElBQUlDLE1BQU13VSxHQUNuQmUsS0FBS3ZXLElBQUkrYixLQUFLLGtCQUFtQixDQUMvQndFLE1BQU9oSyxLQUFLdlcsSUFBSTZRLEtBQUtDLFVBQXVCLDBDQUM1Q29QLEtBQU0xSyxJQU1SLE1BSnlDLENBQ3ZDdlAsU0FBUyxFQUNUaWEsS0FBTTFLLElBTVo3UCxhQUFjbkYsRUFBbUJHLEVBQWlDLEdBQUkwSixHQUNwRSxNQUNNMG1CLEVBRGlCdndCLEVBQVFpQixLQUFLa0MsR0FBaUJndEIsR0FBd0JwYSxLQUFLdlcsSUFBSzJELEtBQU82TSxRQUFPN00sR0FBUUEsRUFBS3NDLFVBQy9FeEUsS0FBSWtDLEdBQVFBLEVBQUtpdEIsVUFDcEQsR0FBSUcsRUFBWTF2QixPQUFTLEVBQUcsQ0FHMUIsTUFBTXlYLFFBQWV2QyxLQUFLa1QsWUFBWSxTQUFVc0gsRUFBYXhhLEtBQUt2VyxJQUFJNlksUUFBU2xZLEVBQVMwSixHQUN4RixHQUFLeU8sRUFBT3FILEtBV0wsQ0FDTCxNQUFNM0ssRUFBTWUsS0FBS3ZXLElBQUk2USxLQUFLQyxVQUF1Qiw2Q0FBOEMsQ0FDN0ZxUCxLQUFNLEdBQUdySCxFQUFPcUgsT0FDaEJsWixLQUFNNlIsRUFBTzdSLE9BRWZzUCxLQUFLdlcsSUFBSWUsSUFBSUMsTUFBTXdVLEdBQ25CZSxLQUFLdlcsSUFBSStiLEtBQUssZUFBZ0IsQ0FDNUJ3RSxNQUFPaEssS0FBS3ZXLElBQUk2USxLQUFLQyxVQUF1Qix1Q0FDNUNvUCxLQUFNMUssSUFNUixNQUp5QyxDQUN2Q3ZQLFNBQVMsRUFDVGlhLEtBQU0xSyxHQXRCUmUsS0FBS3ZXLElBQUllLElBQUlrRixRQUFRc1EsS0FBS3ZXLElBQUk2USxLQUFLQyxVQUF1Qix5Q0FDMUR5RixLQUFLdlcsSUFBSStiLEtBQUssZ0JBQWlCLENBQzdCd0UsTUFBT2hLLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIsd0NBQzVDb1AsS0FBTTZRLElBTVIsTUFKd0MsQ0FDdEM5cUIsU0FBUyxFQUNUaWEsS0FBTTZRLEdBbUJMLENBQ0wsTUFBTXZiLEVBQU1lLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIsNkNBQ2pEeUYsS0FBS3ZXLElBQUllLElBQUlDLE1BQU13VSxHQUNuQmUsS0FBS3ZXLElBQUkrYixLQUFLLGVBQWdCLENBQzVCd0UsTUFBT2hLLEtBQUt2VyxJQUFJNlEsS0FBS0MsVUFBdUIsdUNBQzVDb1AsS0FBTTFLLElBTVIsTUFKeUMsQ0FDdkN2UCxTQUFTLEVBQ1RpYSxLQUFNMUssSUFNSjdQLGtCQUFtQjFGLEVBQWFxc0IsRUFBbUIwRSxFQUFlcndCLEVBQWlDLEdBQUkwSixFQUFtQixJQUVoSSxNQUFNM0osRUFBV0MsRUFBUUQsVUFBWTZWLEtBQUt2VyxJQUFJNFEsVUFBK0IscUJBQ3ZFblEsRUFBUUUsRUFBUUYsT0FBUzhWLEtBQUt2VyxJQUFJNFEsVUFBK0Isa0JBQ3ZFLGFBQWEsSUFBSXJLLFNBQVNDLFlBQ3hCLElBQUlxUixFQUFPLENBQUM1WCxHQUFLMGhCLE9BQU8ySyxHQUFTM0ssT0FBTyxrQkFBa0JBLE9BQU8sVUFDN0RqaEIsSUFDRm1YLEVBQU9BLEVBQUs4SixPQUFPLGNBQWNqaEIsTUFFL0JELElBQ0ZvWCxFQUFPQSxFQUFLOEosT0FBTyxXQUFXbGhCLE1BRWhDLElBQ0UsTUFBTXd3QixFQUFNcEQsR0FBQUEsUUFBTSxNQUFPaFcsRUFBTSxDQUFFelAsSUFBSzRvQixFQUFPM21CLElBQUs3RyxPQUFPb3JCLE9BQU8sR0FBSXptQixRQUFRa0MsSUFBS0EsS0FFakYsSUFBSXlRLEVBQVMsR0FDRCxRQUFaNVUsRUFBQStxQixFQUFJbkQsY0FBUSxJQUFBNW5CLEdBQUFBLEVBQUE0UCxHQUFHLFFBQVM3TyxJQUN0QjZULEdBQVU3VCxLQUNUaXFCLEtBQUsvb0IsUUFBUTJsQixRQUVKLFFBQVoxYixFQUFBNmUsRUFBSUUsY0FBUSxJQUFBL2UsR0FBQUEsRUFBQTBELEdBQUcsUUFBUzdPLElBQ3RCNlQsR0FBVTdULEtBQ1RpcUIsS0FBSy9vQixRQUFRZ3BCLFFBRWhCRixFQUFJbmIsR0FBRyxTQUFVcUssSUFJYjNaLEVBSEcyWixFQUdLLENBQUVBLEtBQUFBLEVBQU1sWixLQUFNNlQsR0FGZCxDQUFFcUYsS0FBTSxFQUFHbFosS0FBTTZULE9BTTdCbVcsRUFBSW5iLEdBQUcsU0FBVU4sSUFDZmUsS0FBS3ZXLElBQUllLElBQUlDLE1BQU13VSxHQUNuQmUsS0FBS3ZXLElBQUllLElBQUlDLE1BQU0sd0JBQ25CdVYsS0FBS3ZXLElBQUkrYixLQUFLN0QsR0FBYzZGLE9BQVEsMkJBRXRDLE1BQU9qZCxHQUNQeVYsS0FBS3ZXLElBQUllLElBQUlDLE1BQU1GLEdBQ25CeVYsS0FBS3ZXLElBQUkrYixLQUFLN0QsR0FBYzZGLE9BQVFqZCxRQVc1QyxNQUFNNnZCLEdBQTBCLENBQUMzd0IsRUFBYWdJLEtBQzVDLE1BQU10QixFQUFNLENBQ1ZULFNBQVMsRUFDVDZxQixTQUFVLEdBQ1ZGLFFBQVMsSUFFTDlYLEVBQVN0USxHQUFxQlIsRUFBWWhJLEVBQUllLEtBQ3BELElBQUsrWCxFQUNILE9BQU9wUyxFQUlULE1BQU1rcUIsRUFBVS9uQixHQUFvQmlRLEVBQVE5WSxFQUFJZSxLQUNoRCxPQUFLNnZCLEVBR0UsQ0FDTDNxQixTQUFTLEVBQ1Q2cUIsU0FBVWhZLEVBQ1Y4WCxRQUFBQSxHQUxPbHFCLEdDL1BMMHFCLEdBQXFELENBQ3pELFFDYm1CLENBQ25CQyxjQUFlLE9BQ2ZDLGVBQWdCLGVBQ2hCQywyQkFBNEIsZUFDNUJDLHFCQUFzQiwrQkFDdEJDLGFBQWMsWUFDZEMsWUFBYSxPQUdiQyxZQUFhLFFBQ2JDLGtCQUFtQixVQUNuQkMsMEJBQTJCLFNBQzNCQyxrQ0FBbUMsY0FHbkNDLGFBQWMsT0FDZEMsa0JBQW1CLE9BQ25CQywwQkFBMkIsd0JBQzNCQyx1QkFBd0IsVUFDeEJDLCtCQUFnQyxzQkFDaENDLHFCQUFzQixTQUN0QkMsNkJBQThCLFdBRzlCQyxnQkFBaUIsU0FDakJDLDRCQUE2QixVQUM3QkMsZ0NBQWlDLGNBQ2pDQyx1QkFBd0IsV0FDeEJDLHFCQUFzQixTQUN0QkMscUJBQXNCLFNBQ3RCQywwQkFBMkIsVUFDM0JDLHdCQUF5QixTQUN6QkMsNkJBQThCLG9CQUM5QkMsNkJBQThCLFdBQzlCQyxnQ0FBaUMsd0JBQ2pDQyxrQ0FBbUMsc0JBR25DQyxvQkFBcUIsU0FDckJDLDRCQUE2QixRQUM3QkMsNkJBQThCLGFBQzlCQyw4QkFBK0IsY0FDL0JDLDBCQUEyQixVQUMzQkMsMkJBQTRCLFdBQzVCQyx5QkFBMEIsU0FDMUJDLDZCQUE4QixRQUM5QkMseUJBQTBCLFNBQzFCQyw0QkFBNkIsU0FDN0JDLDhCQUErQixVQUMvQkMsa0NBQW1DLGdCQUNuQ0MsaUNBQWtDLGdCQUNsQ0MsaUNBQWtDLFdBQ2xDQyxzQ0FBdUMsc0JBQ3ZDQyxvQ0FBcUMsaUJBQ3JDQyxxQ0FBc0MsMkNBQ3RDQyx5QkFBMEIsT0FDMUJDLDZCQUE4QiwyRUFDOUJDLGlDQUFrQyxLQUNsQ0MsZ0NBQWlDLEtBR2pDQyxjQUFlLFNBQ2ZDLG9CQUFxQixVQUNyQkMsbUJBQW9CLFFBQ3BCQyxtQkFBb0IsU0FDcEJDLHFCQUFzQixRQUN0QkMsd0JBQXlCLFVBQ3pCQywyQkFBNEIsbUJBQzVCQyw2QkFBOEIsVUFDOUJDLDJCQUE0QixXQUM1QkMsZ0NBQWlDLHNCQUdqQ0MsYUFBYyxNQUNkQyx1QkFBd0IsY0FDeEJDLHVCQUF3QixjQUN4QkMsb0JBQXFCLFdBQ3JCQyxrQkFBbUIsU0FDbkJDLGlCQUFrQixTQUNsQkMscUJBQXNCLFNBQ3RCQyxrQkFBbUIsU0FDbkJDLDBCQUEyQixXQUMzQkMsMEJBQTJCLFFBQzNCQyw2QkFBOEIsZ0JBQzlCQyx5QkFBMEIscUNBQzFCQyxpQkFBa0IsWUFFbEJDLGFBQWMsUUFDZEMsc0JBQXVCLGFBQ3ZCQyxzQkFBdUIsUUFDdkJDLDBCQUEyQixnQkFDM0JDLG1CQUFvQixRQUNwQkMsbUJBQW9CLE9BQ3BCQyw4QkFBK0IsVUFDL0JDLDhCQUErQixhQUMvQkMsa0NBQW1DLGFBQ25DQywyQkFBNEIsVUFDNUJDLDJCQUE0QiwyQkFHNUJDLGFBQWMsTUFDZEMsb0JBQXFCLFdBQ3JCQyxzQkFBdUIsUUFDdkJDLHNCQUF1QixVQUN2QkMsa0JBQW1CLFNBQ25CQyxpQkFBa0IsU0FDbEJDLHFCQUFzQixTQUN0QkMsOEJBQStCLGFBQy9CQyx5QkFBMEIsWUFDMUJDLDhCQUErQixRQUMvQkMsOEJBQStCLFVBQy9CQyx5QkFBMEIsK0JBQzFCQyw2QkFBOEIsY0FDOUJDLDBCQUEyQixXQUczQkMsbUJBQW9CLFNBQ3BCQyx3QkFBeUIsU0FDekJDLDhCQUErQixRQUMvQkMsNEJBQTZCLFFBQzdCQyw0QkFBNkIsT0FDN0JDLHdCQUF5QixTQUN6QkMsZ0NBQWlDLFNBQ2pDQyw2QkFBOEIsVUFDOUJDLDRCQUE2QixTQUM3QkMsZ0NBQWlDLGdDQUNqQ0Msc0NBQXVDLGFBQ3ZDQyxvQ0FBcUMsUUFDckNDLG9DQUFxQyxPQUNyQ0MsZ0NBQWlDLFdBQ2pDQyx3Q0FBeUMsVUFDekNDLHFDQUFzQyxzQkFHdENDLGlCQUFrQixTQUNsQkMsc0JBQXVCLE9BQ3ZCQyxzQkFBdUIsT0FDdkJDLDBCQUEyQixRQUMzQkMsMEJBQTJCLE9BQzNCQyw0QkFBNkIsT0FDN0JDLHVDQUF3QyxTQUN4Q0MsNEJBQTZCLFNBQzdCQywyQkFBNEIsVUFDNUJDLDhCQUErQixTQUMvQkMsMkJBQTRCLFdBQzVCQywyQkFBNEIsU0FDNUJDLDBCQUEyQixVQUMzQkMsOEJBQStCLGFBQy9CQyw4QkFBK0IsT0FDL0JDLG9DQUFxQyw0QkFDckNDLCtDQUFnRCxTQUNoREMsb0NBQXFDLFdBQ3JDQyxtQ0FBb0Msc0JBQ3BDQyxzQ0FBdUMsVUFDdkNDLG1DQUFvQyxjQUNwQ0MsbUNBQW9DLFVBQ3BDQyxrQ0FBbUMsVUFFbkNDLGlDQUFrQyxTQUNsQ0MseUNBQTBDLFlBQzFDQyxnQ0FBaUMsU0FDakNDLHdDQUF5QyxVQUN6Q0Msd0NBQXlDLFNBQ3pDQyxnREFBaUQsWUFDakRDLGtDQUFtQyxTQUNuQ0MsMENBQTJDLFFBQzNDQyxnQ0FBaUMsU0FDakNDLHdDQUF5QyxVQUN6Q0Msd0NBQXlDLGFBQ3pDQyw0Q0FBNkMsY0FDN0NDLHFDQUFzQyxlQUN0Q0MsNkNBQThDLFlBQzlDQyxxQ0FBc0MsV0FDdENDLDZDQUE4QyxZQUM5Q0MscUNBQXNDLFdBQ3RDQyw2Q0FBOEMsWUFDOUNDLG9DQUFxQyxTQUNyQ0MsNENBQTZDLFVBRTdDQyxzQkFBdUIsVUFDdkJDLHNCQUF1QixVQUV2QkMseUJBQTBCLFNBQzFCQyxpQ0FBa0MsY0FDbENDLDJCQUE0QixXQUM1QkMsbUNBQW9DLFVBQ3BDQywrQkFBZ0MsU0FDaENDLHVDQUF3QyxVQUN4Q0MsMEJBQTJCLFdBQzNCQyxrQ0FBbUMsVUFDbkNDLDZCQUE4QixTQUM5QkMscUNBQXNDLFFBQ3RDQyw4QkFBK0IsU0FDL0JDLHNDQUF1QyxRQUN2Q0MsbUNBQW9DLGFBQ3BDQywyQ0FBNEMsY0FDNUNDLHdCQUF5QixXQUN6QkMsd0JBQXlCLFdBQ3pCQywrQkFBZ0MsVUFDaENDLHVDQUF3QyxRQUN4Q0Msc0NBQXVDLFdBQ3ZDQywwQkFBMkIsV0FDM0JDLGtDQUFtQyxVQUNuQ0MsOEJBQStCLFNBQy9CQyxzQ0FBdUMsYUFDdkNDLDhCQUErQixhQUMvQkMsc0NBQXVDLGdCQUd2Q0Msc0NBQXVDLFNBQ3ZDQyxxQ0FBc0MsU0FDdENDLDRDQUE2QyxzQ0FDN0NDLDBDQUEyQyx5QkFDM0NDLHdDQUF5QyxTQUN6Q0MsdUNBQXdDLFNBQ3hDQyw4Q0FBK0Msc0NBQy9DQyw2Q0FBOEMsa0JBQzlDQyxxQ0FBc0MsU0FDdENDLG9DQUFxQyxTQUNyQ0MsMkNBQTRDLHNDQUM1Q0MsMENBQTJDLG1CRDlNM0MsUUVaNkIsQ0FDN0JuTSxjQUFlLE9BQ2ZDLGVBQWdCLGNBQ2hCQywyQkFBNEIsYUFDNUJDLHFCQUFzQiwrQkFDdEJDLGFBQWMsWUFDZEMsWUFBYSxPQUdiQyxZQUFhLFFBQ2JDLGtCQUFtQixVQUNuQkMsMEJBQTJCLFNBQzNCQyxrQ0FBbUMsY0FHbkNDLGFBQWMsS0FDZEMsa0JBQW1CLFNBQ25CQywwQkFBMkIsd0JBQzNCQyx1QkFBd0IsU0FDeEJDLCtCQUFnQyxzQkFDaENDLHFCQUFzQixTQUN0QkMsNkJBQThCLFlBRzlCQyxnQkFBaUIsU0FDakJDLDRCQUE2QixVQUM3QkMsZ0NBQWlDLGNBQ2pDQyx1QkFBd0IsV0FDeEJDLHFCQUFzQixTQUN0QkMscUJBQXNCLFNBQ3RCQywwQkFBMkIsU0FDM0JDLHdCQUF5QixTQUN6QkMsNkJBQThCLG9CQUM5QkMsNkJBQThCLFdBQzlCQyxnQ0FBaUMsd0JBQ2pDQyxrQ0FBbUMsc0JBR25DQyxvQkFBcUIsU0FDckJDLDRCQUE2QixRQUM3QkMsNkJBQThCLGFBQzlCQyw4QkFBK0IsY0FDL0JDLDBCQUEyQixVQUMzQkMsMkJBQTRCLFdBQzVCQyx5QkFBMEIsU0FDMUJDLDZCQUE4QixRQUM5QkMseUJBQTBCLFNBQzFCQyw0QkFBNkIsU0FDN0JDLDhCQUErQixTQUMvQkMsa0NBQW1DLGdCQUNuQ0MsaUNBQWtDLGdCQUNsQ0MsaUNBQWtDLFdBQ2xDQyxzQ0FBdUMsc0JBQ3ZDQyxvQ0FBcUMsaUJBQ3JDQyxxQ0FBc0MsMkNBQ3RDQyx5QkFBMEIsZ0JBQzFCQyw2QkFBOEIsNElBQzlCQyxpQ0FBa0MsT0FDbENDLGdDQUFpQyxRQUdqQ0MsY0FBZSxTQUNmQyxvQkFBcUIsVUFDckJDLG1CQUFvQixTQUNwQkMsbUJBQW9CLFNBQ3BCQyxxQkFBc0IsU0FDdEJDLHdCQUF5QixTQUN6QkMsMkJBQTRCLG1CQUM1QkMsNkJBQThCLFVBQzlCQywyQkFBNEIsV0FDNUJDLGdDQUFpQyxzQkFHakNDLGFBQWMsTUFDZEMsdUJBQXdCLGNBQ3hCQyx1QkFBd0IsY0FDeEJDLG9CQUFxQixXQUNyQkMsa0JBQW1CLFNBQ25CQyxpQkFBa0IsU0FDbEJDLHFCQUFzQixTQUN0QkMsa0JBQW1CLFNBQ25CQywwQkFBMkIsV0FDM0JDLDBCQUEyQixRQUMzQkMsNkJBQThCLGdCQUM5QkMseUJBQTBCLHFDQUMxQkMsaUJBQWtCLFlBRWxCQyxhQUFjLFFBQ2RDLHNCQUF1QixhQUN2QkMsc0JBQXVCLFFBQ3ZCQywwQkFBMkIsZ0JBQzNCQyxtQkFBb0IsUUFDcEJDLG1CQUFvQixVQUNwQkMsOEJBQStCLFVBQy9CQyw4QkFBK0IsYUFDL0JDLGtDQUFtQyxhQUNuQ0MsMkJBQTRCLFVBQzVCQywyQkFBNEIsMkJBRzVCQyxhQUFjLE1BQ2RDLG9CQUFxQixXQUNyQkMsc0JBQXVCLFFBQ3ZCQyxzQkFBdUIsVUFDdkJDLGtCQUFtQixTQUNuQkMsaUJBQWtCLFNBQ2xCQyxxQkFBc0IsU0FDdEJDLDhCQUErQixhQUMvQkMseUJBQTBCLFlBQzFCQyw4QkFBK0IsUUFDL0JDLDhCQUErQixVQUMvQkMseUJBQTBCLCtCQUMxQkMsNkJBQThCLGNBQzlCQywwQkFBMkIsV0FHM0JDLG1CQUFvQixTQUNwQkMsd0JBQXlCLFVBQ3pCQyw4QkFBK0IsYUFDL0JDLDRCQUE2QixRQUM3QkMsNEJBQTZCLE9BQzdCQyx3QkFBeUIsU0FDekJFLDZCQUE4QixTQUM5QkMsNEJBQTZCLFNBQzdCRixnQ0FBaUMsU0FDakNHLGdDQUFpQyxnQ0FDakNDLHNDQUF1QyxhQUN2Q0Msb0NBQXFDLFFBQ3JDQyxvQ0FBcUMsU0FDckNDLGdDQUFpQyxXQUNqQ0Msd0NBQXlDLFVBQ3pDQyxxQ0FBc0Msc0JBR3RDQyxpQkFBa0IsU0FDbEJDLHNCQUF1QixPQUN2QkMsc0JBQXVCLE9BQ3ZCQywwQkFBMkIsUUFDM0JDLDBCQUEyQixPQUMzQkMsNEJBQTZCLE9BQzdCQyx1Q0FBd0MsU0FDeENDLDRCQUE2QixTQUM3QkMsMkJBQTRCLFNBQzVCQyw4QkFBK0IsU0FDL0JDLDJCQUE0QixXQUM1QkMsMkJBQTRCLFNBQzVCQywwQkFBMkIsVUFDM0JDLDhCQUErQixhQUMvQkMsOEJBQStCLE9BQy9CQyxvQ0FBcUMsNEJBQ3JDQywrQ0FBZ0QsU0FDaERDLG9DQUFxQyxXQUNyQ0MsbUNBQW9DLHNCQUNwQ0Msc0NBQXVDLFVBQ3ZDQyxtQ0FBb0MsY0FDcENDLG1DQUFvQyxVQUNwQ0Msa0NBQW1DLFVBRW5DQyxpQ0FBa0MsU0FDbENDLHlDQUEwQyxZQUMxQ0MsZ0NBQWlDLFNBQ2pDQyx3Q0FBeUMsVUFDekNDLHdDQUF5QyxTQUN6Q0MsZ0RBQWlELFlBQ2pEQyxrQ0FBbUMsU0FDbkNDLDBDQUEyQyxRQUMzQ0MsZ0NBQWlDLFNBQ2pDQyx3Q0FBeUMsVUFDekNDLHdDQUF5QyxTQUN6Q0MsNENBQTZDLGNBQzdDQyxxQ0FBc0MsV0FDdENDLDZDQUE4QyxZQUM5Q0MscUNBQXNDLFdBQ3RDQyw2Q0FBOEMsWUFDOUNDLHFDQUFzQyxXQUN0Q0MsNkNBQThDLFlBQzlDQyxvQ0FBcUMsU0FDckNDLDRDQUE2QyxVQUU3Q0Msc0JBQXVCLFVBQ3ZCQyxzQkFBdUIsVUFFdkJDLHlCQUEwQixTQUMxQkMsaUNBQWtDLGNBQ2xDQywyQkFBNEIsV0FDNUJDLG1DQUFvQyxVQUNwQ0MsK0JBQWdDLFNBQ2hDQyx1Q0FBd0MsVUFDeENDLDBCQUEyQixXQUMzQkMsa0NBQW1DLFVBQ25DQyw2QkFBOEIsU0FDOUJDLHFDQUFzQyxRQUN0Q0MsOEJBQStCLFNBQy9CQyxzQ0FBdUMsUUFDdkNDLG1DQUFvQyxhQUNwQ0MsMkNBQTRDLGNBQzVDQyx3QkFBeUIsV0FDekJDLHdCQUF5QixXQUN6QkMsK0JBQWdDLFVBQ2hDQyx1Q0FBd0MsUUFDeENDLHNDQUF1QyxXQUN2Q0MsMEJBQTJCLFdBQzNCQyxrQ0FBbUMsVUFDbkNDLDhCQUErQixTQUMvQkMsc0NBQXVDLGFBQ3ZDQyw4QkFBK0IsYUFDL0JDLHNDQUF1QyxnQkFHdkNDLHNDQUF1QyxTQUN2Q0MscUNBQXNDLFNBQ3RDQyw0Q0FBNkMsc0NBQzdDQywwQ0FBMkMsNEJBQzNDQyx3Q0FBeUMsU0FDekNDLHVDQUF3QyxTQUN4Q0MsOENBQStDLHNDQUMvQ0MsNkNBQThDLG9CQUM5Q0MscUNBQXNDLFNBQ3RDQyxvQ0FBcUMsU0FDckNDLDJDQUE0QyxzQ0FDNUNDLDBDQUEyQyxxQkYvTTNDQyxHR2IwQixDQUMxQnBNLGNBQWUsZ0JBQ2ZDLGVBQWdCLDZCQUNoQkMsMkJBQTRCLHlDQUM1QkMscUJBQXNCLHVGQUN0QkMsYUFBYyx1Q0FDZEMsWUFBYSx3QkFHYkMsWUFBYSxRQUNiQyxrQkFBbUIsWUFDbkJDLDBCQUEyQiwyQkFDM0JDLGtDQUFtQyxlQUduQ0MsYUFBYyxRQUNkQyxrQkFBbUIsV0FDbkJDLDBCQUEyQiw0QkFDM0JDLHVCQUF3QixpQkFDeEJDLCtCQUFnQyx1QkFDaENDLHFCQUFzQixlQUN0QkMsNkJBQThCLDRCQUc5QkMsZ0JBQWlCLFlBQ2pCQyw0QkFBNkIsWUFDN0JDLGdDQUFpQyxnQkFDakNDLHVCQUF3QixhQUN4QkMscUJBQXNCLFdBQ3RCQyxxQkFBc0IsV0FDdEJDLDBCQUEyQixpQkFDM0JDLHdCQUF5QixpQkFDekJDLDZCQUE4QixxQkFDOUJDLDZCQUE4QixZQUM5QkMsZ0NBQWlDLHlCQUNqQ0Msa0NBQW1DLHVCQUduQ0Msb0JBQXFCLGdCQUNyQkMsNEJBQTZCLHFCQUM3QkMsNkJBQThCLGVBQzlCQyw4QkFBK0IsZ0JBQy9CQywwQkFBMkIsWUFDM0JDLDJCQUE0QixhQUM1QkMseUJBQTBCLFdBQzFCQyw2QkFBOEIsZUFDOUJDLHlCQUEwQixXQUMxQkMsNEJBQTZCLGlCQUM3QkMsOEJBQStCLGlCQUMvQkMsa0NBQW1DLGlCQUNuQ0MsaUNBQWtDLGlCQUNsQ0MsaUNBQWtDLFlBQ2xDQyxzQ0FBdUMsc0JBQ3ZDQyxvQ0FBcUMsa0JBQ3JDQyxxQ0FBc0MsNENBQ3RDQyx5QkFBMEIsT0FDMUJHLGdDQUFpQyxLQUNqQ0QsaUNBQWtDLEtBQ2xDRCw2QkFBOEIsMkVBRzlCRyxjQUFlLFNBQ2ZDLG9CQUFxQixZQUNyQkMsbUJBQW9CLGdCQUNwQkMsbUJBQW9CLFdBQ3BCQyxxQkFBc0IsYUFDdEJDLHdCQUF5QixpQkFDekJDLDJCQUE0QixvQkFDNUJDLDZCQUE4QixXQUM5QkMsMkJBQTRCLFlBQzVCQyxnQ0FBaUMsdUJBR2pDQyxhQUFjLFFBQ2RDLHVCQUF3QixnQkFDeEJDLHVCQUF3QixnQkFDeEJDLG9CQUFxQixhQUNyQkMsa0JBQW1CLFdBQ25CQyxpQkFBa0IsVUFDbEJDLHFCQUFzQixpQkFDdEJDLGtCQUFtQixXQUNuQkMsMEJBQTJCLFlBQzNCQywwQkFBMkIsU0FDM0JDLDZCQUE4QixpQkFDOUJDLHlCQUEwQixzQ0FHMUJDLGlCQUFrQixZQUdsQkMsYUFBYyxRQUNkQyxzQkFBdUIsZUFDdkJDLHNCQUF1QixlQUN2QkMsMEJBQTJCLG1CQUMzQkMsbUJBQW9CLGlCQUNwQkMsbUJBQW9CLFlBQ3BCQyw4QkFBK0IsK0NBQy9CQyw4QkFBK0IsaURBQy9CQyxrQ0FBbUMsaURBQ25DQywyQkFBNEIsVUFDNUJDLDJCQUE0Qiw0QkFHNUJDLGFBQWMsUUFDZEMsb0JBQXFCLGFBQ3JCQyxzQkFBdUIsZUFDdkJDLHNCQUF1Qix3QkFDdkJDLGtCQUFtQixXQUNuQkMsaUJBQWtCLFVBQ2xCQyxxQkFBc0IsaUJBQ3RCQyw4QkFBK0IsdUJBQy9CQyx5QkFBMEIsMkJBQzFCQyw4QkFBK0IsU0FDL0JDLDhCQUErQixvQ0FDL0JDLHlCQUEwQixnQ0FDMUJDLDZCQUE4QixlQUM5QkMsMEJBQTJCLFlBRzNCQyxtQkFBb0IsU0FDcEJDLHdCQUF5QixXQUN6QkMsOEJBQStCLGVBQy9CQyw0QkFBNkIsZUFDN0JDLDRCQUE2QixlQUM3QkMsd0JBQXlCLFdBQ3pCQyxnQ0FBaUMsbUJBQ2pDQyw2QkFBOEIsaUJBQzlCQyw0QkFBNkIsZ0JBQzdCQyxnQ0FBaUMsaUNBQ2pDQyxzQ0FBdUMsZUFDdkNDLG9DQUFxQyxTQUNyQ0Msb0NBQXFDLDJCQUNyQ0MsZ0NBQWlDLFlBQ2pDQyx3Q0FBeUMsd0NBQ3pDQyxxQ0FBc0MsdUJBR3RDQyxpQkFBa0IsZUFDbEJDLHNCQUF1QixXQUN2QkMsc0JBQXVCLFdBQ3ZCQywwQkFBMkIsZUFDM0JDLDBCQUEyQixlQUMzQkMsNEJBQTZCLGtCQUM3QkMsdUNBQXdDLDZCQUN4Q0MsNEJBQTZCLGtCQUM3QkMsMkJBQTRCLGlCQUM1QkMsOEJBQStCLG1CQUMvQkMsMkJBQTRCLHNCQUM1QkMsMkJBQTRCLGdCQUM1QkMsMEJBQTJCLHFCQUMzQkMsOEJBQStCLGNBQy9CQyw4QkFBK0IsYUFDL0JDLG9DQUFxQyw2QkFDckNDLCtDQUFnRCx5Q0FDaERDLG9DQUFxQyxZQUNyQ0MsbUNBQW9DLHVCQUNwQ0Msc0NBQXVDLHdDQUN2Q0MsbUNBQW9DLGVBQ3BDQyxtQ0FBb0MsV0FDcENDLGtDQUFtQyxXQUVuQ3FCLHNCQUF1QixvQkFDdkJDLHNCQUF1QixnQkFFdkJyQixpQ0FBa0MsMkJBQ2xDQyx5Q0FBMEMsb0NBQzFDQyxnQ0FBaUMscUJBQ2pDQyx3Q0FBeUMsK0JBQ3pDQyx3Q0FBeUMsdUNBQ3pDQyxnREFBaUQsZ0RBQ2pEQyxrQ0FBbUMsc0JBQ25DQywwQ0FBMkMsd0JBQzNDQyxnQ0FBaUMscUJBQ2pDQyx3Q0FBeUMsOEJBQ3pDQyx3Q0FBeUMscUJBQ3pDQyw0Q0FBNkMsNENBQzdDQyxxQ0FBc0MsOENBQ3RDQyw2Q0FBOEMsb0NBQzlDQyxxQ0FBc0MsMkJBQ3RDQyw2Q0FBOEMsbUNBQzlDQyxxQ0FBc0MsMkJBQ3RDQyw2Q0FBOEMsd0NBQzlDQyxvQ0FBcUMseUJBQ3JDQyw0Q0FBNkMsbUNBRTdDRyx5QkFBMEIsb0JBQzFCQyxpQ0FBa0Msd0NBQ2xDQywyQkFBNEIsdUNBQzVCQyxtQ0FBb0MsNENBQ3BDQywrQkFBZ0Msd0JBQ2hDQyx1Q0FBd0Msa0NBQ3hDQywwQkFBMkIsOEJBQzNCQyxrQ0FBbUMseUNBQ25DQyw2QkFBOEIscUJBQzlCQyxxQ0FBc0Msd0JBQ3RDQyw4QkFBK0Isc0JBQy9CQyxzQ0FBdUMsd0JBQ3ZDQyxtQ0FBb0MsNENBQ3BDQywyQ0FBNEMsaURBQzVDQyx3QkFBeUIsdUNBQ3pCQyx3QkFBeUIseUNBQ3pCQywrQkFBZ0MsMEJBQ2hDQyx1Q0FBd0Msd0JBQ3hDQyxzQ0FBdUMsMkNBQ3ZDQywwQkFBMkIsOEJBQzNCQyxrQ0FBbUMseUNBQ25DQyw4QkFBK0IscUJBQy9CQyxzQ0FBdUMseUNBQ3ZDQyw4QkFBK0IscUNBQy9CQyxzQ0FBdUMsb0RBRXZDQyxzQ0FBdUMsZ0NBQ3ZDQyxxQ0FBc0MsNkJBQ3RDQyw0Q0FBNkMsNkVBQzdDQywwQ0FBMkMsMEZBQzNDQyx3Q0FBeUMsa0NBQ3pDQyx1Q0FBd0MsMEJBQ3hDQyw4Q0FBK0MsMEVBQy9DQyw2Q0FBOEMsNERBQzlDQyxxQ0FBc0MsOEJBQ3RDQyxvQ0FBcUMsdUJBQ3JDQywyQ0FBNEMsdUVBQzVDQywwQ0FBMkMsMkRIOU03QyxNQUFNRSxHQUlKcG5CLFlBQWF0VyxHQUNYdVcsS0FBS3ZXLElBQU1BLEVBQ1h1VyxLQUFLb25CLGNBQWdCLElBQUlDLEVBQWFBLGNBQUN4TSxJQUN2QyxJQUFJeU0sRUFBV3RuQixLQUFLdlcsSUFBSTRRLFVBQWtCLHNCQUF3QixRQUM3RHdnQixHQUFheU0sS0FDaEJBLEVBQVcsU0FFYnRuQixLQUFLMUYsS0FBTyxJQUFJaXRCLE9BQUssQ0FDbkJDLFFBQVN4bkIsS0FBS29uQixjQUNkSyxnQkFBaUJILElBRW5CdG5CLEtBQUswbkIsaUJBR0NBLGlCQUNOLE1BQU1DLEVBQWEzbkIsS0FBSzRuQixzQkFDVnA0QixFQUFBQSxRQUFHcTRCLFlBQVlGLEVBQVksQ0FDdkNHLGVBQWUsSUFFWHpyQixTQUFReE4sSUFDWixHQUFJQSxFQUFLazVCLFVBQVlsNUIsRUFBSzBDLEtBQUt5MkIsU0FBUyxRQUFTLENBQy9DLE1BQU1DLEVBQWV6N0IsRUFBQUEsUUFBS2pCLEtBQUtvOEIsRUFBWTk0QixFQUFLMEMsTUFDMUMyMkIsRUFBVzE0QixFQUFFLFFBQUN5TyxhQUFhZ3FCLEVBQWMsUUFDL0MsSUFDRSxNQUFNRSxFQUFjQyxHQUFBQSxRQUFLM1MsS0FBS3lTLEdBQzlCck4sR0FBYWhzQixFQUFLMEMsS0FBS3pFLFFBQVEsU0FBVSxLQUFPcTdCLEVBQ2hELE1BQU81OUIsR0FDUDRILFFBQVExSCxNQUFNRixRQU1kcTlCLHNCQUNOLE1BQU1ELEVBQWFuN0IsRUFBQUEsUUFBS2pCLEtBQUt5VSxLQUFLdlcsSUFBSTZZLFFBQVMsWUFJL0MsT0FISzlTLEVBQUUsUUFBQzY0QixlQUFlVixJQUNyQm40QixVQUFHOE8sY0FBY3FwQixHQUVaQSxFQUdUcHRCLFVBQTRCMU0sRUFBc0J5VCxHQUNoRCxPQUFPdEIsS0FBSzFGLEtBQUtDLFVBQVUxTSxFQUFLeVQsSUFBU3pULEVBRzNDZ1MsWUFBYXluQixHQUNYdG5CLEtBQUsxRixLQUFLdUYsWUFBWXluQixHQUN0QnRuQixLQUFLdlcsSUFBSTRSLFdBQVcsQ0FDbEIsb0JBQXFCaXNCLElBSXpCZ0IsVUFBV2hCLEVBQWtCaUIsR0FDM0IsTUFBTUMsRUFBZ0J4b0IsS0FBS29uQixjQUFjcUIsVUFBVW5CLEdBQ25ELElBQUtrQixFQUNILE9BQU8sRUFFVCxNQUFNRSxFQUFhQyxFQUFBQSxNQUFNSCxFQUFlRCxHQUV4QyxPQURBdm9CLEtBQUtvbkIsY0FBY3dCLFVBQVV0QixFQUFVb0IsSUFDaEMsRUFHVEcsWUFBYXZCLEVBQWtCaUIsR0FFN0IsT0FEc0J2b0IsS0FBS29uQixjQUFjcUIsVUFBVW5CLEtBSW5EdG5CLEtBQUtvbkIsY0FBY3dCLFVBQVV0QixFQUFVaUIsR0FDdkMxTixHQUFheU0sR0FBWWlCLEdBQ2xCLEdBR1Qzb0Isa0JBQ0UsT0FBTzNTLE9BQU9DLEtBQUsydEIsS0kxRWpCLE1BQU9pTyxXQUFjbmxCLEVBQUFBLGFBd0JyQmpJLG1CQUNGLE9BQU9zRSxLQUFLK29CLGNBR2RocEIsWUFBYXVFLEVBQXFCLElBQ2hDVixRQVJGNUQsS0FBQTBFLFFBQWtCLFFBU2hCMUUsS0FBS3NFLFdBQWFBLEVBQ2xCdEUsS0FBS3VFLE9BQVMsR0FDZHZFLEtBQUtsSixNQUFRLEdBQ2JrSixLQUFLd0UsU0FBVyxHQUNoQnhFLEtBQUt4RSxPQUFTLENBQ1pXLFlBQWEsSUFBSTJELEdBQWlCLGVBQ2xDNUQsU0FBVSxJQUFJNEQsR0FBaUIsWUFDL0I4SCx1QkFBd0IsSUFBSTlILEdBQWlCLDBCQUM3Q2lJLG9CQUFxQixJQUFJakksR0FBaUIsdUJBQzFDb0ksbUJBQW9CLElBQUlwSSxHQUFpQix1QkFFM0NFLEtBQUtncEIsaUJBQ0xocEIsS0FBS3hWLElBQU0sSUFBSXFYLEdBQU83QixNQUN0QkEsS0FBS3RXLElBQU0sSUFBSXVYLEdBQVVqQixNQUN6QkEsS0FBS3pXLGNBQWdCLElBQUkwd0IsR0FBY2phLE1BQ3ZDQSxLQUFLaXBCLGFBQ0xqcEIsS0FBS2QsT0FHQzhwQixpQkFJTixHQUh3QixLQUFwQmhwQixLQUFLc0UsYUFDUHRFLEtBQUtzRSxXQUFhakYsWUFBWSx5QkFFb0IsVUFBaEQ3UyxFQUFBQSxRQUFLRSxRQUFRc1QsS0FBS3NFLFlBQVlsQyxjQUVoQyxNQURBcEMsS0FBS3NFLFdBQWEsR0FDWmhCLE1BQU0scURBRWR0RCxLQUFLc0MsUUFBVTlWLEVBQUksUUFBQ3dCLFFBQVFnUyxLQUFLc0UsWUFDbkI5VSxFQUFFLFFBQUM2NEIsZUFBZXJvQixLQUFLc0UsYUFFbkM5VSxFQUFFLFFBQUMwNUIsZUFBZSxHQUFHbHBCLEtBQUtzRSxjQUl0QjJrQixhQUNOanBCLEtBQUs0WixHQUFLLElBQUlELEdBQUczWixNQUNqQkEsS0FBS21wQixRQUFVbnBCLEtBQUs0WixHQUFHRSxNQUFLLEdBR3RCNWEsT0FDTixJQUVFYyxLQUFLMUYsS0FBTyxJQUFJNnNCLEdBQVlubkIsTUFDNUJBLEtBQUt5RSxRQUFVLElBQUlBLEdBQVF6RSxNQUMzQkEsS0FBSytvQixjQUFnQixJQUFJL1QsR0FBYWhWLE1BRXRDZ0IsR0FBcUIsU0FDckJvb0IsS0FBZ0JqcEIsU0FBU0gsTUM5RnRCLENBQ0xHLFNBQVUxVyxHQUNSQSxFQUFJK1IsT0FBT1csWUFBWWdFLFNBQVMsT0FBUXlVLElBQ3hDbnJCLEVBQUkrUixPQUFPVyxZQUFZZ0UsU0FBUyxTQUFVNFUsTUQ0RnZCNVUsU0FBU0gsTUFDNUJnQixHQUFxQixJQUVyQmhCLEtBQUsrb0IsY0FBY3RULE9BQ25CelYsS0FBS3FwQixVQUFZLElBQUkzbEIsR0FBVTFELE1BQy9CLE1BQU96VixHQUdQLE1BRkF5VixLQUFLd0YsS0FBSzdELEdBQWM4RixpQkFBa0IsR0FDMUN6SCxLQUFLeFYsSUFBSUMsTUFBTUYsR0FDVEEsR0FTVjBSLElBQUtILEVBQXNCdkssR0FDekIsR0FBSUEsRUFFRixPQURBeU8sS0FBS3RFLGFBQWFzYSxlQUFlemtCLEVBQU11SyxHQUNoQ2tFLEtBQUt0RSxhQUFhQyxVQUFVcEssR0FHbkMsT0FEdUJ1SyxFQUFPa0UsTUFLbENzcEIsbUJBQzBCLEtBQXBCdHBCLEtBQUtzRSxhQUNQdEUsS0FBS3RXLElBQUl3VixPQUNUYyxLQUFLdFcsSUFBSStYLGdCQUlicEgsVUFBYzlJLEdBQ1osT0FBS0EsRUFHSVAsTUFBSWdQLEtBQUttcEIsUUFBUzUzQixHQUZsQnlPLEtBQUttcEIsUUFNaEI5dEIsV0FBWXpRLEdBQ0x1SSxHQUFtQnZJLElBSXhCb1YsS0FBS3pELFVBQVUzUixHQUNmb1YsS0FBSzRaLEdBQUd2ZSxXQUFXelEsSUFKakJvVixLQUFLeFYsSUFBSTZILEtBQUssMERBT2xCd1MsYUFBY2hYLEVBQWEwN0IsR0FDcEIxN0IsR0FBUTA3QixJQUNUdDJCLEdBQXVCcEYsR0FDekJtUyxLQUFLeFYsSUFBSTZILEtBQUssY0FBY3hFLHVCQUc5Qm1TLEtBQUs4RSxZQUFZalgsRUFBSzA3QixHQUN0QnZwQixLQUFLNFosR0FBR0ksTUFBTW5zQixFQUFLMDdCLEtBR3JCaHRCLFVBQVczUixHQUNKdUksR0FBbUJ2SSxHQUl4QnFDLE9BQU9DLEtBQUt0QyxHQUFReVIsU0FBUzlLLElBQ3ZCMEIsR0FBdUIxQixLQUN6QnlPLEtBQUt4VixJQUFJNkgsS0FBSyxjQUFjZCw4QkFFckIzRyxFQUFPMkcsSUFFaEJnUCxFQUFHQSxJQUFDUCxLQUFLbXBCLFFBQVM1M0IsRUFBTTNHLEVBQU8yRyxJQUMvQm9tQixHQUFTblMsS0FBSzVELEdBQVU2VyxjQUFlLENBQ3JDcmQsV0FBWTdKLEVBQ1o2WCxNQUFPeGUsRUFBTzJHLFFBWmhCeU8sS0FBS3hWLElBQUk2SCxLQUFLLDBEQWlCbEJ5UyxZQUFhalgsRUFBYTA3QixHQUNuQjE3QixHQUFRMDdCLElBQ1R0MkIsR0FBdUJwRixHQUN6Qm1TLEtBQUt4VixJQUFJNkgsS0FBSyxjQUFjeEUsb0JBRzlCbXNCLEVBQUFBLE1BQU1oYSxLQUFLM0YsVUFBVXhNLEdBQU0wN0IsSUFHekJuNUIsY0FDRixPQUFPNFAsS0FBS3lFLFFBQVFyVSxRQUFRd1UsS0FBSzVFLEtBQUt5RSxTQUd4Q3JWLGFBQWMwSCxHQUNaLEdBQXdCLEtBQXBCa0osS0FBS3NFLFdBRVAsT0FEQXRFLEtBQUt4VixJQUFJQyxNQUFNLHFEQUNSLEdBR1QsUUFBY3VDLElBQVY4SixHQUF3QyxJQUFqQkEsRUFBTWhNLE9Bd0IxQixDQUVMLE1BQU15WixPQUFFQSxTQUFpQnZFLEtBQUtxcEIsVUFBVUcsTUFBTTF5QixHQUM5QyxPQUFPeU4sRUExQlAsSUFDRSxNQUFNa1QsUUFBRUEsRUFBT0MseUJBQUVBLFNBQW1DZCxHQUFrQjVXLE1BQ3RFLEdBQWdCLGFBQVp5WCxFQUNGLE1BQU0sSUFBSW5VLE1BQU0sZ0NBQ1gsQ0FDTHRELEtBQUtnRixLQUFLckQsR0FBYzZGLFFBQVEsS0FDekJrUSxHQUVIbG9CLEVBQUFBLFFBQUdxa0IsT0FBTzRELEdBQVNudEIsT0FBT0MsSUFBUXlWLEtBQUt4VixJQUFJQyxNQUFNRixTQUdyRHlWLEtBQUtnRixLQUFLLFlBQVksS0FDZjBTLEdBQ0hsb0IsRUFBQUEsUUFBR3FrQixPQUFPNEQsR0FBU250QixPQUFPQyxJQUFReVYsS0FBS3hWLElBQUlDLE1BQU1GLFNBR3JELE1BQU1nYSxPQUFFQSxTQUFpQnZFLEtBQUtxcEIsVUFBVUcsTUFBTSxDQUFDL1IsSUFDL0MsT0FBT2xULEdBRVQsTUFBT2hhLEdBRVAsTUFEQXlWLEtBQUt3RixLQUFLN0QsR0FBYzZGLE9BQVFqZCxHQUMxQkEifQ==
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),r=require("events"),n=require("os"),a=require("commander"),i=require("inquirer"),s=require("image-size"),o=require("url"),l=require("text-to-svg"),E=require("sharp"),u=require("crypto"),I=require("uuid"),_=require("chalk"),c=require("minimatch"),S=require("globby"),d=require("ejs"),P=require("download-git-repo"),p=require("rimraf"),g=require("dayjs"),f=require("util"),C=require("axios"),m=require("lodash"),A=require("heic-convert"),T=require("mime-types"),D=require("qiniu"),h=require("webdav"),L=require("node-ssh-no-cpu-features"),U=require("resolve"),N=require("child_process"),R=require("is-wsl"),B=require("form-data"),O=require("https"),M=require("tunnel"),y=require("@picgo/store"),w=require("cross-spawn"),G=require("js-yaml"),b=require("@picgo/i18n");function x(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var F=x(e),H=x(t),$=x(n),v=x(i),W=x(l),K=x(E),k=x(u),q=x(_),Y=x(c),j=x(S),V=x(d),z=x(P),Q=x(p),X=x(g),Z=x(f),J=x(C),ee=x(A),te=x(T),re=x(D),ne=x(U),ae=x(R),ie=x(B),se=x(O),oe=x(M),le=x(w),Ee=x(G);const ue={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing plugins").option("-r, --registry <registry>","Choose a registry for installing plugins").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}))}},Ie={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function _e(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function ce(e,t,r){const n={"{Y}":()=>(new Date).getFullYear().toString(),"{y}":()=>(new Date).getFullYear().toString().slice(2),"{m}":()=>1===((new Date).getMonth()+1).toString().length?`0${(new Date).getMonth()+1}`:((new Date).getMonth()+1).toString(),"{d}":()=>1===(new Date).getDate().toString().length?`0${(new Date).getDate()}`:(new Date).getDate().toString(),"{h}":()=>1===(new Date).getHours().toString().length?`0${(new Date).getHours()}`:(new Date).getHours().toString(),"{i}":()=>1===(new Date).getMinutes().toString().length?`0${(new Date).getMinutes()}`:(new Date).getMinutes().toString(),"{s}":()=>1===(new Date).getSeconds().toString().length?`0${(new Date).getSeconds()}`:(new Date).getSeconds().toString(),"{md5}":()=>k.default.createHash("md5").update(H.default.basename(e,H.default.extname(e))).digest("hex"),"{md5-16}":()=>k.default.createHash("md5").update(H.default.basename(e,H.default.extname(e))).digest("hex").slice(0,16),"{str-10}":()=>_e(10),"{str-20}":()=>_e(20),"{filename}":()=>r?H.default.basename(r,H.default.extname(r)):H.default.basename(e,H.default.extname(e)),"{uuid}":()=>I.v4().replace(/-/g,""),"{timestamp}":()=>Math.floor(Date.now()/1e3).toString()};if(void 0===t||!Object.keys(n).some((e=>t.includes(e)))&&!t.includes("localFolder"))return e;const a=H.default.extname(e);let i=Object.keys(n).reduce(((e,t)=>e.replace(new RegExp(t,"g"),n[t]())),t)+a;return i=i.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return H.default.dirname(e).split(H.default.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),i}const Se=e=>/^https?:\/\//.test(e),de=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},Pe=e=>(de(e)||(e=encodeURI(e)),e),pe=e=>{try{const{width:t=0,height:r=0,type:n}=s.imageSize(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},ge=async e=>{try{return{extname:H.default.extname(e),fileName:H.default.basename(e),buffer:await F.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},fe=async(e,t)=>{let r;e=Pe(e);const n=new Promise(((n,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const i=new o.URL(e).pathname;let s="";try{s=new o.URL(e).searchParams.get("wx_fmt")||H.default.extname(i)||""}catch(e){s=H.default.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:H.default.basename(i),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,a])},Ce=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":me(e)?"simple":"unknown",me=e=>{if(H.default.isAbsolute(e))return!1;const t=H.default.join(process.cwd(),e);return!F.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Ae=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,Te=(e,t=console)=>{switch(Ce(e)){case"normal":case"scope":return e;case"simple":return Ae(e);default:{let r=e;return H.default.isAbsolute(e)&&F.default.existsSync(e)?he(r):(r=H.default.join(process.cwd(),e),F.default.existsSync(r)?he(r):(t.warn(`Can't find plugin ${e}`),""))}}},De=(e,t=console)=>{var r;switch(Ce(e)){case"normal":return Le(e);case"scope":return Le(e,!0);case"simple":return Le(Ae(e));default:{if(!F.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=H.default.posix.join(e,"package.json");if(F.default.existsSync(n)){const e=F.default.readJSONSync(n)||{};return(null===(r=e.name)||void 0===r?void 0:r.includes("picgo-plugin-"))?e.name:(t.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return t.warn(`Can't find plugin: ${e}`),""}}},he=e=>e.split(H.default.sep).join("/"),Le=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},Ue=[],Ne=e=>Ue.some((t=>e.startsWith(t))),Re=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function Be(e){try{return JSON.parse(e)}catch(t){return e}}const Oe=(e=0)=>isNaN(Number(e))?0:Number(e),Me=()=>"development"===process.env.NODE_ENV;const ye=H.default.join(__dirname,"assets","piclist.png");async function we(e,t,r,n,a,i,s,o,l,E,u){o=!o||o<0||o>1?.15:o;const I=K.default(e,{animated:!0}),{width:_=200}=await I.metadata(),c=await async function(e,t,r,n,a,i,s,o=200,l=0){let E;"image"===e?(s=s||ye,E=await K.default(s).toBuffer()):E=await async function(e,t,r,n){t=t||"测试",n=n||e;const a={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},i=W.default.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:u,height:I}=await async function(e){const{width:t,height:r}=await K.default(e).metadata();return{width:t||200,height:r||200}}(E),_=Math.floor(o*Oe(a)),c=Math.floor(_*I/u);return await K.default(E).resize(_,c,{fit:"inside"}).rotate(l,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,o,l,E,_,a);return await I.composite([{input:c,gravity:u||"southeast",tile:n}]).toBuffer()}const Ge=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),be=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],xe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function Fe(e,t,r){try{let n=K.default(e,{animated:!0});return Ge(t.watermarkText)&&(n=K.default(await we(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Oe(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Oe(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0})),await n.toBuffer()}catch(t){return console.log(t),e}}function He(e){return{quality:Oe(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Oe(e.reSizeHeight),reSizeWidth:Oe(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Oe(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Oe(e.rotateDegree),picBed:e.picBed||"smms"}}async function $e(e,t,r){t=He(t);try{if(r=r.toLowerCase().replace(".",""),!xe.includes(r))return e;let a=K.default(e,{animated:!0}),i=100;if(Ge(t.quality)&&t.quality<100&&(i=t.quality),t.isReSizeByPercent){if(Ge(t.reSizePercent)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));e&&r&&(a=a.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)a=a.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const n=t.reSizeHeight/r;a=a.resize(Math.round(e*n),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const n=t.reSizeWidth/e;a=a.resize(t.reSizeWidth,Math.round(r*n),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(a=a.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(console.log("flip"),a=a.flip()),t.isFlop&&(a=a.flop()),t.isConvert){let e=t.convertFormat||"jpg";"imgur"===t.picBed&&"webp"===e&&(e="jpg"),a=a.toFormat(e,{quality:i})}else a=r&&(n=r,be.includes(n))?a.toFormat(r,{quality:i}):a.toFormat("jpg",{quality:i});return await a.toBuffer()}catch(t){return console.log(t),e}var n}const ve=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],We=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&ve.includes(t)),Ke=(e,t)=>{const r=t.toLowerCase().replace(".","");if(!ve.includes(r)||!e)return!1;const{quality:n,isReSizeByPercent:a,reSizePercent:i,isReSize:s,reSizeHeight:o,reSizeWidth:l,isRotate:E,rotateDegree:u,isConvert:I,convertFormat:_,isFlip:c,isFlop:S}=He(e);if(Ge(n)&&n<100)return!0;if(a&&Ge(i))return!0;if(s&&("number"==typeof o&&o>0||"number"==typeof l&&l>0))return!0;if(E&&u)return!0;if(c||S)return!0;if(I){return t!==(_||"jpg")}return!1},ke=async(e,t)=>(t=t.toLowerCase().replace(".",""),ve.includes(t)?await K.default(e,{animated:!0}).toBuffer():e);var qe=Object.freeze({__proto__:null,randomStringGenerator:_e,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${_e(5)}${H.default.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${_e(t)}${H.default.extname(e)}`},renameFileNameWithCustomString:ce,isUrl:Se,isUrlEncode:de,handleUrlEncode:Pe,getImageSize:pe,getFSFile:ge,getURLFile:fe,getPluginNameType:Ce,isSimpleName:me,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Ae,getProcessPluginName:Te,getNormalPluginName:De,handleUnixStylePath:he,removePluginVersion:Le,configBlackList:Ue,isConfigKeyInBlackList:Ne,isInputConfigValid:Re,safeParse:Be,forceNumber:Oe,isDev:Me,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:we,imageAddWaterMark:Fe,imageProcess:$e,needAddWatermark:We,needCompress:Ke,removeExif:ke});const Ye={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>Se(e)?e:H.default.resolve(e))).filter((t=>{const r=F.default.existsSync(t)||Se(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var je=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var Ve=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var ze=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const Qe=async(e,t,r,n)=>{const a=await e.cmd.inquirer.prompt(t),i="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[i]:a}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},Xe={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,a;try{switch(t){case"buildin":if("compress"===r)await Qe(e,je(e),t,r);else if("watermark"===r)await Qe(e,Ve(e),t,r);else if("rename"===r)await Qe(e,ze(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await Qe(e,je(e),t,n.buildin):"watermark"===n.buildin?await Qe(e,Ve(e),t,n.buildin):"rename"===n.buildin&&await Qe(e,ze(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await Qe(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),a=e.helper[t].get(n[t]);(null==a?void 0:a.config)&&await Qe(e,a.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await Qe(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(a=e.pluginLoader.getPlugin(r.plugin))||void 0===a?void 0:a.config)&&await Qe(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Ze={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const a={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!a[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(a[r])}else n=Object.keys(a).map((e=>a[e]));const i=await t.inquirer.prompt(n);if(i.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{i.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":i.uploader||e.getConfig("picBed.current"),"picBed.uploader":i.uploader||e.getConfig("picBed.current"),"picBed.transformer":i.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Je={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},et=async(e,t)=>{try{const r=rt(t.tmp),n=H.default.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await j.default(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{Y.default(t,e,{dot:!0})&&(n=t)})),!n||tt(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=nt(i,n,a);at(t.dest,s),"function"==typeof r.complete&&r.complete({answers:a,options:t,files:i,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},tt=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},rt=e=>{const t=H.default.join(e,"index.js");if(F.default.existsSync(t)){return require(t)}return{}},nt=(e,t,r)=>{const n={};return e.forEach((e=>{const a=F.default.readFileSync(H.default.join(t,e),"utf8"),i=V.default.render(a,r);(Buffer.isBuffer(i)||/[^\s]/.test(i))&&(n[e]=i)})),n},at=(e,t)=>{Object.keys(t).forEach((r=>{const n=H.default.join(e,r);F.default.ensureDirSync(H.default.dirname(n)),F.default.writeFileSync(n,t[r])}))},it=(e,t)=>{t.offline?F.default.existsSync(t.template)?et(e,t).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${t.template} not found`):(t.template=t.hasSlash?t.template:"PicGo/picgo-template-"+t.template,st(e,t))},st=(e,t)=>{F.default.existsSync(t.tmp)&&Q.default.sync(t.tmp),e.log.info("Template files are downloading..."),z.default(t.template,t.tmp,{clone:t.clone},(r=>{r?e.log.error(r):(e.log.success("Template files are downloaded!"),et(e,t).catch((t=>{e.log.error(t)})))}))},ot={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,r,a)=>{(async()=>{try{const i=t.includes("/"),s=!r||"."===r,o=H.default.resolve(r||"."),l=a.clone||!1,E=a.offline||!1,u=H.default.join(n.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));a.offline&&(t=u);const I={template:t,project:r,hasSlash:i,inPlace:s,dest:o,clone:l,tmp:u,offline:E};s||F.default.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&it(e,I)})):it(e,I)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(q.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(q.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},lt={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change picgo language").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const t=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}],n=await e.cmd.inquirer.prompt(t);return e.i18n.setLanguage(n.i18n),void e.log.success(`Language set to ${n.i18n}`)}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class Et{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),Et.currentPlugin&&(this.pluginIdMap.has(Et.currentPlugin)?null===(r=this.pluginIdMap.get(Et.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(Et.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const ut=(e=null)=>{Et.currentPlugin=e};class It{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new a.Command,this.inquirer=v.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.2.2","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",ue),e.cmd.register("config",Ie),e.cmd.register("setting",Xe),e.cmd.register("upload",Ye),e.cmd.register("use",Ze),e.cmd.register("proxy",Je),e.cmd.register("init",ot),e.cmd.register("i18n",lt)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=Et.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var _t,ct,St;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(_t||(_t={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(ct||(ct={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(St||(St={}));class dt{constructor(e){this.level={[_t.success]:"green",[_t.info]:"blue",[_t.warn]:"yellow",[_t.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=q.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||H.default.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(q.default.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(F.default.existsSync(e)){const t=F.default.statSync(e).size,r=1024*Oe(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){F.default.existsSync(e)&&(F.default.unlinkSync(e),F.default.createFileSync(e))}handleWriteLog(e,t,...r){try{let n=`${X.default().format("YYYY-MM-DD HH:mm:ss")} [PicList ${t.toUpperCase()}] `;r.forEach((e=>{e instanceof Error&&"error"===t?n+=`\n------Error Stack Begin------\n${Z.default.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),n+=`${e} `)})),n+="\n",F.default.appendFileSync(e,n)}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(_t.success,...e)}info(...e){this.handleLog(_t.info,...e)}error(...e){this.handleLog(_t.error,...e)}warn(...e){this.handleLog(_t.warn,...e)}debug(...e){Me()&&this.handleLog(_t.info,...e)}}class Pt extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=H.default.join(e.baseDir,"piclistTemp"),r=H.default.join(e.baseDir,"imgTemp");F.default.ensureDirSync(r),F.default.emptyDirSync(t),this.ttfPath=H.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=H.default.dirname(this.ttfPath);if(F.default.existsSync(e)||F.default.mkdirSync(e,{recursive:!0}),F.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await J.default.get(this.ttfLink,{responseType:"arraybuffer"});return F.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");t.input=e,t.rawInputPath=[],t.rawInput=m.cloneDeep(e),t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("picBed.uploader")||t.getConfig("picBed.current")||"smms";!t.helper.uploader.get(n)&&r?r.picBed="smms":r&&(r.picBed=n);const a=t.getConfig("buildIn.watermark");if(r||a){const e=H.default.join(t.baseDir,"piclistTemp");F.default.existsSync(e)||F.default.mkdirSync(e);const n="Add watermark to image",i="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var l,E,u,I,_,c,S;let d;if(Se(s)){if(t.rawInputPath[o]=s,d=await fe(s,t),!d.success||!d.buffer)throw new Error(d.reason);{let S,P=!1;if(We(a,null!==(l=d.extname)&&void 0!==l?l:"")){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),P=!0)}P||(t.log.info(n),S=await Fe(d.buffer,a,this.ttfPath))}if(Ke(r,null!==(E=d.extname)&&void 0!==E?E:"")&&(t.log.info(i),S=await $e(null!=S?S:d.buffer,r,null!==(u=d.extname)&&void 0!==u?u:"")),!S&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),S=await ke(d.buffer,null!==(I=d.extname)&&void 0!==I?I:"")),S){let n;n=(null==r?void 0:r.isConvert)?null!==(_=null==r?void 0:r.convertFormat)&&void 0!==_?_:"jpg":null!==(c=d.extname)&&void 0!==c?c:"",n=n.startsWith(".")?n:`.${n}`;const a=H.default.join(e,`${d.fileName?`${H.default.basename(d.fileName,H.default.extname(d.fileName))}${n}`:(new Date).getTime()}${n}`);t.rawInputPath[o]=H.default.join(H.default.dirname(s),H.default.basename(a)),F.default.writeFileSync(a,S),t.input[o]=a}}}else{let l;if(t.rawInputPath[o]=s,We(a,H.default.extname(s))){await this.downloadTTF()?(t.log.info(n),l=await Fe(F.default.readFileSync(s),a,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(Ke(r,H.default.extname(s)))if(t.log.info(i),".heic"===H.default.extname(s)||".heif"===H.default.extname(s)){const t=F.default.readFileSync(s),n=await ee.default({buffer:t,format:"JPEG",quality:1}),a=H.default.join(e,`${H.default.basename(s,H.default.extname(s))}.jpg`);F.default.writeFileSync(a,Buffer.from(n)),l=await $e(F.default.readFileSync(a),r,".jpg")}else l=await $e(null!=l?l:F.default.readFileSync(s),r,H.default.extname(s));if(!l&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),l=await ke(F.default.readFileSync(s),H.default.extname(s))),l){let n;n=(null==r?void 0:r.isConvert)?null!==(S=null==r?void 0:r.convertFormat)&&void 0!==S?S:"jpg":H.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const a=H.default.join(e,`${H.default.basename(s,H.default.extname(s))}${n}`);t.rawInputPath[o]=H.default.join(H.default.dirname(s),`${H.default.basename(s,H.default.extname(s))}${n}`),F.default.writeFileSync(a,l),t.input[o]=a}}})))}else for(const e of t.input)t.rawInputPath.push(e);await this.beforeTransform(t),await this.doTransform(t);const i=t.getConfig("buildIn.rename")||{};if(i.enable){const e=i.format||"{filename}";t.output=t.output.map(((r,n)=>{let a=r.fileName;return e&&(a=ce(t.rawInputPath[n],e),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),r.fileName=a,r}))}return await this.beforeUpload(t),await this.doUpload(t),t.input=t.rawInput,await this.afterUpload(t),t}catch(e){if(t.log.warn(ct.FAILED),t.emit(ct.UPLOAD_PROGRESS,-1),t.emit(ct.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(ct.UPLOAD_PROGRESS,0),e.emit(ct.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(ct.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(ct.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(ct.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(t="smms",n="smms",r=e.helper.uploader.get("smms"),e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`)),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(ct.AFTER_UPLOAD,e),e.emit(ct.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let a=0;a<r;a++)void 0!==e.output[a].imgUrl&&(t+=n?Pe(e.output[a].imgUrl):e.output[a].imgUrl,a!==r-1&&(t+="\n")),delete e.output[a].base64Image,delete e.output[a].buffer;return e.emit(ct.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),a=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${a}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${a}: ${n[r]} error`),e}}))),t}}const pt=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),gt=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=pt(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(a),r=JSON.parse(t);if("success"===r.code)delete n.base64Image,delete n.buffer,n.imgUrl=r.data.url,n.hash=r.data.hash;else{if("image_repeated"!==r.code||"string"!=typeof r.images)throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.message}),new Error(r.message);delete n.base64Image,delete n.buffer,n.imgUrl=r.images}}catch(t){throw e.log.error(t),t}}return e},ft=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"input",get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const Ct=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const a=k.default.createHmac("sha1",n).update(o).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,l=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,E=`sha1\n${o}\n${k.default.createHash("sha1").update(l).digest("hex")}\n`;s=k.default.createHmac("sha1",a).update(E).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,l=k.default.createHmac("sha1",n).update(o).digest(),E=Buffer.concat([l,Buffer.from(o)]);s=Buffer.from(E).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:o}},mt=(e,t,r,n,a)=>{const i=e.area,s=e.path;if(e.version&&"v4"!==e.version){const i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${i}/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${i}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:te.default.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${a};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${i}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${i}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${a};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},At=async e=>{var t,r,n,a;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const s=e.output,o=i.customUrl,l=null!==(t=i.path)&&void 0!==t?t:"",E=!i.version||"v4"===i.version;for(const t of s)if(t.fileName&&t.buffer){const s=Ct(i,t.fileName);if(!s)return!1;let u=t.buffer;!u&&t.base64Image&&(u=Buffer.from(t.base64Image,"base64"));const I=mt(i,t.fileName,s,u,e.GUI_VERSION||e.VERSION),_=await e.request(I).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let c;if(c=E&&"string"==typeof _?JSON.parse(_):_,400===c.statusCode)throw(null===(r=null==c?void 0:c.body)||void 0===r?void 0:r.err)?c.body.err:new Error((null===(n=null==c?void 0:c.body)||void 0===n?void 0:n.msg)||(null===(a=null==c?void 0:c.body)||void 0===a?void 0:a.message));const S=i.options||"",d=void 0!==i.slim&&!!i.slim;if(E&&"SUCCESS"===c.message)delete t.base64Image,delete t.buffer,t.imgUrl=o?`${o}/${l}${t.fileName}`:`${c.data.source_url}${S}`;else{if(E||!c||200!==c.statusCode)throw new Error(_.body.msg);if(delete t.base64Image,delete t.buffer,o)t.imgUrl=`${o}/${encodeURIComponent(l)}${encodeURIComponent(t.fileName)}${S}`.replace(/%2F/g,"/");else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;t.imgUrl=`https://${i.bucket}.${e}/${encodeURIComponent(l)}${encodeURIComponent(t.fileName)}${S}`.replace(/%2F/g,"/")}}d&&(t.imgUrl+=S?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Tt=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};const Dt=(e,t,r)=>{const n=t.path||"",{token:a,repo:i}=t;return{method:"PUT",url:`https://api.github.com/repos/${i}/contents/${encodeURIComponent(n)}${encodeURIComponent(e)}`.replace(/%2F/g,"/"),headers:{Authorization:`token ${a}`,"User-Agent":"PicList","Content-Type":te.default.lookup(e)||"application/octet-stream"},body:r,json:!0}},ht=(e,t)=>{const r=t.path||"",{token:n,repo:a,branch:i}=t;return{method:"GET",url:`https://api.github.com/repos/${a}/contents/${encodeURIComponent(r)}${encodeURIComponent(e)}?ref=${i}`.replace(/%2F/g,"/"),headers:{Authorization:`token ${n}`,"User-Agent":"PicGo"},json:!0}},Lt=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){const r=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:r,path:n+encodeURI(a.fileName)},s=Dt(a.fileName,t,i);try{const r=await e.request(s);if(!r)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,t.customUrl?a.imgUrl=`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=r.content.download_url,a.hash=r.content.sha}catch(r){if(422!==r.statusCode)throw r;{delete a.base64Image,delete a.buffer;const r=await e.request(ht(a.fileName,t));if(!Object.keys(r).length)throw new Error("Get Contents error, please try again");a.hash=r.sha,t.customUrl?a.imgUrl=`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=r.download_url}}}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Ut=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"input",get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function Nt(e,t,r,n){const a=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),i=e.path||"";return{method:"POST",url:`http://upload${a}.qiniup.com/putb64/-1/key/${Buffer.from(i+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":te.default.lookup(t)||"application/octet-stream"},body:n}}function Rt(e){const t=e.accessKey,r=e.secretKey,n=new re.default.auth.digest.Mac(t,r),a={scope:e.bucket};return new re.default.rs.PutPolicy(a).uploadToken(n)}const Bt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=Nt(t,n.fileName,Rt(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options||"";n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Ot=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const Mt=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let l;if(i&&s)l=s;else{if(!a)throw new Error("clientId or accessToken is required");l=`Client-ID ${a}`}const E={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:l,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(i&&s&&o){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:l},json:!0,resolveWithFullResponse:!0,timeout:1e4};if(t.proxy&&(s.proxy=t.proxy),r=await e.request(s),200!==r.statusCode||!r.body.success)throw new Error("Server error, please try again");const E=r.body.data;for(const e of E)if(e.title===o){a=e.id;break}n++}while(r.body.data.length>0);a&&E.formData&&(E.formData.album=a)}return t.proxy&&(E.proxy=t.proxy),E},yt=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=await Mt(e,r,n.fileName,t),i=await e.request(a),s="string"==typeof i?JSON.parse(i):i;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},wt=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_CLIENTID")},default:t.clientId||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get alias(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"accessToken",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get alias(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ACCESS_TOKEN")},default:t.accessToken||"",required:!1},{name:"album",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get alias(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ALBUM")},default:t.album||"",required:!1},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const Gt=(e,t)=>{const r=(new Date).toUTCString(),n=`PUT\n\n${te.default.lookup(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=k.default.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},bt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURIComponent(e.path)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:(new Date).toUTCString(),"Content-Type":te.default.lookup(t)},body:n,resolveWithFullResponse:!0}),xt=async e=>{var t;const r=e.getConfig("picBed.aliyun");if(!r)throw new Error("Can't find aliYun OSS config");r.path=r.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/","/"===r.path&&(r.path="");try{const n=e.output,a=r.customUrl,i=null!==(t=r.path)&&void 0!==t?t:"";for(const t of n)if(t.fileName&&t.buffer){const n=Gt(r,t.fileName);let s=t.buffer;!s&&t.base64Image&&(s=Buffer.from(t.base64Image,"base64"));const o=bt(r,t.fileName,n,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete t.base64Image,delete t.buffer;const e=r.options||"";t.imgUrl=a?`${a}/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/"):`https://${r.bucket}.${r.area}.aliyuncs.com/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/")}}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ft=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const Ht=(e,t)=>{const r=e.path||"",n=e.operator,a=vt(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${encodeURIComponent(r)}${encodeURIComponent(t)}`.replace(/%2F/g,"/")}&${i}`;return`UPYUN ${n}:${k.default.createHmac("sha1",a).update(s).digest("base64")}`},$t=(e,t,r,n)=>{const a=e.bucket,i=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${a}/${encodeURIComponent(i)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":te.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function vt(e){return k.default.createHash("md5").update(e).digest("hex")}const Wt=(e,t,r,n)=>{const a=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${vt(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},Kt=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=Ht(t,a.fileName),s=$t(t,a.fileName,i,r),o=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete a.base64Image,delete a.buffer,a.imgUrl=`${t.url}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}${o}`.replace(/%2F/g,"/"),t.antiLeechToken){const e=Wt(t.antiLeechToken,t.expireTime,t,a.fileName);a.imgUrl=a.imgUrl.includes("?")?`${a.imgUrl}&${e}`:`${a.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=Be(t.error);e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},kt=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1}]};const qt=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");t.host=t.host.replace(/^https?:\/\/|\/+$/g,""),t.host=(t.sslEnabled?"https://":"http://")+t.host,t.path=(t.path||"").replace(/^\/+|\/+$/g,"")+"/";const r=t.authType||"basic",n=(t.webpath||"").replace(/^\/+|\/+$/g,"")+"/";try{const a=e.output,i=t.customUrl,s=t.path;for(const o of a)if(o.fileName&&o.buffer){let a=o.buffer;!a&&o.base64Image&&(a=Buffer.from(o.base64Image,"base64"));const l={username:t.username,password:t.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===r&&(l.authType=h.AuthType.Digest);const E=h.createClient(t.host,l),u="/"===s?"":s;u&&await E.createDirectory(u,{recursive:!0});if(!await E.putFileContents(`${s}${o.fileName}`.replace(/^\/+|\/+$/g,""),a,{overwrite:!0}))throw new Error("Upload failed");{const r=H.default.join(e.baseDir,"imgTemp","webdavplist"),l=H.default.join(r,o.fileName);F.default.ensureDirSync(r),F.default.writeFileSync(l,a),delete o.base64Image,delete o.buffer;const E=i||t.host;t.webpath?o.imgUrl=`${E}/${"/"===n?"":encodeURIComponent(n)}${encodeURIComponent(o.fileName)}`.replace(/%2F/g,"/"):o.imgUrl=`${E}/${"/"===s?"":encodeURIComponent(s)}${encodeURIComponent(o.fileName)}`.replace(/%2F/g,"/"),o.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(o.fileName)}`}}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Yt=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1}]};const jt=async e=>{const t=e.getConfig("picBed.local");if(!t)throw new Error("Can not find local config!");const r=t.path||"";let n=t.customUrl||"";n&&(n=n.replace(/\/$/,""));let a=t.webPath||"";a&&(a=a.replace(/\\/g,"/").replace(/^\//,"").replace(/\/$/,""));const i=e.output;for(const t of i)if(t.fileName&&t.buffer){let i=t.buffer;!i&&t.base64Image&&(i=Buffer.from(t.base64Image,"base64"));try{try{const s=H.default.join(e.baseDir,"imgTemp","local");F.default.ensureDirSync(s),F.default.ensureDirSync(r),F.default.writeFileSync(H.default.join(r,t.fileName),i),F.default.copyFileSync(H.default.join(r,t.fileName),H.default.join(e.baseDir,"imgTemp","local",t.fileName)),delete t.base64Image,delete t.buffer,t.imgUrl=n?a?`${n}/${encodeURIComponent(a)}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):`${n}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):H.default.join(r,t.fileName),t.hash=H.default.join(r,t.fileName),t.galleryPath=`http://localhost:36699/local/${encodeURIComponent(t.fileName)}`}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},Vt=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class zt{constructor(){this._isConnected=!1}static get instance(){return this._instance||(this._instance=new this)}static get client(){return this._client||(this._client=new L.NodeSSH)}changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{username:t,password:r,privateKey:n,passphrase:a}=e,i=n?{username:t,privateKeyPath:n,passphrase:a||void 0}:{username:t,password:r};try{return await zt.client.connect(Object.assign({host:e.host,port:Number(e.port)||22},i)),this._isConnected=!0,!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this._isConnected)throw new Error("SSH 未连接");try{t=this.changeWinStylePathToUnix(t),await this.mkdir(H.default.dirname(t).replace(/^\/+|\/+$/g,""),r),await zt.client.putFile(e,t);const n=r.fileMode||"0644";if("0644"!==n){const e=`chmod ${n} "${t}"`;return await this.exec(e)}return!0}catch(e){throw new Error(e)}}async mkdir(e,t){if(!zt.client.isConnected())throw new Error("SSH 未连接");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=this.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t],i=`chown ${n}:${a} "${e}"`;return this.exec(i)}async exec(e){return 0===(await zt.client.execCommand(e)).code}close(){zt.client.dispose(),this._isConnected=!1}}const Qt=async e=>{const t=e.getConfig("picBed.sftpplist");if(!t)throw new Error("Can not find sftpplist config!");t.port=Number(t.port)||22,t.uploadPath=(t.uploadPath||"").replace(/^\/+|\/+$/g,"")+"/";const r=(t.webPath||"").replace(/^\/+|\/+$/g,"")+"/";try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=H.default.join(e.baseDir,"uploadTemp"),s=H.default.join(e.baseDir,"imgTemp","sftpplist");F.default.ensureDirSync(i),F.default.ensureDirSync(s);const o=H.default.join(i,a.fileName);F.default.writeFileSync(o,n);const l=zt.instance;await l.connect(t);const E=H.default.join(`/${t.uploadPath}`.replace(/\/\/+/g,"/"),a.fileName);await l.upload(o,E,t),t.fileUser&&await l.chown(E,t.fileUser),delete a.base64Image,delete a.buffer;const u=t.customUrl||t.host;t.webPath?a.imgUrl=`${u}/${"/"===r?"":encodeURIComponent(r)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=`${u}/${"/"===t.uploadPath?"":encodeURIComponent(t.uploadPath)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"),F.default.moveSync(o,H.default.join(s,a.fileName)),a.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(a.fileName)}`,l.close()}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Xt=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},default:t.dirMode||"",required:!1}]};const Zt=async(e,t)=>{const r={method:"POST",url:"https://telegra.ph/upload",headers:{"content-type":"multipart/form-data"},formData:{file:t}};return e.proxy&&(r.proxy=e.proxy),r},Jt=async e=>{var t,r;let n=e.getConfig("picBed.telegraphplist");n||(n={});try{const r=e.output;for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=H.default.join(e.baseDir,"uploadTemp");F.default.ensureDirSync(i);const s=H.default.join(i,a.fileName);F.default.writeFileSync(s,r);const o=await Zt(n,F.default.createReadStream(s)),l=await e.request(o),E="string"==typeof l?JSON.parse(l):l;if(F.default.remove(s),!(null===(t=null==E?void 0:E[0])||void 0===t?void 0:t.src))throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=`https://telegra.ph${E[0].src}`}return e}catch(t){throw e.emit(ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(r=null==t?void 0:t.response)||void 0===r?void 0:r.data)||t}},er=e=>[{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:(e.getConfig("picBed.telegraphplist")||{}).proxy||"",required:!1}];const tr=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:xt,config:Ft})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:At,config:Tt})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:gt,config:ft})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:Lt,config:Ut})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:Bt,config:Ot})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:yt,config:wt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Kt,config:kt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:qt,config:Yt})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:jt,config:Vt})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Qt,config:Xt})}(e),function(e){e.helper.uploader.register("telegraphplist",{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:Jt,config:er})}(e)}}),rr=(e,t,r)=>{const n=pe(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var nr={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let a;if(a=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:Se(r)?await fe(r,e):await ge(r),a.success&&a.buffer){const i=rr(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${X.default().format("YYYYMMDDHHmmss")}${s}}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var ar={handle:async e=>(e.output.push(...e.input),e)};class ir{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=H.default.join(this.ctx.baseDir,"package.json");if(!F.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};F.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return ne.default.sync(t,{basedir:e.baseDir})}catch(r){return H.default.join(e.baseDir,"node_modules",t)}}load(){const e=H.default.join(this.ctx.baseDir,"package.json"),t=H.default.join(this.ctx.baseDir,"node_modules/");if(!F.default.existsSync(t))return!1;const r=F.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),a=Object.keys(r.devDependencies||{}),i=n.concat(a).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return F.default.existsSync(t)}));for(const e of i)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),ut(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),ut(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(ct.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),ut(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=H.default.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const sr={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},or={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const lr=async e=>{!function(e){const t=H.default.join(e.baseDir,"piclist-clipboard-images");F.default.existsSync(t)||F.default.mkdirSync(t)}(e);const t=H.default.join(e.baseDir,"piclist-clipboard-images",`${X.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const a=(()=>{const e=process.platform;if(ae.default)return"wsl";if("win32"===e)return"10"===$.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),i=H.default.join(e.baseDir,or[a]);let s;F.default.existsSync(i)||F.default.writeFileSync(i,sr[a],"utf8"),s="darwin"===a?N.spawn("osascript",[i,t]):"win32"===a||"win10"===a?N.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",i,t]):N.spawn("sh",[i,t]),s.stdout.on("data",(i=>{if("linux"===a&&"no xclip or wl-clipboard"===i.toString().trim())return e.emit(ct.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),n(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const s=i.toString().trim();let o=!1;if(H.default.basename(s)!==H.default.basename(t)&&F.default.existsSync(s)&&(o=!0),"no image"!==s&&!F.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},Er=new r.EventEmitter,ur=new se.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2"});function Ir(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function _r(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function cr(e){var t,r,n,a,i,s,o;const l={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(l)}class Sr{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Er.on(St.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new o.URL(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=oe.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=ur;const r=J.default.create(this.options);r.interceptors.response.use(_r,cr);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let a=e.proxy;if("string"==typeof a){try{a=new o.URL(e.proxy)}catch(e){a=!1,n.proxy=!1,console.error(e)}r=!0}a&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=oe.default.httpsOverHttp({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new ie.default;for(const r in e.formData)Ir(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let a="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(a=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(a=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(a=e.headers["content-type"],delete e.headers["content-type"]),""!==a&&e.headers&&(e.headers["Content-Type"]=a),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class dr{constructor(e){if(this.ctx=e,this.db=new y.JSONStore(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms"})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}class Pr{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>pr(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicGo has already installed ${e.pkgName}`),!1):!!e.success)),i=a.map((e=>e.fullName)),s=a.map((e=>e.pkgName));if(i.length>0){const e=await this.execCommand("install",i,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>pr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>pr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},a={}){const i=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,l;let E=[e].concat(t).concat("--color=always").concat("--save");i&&(E=E.concat(`--registry=${i}`)),s&&(E=E.concat(`--proxy=${s}`));try{const e=le.default("npm",E,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(l=e.stderr)||void 0===l||l.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(ct.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(ct.FAILED,e)}}))}}const pr=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=Te(t,e.log);if(!n)return r;const a=De(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r},gr={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定KeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/49259)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定KeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/49259)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set KeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class fr{constructor(e){this.ctx=e,this.objectAdapter=new b.ObjectAdapter(gr);let t=this.ctx.getConfig("settings.language")||"zh-CN";gr[t]||(t="zh-CN"),this.i18n=new b.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();F.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=H.default.join(e,t.name),n=F.default.readFileSync(r,"utf8");try{const e=Ee.default.load(n);gr[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=H.default.join(this.ctx.baseDir,"i18n-cli");return F.default.pathExistsSync(e)||F.default.ensureDirSync(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const n=m.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),gr[e]=t,!0)}getLanguageList(){return Object.keys(gr)}}class Cr extends r.EventEmitter{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.2.2",this.configPath=e,this.output=[],this.input=[],this.rawInput=[],this.helper={transformer:new Et("transformer"),uploader:new Et("uploader"),beforeTransformPlugins:new Et("beforeTransformPlugins"),beforeUploadPlugins:new Et("beforeUploadPlugins"),afterUploadPlugins:new Et("afterUploadPlugins")},this.initConfigPath(),this.log=new dt(this),this.cmd=new It(this),this.pluginHandler=new Pr(this),this.initConfig(),this.init()}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==H.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=H.default.dirname(this.configPath);F.default.pathExistsSync(this.configPath)||F.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new dr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new fr(this),this.Request=new Sr(this),this._pluginLoader=new ir(this),ut("picgo"),tr().register(this),{register(e){e.helper.transformer.register("path",nr),e.helper.transformer.register("base64",ar)}}.register(this),ut(""),this._pluginLoader.load(),this.lifecycle=new Pt(this)}catch(e){throw this.emit(ct.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?m.get(this._config,e):this._config}saveConfig(e){Re(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(Ne(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Re(e)?Object.keys(e).forEach((t=>{Ne(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),m.set(this._config,t,e[t]),Er.emit(St.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Ne(e)?this.log.warn(`the config.${e} can't be unset`):m.unset(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("The configuration file only supports JSON format."),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await lr(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(ct.FAILED,(()=>{t||F.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||F.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(ct.FAILED,e),e}}}exports.Commander=It,exports.Lifecycle=Pt,exports.LifecyclePlugins=Et,exports.Logger=dt,exports.PicGo=Cr,exports.PicGoUtils=qe,exports.PluginHandler=Pr,exports.PluginLoader=ir,exports.Request=Sr;
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9jb3JlL0xpZmVjeWNsZS50cyIsIi4uL3NyYy91dGlscy9jcmVhdGVDb250ZXh0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc21tcy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RjeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbWd1ci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbG9jYWwudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RlbGVncmFwaC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvcGF0aC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2Jhc2U2NC50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9pMThuL2luZGV4LnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwbHVnaW5IYW5kbGVyOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICAvLyBjb25zdCBwbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIoY3R4KVxyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ2luc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdpbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hbGlhcygnYWRkJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IHByb3h5LCByZWdpc3RyeSB9ID0gcHJvZ3JhbVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBwcm94eSxcclxuICAgICAgICAgIHJlZ2lzdHJ5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLmluc3RhbGwocGx1Z2lucywgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VuaW5zdGFsbCA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuYWxpYXMoJ3JtJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1bmluc3RhbGwgcGljZ28gcGx1Z2luJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10pID0+IHtcclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci51bmluc3RhbGwocGx1Z2lucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VwZGF0ZSA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwZGF0ZSBwaWNnbyBwbHVnaW4nKVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci51cGRhdGUocGx1Z2lucywgb3B0aW9ucykuY2F0Y2goKGU6IEVycm9yKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHBsdWdpbkhhbmRsZXJcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgSUltZ1NpemUsXHJcbiAgdHlwZSBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyxcclxuICB0eXBlIElQbHVnaW5OYW1lVHlwZSxcclxuICB0eXBlIElMb2dnZXIsXHJcbiAgdHlwZSBJUGljR28sXHJcbiAgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcclxuICB0eXBlIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9uc1xyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXHJcbmltcG9ydCBUZXh0VG9TVkcgZnJvbSAndGV4dC10by1zdmcnXHJcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nR2VuZXJhdG9yIChsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknXHJcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSkubWFwKCgpID0+IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKSkuam9pbignJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFRpbWVzdGFtcCAob2xkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCl9JHtyYW5kb21TdHJpbmdHZW5lcmF0b3IoNSl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoUmFuZG9tU3RyaW5nIChvbGROYW1lOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyID0gNSk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGAke3JhbmRvbVN0cmluZ0dlbmVyYXRvcihsZW5ndGgpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBjdXN0b21Gb3JtYXQ6IHN0cmluZywgYWZmaXhGaWxlTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgY29udmVyc2lvbk1hcDogUmVjb3JkPHN0cmluZywgKCkgPT4gc3RyaW5nPiA9IHtcclxuICAgICd7WX0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSxcclxuICAgICd7eX0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zbGljZSgyKSxcclxuICAgICd7bX0nOiAoKSA9PiAobmV3IERhdGUoKS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXRNb250aCgpICsgMX1gIDogKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCksXHJcbiAgICAne2R9JzogKCkgPT4gbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXREYXRlKCl9YCA6IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLnRvU3RyaW5nKCksXHJcbiAgICAne2h9JzogKCkgPT4gbmV3IERhdGUoKS5nZXRIb3VycygpLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke25ldyBEYXRlKCkuZ2V0SG91cnMoKX1gIDogbmV3IERhdGUoKS5nZXRIb3VycygpLnRvU3RyaW5nKCksXHJcbiAgICAne2l9JzogKCkgPT4gbmV3IERhdGUoKS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXRNaW51dGVzKCl9YCA6IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpLnRvU3RyaW5nKCksXHJcbiAgICAne3N9JzogKCkgPT4gbmV3IERhdGUoKS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXRTZWNvbmRzKCl9YCA6IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCksXHJcbiAgICAne21kNX0nOiAoKSA9PiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHBhdGguYmFzZW5hbWUob2xkTmFtZSwgcGF0aC5leHRuYW1lKG9sZE5hbWUpKSkuZGlnZXN0KCdoZXgnKSxcclxuICAgICd7bWQ1LTE2fSc6ICgpID0+IGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUocGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpKS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDE2KSxcclxuICAgICd7c3RyLTEwfSc6ICgpID0+IHJhbmRvbVN0cmluZ0dlbmVyYXRvcigxMCksXHJcbiAgICAne3N0ci0yMH0nOiAoKSA9PiByYW5kb21TdHJpbmdHZW5lcmF0b3IoMjApLFxyXG4gICAgJ3tmaWxlbmFtZX0nOiAoKSA9PiBhZmZpeEZpbGVOYW1lID8gcGF0aC5iYXNlbmFtZShhZmZpeEZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoYWZmaXhGaWxlTmFtZSkpIDogcGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpLFxyXG4gICAgJ3t1dWlkfSc6ICgpID0+IHV1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpLFxyXG4gICAgJ3t0aW1lc3RhbXB9JzogKCkgPT4gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkudG9TdHJpbmcoKVxyXG4gIH1cclxuICBpZiAoY3VzdG9tRm9ybWF0ID09PSB1bmRlZmluZWQgfHwgKCFPYmplY3Qua2V5cyhjb252ZXJzaW9uTWFwKS5zb21lKGl0ZW0gPT4gY3VzdG9tRm9ybWF0LmluY2x1ZGVzKGl0ZW0pKSAmJiAhY3VzdG9tRm9ybWF0LmluY2x1ZGVzKCdsb2NhbEZvbGRlcicpKSkge1xyXG4gICAgcmV0dXJuIG9sZE5hbWVcclxuICB9XHJcbiAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKG9sZE5hbWUpXHJcbiAgbGV0IG5ld05hbWUgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9uTWFwKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XHJcbiAgICByZXR1cm4gYWNjLnJlcGxhY2UobmV3IFJlZ0V4cChjdXIsICdnJyksIGNvbnZlcnNpb25NYXBbY3VyXSgpKVxyXG4gIH0sIGN1c3RvbUZvcm1hdCkgKyBleHRcclxuICBuZXdOYW1lID0gbmV3TmFtZS5yZXBsYWNlKC97KGxvY2FsRm9sZGVyOj8oXFxkKyk/KX0vZ2ksIChfcmVzdWx0LCBrZXksIGNvdW50KSA9PiB7XHJcbiAgICBjb3VudCA9IE1hdGgubWF4KDEsIGNvdW50IHx8IDApXHJcbiAgICBjb25zdCBwYXRocyA9IHBhdGguZGlybmFtZShvbGROYW1lKS5zcGxpdChwYXRoLnNlcClcclxuICAgIGtleSA9IHBhdGhzLnNsaWNlKDAgLSBjb3VudCkucmVkdWNlKChhLCBiKSA9PiBgJHthfS8ke2J9YClcclxuICAgIHJldHVybiBrZXkucmVwbGFjZSgvOi9nLCAnJylcclxuICB9KVxyXG4gIHJldHVybiBuZXdOYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4gKC9eaHR0cHM/OlxcL1xcLy8pLnRlc3QodXJsKVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgdXJsID0gdXJsIHx8ICcnXHJcbiAgdHJ5IHtcclxuICAgIC8vIHRoZSB3aG9sZSB1cmwgZW5jb2RlIG9yIGRlY29kZSBzaG9sZCBub3QgdXNlIGVuY29kZVVSSUNvbXBvbmVudCBvciBkZWNvZGVVUklDb21wb25lbnRcclxuICAgIHJldHVybiB1cmwgIT09IGRlY29kZVVSSSh1cmwpXHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjb25zdCBoYW5kbGVVcmxFbmNvZGUgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghaXNVcmxFbmNvZGUodXJsKSkge1xyXG4gICAgdXJsID0gZW5jb2RlVVJJKHVybClcclxuICB9XHJcbiAgcmV0dXJuIHVybFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VTaXplID0gKGZpbGU6IEJ1ZmZlcik6IElJbWdTaXplID0+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3QgeyB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIHR5cGUgfSA9IGltYWdlU2l6ZShmaWxlKVxyXG4gICAgY29uc3QgZXh0bmFtZSA9IHR5cGUgPyBgLiR7dHlwZX1gIDogJy5wbmcnXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFsOiB0cnVlLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICBleHRuYW1lXHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgLy8gZmFsbGJhY2sgdG8gMjAwICogMjAwXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFsOiBmYWxzZSxcclxuICAgICAgd2lkdGg6IDIwMCxcclxuICAgICAgaGVpZ2h0OiAyMDAsXHJcbiAgICAgIGV4dG5hbWU6ICcucG5nJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZTRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHRuYW1lOiBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGJ1ZmZlcjogYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpLFxyXG4gICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxyXG4gICAgICBzdWNjZXNzOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXHJcbiAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXRcclxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdCh7XHJcbiAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXHJcbiAgICAgICAgbGV0IGV4dG5hbWUgPSAnJ1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMKHVybCkuc2VhcmNoUGFyYW1zXHJcbiAgICAgICAgICBleHRuYW1lID0gdXJsUGFyYW1zLmdldCgnd3hfZm10JykgfHwgcGF0aC5leHRuYW1lKHVybFBhdGgpIHx8ICcnXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFleHRuYW1lLnN0YXJ0c1dpdGgoJy4nKSAmJiBleHRuYW1lKSB7XHJcbiAgICAgICAgICBleHRuYW1lID0gYC4ke2V4dG5hbWV9YFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgIGJ1ZmZlcjogcmVzLFxyXG4gICAgICAgICAgZmlsZU5hbWU6IHBhdGguYmFzZW5hbWUodXJsUGF0aCksXHJcbiAgICAgICAgICBleHRuYW1lLFxyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSBlcnJvciwgJHtlcnJvcj8ubWVzc2FnZSA/PyAnJ31gXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSkoKS5jYXRjaChyZWplY3QpXHJcbiAgfSlcclxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xyXG4gICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IHRpbWVvdXRgXHJcbiAgICAgIH0pXHJcbiAgICB9LCAzMDAwMClcclxuICB9KVxyXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxyXG4gKiAzLiB4eHggLT4gc2ltcGxlXHJcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cclxuICogQHBhcmFtIG5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2NvcGUnXHJcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgcmV0dXJuICdub3JtYWwnXHJcbiAgfSBlbHNlIGlmIChpc1NpbXBsZU5hbWUobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2ltcGxlJ1xyXG4gIH1cclxuICByZXR1cm4gJ3Vua25vd24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4geHh4IC0+IHRydWVcclxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKG5hbWVPclBhdGguaW5jbHVkZXMoJy8nKSB8fCBuYW1lT3JQYXRoLmluY2x1ZGVzKCdcXFxcJykpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG4vKipcclxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4geHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL15AW14vXStcXC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXHJcbiAqIEBwYXJhbSBzY29wZSBwbHVnaW5TY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChzY29wZSkge1xyXG4gICAgcmV0dXJuIGBAJHtzY29wZX0vcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3h4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxyXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcclxuICAgIGNhc2UgJ25vcm1hbCc6XHJcbiAgICBjYXNlICdzY29wZSc6XHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICBjYXNlICdzaW1wbGUnOlxyXG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXHJcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcclxuICAgICAgbGV0IHBsdWdpblBhdGggPSBuYW1lT3JQYXRoXHJcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXHJcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIDMuIGludmFsaWQgbmFtZU9yUGF0aFxyXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAzLiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxyXG4gKiB0aGVuIHVzZSBbcGFja2FnZS5qc29uJ3MgbmFtZV0sIHVzdWFsbHkgbWF0Y2ggdGhlIHNjb3BlIHBhY2thZ2UuXHJcbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKSlcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcclxuICAgICAgLy8gdGhlIG5hbWVPclBhdGggaGVyZSB3aWxsIGJlIGVuc3VyZWQgd2l0aCB1bml4IHN0eWxlXHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhY2thZ2VKU09OUGF0aCA9IHBhdGgucG9zaXguam9pbihuYW1lT3JQYXRoLCAncGFja2FnZS5qc29uJylcclxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XHJcbiAgICAgICAgaWYgKCFwa2cubmFtZT8uaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgbG9nZ2VyLndhcm4oYFRoZSBwbHVnaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZCBpcyAke3BrZy5uYW1lIGFzIHN0cmluZyB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gKVxyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwa2cubmFtZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIHRyYW5zZm9ybSB0aGUgcGF0aCB0byB1bml4IHN0eWxlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxyXG4gKiAyLiAveHh4L3h4eCAtPiAveHh4L3h4eFxyXG4gKiBAcGFyYW0gcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVuaXhTdHlsZVBhdGggPSAocGF0aFN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcclxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcclxufVxyXG5cclxuLyoqXHJcbiAqIHJlbW92ZSBwbHVnaW4gdmVyc2lvbiB3aGVuIHJlZ2lzdGVyIHBsdWdpbiBuYW1lXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqIEBwYXJhbSBzY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZVBsdWdpblZlcnNpb24gPSAobmFtZU9yUGF0aDogc3RyaW5nLCBzY29wZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xyXG4gICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hBcnIgPSBuYW1lT3JQYXRoLm1hdGNoKHJlZylcclxuICAgIGlmICghbWF0Y2hBcnIpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcclxuICogb25seSBjYW4gYmUgZ290XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cclxuXHJcbi8qKlxyXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XHJcbiAqIEBwYXJhbSBrZXlcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGNvbmZpZ0JsYWNrTGlzdC5zb21lKGJsYWNrSXRlbSA9PiBrZXkuc3RhcnRzV2l0aChibGFja0l0ZW0pKVxyXG59XHJcblxyXG4vKipcclxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxyXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxyXG4gKiAmJiBjYW4ndCBiZSBhcnJheVxyXG4gKiBAcGFyYW0gY29uZmlnXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKFxyXG4gICAgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiZcclxuICAgICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiZcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4gKHN0cjogc3RyaW5nKTogVCB8IHN0cmluZyB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcmV0dXJuIHN0clxyXG4gIH1cclxufVxyXG5cclxuLy8gaG9sZC4uLlxyXG4vLyBleHBvcnQgY29uc3QgY29uZmlnV2hpdGVMaXN0OiBSZWdFeHBbXSA9IFtcclxuLy8gICAvXnBpY0JlZC8sXHJcbi8vICAgL15waWNnb1BsdWdpbnMvLFxyXG4vLyAgIC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sXHJcbi8vICAgL2RlYnVnLyxcclxuLy8gICAvc2lsZW50LyxcclxuLy8gICAvY29uZmlnUGF0aC8sXHJcbi8vICAgL15zZXR0aW5ncy8sXHJcbi8vIF1cclxuXHJcbi8vIGV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluV2hpdGVMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbi8vICAgcmV0dXJuIGNvbmZpZ1doaXRlTGlzdC5zb21lKHdoaXRlSXRlbSA9PiB3aGl0ZUl0ZW0udGVzdChrZXkpKVxyXG4vLyB9XHJcblxyXG5leHBvcnQgY29uc3QgZm9yY2VOdW1iZXIgPSAobnVtOiBzdHJpbmcgfCBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzUHJvZCA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB0ZXh0MlNWRyAoXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICBjb2xvcj86IHN0cmluZyxcclxuICBmb250RmFtaWx5Pzogc3RyaW5nXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XHJcbiAgZm9udEZhbWlseSA9ICFmb250RmFtaWx5ID8gZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIDogZm9udEZhbWlseVxyXG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxyXG4gIGNvbnN0IG9wdGlvbnM6IFRleHRUb1NWRy5HZW5lcmF0aW9uT3B0aW9ucyA9IHtcclxuICAgIGFuY2hvcjogJ3RvcCcsXHJcbiAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgIGZpbGw6IGNvbG9yXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IHRleHRTVkcgPSB0ZXh0MlNWRy5nZXRTVkcodGV4dCwgb3B0aW9ucylcclxuICBjb25zdCBzdmcgPSBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxyXG4gIHJldHVybiBzdmdcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdhc3NldHMnLCAncGljbGlzdC5wbmcnKVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEFkZFdhdGVybWFyayAoXHJcbiAgaW1nOiBCdWZmZXIsXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICBpc0Z1bGxTY3JlZW5XYXRlcm1hcms/OiBib29sZWFuLFxyXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8gPSAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXHJcbiAgY29uc3QgaW1hZ2UgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICBjb25zdCB7IHdpZHRoOiBpbWdXaWR0aCA9IDIwMCB9ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKVxyXG4gIGNvbnN0IHdhdGVybWFyayA9IGF3YWl0IGNyZWF0ZVdhdGVybWFyayhcclxuICAgIHdhdGVybWFya1R5cGUsXHJcbiAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICB0ZXh0LFxyXG4gICAgd2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICB3YXRlcm1hcmtTY2FsZVJhdGlvLFxyXG4gICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICBpbWdXaWR0aCxcclxuICAgIHdhdGVybWFya0RlZ3JlZVxyXG4gIClcclxuICBjb25zdCBjb21wb3NpdGVkID0gYXdhaXQgaW1hZ2VcclxuICAgIC5jb21wb3NpdGUoW1xyXG4gICAgICB7XHJcbiAgICAgICAgaW5wdXQ6IHdhdGVybWFyayxcclxuICAgICAgICBncmF2aXR5OiBwb3NpdGlvbiB8fCAnc291dGhlYXN0JyxcclxuICAgICAgICB0aWxlOiBpc0Z1bGxTY3JlZW5XYXRlcm1hcmtcclxuICAgICAgfVxyXG4gICAgXSlcclxuICAgIC50b0J1ZmZlcigpXHJcbiAgcmV0dXJuIGNvbXBvc2l0ZWRcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2F0ZXJtYXJrIChcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgaW1nV2lkdGg6IG51bWJlciA9IDIwMCxcclxuICB3YXRlcm1hcmtEZWdyZWU6IG51bWJlciA9IDBcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBsZXQgd2F0ZXJtYXJrOiBhbnlcclxuICBpZiAod2F0ZXJtYXJrVHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoID0gd2F0ZXJtYXJrSW1hZ2VQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGhcclxuICAgIHdhdGVybWFyayA9IGF3YWl0IHNoYXJwKHdhdGVybWFya0ltYWdlUGF0aCkudG9CdWZmZXIoKVxyXG4gIH0gZWxzZSB7XHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCB0ZXh0MlNWRyhcclxuICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICB0ZXh0LFxyXG4gICAgICB3YXRlcm1hcmtDb2xvcixcclxuICAgICAgd2F0ZXJtYXJrRm9udFBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoXHJcbiAgICApXHJcbiAgfVxyXG4gIGNvbnN0IHsgd2lkdGg6IHdhdGVybWFya1dpZHRoLCBoZWlnaHQ6IHdhdGVybWFya0hlaWdodCB9ID0gYXdhaXQgZ2V0U2l6ZShcclxuICAgIHdhdGVybWFya1xyXG4gIClcclxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVXaWR0aCA9IE1hdGguZmxvb3IoaW1nV2lkdGggKiBmb3JjZU51bWJlcih3YXRlcm1hcmtTY2FsZVJhdGlvKSlcclxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVIZWlnaHQgPSBNYXRoLmZsb29yKFxyXG4gICAgKHdhdGVybWFya1Jlc2l6ZVdpZHRoICogd2F0ZXJtYXJrSGVpZ2h0KSAvIHdhdGVybWFya1dpZHRoXHJcbiAgKVxyXG4gIHJldHVybiBhd2FpdCBzaGFycCh3YXRlcm1hcmspXHJcbiAgICAucmVzaXplKHdhdGVybWFya1Jlc2l6ZVdpZHRoLCB3YXRlcm1hcmtSZXNpemVIZWlnaHQsIHtcclxuICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgfSlcclxuICAgIC5yb3RhdGUod2F0ZXJtYXJrRGVncmVlLCB7IGJhY2tncm91bmQ6IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYWxwaGE6IDAgfSB9KVxyXG4gICAgLnRvQnVmZmVyKClcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0U2l6ZSAoaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8eyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9PiB7XHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCBzaGFycChpbWFnZSkubWV0YWRhdGEoKVxyXG4gIHJldHVybiB7IHdpZHRoOiB3aWR0aCB8fCAyMDAsIGhlaWdodDogaGVpZ2h0IHx8IDIwMCB9XHJcbn1cclxuXHJcbmNvbnN0IHZhbGlkUGFyYW0gPSAoLi4ucGFyYW1zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwYXJhbXMuZXZlcnkocGFyYW0gPT4ge1xyXG4gICAgaWYgKHBhcmFtID09PSB1bmRlZmluZWQgfHwgcGFyYW0gPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gcGFyYW0gIT09ICcnXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gcGFyYW0gPiAwXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyYW0pLmxlbmd0aCA+IDBcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QgPSBbXHJcbiAgJ2F2aWYnLFxyXG4gICdkeicsXHJcbiAgJ2ZpdHMnLFxyXG4gICdnaWYnLFxyXG4gICdoZWlmJyxcclxuICAnaW5wdXQnLFxyXG4gICdqcGVnJyxcclxuICAnanBnJyxcclxuICAnanAyJyxcclxuICAnanhsJyxcclxuICAnbWFnaWNrJyxcclxuICAnb3BlbnNsaWRlJyxcclxuICAncGRmJyxcclxuICAncG5nJyxcclxuICAncHBtJyxcclxuICAncmF3JyxcclxuICAnc3ZnJyxcclxuICAndGlmZicsXHJcbiAgJ3RpZicsXHJcbiAgJ3YnLFxyXG4gICd3ZWJwJ1xyXG5dXHJcblxyXG5jb25zdCB2YWxpZE91dHB1dEZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdC5pbmNsdWRlcyhmb3JtYXQpXHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRXh0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnXVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQWRkV2F0ZXJNYXJrIChpbWc6IEJ1ZmZlciwgb3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLCBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdHJ5IHtcclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMud2F0ZXJtYXJrVGV4dCkpIHtcclxuICAgICAgaW1hZ2UgPSBzaGFycChhd2FpdCBBZGRXYXRlcm1hcmsoXHJcbiAgICAgICAgaW1nLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXHJcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxyXG4gICAgICApLCB7IGFuaW1hdGVkOiB0cnVlIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdE9wdGlvbnMgKG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zKTogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMge1xyXG4gIHJldHVybiB7XHJcbiAgICBxdWFsaXR5OiBmb3JjZU51bWJlcihvcHRpb25zLnF1YWxpdHkpLFxyXG4gICAgaXNDb252ZXJ0OiBvcHRpb25zLmlzQ29udmVydCB8fCBmYWxzZSxcclxuICAgIGNvbnZlcnRGb3JtYXQ6IG9wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJyxcclxuICAgIGlzUmVTaXplOiBvcHRpb25zLmlzUmVTaXplIHx8IGZhbHNlLFxyXG4gICAgcmVTaXplSGVpZ2h0OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZUhlaWdodCksXHJcbiAgICByZVNpemVXaWR0aDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVXaWR0aCksXHJcbiAgICBza2lwUmVTaXplT2ZTbWFsbEltZzogb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZSxcclxuICAgIGlzUmVTaXplQnlQZXJjZW50OiBvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxyXG4gICAgcmVTaXplUGVyY2VudDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVQZXJjZW50KSxcclxuICAgIGlzUm90YXRlOiBvcHRpb25zLmlzUm90YXRlIHx8IGZhbHNlLFxyXG4gICAgaXNGbGlwOiBvcHRpb25zLmlzRmxpcCB8fCBmYWxzZSxcclxuICAgIGlzRmxvcDogb3B0aW9ucy5pc0Zsb3AgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcclxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VQcm9jZXNzIChpbWc6IEJ1ZmZlciwgb3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIHJhd0Zvcm1hdDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxyXG4gIHRyeSB7XHJcbiAgICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgICBpZiAoIWltYWdlRXh0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XHJcbiAgICAgIHJldHVybiBpbWdcclxuICAgIH1cclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIGxldCBxdWFsaXR5ID0gMTAwXHJcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnF1YWxpdHkpICYmIG9wdGlvbnMucXVhbGl0eSEgPCAxMDApIHtcclxuICAgICAgcXVhbGl0eSA9IG9wdGlvbnMucXVhbGl0eSFcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50KSB7XHJcbiAgICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucmVTaXplUGVyY2VudCkpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxyXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcclxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VXaWR0aCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEgLyAxMDApLFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaXNSZVNpemUpIHtcclxuICAgICAgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCkgJiYgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnZmlsbCdcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPiAwKSAmJiAodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplV2lkdGggPT09IDApKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcclxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXHJcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCAob3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA8IGltYWdlSGVpZ2h0KSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVIZWlnaHQgLyBpbWFnZUhlaWdodFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDApICYmICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAwKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA8IGltYWdlV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZVdpZHRoIC8gaW1hZ2VXaWR0aFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoLFxyXG4gICAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc1JvdGF0ZSAmJiBvcHRpb25zLnJvdGF0ZURlZ3JlZSkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLnJvdGF0ZShvcHRpb25zLnJvdGF0ZURlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzRmxpcCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnZmxpcCcpXHJcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxpcCgpXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0Zsb3ApIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5mbG9wKClcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzQ29udmVydCkge1xyXG4gICAgICBsZXQgbmV3Rm9ybWF0ID0gb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICAgIGlmIChvcHRpb25zLnBpY0JlZCA9PT0gJ2ltZ3VyJyAmJiBuZXdGb3JtYXQgPT09ICd3ZWJwJykge1xyXG4gICAgICAgIG5ld0Zvcm1hdCA9ICdqcGcnXHJcbiAgICAgIH1cclxuICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChuZXdGb3JtYXQsIHtcclxuICAgICAgICBxdWFsaXR5XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocmF3Rm9ybWF0ICYmIHZhbGlkT3V0cHV0Rm9ybWF0KHJhd0Zvcm1hdCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KHJhd0Zvcm1hdCBhcyBhbnksIHtcclxuICAgICAgICAgIHF1YWxpdHlcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQoJ2pwZycsIHtcclxuICAgICAgICAgIHF1YWxpdHlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRm9ybWF0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnLCAnZ2lmJ11cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQWRkV2F0ZXJtYXJrID0gKHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgcmV0dXJuICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQ29tcHJlc3MgPSAoY29tcHJlc3NPcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgY29uc3Qgbm9ybWFsaXplZEV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcblxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKG5vcm1hbGl6ZWRFeHQpIHx8ICFjb21wcmVzc09wdGlvbnMpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgY29uc3Qge1xyXG4gICAgcXVhbGl0eSxcclxuICAgIGlzUmVTaXplQnlQZXJjZW50LFxyXG4gICAgcmVTaXplUGVyY2VudCxcclxuICAgIGlzUmVTaXplLFxyXG4gICAgcmVTaXplSGVpZ2h0LFxyXG4gICAgcmVTaXplV2lkdGgsXHJcbiAgICBpc1JvdGF0ZSxcclxuICAgIHJvdGF0ZURlZ3JlZSxcclxuICAgIGlzQ29udmVydCxcclxuICAgIGNvbnZlcnRGb3JtYXQsXHJcbiAgICBpc0ZsaXAsXHJcbiAgICBpc0Zsb3BcclxuICB9ID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXHJcblxyXG4gIGlmICh2YWxpZFBhcmFtKHF1YWxpdHkpICYmIHF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNSZVNpemVCeVBlcmNlbnQgJiYgdmFsaWRQYXJhbShyZVNpemVQZXJjZW50KSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzUmVTaXplICYmICgodHlwZW9mIHJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgcmVTaXplSGVpZ2h0ID4gMCkgfHwgKHR5cGVvZiByZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgcmVTaXplV2lkdGggPiAwKSkpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc1JvdGF0ZSAmJiByb3RhdGVEZWdyZWUpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc0ZsaXAgfHwgaXNGbG9wKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNDb252ZXJ0KSB7XHJcbiAgICBjb25zdCBuZXdGb3JtYXQgPSBjb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICByZXR1cm4gZmlsZUV4dCAhPT0gbmV3Rm9ybWF0XHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcmVtb3ZlRXhpZiA9IGFzeW5jIChpbWc6IEJ1ZmZlciwgZmlsZUV4dDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+ID0+IHtcclxuICBmaWxlRXh0ID0gZmlsZUV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcclxuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KSkge1xyXG4gICAgcmV0dXJuIGltZ1xyXG4gIH1cclxuICByZXR1cm4gYXdhaXQgc2hhcnAoaW1nLCB7XHJcbiAgICBhbmltYXRlZDogdHJ1ZVxyXG4gIH0pLnRvQnVmZmVyKClcclxufVxyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCB1cGxvYWQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwbG9hZCwgZ28gZ28gZ28nKVxyXG4gICAgICAuYXJndW1lbnRzKCdbaW5wdXQuLi5dJylcclxuICAgICAgLmFsaWFzKCd1JylcclxuICAgICAgLmFjdGlvbigoaW5wdXQ6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGlucHV0XHJcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXHJcbiAgICAgICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGAke2l0ZW19IGRvZXMgbm90IGV4aXN0LmApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBleGlzdFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3F1YWxpdHknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnF1YWxpdHkgfHwgMTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNDb252ZXJ0JyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNDb252ZXJ0IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY29udmVydEZvcm1hdCcsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWydhdmlmJywgJ2R6JywgJ2ZpdHMnLCAnZ2lmJywgJ2hlaWYnLCAnaW5wdXQnLCAnanBlZycsICdqcGcnLCAnanAyJywgJ2p4bCcsICdtYWdpY2snLCAnb3BlbnNsaWRlJywgJ3BkZicsICdwbmcnLCAncHBtJywgJ3JhdycsICdzdmcnLCAndGlmZicsICd0aWYnLCAndicsICd3ZWJwJ10sXHJcbiAgICAgIGRlZmF1bHQ6ICdqcGcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZVNpemUnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplV2lkdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVXaWR0aCB8fCA1MDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVIZWlnaHQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplSGVpZ2h0IHx8IDUwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NraXBSZVNpemVPZlNtYWxsSW1nJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplQnlQZXJjZW50JyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVBlcmNlbnQgfHwgNTBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0ZsaXAnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0ZsaXAgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0Zsb3AnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Zsb3AgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JvdGF0ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSb3RhdGUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyb3RhdGVEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucm90YXRlRGVncmVlIHx8IDkwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZW1vdmVFeGlmJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZW1vdmVFeGlmIHx8IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0FkZFdhdGVybWFyaycsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQWRkV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVHlwZScsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsndGV4dCcsICdpbWFnZSddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRnVsbFNjcmVlbldhdGVybWFyayB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0RlZ3JlZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ZvbnRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1NjYWxlUmF0aW8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0NvbG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtDb2xvciB8fCAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtJbWFnZVBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ltYWdlUGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1Bvc2l0aW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnbm9ydGgnLCAnbm9ydGhlYXN0JywgJ3NvdXRoZWFzdCcsICdzb3V0aCcsICdzb3V0aHdlc3QnLCAnbm9ydGh3ZXN0JywgJ3dlc3QnLCAnZWFzdCcsICdjZW50ZXInLCAnY2VudHJlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZm9ybWF0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5hYmxlJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRU5BQkxFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuYWJsZSB8fCBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNvbXByZXNzIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzJ1xyXG5pbXBvcnQgd2F0ZXJtYXJrIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL3dhdGVybWFyaydcclxuaW1wb3J0IHJlbmFtZSBmcm9tICcuLi9iZWZvcmV1cGxvYWQvYnVpbGRJblJlbmFtZSdcclxuXHJcbi8vIGhhbmRsZSBtb2R1bGVzIGNvbmZpZyAtPiBzYXZlIHRvIHBpY2dvIGNvbmZpZyBmaWxlXHJcbmNvbnN0IGhhbmRsZUNvbmZpZyA9IGFzeW5jIChjdHg6IElQaWNHbywgcHJvbXB0czogSVBsdWdpbkNvbmZpZ1tdLCBtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQocHJvbXB0cylcclxuICBjb25zdCBjb25maWdOYW1lID0gbW9kdWxlID09PSAndXBsb2FkZXInXHJcbiAgICA/IGBwaWNCZWQuJHtuYW1lfWBcclxuICAgIDogbW9kdWxlID09PSAndHJhbnNmb3JtZXInXHJcbiAgICAgID8gYHRyYW5zZm9ybWVyLiR7bmFtZX1gXHJcbiAgICAgIDogbW9kdWxlID09PSAnYnVpbGRpbidcclxuICAgICAgICA/IGBidWlsZEluLiR7bmFtZX1gXHJcbiAgICAgICAgOiBuYW1lXHJcbiAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgW2NvbmZpZ05hbWVdOiBhbnN3ZXJcclxuICB9KVxyXG4gIGlmIChtb2R1bGUgPT09ICd1cGxvYWRlcicpIHtcclxuICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3BpY0JlZC5jdXJyZW50JzogbmFtZSxcclxuICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IG5hbWVcclxuICAgIH0pXHJcbiAgfSBlbHNlIGlmIChtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcicpIHtcclxuICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IG5hbWVcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBzZXR0aW5nID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnc2V0JylcclxuICAgICAgLmFsaWFzKCdjb25maWcnKVxyXG4gICAgICAuYXJndW1lbnRzKCc8bW9kdWxlPiBbbmFtZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NvbmZpZ3VyZSBjb25maWcgb2YgcGljZ28gbW9kdWxlcywgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxyXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICAvLyBpZiBhIG1vZHVsZSBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcclxuICAgICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdidWlsZGluJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHdhdGVybWFyay5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAncmVuYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydjb21wcmVzcycsICd3YXRlcm1hcmsnLCAncmVuYW1lJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgYnVpbGRpbiBtb2R1bGUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5idWlsZGluID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAncmVuYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHJlbmFtZS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICd1cGxvYWRlcic6XHJcbiAgICAgICAgICAgICAgY2FzZSAndHJhbnNmb3JtZXInOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQobmFtZSlcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihgTm8gJHttb2R1bGV9IG5hbWVkICR7bmFtZX1gKTsgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke21vZHVsZX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlclttb2R1bGVdLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYENob29zZSBhKG4pICR7bW9kdWxlfWBcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAncGx1Z2luJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghbmFtZS5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHgubG9nLmVycm9yKGBObyBwbHVnaW4gbmFtZWQgJHtuYW1lfWApOyByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2luJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBwbHVnaW4nXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgYW5zd2VyLnBsdWdpbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJyk7IHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcclxuICAgICAgICAgICAgaWYgKG1vZHVsZSA9PT0gJ3BsdWdpbicpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oJ0lmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGNvbmZpZywgcGxlYXNlIHJ1biBcXCdwaWNnbyB1c2UgcGx1Z2luc1xcJycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgc2V0dGluZ1xyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luLCB0eXBlIFVuZGVmaW5hYmxlLCB0eXBlIElDTElDb25maWdzLCB0eXBlIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVzZTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VzZScpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1c2UgbW9kdWxlcyBvZiBwaWNnbycpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICBsZXQgcHJvbXB0czogYW55W10gPSBbXVxyXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xyXG4gICAgICAgICAgICAgIHVwbG9hZGVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhbiB1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnVwbG9hZGVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHBsdWdpbnM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIHBsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBjdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtpdGVtfWApKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcclxuICAgICAgICAgICAgICAgIHByb21wdHMucHVzaChjb25maWdbbW9kdWxlXSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnMnKTsgcmV0dXJuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHByb21wdHMgPSBPYmplY3Qua2V5cyhjb25maWcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBjb25maWdbaXRlbV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgZm9yIHBsdWdpbnMgb3B0aW9uIGZyb20gQXJyYXkgdG8gb2JqZWN0XHJcbiAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSBjdHguZ2V0Q29uZmlnPElTdHJpbmdLZXlNYXA8Ym9vbGVhbj4+KCdwaWNnb1BsdWdpbnMnKVxyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBsdWdpbnMpLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciBwbHVnaW5zXHJcbiAgICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICAgcGljZ29QbHVnaW5zOiBwbHVnaW5zXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgdXBsb2FkZXIgJiB0cmFuc2Zvcm1lclxyXG4gICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC5jdXJyZW50JzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcclxuICAgICAgICAgICAgICAncGljQmVkLnVwbG9hZGVyJzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcclxuICAgICAgICAgICAgICAncGljQmVkLnRyYW5zZm9ybWVyJzogYW5zd2VyLnRyYW5zZm9ybWVyIHx8ICdwYXRoJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwcm94eTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgJ3BpY0JlZC5wcm94eSc6IHByb3h5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByb3h5XHJcbiIsImltcG9ydCBtYXRjaCBmcm9tICdtaW5pbWF0Y2gnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElPcHRpb25zLCB0eXBlIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xyXG5pbXBvcnQgZWpzIGZyb20gJ2VqcydcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0ZW1wbGF0ZSBmaWxlcyB0byBkZXN0aW5hdGlvbiBmaWxlcy5cclxuICogQHBhcmFtIHtQaWNHb30gY3R4XHJcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRpb25zKG9wdGlvbnMudG1wKVxyXG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKG9wdGlvbnMudG1wLCAndGVtcGxhdGUnKVxyXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxyXG4gICAgaWYgKG9wdHMucHJvbXB0cyAmJiBvcHRzLnByb21wdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhbnN3ZXJzID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQob3B0cy5wcm9tcHRzKVxyXG4gICAgfVxyXG4gICAgbGV0IF9maWxlczogc3RyaW5nW10gPSBhd2FpdCBnbG9iYnkoWycqKi8qJ10sIHsgY3dkOiBzb3VyY2UsIGRvdDogdHJ1ZSB9KSAvLyBnZXQgZmlsZXMnIG5hbWUgYXJyYXlcclxuICAgIF9maWxlcyA9IF9maWxlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICBsZXQgZ2xvYiA9ICcnXHJcbiAgICAgIE9iamVjdC5rZXlzKG9wdHMuZmlsdGVycykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAobWF0Y2goaXRlbSwga2V5LCB7IGRvdDogdHJ1ZSB9KSkge1xyXG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChnbG9iKSB7IC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzKGN0eCwgb3B0cy5maWx0ZXJzW2dsb2JdLCBhbnN3ZXJzKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjdHgubG9nLndhcm4oJ1RlbXBsYXRlIGZpbGVzIG5vdCBmb3VuZCEnKTsgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWxlcyA9IHJlbmRlcihfZmlsZXMsIHNvdXJjZSwgYW5zd2VycylcclxuICAgIHdyaXRlRmlsZVRyZWUob3B0aW9ucy5kZXN0LCBmaWxlcylcclxuICAgIGlmICh0eXBlb2Ygb3B0cy5jb21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBvcHRzLmNvbXBsZXRlKHsgYW5zd2Vycywgb3B0aW9ucywgZmlsZXM6IF9maWxlcywgY3R4IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0cy5jb21wbGV0ZU1lc3NhZ2UpIHtcclxuICAgICAgY3R4LmxvZy5zdWNjZXNzKG9wdHMuY29tcGxldGVNZXNzYWdlKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKCdEb25lIScpXHJcbiAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcclxuICogQHBhcmFtIGN0eCBQaWNHb1xyXG4gKiBAcGFyYW0gZXhwIGNvbmRpdGlvbiBleHByZXNzaW9uXHJcbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxyXG4gKi9cclxuY29uc3QgZmlsdGVycyA9IChjdHg6IElQaWNHbywgZXhwOiBhbnksIGRhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcclxuICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbignZGF0YScsICd3aXRoIChkYXRhKSB7IHJldHVybiAnICsgZXhwICsgJ30nKVxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gZm4oZGF0YSlcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGBFcnJvciB3aGVuIGV2YWx1YXRpbmcgZmlsdGVyIGNvbmRpdGlvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgb3B0aW9uc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXHJcbiAqL1xyXG5jb25zdCBnZXRPcHRpb25zID0gKHRlbXBsYXRlUGF0aDogc3RyaW5nKTogYW55ID0+IHtcclxuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9uc1BhdGgpKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXHJcbiAgICByZXR1cm4gb3B0aW9uc1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4ge31cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXIgZmlsZXMgdG8gYSB2aXJ0dWFsIHRyZWUgb2JqZWN0XHJcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCByZW5kZXIgPSAoZmlsZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55ID0+IHtcclxuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cclxuICBmaWxlcy5mb3JFYWNoKChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihzb3VyY2UsIGZpbGVQYXRoKSwgJ3V0ZjgnKVxyXG4gICAgY29uc3QgY29udGVudCA9IGVqcy5yZW5kZXIoZmlsZSwgb3B0aW9ucylcclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xyXG4gICAgICBmaWxlVHJlZVtmaWxlUGF0aF0gPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfSlcclxuICByZXR1cm4gZmlsZVRyZWVcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyaXRlIHJlbmRlcmVkIGZpbGVzJyBjb250ZW50IHRvIHJlYWwgZmlsZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWxlc1xyXG4gKi9cclxuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xyXG4gIE9iamVjdC5rZXlzKGZpbGVzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSlcclxuICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcclxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGZpbGVzW25hbWVdKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgZmlsdGVycyxcclxuICBnZW5lcmF0ZSxcclxuICByZW5kZXIsXHJcbiAgd3JpdGVGaWxlVHJlZVxyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luaXRVdGlscydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXHJcbmltcG9ydCB7IHR5cGUgSU9wdGlvbnMsIHR5cGUgSVBsdWdpbiwgdHlwZSBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHJtIGZyb20gJ3JpbXJhZidcclxuXHJcbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcclxuICAvLyBjb25zdCBuYW1lID0gb3B0aW9ucy5pblBsYWNlID8gcGF0aC5yZWxhdGl2ZSgnLi4vJywgcHJvY2Vzcy5jd2QoKSkgOiBvcHRpb25zLnByb2plY3RcclxuICBpZiAob3B0aW9ucy5vZmZsaW5lKSB7IC8vIG9mZmxpbmUgbW9kZVxyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50ZW1wbGF0ZSkpIHtcclxuICAgICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXHJcbiAgICB9XHJcbiAgfSBlbHNlIHsgLy8gb25saW5lIG1vZGVcclxuICAgIG9wdGlvbnMudGVtcGxhdGUgPSAhb3B0aW9ucy5oYXNTbGFzaFxyXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxyXG4gICAgICA6IG9wdGlvbnMudGVtcGxhdGVcclxuICAgIGRvd25sb2FkQW5kR2VuZXJhdGUoY3R4LCBvcHRpb25zKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGRvd25sb2FkIHRlbXBsYXRlICYgZ2VuZXJhdGVcclxuICogQHBhcmFtIHsgUGljR28gfSBjdHhcclxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXHJcbiAqL1xyXG5jb25zdCBkb3dubG9hZEFuZEdlbmVyYXRlID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xyXG4gICAgcm0uc3luYyhvcHRpb25zLnRtcClcclxuICB9XHJcbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxyXG4gIGRvd25sb2FkKG9wdGlvbnMudGVtcGxhdGUsIG9wdGlvbnMudG1wLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIH0sIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICBpZiAoZXJyKSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoZXJyKTsgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGVkIScpXHJcbiAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBpbml0OiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5pdCcpXHJcbiAgICAgIC5hcmd1bWVudHMoJzx0ZW1wbGF0ZT4gW3Byb2plY3RdJylcclxuICAgICAgLm9wdGlvbignLS1jbG9uZScsICd1c2UgZ2l0IGNsb25lJylcclxuICAgICAgLm9wdGlvbignLS1vZmZsaW5lJywgJ3VzZSBjYWNoZWQgdGVtcGxhdGUnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NyZWF0ZSBwaWNnbyBwbHVnaW5cXCdzIGRldmVsb3BtZW50IHRlbXBsYXRlcycpXHJcbiAgICAgIC5hY3Rpb24oKHRlbXBsYXRlOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIC8vIFRoYW5rcyB0byB2dWUtY2xpIGluaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtY2xpL2Jsb2IvbWFzdGVyL2Jpbi92dWUtaW5pdFxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzU2xhc2ggPSB0ZW1wbGF0ZS5pbmNsdWRlcygnLycpXHJcbiAgICAgICAgICAgIGNvbnN0IGluUGxhY2UgPSAhcHJvamVjdCB8fCBwcm9qZWN0ID09PSAnLidcclxuICAgICAgICAgICAgY29uc3QgZGVzdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0IHx8ICcuJylcclxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBwcm9ncmFtLmNsb25lIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIGNvbnN0IG9mZmxpbmUgPSBwcm9ncmFtLm9mZmxpbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3QgdG1wID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNnby90ZW1wbGF0ZXMnLCB0ZW1wbGF0ZS5yZXBsYWNlKC9bLzpdL2csICctJykpIC8vIGZvciBjYWNoaW5nIHRlbXBsYXRlXHJcblxyXG4gICAgICAgICAgICBpZiAocHJvZ3JhbS5vZmZsaW5lKSB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0bXBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZSxcclxuICAgICAgICAgICAgICBwcm9qZWN0LFxyXG4gICAgICAgICAgICAgIGhhc1NsYXNoLFxyXG4gICAgICAgICAgICAgIGluUGxhY2UsXHJcbiAgICAgICAgICAgICAgZGVzdCxcclxuICAgICAgICAgICAgICBjbG9uZSxcclxuICAgICAgICAgICAgICB0bXAsXHJcbiAgICAgICAgICAgICAgb2ZmbGluZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBwcm9qZWN0IGlzIGVtcHR5IG9yIGV4aXN0XHJcbiAgICAgICAgICAgIGlmIChpblBsYWNlIHx8IGZzLmV4aXN0c1N5bmMoZGVzdCkpIHtcclxuICAgICAgICAgICAgICBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogaW5QbGFjZVxyXG4gICAgICAgICAgICAgICAgICAgID8gJ0dlbmVyYXRlIHByb2plY3QgaW4gY3VycmVudCBkaXJlY3Rvcnk/J1xyXG4gICAgICAgICAgICAgICAgICAgIDogJ1RhcmdldCBkaXJlY3RvcnkgZXhpc3RzLiBDb250aW51ZT8nLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnb2snXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXSkudGhlbigoYW5zd2VyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIub2spIHtcclxuICAgICAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBwcm9qZWN0IGlzIGdpdmVuXHJcbiAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vbignLS1oZWxwJywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZygnRXhhbXBsZXM6JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggYW4gb2ZmaWNpYWwgdGVtcGxhdGUnKSlcclxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgcGx1Z2luIG15LXByb2plY3QnKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgc3RyYWlnaHQgZnJvbSBhIGdpdGh1YiB0ZW1wbGF0ZScpKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCB1c2VybmFtZS9yZXBvIG15LXByb2plY3QnKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGluaXRcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGx1Z2luLCB0eXBlIElQaWNHbywgdHlwZSBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBpMThuOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaTE4bicpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tsYW5nXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY2hhbmdlIHBpY2dvIGxhbmd1YWdlJylcclxuICAgICAgLmFjdGlvbihhc3luYyAobGFuZzogc3RyaW5nID0gJycpID0+IHtcclxuICAgICAgICBjb25zdCBsaXN0ID0gY3R4LmkxOG4uZ2V0TGFuZ3VhZ2VMaXN0KClcclxuICAgICAgICBpZiAoIWxhbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgbmFtZTogJ2kxOG4nLFxyXG4gICAgICAgICAgICAgIGNob2ljZXM6IGxpc3QsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGxhbmd1YWdlJyxcclxuICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxzdHJpbmc+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgY3R4LmkxOG4uc2V0TGFuZ3VhZ2UoYW5zd2VyLmkxOG4pXHJcbiAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoYExhbmd1YWdlIHNldCB0byAke2Fuc3dlci5pMThufWApXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFsaXN0LmluY2x1ZGVzKGxhbmcpKSB7XHJcbiAgICAgICAgICBjdHgubG9nLndhcm4oJ05vIHN1Y2ggbGFuZ3VhZ2UnKTsgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5pMThuLnNldExhbmd1YWdlKGxhbmcpXHJcbiAgICAgICAgY3R4LmxvZy5zdWNjZXNzKGBMYW5ndWFnZSBzZXQgdG8gJHtsYW5nfWApXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpMThuXHJcbiIsImltcG9ydCB7IHR5cGUgSVBsdWdpbiwgdHlwZSBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXHJcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcclxuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcclxuaW1wb3J0IGlucXVpcmVyLCB7IHR5cGUgSW5xdWlyZXIgfSBmcm9tICdpbnF1aXJlcidcclxuaW1wb3J0IHsgdHlwZSBJUGx1Z2luLCB0eXBlIElDb21tYW5kZXIsIHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBjb21tYW5kZXJzIGZyb20gJy4uL3BsdWdpbnMvY29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcclxuXHJcbmV4cG9ydCBjbGFzcyBDb21tYW5kZXIgaW1wbGVtZW50cyBJQ29tbWFuZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5hbWUgPSAnY29tbWFuZGVyJ1xyXG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ID0gbmV3IE1hcDxzdHJpbmcsIElQbHVnaW4+KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG5cclxuICBwcm9ncmFtOiBDb21tYW5kXHJcbiAgaW5xdWlyZXI6IElucXVpcmVyXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKVxyXG4gICAgdGhpcy5pbnF1aXJlciA9IGlucXVpcmVyXHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWVcclxuICB9XHJcblxyXG4gIGluaXQgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9ncmFtXHJcbiAgICAgIC52ZXJzaW9uKHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT04sICctdiwgLS12ZXJzaW9uJylcclxuICAgICAgLm9wdGlvbignLWQsIC0tZGVidWcnLCAnZGVidWcgbW9kZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgZGVidWc6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub3B0aW9uKCctcywgLS1zaWxlbnQnLCAnc2lsZW50IG1vZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vbignY29tbWFuZDoqJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihgSW52YWxpZCBjb21tYW5kOiAke3RoaXMucHJvZ3JhbS5hcmdzLmpvaW4oJyAnKX1cXG5TZWUgLS1oZWxwIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLmApXHJcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgLy8gYnVpbHQtaW4gY29tbWFuZHNcclxuICAgIGNvbW1hbmRlcnModGhpcy5jdHgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIGlzIHJlcXVpcmVkIScpXHJcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5oYW5kbGUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbi5oYW5kbGUgbXVzdCBiZSBhIGZ1bmN0aW9uIScpXHJcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBwbHVnaW4gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgY29uc3QgY3VycmVudFBsdWdpbk5hbWUgPSBnZXRDdXJyZW50UGx1Z2luTmFtZSgpXHJcbiAgICBpZiAoY3VycmVudFBsdWdpbk5hbWUgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKGN1cnJlbnRQbHVnaW5OYW1lKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KGN1cnJlbnRQbHVnaW5OYW1lKT8ucHVzaChpZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChjdXJyZW50UGx1Z2luTmFtZSwgW2lkXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlciAocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcclxuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXHJcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRMaXN0KCkuZm9yRWFjaCgoaXRlbTogSVBsdWdpbikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGl0ZW0uaGFuZGxlKHRoaXMuY3R4KVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCAoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXHJcbiAgfVxyXG5cclxuICBnZXRMaXN0ICgpOiBJUGx1Z2luW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXHJcbiAgfVxyXG5cclxuICBnZXRJZExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbW1hbmRlclxyXG4iLCJpbXBvcnQgcGx1Z2luSGFuZGxlciBmcm9tICcuL3BsdWdpbkhhbmRsZXInXHJcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnXHJcbmltcG9ydCB1cGxvYWQgZnJvbSAnLi91cGxvYWQnXHJcbmltcG9ydCBzZXR0aW5nIGZyb20gJy4vc2V0dGluZydcclxuaW1wb3J0IHVzZSBmcm9tICcuL3VzZSdcclxuaW1wb3J0IHByb3h5IGZyb20gJy4vcHJveHknXHJcbmltcG9ydCBpbml0IGZyb20gJy4vaW5pdCdcclxuaW1wb3J0IGkxOG4gZnJvbSAnLi9pMThuJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGN0eDogSVBpY0dvKTogdm9pZCA9PiB7XHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncGx1Z2luSGFuZGxlcicsIHBsdWdpbkhhbmRsZXIpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3NldHRpbmcnLCBzZXR0aW5nKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VwbG9hZCcsIHVwbG9hZClcclxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncHJveHknLCBwcm94eSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpbml0JywgaW5pdClcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcclxufVxyXG4iLCJleHBvcnQgZW51bSBJTG9nVHlwZSB7XHJcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcclxuICBpbmZvID0gJ2luZm8nLFxyXG4gIHdhcm4gPSAnd2FybicsXHJcbiAgZXJyb3IgPSAnZXJyb3InXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIGJ5IHVzZXJzXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcclxuICBVUExPQURfUFJPR1JFU1MgPSAndXBsb2FkUHJvZ3Jlc3MnLFxyXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxyXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcclxuICBCRUZPUkVfVVBMT0FEID0gJ2JlZm9yZVVwbG9hZCcsXHJcbiAgQUZURVJfVVBMT0FEID0gJ2FmdGVyVXBsb2FkJyxcclxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXHJcbiAgSU5TVEFMTCA9ICdpbnN0YWxsJyxcclxuICBVTklOU1RBTEwgPSAndW5pbnN0YWxsJyxcclxuICBVUERBVEUgPSAndXBkYXRlJyxcclxuICBOT1RJRklDQVRJT04gPSAnbm90aWZpY2F0aW9uJ1xyXG59XHJcblxyXG4vKipcclxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBvbmx5IGJ5IHBpY2dvXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVzRXZlbnQge1xyXG4gIENPTkZJR19DSEFOR0UgPSAnQ09ORklHX0NIQU5HRSdcclxufVxyXG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJ1xyXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7XHJcbiAgdHlwZSBJTG9nQXJndlR5cGUsXHJcbiAgdHlwZSBJTG9nQXJndlR5cGVXaXRoRXJyb3IsXHJcbiAgdHlwZSBVbmRlZmluYWJsZSxcclxuICB0eXBlIElMb2dDb2xvcixcclxuICB0eXBlIElMb2dnZXIsXHJcbiAgdHlwZSBJUGljR29cclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XHJcbiAgICBbSUxvZ1R5cGUuc3VjY2Vzc106ICdncmVlbicsXHJcbiAgICBbSUxvZ1R5cGUuaW5mb106ICdibHVlJyxcclxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXHJcbiAgICBbSUxvZ1R5cGUuZXJyb3JdOiAncmVkJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbG9nTGV2ZWwhOiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIHByaXZhdGUgbG9nUGF0aCE6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTG9nICh0eXBlOiBJTG9nVHlwZSwgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgLy8gY2hlY2sgY29uZmlnLnNpbGVudFxyXG4gICAgdGhpcy5sb2dMZXZlbCA9IHRoaXMuY3R4LmdldENvbmZpZygnc2V0dGluZ3MubG9nTGV2ZWwnKVxyXG4gICAgaWYgKCF0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NpbGVudCcpICYmIHRoaXMuY2hlY2tMb2dMZXZlbCh0eXBlLCB0aGlzLmxvZ0xldmVsKSkge1xyXG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcclxuICAgICAgY29uc29sZS5sb2cobG9nSGVhZGVyLCAuLi5tc2cpXHJcbiAgICAgIHRoaXMubG9nUGF0aCA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MubG9nUGF0aCcpIHx8IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnLi9waWNsaXN0LmxvZycpXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIGZpeCBsb2cgZmlsZSBpcyB0b28gbGFyZ2UsIG5vdyB0aGUgbG9nIGZpbGUncyBkZWZhdWx0IHNpemUgaXMgMTAgTUJcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jaGVja0xvZ0ZpbGVJc0xhcmdlKHRoaXMubG9nUGF0aClcclxuICAgICAgICAgIGlmIChyZXN1bHQuaXNMYXJnZSkge1xyXG4gICAgICAgICAgICBjb25zdCB3YXJuaW5nTXNnID0gYExvZyBmaWxlIGlzIHRvbyBsYXJnZSAoPiAkeyhyZXN1bHQubG9nRmlsZVNpemVMaW1pdCEpIC8gMTAyNCAvIDEwMjQgfHwgJzEwJ30gTUIpLCByZWNyZWF0ZSBsb2cgZmlsZWBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdbUGljTGlzdCBXQVJOXTonKSwgd2FybmluZ01zZylcclxuICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZUxvZ0ZpbGUodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgICBtc2cudW5zaGlmdCh3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVXcml0ZUxvZyh0aGlzLmxvZ1BhdGgsIHR5cGUsIC4uLm1zZylcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB3aHk/Pz9cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiBjaGVja2luZyBsb2cgZmlsZSBzaXplJywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrTG9nRmlsZUlzTGFyZ2UgKGxvZ1BhdGg6IHN0cmluZyk6IHtcclxuICAgIGlzTGFyZ2U6IGJvb2xlYW5cclxuICAgIGxvZ0ZpbGVTaXplPzogbnVtYmVyXHJcbiAgICBsb2dGaWxlU2l6ZUxpbWl0PzogbnVtYmVyXHJcbiAgfSB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZSA9IGZzLnN0YXRTeW5jKGxvZ1BhdGgpLnNpemVcclxuICAgICAgY29uc3QgbG9nRmlsZVNpemVMaW1pdCA9IGZvcmNlTnVtYmVyKHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxudW1iZXI+Pignc2V0dGluZ3MubG9nRmlsZVNpemVMaW1pdCcpIHx8IDEwKSAqIDEwMjQgKiAxMDI0IC8vIDEwIE1CIGRlZmF1bHRcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc0xhcmdlOiBsb2dGaWxlU2l6ZSA+IGxvZ0ZpbGVTaXplTGltaXQsXHJcbiAgICAgICAgbG9nRmlsZVNpemUsXHJcbiAgICAgICAgbG9nRmlsZVNpemVMaW1pdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpc0xhcmdlOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZUxvZ0ZpbGUgKGxvZ1BhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcclxuICAgICAgZnMudW5saW5rU3luYyhsb2dQYXRoKVxyXG4gICAgICBmcy5jcmVhdGVGaWxlU3luYyhsb2dQYXRoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVXcml0ZUxvZyAobG9nUGF0aDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBsb2cgPSBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpfSBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dIGBcclxuICAgICAgbXNnLmZvckVhY2goKGl0ZW06IElMb2dBcmd2VHlwZVdpdGhFcnJvcikgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgbG9nICs9IGBcXG4tLS0tLS1FcnJvciBTdGFjayBCZWdpbi0tLS0tLVxcbiR7dXRpbC5mb3JtYXQoaXRlbT8uc3RhY2spfVxcbi0tLS0tLS1FcnJvciBTdGFjayBFbmQtLS0tLS0tIGBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSwgbnVsbCwgMilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxvZyArPSBgJHtpdGVtIGFzIHN0cmluZ30gYFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgbG9nICs9ICdcXG4nXHJcbiAgICAgIC8vIEEgc3luY2hyb25pemVkIGFwcHJvYWNoIHRvIGF2b2lkIGxvZyBtc2cgc2VxdWVuY2UgZXJyb3JzXHJcbiAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKGxvZ1BhdGgsIGxvZylcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIHdyaXRpbmcgbG9nIGZpbGUnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0xvZ0xldmVsICh0eXBlOiBzdHJpbmcsIGxldmVsOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGxldmVsID09PSB1bmRlZmluZWQgfHwgbGV2ZWwgPT09ICdhbGwnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcclxuICAgICAgcmV0dXJuIGxldmVsLnNvbWUoKGl0ZW06IHN0cmluZykgPT4gKGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHR5cGUgPT09IGxldmVsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWNjZXNzICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5zdWNjZXNzLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBpbmZvICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBlcnJvciAoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuZXJyb3IsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIHdhcm4gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLndhcm4sIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGRlYnVnICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXYoKSkge1xyXG4gICAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMb2dnZXJcclxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xyXG5pbXBvcnQgeyB0eXBlIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucywgdHlwZSBJTGlmZWN5Y2xlUGx1Z2lucywgdHlwZSBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbiwgdHlwZSBVbmRlZmluYWJsZSwgdHlwZSBJSW1nSW5mbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBnZXRVUkxGaWxlLCBoYW5kbGVVcmxFbmNvZGUsIGltYWdlUHJvY2VzcywgaXNVcmwsIG5lZWRDb21wcmVzcywgbmVlZEFkZFdhdGVybWFyaywgaW1hZ2VBZGRXYXRlck1hcmssIHJlbW92ZUV4aWYsIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHRmTGluazogc3RyaW5nID0gJ2h0dHBzOi8vcmVsZWFzZS5waWNsaXN0LmNuL3NpbWhlaS50dGYnXHJcbiAgdHRmUGF0aDogc3RyaW5nXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuICAgIGNvbnN0IGltZ0ZsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJylcclxuICAgIGZzLmVuc3VyZURpclN5bmMoaW1nRmxlUGF0aClcclxuICAgIGZzLmVtcHR5RGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICB0aGlzLnR0ZlBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdhc3NldHMnLCAnc2ltaGVpLnR0ZicpXHJcbiAgfVxyXG5cclxuICBhc3luYyBkb3dubG9hZFRURiAoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dERpcikpIHtcclxuICAgICAgZnMubWtkaXJTeW5jKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpKSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZS4nKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldCh0aGlzLnR0ZkxpbmssIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnR0ZlBhdGgsIHJlcy5kYXRhKVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzLicpXHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHN0YXJ0IChpbnB1dDogYW55W10pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgLy8gZW5zdXJlIGV2ZXJ5IHVwbG9hZCBwcm9jZXNzIGhhcyBhbiB1bmlxdWUgY29udGV4dFxyXG4gICAgY29uc3QgY3R4ID0gY3JlYXRlQ29udGV4dCh0aGlzLmN0eClcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGltYWdlcyBpbnB1dFxyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGFuIGFycmF5LicpXHJcbiAgICAgIH1cclxuICAgICAgY3R4LmlucHV0ID0gaW5wdXRcclxuICAgICAgY3R4LnJhd0lucHV0UGF0aCA9IFtdIGFzIHN0cmluZ1tdXHJcbiAgICAgIGN0eC5yYXdJbnB1dCA9IGNsb25lRGVlcChpbnB1dClcclxuICAgICAgY3R4Lm91dHB1dCA9IFtdIGFzIElJbWdJbmZvW11cclxuICAgICAgY29uc3QgY29tcHJlc3NPcHRpb25zID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKVxyXG4gICAgICBjb25zdCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgY29uc3QgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxyXG4gICAgICBpZiAoIXVwbG9hZGVyICYmIGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSAnc21tcydcclxuICAgICAgfSBlbHNlIGlmIChjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgICBjb21wcmVzc09wdGlvbnMucGljQmVkID0gdHlwZVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdhdGVybWFya09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcclxuICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucyB8fCB3YXRlcm1hcmtPcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAncGljbGlzdFRlbXAnKVxyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0ZW1wRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICBmcy5ta2RpclN5bmModGVtcEZpbGVQYXRoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3YXRlcm1hcmtNc2cgPSAnQWRkIHdhdGVybWFyayB0byBpbWFnZSdcclxuICAgICAgICBjb25zdCBjb21wcmVzc01zZyA9ICdDb21wcmVzcyBvciBjb252ZXJ0IGltYWdlJ1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgICAgICAgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cclxuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgICAgICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgICAgbGV0IGlzU2tpcCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEod2F0ZXJtYXJrT3B0aW9ucz8ud2F0ZXJtYXJrRm9udFBhdGggfHwgd2F0ZXJtYXJrT3B0aW9ucz8ud2F0ZXJtYXJrVHlwZSA9PT0gJ2ltYWdlJykpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQsIHNraXAgYWRkIHdhdGVybWFyay4nKVxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2tpcCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFpc1NraXApIHtcclxuICAgICAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKHdhdGVybWFya01zZylcclxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUFkZFdhdGVyTWFyayhpbmZvLmJ1ZmZlciwgd2F0ZXJtYXJrT3B0aW9ucywgdGhpcy50dGZQYXRoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAobmVlZENvbXByZXNzKGNvbXByZXNzT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKGNvbXByZXNzTXNnKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3ModHJhbnNmb3JtZWRCdWZmZXIgPz8gaW5mby5idWZmZXIsIGNvbXByZXNzT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoIXRyYW5zZm9ybWVkQnVmZmVyICYmIGNvbXByZXNzT3B0aW9ucz8uaXNSZW1vdmVFeGlmKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8oJ1JlbW92ZSBleGlmIGluZm8uJylcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihpbmZvLmJ1ZmZlciwgaW5mby5leHRuYW1lID8/ICcnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtZWRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBuZXdFeHRcclxuICAgICAgICAgICAgICAgIGlmIChjb21wcmVzc09wdGlvbnM/LmlzQ29udmVydCkge1xyXG4gICAgICAgICAgICAgICAgICBuZXdFeHQgPSBjb21wcmVzc09wdGlvbnM/LmNvbnZlcnRGb3JtYXQgPz8gJ2pwZydcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGluZm8uZXh0bmFtZSA/PyAnJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtpbmZvLmZpbGVOYW1lXHJcbiAgICAgICAgICAgICAgICAgID8gYCR7cGF0aC5iYXNlbmFtZShpbmZvLmZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoaW5mby5maWxlTmFtZSkpfSR7bmV3RXh0fWBcclxuICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpdGVtKSwgcGF0aC5iYXNlbmFtZSh0ZW1wRmlsZSkpXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcclxuICAgICAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlclxyXG4gICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBpdGVtXHJcbiAgICAgICAgICAgIGlmIChuZWVkQWRkV2F0ZXJtYXJrKHdhdGVybWFya09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFRURlJldCA9IGF3YWl0IHRoaXMuZG93bmxvYWRUVEYoKVxyXG4gICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQsIHNraXAgYWRkIHdhdGVybWFyay4nKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUFkZFdhdGVyTWFyayhmcy5yZWFkRmlsZVN5bmMoaXRlbSksIHdhdGVybWFya09wdGlvbnMsIHRoaXMudHRmUGF0aClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5lZWRDb21wcmVzcyhjb21wcmVzc09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSkpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgaWYgKHBhdGguZXh0bmFtZShpdGVtKSA9PT0gJy5oZWljJyB8fCBwYXRoLmV4dG5hbWUoaXRlbSkgPT09ICcuaGVpZicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhlaWNCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoaXRlbSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhlaWNSZXN1bHQgPSBhd2FpdCBoZWljQ29udmVydCh7XHJcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogaGVpY0J1ZmZlcixcclxuICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnSlBFRycsXHJcbiAgICAgICAgICAgICAgICAgIHF1YWxpdHk6IDFcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wSGVpY0NvbnZlcnRGaWxlID0gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBwYXRoLmV4dG5hbWUoaXRlbSkpfS5qcGdgKVxyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlLCBCdWZmZXIuZnJvbShoZWljUmVzdWx0KSlcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKGZzLnJlYWRGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlKSwgY29tcHJlc3NPcHRpb25zLCAnLmpwZycpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKHRyYW5zZm9ybWVkQnVmZmVyID8/IGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgY29tcHJlc3NPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oJ1JlbW92ZSBleGlmIGluZm8uJylcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IHJlbW92ZUV4aWYoZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCBwYXRoLmV4dG5hbWUoaXRlbSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVkQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgIGlmIChjb21wcmVzc09wdGlvbnM/LmlzQ29udmVydCkge1xyXG4gICAgICAgICAgICAgICAgbmV3RXh0ID0gY29tcHJlc3NPcHRpb25zPy5jb252ZXJ0Rm9ybWF0ID8/ICdqcGcnXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld0V4dCA9IHBhdGguZXh0bmFtZShpdGVtKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGl0ZW0pLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcclxuICAgICAgICAgICAgICBjdHguaW5wdXRbaW5kZXhdID0gdGVtcEZpbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjdHguaW5wdXQpIHtcclxuICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGgucHVzaChpdGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9UcmFuc2Zvcm0oY3R4KVxyXG4gICAgICBjb25zdCByZW5hbWVDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cclxuICAgICAgaWYgKHJlbmFtZUNvbmZpZy5lbmFibGUpIHtcclxuICAgICAgICBjb25zdCBmb3JtYXQgPSByZW5hbWVDb25maWcuZm9ybWF0IHx8ICd7ZmlsZW5hbWV9J1xyXG4gICAgICAgIGN0eC5vdXRwdXQgPSBjdHgub3V0cHV0Lm1hcCgoaXRlbTogSUltZ0luZm8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGl0ZW0uZmlsZU5hbWVcclxuICAgICAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcoY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdLCBmb3JtYXQpXHJcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvXFwvKy9nLCAnLycpXHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xyXG4gICAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUgKyBpbmRleC50b1N0cmluZygpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW0uZmlsZU5hbWUgPSBmaWxlTmFtZVxyXG4gICAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVXBsb2FkKGN0eClcclxuICAgICAgYXdhaXQgdGhpcy5kb1VwbG9hZChjdHgpXHJcbiAgICAgIGN0eC5pbnB1dCA9IGN0eC5yYXdJbnB1dFxyXG4gICAgICBhd2FpdCB0aGlzLmFmdGVyVXBsb2FkKGN0eClcclxuICAgICAgcmV0dXJuIGN0eFxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIGN0eC5sb2cud2FybihJQnVpbGRJbkV2ZW50LkZBSUxFRClcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIC0xKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICBpZiAoY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PignZGVidWcnKSkge1xyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVRyYW5zZm9ybSAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDApXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9UUkFOU0ZPUk0sIGN0eClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHRyYW5zZm9ybScpXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5iZWZvcmVUcmFuc2Zvcm1QbHVnaW5zLCBjdHgpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGRvVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMzApXHJcbiAgICBjb25zdCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnRyYW5zZm9ybWVyJykgfHwgJ3BhdGgnXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgbGV0IHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQodHlwZSlcclxuICAgIGlmICghdHJhbnNmb3JtZXIpIHtcclxuICAgICAgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCgncGF0aCcpXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdwYXRoJ1xyXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdHJhbnNmb3JtZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB0cmFuc2Zvcm1lciAtIHBhdGhgKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5pbmZvKGBUcmFuc2Zvcm1pbmcuLi4gQ3VycmVudCB0cmFuc2Zvcm1lciBpcyBbJHtjdXJyZW50VHJhbnNmb3JtZXJ9XWApXHJcbiAgICBhd2FpdCB0cmFuc2Zvcm1lcj8uaGFuZGxlKGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVXBsb2FkIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgNjApXHJcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB1cGxvYWQnKVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVVBMT0FELCBjdHgpXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5iZWZvcmVVcGxvYWRQbHVnaW5zLCBjdHgpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGRvVXBsb2FkIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBsZXQgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXHJcbiAgICBsZXQgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxyXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcclxuICAgIGlmICghdXBsb2FkZXIpIHtcclxuICAgICAgdHlwZSA9ICdzbW1zJ1xyXG4gICAgICBjdXJyZW50VHJhbnNmb3JtZXIgPSAnc21tcydcclxuICAgICAgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCgnc21tcycpXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB1cGxvYWRlciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHVwbG9hZGVyIC0gc21tc2ApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFVwbG9hZGluZy4uLiBDdXJyZW50IHVwbG9hZGVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHVwbG9hZGVyPy5oYW5kbGUoY3R4KVxyXG4gICAgZm9yIChjb25zdCBvdXRwdXRJbWcgb2YgY3R4Lm91dHB1dCkge1xyXG4gICAgICBvdXRwdXRJbWcudHlwZSA9IHR5cGVcclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYWZ0ZXJVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQUZURVJfVVBMT0FELCBjdHgpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMTAwKVxyXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLCBjdHgpXHJcbiAgICBsZXQgbXNnID0gJydcclxuICAgIGNvbnN0IGxlbmd0aCA9IGN0eC5vdXRwdXQubGVuZ3RoXHJcbiAgICBjb25zdCBpc0VuY29kZU91dHB1dFVSTCA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8Ym9vbGVhbj4+KCdzZXR0aW5ncy5lbmNvZGVPdXRwdXRVUkwnKSA9PT0gdHJ1ZVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodHlwZW9mIGN0eC5vdXRwdXRbaV0uaW1nVXJsICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIG1zZyArPSBpc0VuY29kZU91dHB1dFVSTCA/IGhhbmRsZVVybEVuY29kZShjdHgub3V0cHV0W2ldLmltZ1VybCEpIDogY3R4Lm91dHB1dFtpXS5pbWdVcmwhXHJcbiAgICAgICAgaWYgKGkgIT09IGxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIG1zZyArPSAnXFxuJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgY3R4Lm91dHB1dFtpXS5iYXNlNjRJbWFnZVxyXG4gICAgICBkZWxldGUgY3R4Lm91dHB1dFtpXS5idWZmZXJcclxuICAgIH1cclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRklOSVNIRUQsIGN0eClcclxuICAgIGN0eC5sb2cuc3VjY2VzcyhgXFxuJHttc2d9YClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUGx1Z2lucyAobGlmZUN5Y2xlUGx1Z2luczogSUxpZmVjeWNsZVBsdWdpbnMsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldExpc3QoKVxyXG4gICAgY29uc3QgcGx1Z2luTmFtZXMgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldElkTGlzdCgpXHJcbiAgICBjb25zdCBsaWZlQ3ljbGVOYW1lID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXROYW1lKClcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHBsdWdpbnMubWFwKGFzeW5jIChwbHVnaW46IElQbHVnaW4sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjdHgubG9nLmluZm8oYCR7bGlmZUN5Y2xlTmFtZX06ICR7cGx1Z2luTmFtZXNbaW5kZXhdfSBydW5uaW5nYClcclxuICAgICAgICBhd2FpdCBwbHVnaW4uaGFuZGxlKGN0eClcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoYCR7bGlmZUN5Y2xlTmFtZX06ICR7cGx1Z2luTmFtZXNbaW5kZXhdfSBlcnJvcmApXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9KSlcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuLyoqXHJcbiAqIGNyZWF0ZSBhbiB1bmlxdWUgY29udGV4dCBmb3IgZWFjaCB1cGxvYWQgcHJvY2Vzc1xyXG4gKiBAcGFyYW0gY3R4XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlQ29udGV4dCA9IChjdHg6IElQaWNHbyk6IElQaWNHbyA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGNvbmZpZ1BhdGg6IGN0eC5jb25maWdQYXRoLFxyXG4gICAgYmFzZURpcjogY3R4LmJhc2VEaXIsXHJcbiAgICBsb2c6IGN0eC5sb2csXHJcbiAgICBjbWQ6IGN0eC5jbWQsXHJcbiAgICBvdXRwdXQ6IFtdLFxyXG4gICAgaW5wdXQ6IFtdLFxyXG4gICAgcmF3SW5wdXQ6IFtdLFxyXG4gICAgcGx1Z2luTG9hZGVyOiBjdHgucGx1Z2luTG9hZGVyLFxyXG4gICAgcGx1Z2luSGFuZGxlcjogY3R4LnBsdWdpbkhhbmRsZXIsXHJcbiAgICBSZXF1ZXN0OiBjdHguUmVxdWVzdCxcclxuICAgIGhlbHBlcjogY3R4LmhlbHBlcixcclxuICAgIFZFUlNJT046IGN0eC5WRVJTSU9OLFxyXG4gICAgR1VJX1ZFUlNJT046IGN0eC5HVUlfVkVSU0lPTixcclxuICAgIHJlcXVlc3Q6IGN0eC5yZXF1ZXN0LFxyXG4gICAgaTE4bjogY3R4LmkxOG4sXHJcbiAgICBnZXRDb25maWc6IGN0eC5nZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2F2ZUNvbmZpZzogY3R4LnNhdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlQ29uZmlnOiBjdHgucmVtb3ZlQ29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHNldENvbmZpZzogY3R4LnNldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICB1bnNldENvbmZpZzogY3R4LnVuc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVwbG9hZDogY3R4LnVwbG9hZC5iaW5kKGN0eCksXHJcbiAgICBhZGRMaXN0ZW5lcjogY3R4LmFkZExpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9uOiBjdHgub24uYmluZChjdHgpLFxyXG4gICAgb25jZTogY3R4Lm9uY2UuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlTGlzdGVuZXI6IGN0eC5yZW1vdmVMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBvZmY6IGN0eC5vZmYuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiBjdHgucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIHNldE1heExpc3RlbmVyczogY3R4LnNldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBnZXRNYXhMaXN0ZW5lcnM6IGN0eC5nZXRNYXhMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgbGlzdGVuZXJzOiBjdHgubGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIHJhd0xpc3RlbmVyczogY3R4LnJhd0xpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBlbWl0OiBjdHguZW1pdC5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lckNvdW50OiBjdHgubGlzdGVuZXJDb3VudC5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kTGlzdGVuZXI6IGN0eC5wcmVwZW5kTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgcHJlcGVuZE9uY2VMaXN0ZW5lcjogY3R4LnByZXBlbmRPbmNlTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgZXZlbnROYW1lczogY3R4LmV2ZW50TmFtZXMuYmluZChjdHgpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVNtbXNDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlciwgYXBpVG9rZW46IHN0cmluZywgYmFja3VwRG9tYWluID0gJycpOiBJT2xkUmVxT3B0aW9ucyA9PiB7XHJcbiAgY29uc3QgZG9tYWluID0gYmFja3VwRG9tYWluIHx8ICdzbS5tcydcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwczovLyR7ZG9tYWlufS9hcGkvdjIvdXBsb2FkYCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXHJcbiAgICAgIEF1dGhvcml6YXRpb246IGFwaVRva2VuXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgc21maWxlOiB7XHJcbiAgICAgICAgdmFsdWU6IGltYWdlLFxyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgc3NsOiAndHJ1ZSdcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3Qgc21tc0NvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNtbXNDb25maWc+KCdwaWNCZWQuc21tcycpXHJcbiAgaWYgKCFzbW1zQ29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzbW1zIGNvbmZpZyEnKVxyXG4gIH1cclxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGltYWdlLCBzbW1zQ29uZmlnPy50b2tlbiwgc21tc0NvbmZpZz8uYmFja3VwRG9tYWluKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZylcclxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgICAgaWYgKGJvZHkuY29kZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS51cmxcclxuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmhhc2hcclxuICAgICAgICB9IGVsc2UgaWYgKGJvZHkuY29kZSA9PT0gJ2ltYWdlX3JlcGVhdGVkJyAmJiB0eXBlb2YgYm9keS5pbWFnZXMgPT09ICdzdHJpbmcnKSB7IC8vIGRvIGV4dHJhIGNoZWNrIHNpbmNlIHRoaXMgZXJyb3IgcmV0dXJuIGlzIG5vdCBkb2N1bWVudGVkIGF0IGh0dHBzOi8vZG9jLnNtLm1zLyNhcGktSW1hZ2UtVXBsb2FkXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuaW1hZ2VzXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgbWVzc2FnZTogJ2FwaSB0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYmFja3VwRG9tYWluJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4nKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYmFja3VwRG9tYWluIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdzbW1zJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVMnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJVGN5dW5Db25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTaWduYXR1cmUge1xyXG4gIHNpZ25hdHVyZTogc3RyaW5nXHJcbiAgYXBwSWQ6IHN0cmluZ1xyXG4gIGJ1Y2tldDogc3RyaW5nXHJcbiAgc2lnblRpbWU6IHN0cmluZ1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBJU2lnbmF0dXJlID0+IHtcclxuICBjb25zdCBzZWNyZXRJZCA9IG9wdGlvbnMuc2VjcmV0SWRcclxuICBjb25zdCBzZWNyZXRLZXkgPSBvcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IGFwcElkID0gb3B0aW9ucy5hcHBJZFxyXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XHJcbiAgbGV0IHNpZ25hdHVyZVxyXG4gIGxldCBzaWduVGltZTogc3RyaW5nID0gJydcclxuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwKVxyXG4gICAgY29uc3QgY3VycmVudCA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDFcclxuICAgIGNvbnN0IGV4cGlyZWQgPSBjdXJyZW50ICsgMzYwMFxyXG5cclxuICAgIGNvbnN0IG11bHRpU2lnbmF0dXJlID0gYGE9JHthcHBJZH0mYj0ke2J1Y2tldH0maz0ke3NlY3JldElkfSZlPSR7ZXhwaXJlZH0mdD0ke2N1cnJlbnR9JnI9JHtyYW5kb219JmY9YFxyXG5cclxuICAgIGNvbnN0IHNpZ25IZXhLZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKG11bHRpU2lnbmF0dXJlKS5kaWdlc3QoKVxyXG4gICAgY29uc3QgdGVtcFN0cmluZyA9IEJ1ZmZlci5jb25jYXQoW3NpZ25IZXhLZXksIEJ1ZmZlci5mcm9tKG11bHRpU2lnbmF0dXJlKV0pXHJcbiAgICBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZW1wU3RyaW5nKS50b1N0cmluZygnYmFzZTY0JylcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi83Nzc4I3NpZ25hdHVyZVxyXG4gICAgY29uc3QgdG9kYXkgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdG9kYXkgKyA4NjQwMFxyXG4gICAgc2lnblRpbWUgPSBgJHt0b2RheX07JHt0b21vcnJvd31gXHJcbiAgICBjb25zdCBzaWduS2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShzaWduVGltZSkuZGlnZXN0KCdoZXgnKVxyXG4gICAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8gb3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcclxuICAgIGNvbnN0IGh0dHBTdHJpbmcgPSBgcHV0XFxuLyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9XFxuXFxuaG9zdD0ke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fVxcbmBcclxuICAgIGNvbnN0IHNoYTFlZEh0dHBTdHJpbmcgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShodHRwU3RyaW5nKS5kaWdlc3QoJ2hleCcpXHJcbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBgc2hhMVxcbiR7c2lnblRpbWV9XFxuJHtzaGExZWRIdHRwU3RyaW5nfVxcbmBcclxuICAgIHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2lnbktleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KCdoZXgnKVxyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgc2lnbmF0dXJlLFxyXG4gICAgYXBwSWQsXHJcbiAgICBidWNrZXQsXHJcbiAgICBzaWduVGltZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IElTaWduYXR1cmUsIGltYWdlOiBCdWZmZXIsIHZlcnNpb246IHN0cmluZyk6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgY29uc3QgYXJlYSA9IG9wdGlvbnMuYXJlYVxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGhcclxuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICB1cmw6IGBodHRwOi8vJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbS9maWxlcy92Mi8ke3NpZ25hdHVyZS5hcHBJZH0vJHtzaWduYXR1cmUuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2ZpbGVOYW1lfWAsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICBIb3N0OiBgJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbWAsXHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLnNpZ25hdHVyZSxcclxuICAgICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxyXG4gICAgICB9LFxyXG4gICAgICBmb3JtRGF0YToge1xyXG4gICAgICAgIG9wOiAndXBsb2FkJyxcclxuICAgICAgICBmaWxlY29udGVudDogaW1hZ2VcclxuICAgICAgfSxcclxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8gb3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgIHVybDogYGh0dHA6Ly8ke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YCxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fWAsXHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYHEtc2lnbi1hbGdvcml0aG09c2hhMSZxLWFrPSR7b3B0aW9ucy5zZWNyZXRJZH0mcS1zaWduLXRpbWU9JHtzaWduYXR1cmUuc2lnblRpbWV9JnEta2V5LXRpbWU9JHtzaWduYXR1cmUuc2lnblRpbWV9JnEtaGVhZGVyLWxpc3Q9aG9zdCZxLXVybC1wYXJhbS1saXN0PSZxLXNpZ25hdHVyZT0ke3NpZ25hdHVyZS5zaWduYXR1cmV9YCxcclxuICAgICAgICBjb250ZW50VHlwZTogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxyXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBpbWFnZSxcclxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHRjWXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVRjeXVuQ29uZmlnPigncGljQmVkLnRjeXVuJylcclxuICBpZiAoIXRjWXVuT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgdGVuY2VudCBDT1MgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB0Y1l1bk9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gdGNZdW5PcHRpb25zLnBhdGggPz8gJydcclxuICAgIGNvbnN0IHVzZVY0ID0gIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGlmICghc2lnbmF0dXJlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSwgY3R4LkdVSV9WRVJTSU9OIHx8IGN0eC5WRVJTSU9OKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcclxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcclxuICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICBtc2c6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0FVVEhfRkFJTEVEJyksXHJcbiAgICAgICAgICAgICAgICBlcnJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgbGV0IGJvZHlcclxuICAgICAgICBpZiAodXNlVjQgJiYgdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYm9keSA9IHJlc1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgIGlmIChib2R5Py5ib2R5Py5lcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgYm9keS5ib2R5LmVyclxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHk/LmJvZHk/Lm1zZyB8fCBib2R5Py5ib2R5Py5tZXNzYWdlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25VcmwgPSB0Y1l1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgIGNvbnN0IHNsaW0gPSB0Y1l1bk9wdGlvbnMuc2xpbSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhIXRjWXVuT3B0aW9ucy5zbGltXHJcbiAgICAgICAgaWYgKHVzZVY0ICYmIGJvZHkubWVzc2FnZSA9PT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke3BhdGh9JHtpbWcuZmlsZU5hbWV9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2JvZHkuZGF0YS5zb3VyY2VfdXJsIGFzIHN0cmluZ30ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdXNlVjQgJiYgYm9keSAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IHRjWXVuT3B0aW9ucy5lbmRwb2ludCA/IHRjWXVuT3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHt0Y1l1bk9wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHt0Y1l1bk9wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5ib2R5Lm1zZylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNsaW0pIHtcclxuICAgICAgICAgIGlmIChvcHRpb25VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnJmltYWdlU2xpbSdcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgKz0gJz9pbWFnZVNsaW0nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGlmICghdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShlcnIuZXJyb3IpXHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgICAgY29kZTogYm9keS5jb2RlIGFzIHN0cmluZ1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0ZXh0OiAnaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NDMyJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVRjeXVuQ29uZmlnPigncGljQmVkLnRjeXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGFsaWFzOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKSxcclxuICAgICAgY2hvaWNlczogWyd2NCcsICd2NSddLFxyXG4gICAgICBkZWZhdWx0OiAndjUnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRJZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcHBJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcHBJZCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzbGltJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF1c2VyQ29uZmlnLnNsaW0sXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IGNvbmZpcm1UZXh0ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNJykgfSxcclxuICAgICAgZ2V0IGNhbmNlbFRleHQgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTCcpIH0sXHJcbiAgICAgIGdldCB0aXBzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndGN5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJR2l0aHViQ29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zV2l0aEpTT04gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZywgZGF0YTogYW55KTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8gfSA9IG9wdGlvbnNcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvfS9jb250ZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBkYXRhLFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH0gYXMgY29uc3RcclxufVxyXG5cclxuY29uc3QgZ2V0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnKTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8sIGJyYW5jaCB9ID0gb3B0aW9uc1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX0/cmVmPSR7YnJhbmNofWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0dvJ1xyXG4gICAgfSxcclxuICAgIGpzb246IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgZ2l0aHViT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKVxyXG4gIGlmICghZ2l0aHViT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgZ2l0aHViIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgdXBsb2FkUGF0aCA9IGdpdGh1Yk9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgbWVzc2FnZTogJ1VwbG9hZCBieSBQaWNMaXN0JyxcclxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXHJcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcclxuICAgICAgICAgIHBhdGg6IHVwbG9hZFBhdGggKyBlbmNvZGVVUkkoaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zLCBkYXRhKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBib2R5OiB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICBkb3dubG9hZF91cmw6IHN0cmluZ1xyXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgICAgaWYgKGJvZHkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgICBpZiAoZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Z2l0aHViT3B0aW9ucy5jdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmNvbnRlbnQuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmNvbnRlbnQuc2hhXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICAgIGlmIChlcnIuc3RhdHVzQ29kZSA9PT0gNDIyKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3QoZ2V0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMpKSBhcyBhbnlcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgaW1nLmhhc2ggPSByZXMuc2hhXHJcbiAgICAgICAgICAgICAgaWYgKGdpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Z2l0aHViT3B0aW9ucy5jdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gcmVzLmRvd25sb2FkX3VybFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dldCBDb250ZW50cyBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZXBvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnJhbmNoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2dpdGh1YicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgcWluaXUgZnJvbSAncWluaXUnXHJcbmltcG9ydCB7IHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJUWluaXVDb25maWcsIHR5cGUgSVBpY0dvLCB0eXBlIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmZ1bmN0aW9uIHBvc3RPcHRpb25zIChvcHRpb25zOiBJUWluaXVDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnMge1xyXG4gIGNvbnN0IGFyZWEgPSBzZWxlY3RBcmVhKG9wdGlvbnMuYXJlYSB8fCAnejAnKVxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBiYXNlNjRGaWxlTmFtZSA9IEJ1ZmZlci5mcm9tKHBhdGggKyBmaWxlTmFtZSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBgaHR0cDovL3VwbG9hZCR7YXJlYX0ucWluaXVwLmNvbS9wdXRiNjQvLTEva2V5LyR7YmFzZTY0RmlsZU5hbWV9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYFVwVG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1nQmFzZTY0XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZWxlY3RBcmVhIChhcmVhOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBhcmVhID09PSAnejAnID8gJycgOiAnLScgKyBhcmVhXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFRva2VuIChxaW5pdU9wdGlvbnM6IGFueSk6IHN0cmluZyB7XHJcbiAgY29uc3QgYWNjZXNzS2V5ID0gcWluaXVPcHRpb25zLmFjY2Vzc0tleVxyXG4gIGNvbnN0IHNlY3JldEtleSA9IHFpbml1T3B0aW9ucy5zZWNyZXRLZXlcclxuICBjb25zdCBtYWMgPSBuZXcgcWluaXUuYXV0aC5kaWdlc3QuTWFjKGFjY2Vzc0tleSwgc2VjcmV0S2V5KVxyXG4gIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICBzY29wZTogcWluaXVPcHRpb25zLmJ1Y2tldFxyXG4gIH1cclxuICBjb25zdCBwdXRQb2xpY3kgPSBuZXcgcWluaXUucnMuUHV0UG9saWN5KG9wdGlvbnMpXHJcbiAgcmV0dXJuIHB1dFBvbGljeS51cGxvYWRUb2tlbihtYWMpXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgcWluaXVPcHRpb25zID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKVxyXG4gIGlmICghcWluaXVPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBxaW5pdSBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHFpbml1T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBnZXRUb2tlbihxaW5pdU9wdGlvbnMpLCBiYXNlNjRJbWFnZSlcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keT8ua2V5KSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IHFpbml1T3B0aW9ucy51cmxcclxuICAgICAgICAgIGNvbnN0IHVybE9wdGlvbnMgPSBxaW5pdU9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7Ym9keS5rZXkgYXMgc3RyaW5nfSR7dXJsT3B0aW9uc31gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkubXNnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY3R4LmxvZy5lcnJvcigncWluaXUgZXJyb3InLCBib2R5KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKGVyci5tZXNzYWdlICE9PSAnVXBsb2FkIGZhaWxlZCcpIHtcclxuICAgICAgLy8gZXJyLnJlc3BvbnNlIG1heWJlIHVuZGVmaW5lZFxyXG4gICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2UuYm9keVxyXG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyb3IuZXJyb3JcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9TRUNSRVRLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdxaW5pdScsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSUltZ3VyQ29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zLCB0eXBlIElGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgZm9ybWF0QWNjZXNzVG9rZW4gPSAoYWNjZXNzVG9rZW46IHN0cmluZyk6IHN0cmluZyA9PiBhY2Nlc3NUb2tlbiA/IGFjY2Vzc1Rva2VuLnN0YXJ0c1dpdGgoJ0JlYXJlcicpID8gYWNjZXNzVG9rZW4gOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCA6ICcnXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChjdHg6IElQaWNHbywgb3B0aW9uczogSUltZ3VyQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBpbWdCYXNlNjQ6IHN0cmluZyk6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcclxuICBjb25zdCBjbGllbnRJZCA9IG9wdGlvbnMuY2xpZW50SWQgfHwgJydcclxuICBjb25zdCB1c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWUgfHwgJydcclxuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGZvcm1hdEFjY2Vzc1Rva2VuKG9wdGlvbnMuYWNjZXNzVG9rZW4gfHwgJycpXHJcbiAgY29uc3QgYWxidW0gPSBvcHRpb25zLmFsYnVtIHx8ICcnXHJcbiAgbGV0IGF1dGhvcml6YXRpb25cclxuICBpZiAodXNlcm5hbWUgJiYgYWNjZXNzVG9rZW4pIHtcclxuICAgIGF1dGhvcml6YXRpb24gPSBhY2Nlc3NUb2tlblxyXG4gIH0gZWxzZSBpZiAoY2xpZW50SWQpIHtcclxuICAgIGF1dGhvcml6YXRpb24gPSBgQ2xpZW50LUlEICR7Y2xpZW50SWR9YFxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsaWVudElkIG9yIGFjY2Vzc1Rva2VuIGlzIHJlcXVpcmVkJylcclxuICB9XHJcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICdodHRwczovL2FwaS5pbWd1ci5jb20vMy9pbWFnZScsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb24sXHJcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgIEhvc3Q6ICdhcGkuaW1ndXIuY29tJyxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCdcclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBpbWFnZTogaW1nQmFzZTY0LFxyXG4gICAgICB0eXBlOiAnYmFzZTY0JyxcclxuICAgICAgbmFtZTogZmlsZU5hbWUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnVXBsb2FkZWQgd2l0aCBQaWNMaXN0J1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAodXNlcm5hbWUgJiYgYWNjZXNzVG9rZW4gJiYgYWxidW0pIHtcclxuICAgIGxldCBpbml0UGFnZXMgPSAwXHJcbiAgICBsZXQgcmVzXHJcbiAgICBsZXQgYWxidW1IYXNoID0gJydcclxuICAgIGRvIHtcclxuICAgICAgY29uc3QgZ2V0QWxidW1IYXNoT3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICB1cmw6IGBodHRwczovL2FwaS5pbWd1ci5jb20vMy9hY2NvdW50LyR7dXNlcm5hbWV9L2FsYnVtcy8ke2luaXRQYWdlc31gLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgIEF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgdGltZW91dDogMTAwMDBcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5wcm94eSkge1xyXG4gICAgICAgIGdldEFsYnVtSGFzaE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XHJcbiAgICAgIH1cclxuICAgICAgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3QoZ2V0QWxidW1IYXNoT3B0aW9ucykgYXMgdW5rbm93biBhcyBJRnVsbFJlc3BvbnNlXHJcbiAgICAgIGlmICghKHJlcy5zdGF0dXNDb2RlID09PSAyMDAgJiYgcmVzLmJvZHkuc3VjY2VzcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYWxidW1MaXN0ID0gcmVzLmJvZHkuZGF0YVxyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWxidW1MaXN0KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUgPT09IGFsYnVtKSB7XHJcbiAgICAgICAgICBhbGJ1bUhhc2ggPSBpdGVtLmlkXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpbml0UGFnZXMrK1xyXG4gICAgfSB3aGlsZSAocmVzLmJvZHkuZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgaWYgKGFsYnVtSGFzaCAmJiByZXF1ZXN0T3B0aW9ucy5mb3JtRGF0YSkge1xyXG4gICAgICByZXF1ZXN0T3B0aW9ucy5mb3JtRGF0YS5hbGJ1bSA9IGFsYnVtSGFzaFxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAob3B0aW9ucy5wcm94eSkge1xyXG4gICAgcmVxdWVzdE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XHJcbiAgfVxyXG4gIHJldHVybiByZXF1ZXN0T3B0aW9uc1xyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGltZ3VyT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUltZ3VyQ29uZmlnPigncGljQmVkLmltZ3VyJylcclxuICBpZiAoIWltZ3VyT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgaW1ndXIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBwb3N0T3B0aW9ucyhjdHgsIGltZ3VyT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBiYXNlNjRJbWFnZSlcclxuICAgICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXHJcbiAgICAgICAgaWYgKGJvZHkuc3VjY2Vzcykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEubGlua1xyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEuZGVsZXRlaGFzaFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpLFxyXG4gICAgICB0ZXh0OiAnaHR0cDovL2RvY3MuaW1ndXIuY29tL2FwaS9lcnJuby8nXHJcbiAgICB9KVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBzdHJpbmcgfCBJRXJyb3JcclxuICAgIHRocm93IGVycj8ucmVzcG9uc2U/LmRhdGEgfHwgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjbGllbnRJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jbGllbnRJZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc1Rva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc1Rva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhbGJ1bScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbGJ1bSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncHJveHknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJveHkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2ltZ3VyJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJQWxpeXVuQ29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgT1NTIHNpZ25hdHVyZVxyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgbWltZVR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuXHJcbiAgY29uc3Qgc2lnblN0cmluZyA9IGBQVVRcXG5cXG4ke21pbWVUeXBlfVxcbiR7ZGF0ZX1cXG4vJHtvcHRpb25zLmJ1Y2tldH0vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gXHJcblxyXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBPU1MgJHtvcHRpb25zLmFjY2Vzc0tleUlkfToke3NpZ25hdHVyZX1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbWAsXHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXHJcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBhbGlZdW4gT1NTIGNvbmZpZycpXHJcbiAgfVxyXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aC5yZXBsYWNlKC9cXC8qJC8sICcnKS5yZXBsYWNlKC9eXFwvKi8sICcnKSArICcvJ1xyXG4gIGlmIChhbGlZdW5PcHRpb25zLnBhdGggPT09ICcvJykge1xyXG4gICAgYWxpWXVuT3B0aW9ucy5wYXRoID0gJydcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSBhbGlZdW5PcHRpb25zLmN1c3RvbVVybFxyXG4gICAgY29uc3QgcGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aCA/PyAnJ1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZShhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gYWxpWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7YWxpWXVuT3B0aW9ucy5idWNrZXR9LiR7YWxpWXVuT3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleUlkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5U2VjcmV0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYWxpeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEJylcclxuICAgIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVVweXVuQ29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcclxuICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcclxuICBjb25zdCBtZDVQYXNzd29yZCA9IE1ENShwYXNzd29yZClcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMuYnVja2V0fS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcclxuICBjb25zdCBzaWduID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBtZDVQYXNzd29yZCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBVUFlVTiAke29wZXJhdG9yfToke3NpZ259YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbS8ke2J1Y2tldH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gTUQ1IChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgnaGV4JylcclxufVxyXG5cclxuY29uc3QgZ2V0QW50aUxlZWNoUGFyYW0gPSAoYW50aUxlZWNoVG9rZW46IHN0cmluZywgZXhwaXJlVGltZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHVyaSA9IGAvJHtvcHRpb25zLnBhdGggfHwgJyd9JHtmaWxlTmFtZX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLnJlcGxhY2UoL15cXC8rL2csICcvJylcclxuICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcclxuICBjb25zdCBleHBpcmUgPSBleHBpcmVUaW1lID8gbm93ICsgcGFyc2VJbnQoZXhwaXJlVGltZS50b1N0cmluZygpLCAxMCkgOiBub3cgKyAxODAwXHJcbiAgY29uc3Qgc2lnbiA9IE1ENShgJHthbnRpTGVlY2hUb2tlbn0mJHtleHBpcmV9JiR7dXJpfWApXHJcbiAgY29uc3QgdXB0ID0gYCR7c2lnbi5zdWJzdHJpbmcoMTIsIDIwKX0ke2V4cGlyZX1gXHJcbiAgcmV0dXJuIGBfdXB0PSR7dXB0fWBcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCB1cHl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpXHJcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHVwWXVuIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgcGF0aCA9IHVweXVuT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gdXB5dW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7dXB5dW5PcHRpb25zLnVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke3N1ZmZpeH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICBpZiAodXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwdCA9IGdldEFudGlMZWVjaFBhcmFtKHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbiwgdXB5dW5PcHRpb25zLmV4cGlyZVRpbWUsIHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gaW1nLmltZ1VybC5pbmNsdWRlcygnPycpID8gYCR7aW1nLmltZ1VybH0mJHt1cHR9YCA6IGAke2ltZy5pbWdVcmx9PyR7dXB0fWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKGVyci5tZXNzYWdlID09PSAnVXBsb2FkIGZhaWxlZCcpIHtcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGJvZHkgPSBzYWZlUGFyc2U8eyBjb2RlOiBzdHJpbmcgfT4oZXJyLmVycm9yKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5LmNvZGUgOiBib2R5XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLnVweXVuLmNvbS9hcGkvZXJybm8vJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wZXJhdG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGdldCBwcmVmaXggKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3BlcmF0b3IgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1cmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhbnRpTGVlY2hUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYW50aUxlZWNoVG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2V4cGlyZVRpbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmV4cGlyZVRpbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3VweXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJV2ViZGF2UGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB0eXBlIHsgV2ViREFWQ2xpZW50LCBXZWJEQVZDbGllbnRPcHRpb25zIH0gZnJvbSAnd2ViZGF2J1xyXG5pbXBvcnQgeyBBdXRoVHlwZSwgY3JlYXRlQ2xpZW50IH0gZnJvbSAnd2ViZGF2J1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3Qgd2ViZGF2cGxpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJV2ViZGF2UGxpc3RDb25maWc+KCdwaWNCZWQud2ViZGF2cGxpc3QnKVxyXG4gIGlmICghd2ViZGF2cGxpc3RPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB3ZWJkYXZwbGlzdCBjb25maWcnKVxyXG4gIH1cclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0LnJlcGxhY2UoL15odHRwcz86XFwvXFwvfFxcLyskL2csICcnKVxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5zc2xFbmFibGVkID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoIHx8ICcnKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLydcclxuICBjb25zdCBhdXRoVHlwZSA9IHdlYmRhdnBsaXN0T3B0aW9ucy5hdXRoVHlwZSB8fCAnYmFzaWMnXHJcbiAgY29uc3Qgd2VicGF0aCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnM6IFdlYkRBVkNsaWVudE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICB1c2VybmFtZTogd2ViZGF2cGxpc3RPcHRpb25zLnVzZXJuYW1lLFxyXG4gICAgICAgICAgcGFzc3dvcmQ6IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXNzd29yZCxcclxuICAgICAgICAgIG1heEJvZHlMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiA0ICogMTAyNCAqIDEwMjQgKiAxMDI0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhdXRoVHlwZSA9PT0gJ2RpZ2VzdCcpIHtcclxuICAgICAgICAgIGNsaWVudE9wdGlvbnMuYXV0aFR5cGUgPSBBdXRoVHlwZS5EaWdlc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xpZW50OiBXZWJEQVZDbGllbnQgPSBjcmVhdGVDbGllbnQod2ViZGF2cGxpc3RPcHRpb25zLmhvc3QsIGNsaWVudE9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgcGF0aFRvQ3JlYXRlID0gdXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiB1cGxvYWRQYXRoXHJcbiAgICAgICAgaWYgKHBhdGhUb0NyZWF0ZSkge1xyXG4gICAgICAgICAgYXdhaXQgY2xpZW50LmNyZWF0ZURpcmVjdG9yeShwYXRoVG9DcmVhdGUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wdXRGaWxlQ29udGVudHMoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgaW1hZ2UsIHtcclxuICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3dlYmRhdnBsaXN0JylcclxuICAgICAgICAgIGNvbnN0IGltZ1RlbXBGaWxlUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhpbWdUZW1wUGF0aClcclxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW1nVGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gY3VzdG9tVXJsIHx8IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0XHJcbiAgICAgICAgICBpZiAod2ViZGF2cGxpc3RPcHRpb25zLndlYnBhdGgpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7d2VicGF0aCA9PT0gJy8nID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQod2VicGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt1cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudCh1cGxvYWRQYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3dlYmRhdnBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NzbEVuYWJsZWQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zc2xFbmFibGVkID8/IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRScpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYnBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXV0aFR5cGUnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUnKSB9LFxyXG4gICAgICBjaG9pY2VzOiBbJ2Jhc2ljJywgJ2RpZ2VzdCddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmF1dGhUeXBlIHx8ICdiYXNpYycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3dlYmRhdnBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJTG9jYWxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGxvY2FsQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKVxyXG4gIGlmICghbG9jYWxDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIGxvY2FsIGNvbmZpZyEnKVxyXG4gIH1cclxuICBjb25zdCB1cGxvYWRQYXRoID0gbG9jYWxDb25maWcucGF0aCB8fCAnJ1xyXG4gIGxldCBjdXN0b21VcmwgPSBsb2NhbENvbmZpZy5jdXN0b21VcmwgfHwgJydcclxuICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICBjdXN0b21VcmwgPSBjdXN0b21VcmwucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gIH1cclxuICBsZXQgd2ViUGF0aCA9IGxvY2FsQ29uZmlnLndlYlBhdGggfHwgJydcclxuICBpZiAod2ViUGF0aCkge1xyXG4gICAgd2ViUGF0aCA9IHdlYlBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpLnJlcGxhY2UoL15cXC8vLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gIH1cclxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICdsb2NhbCcpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKGltZ1RlbXBQYXRoKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyh1cGxvYWRQYXRoKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKSwgaW1hZ2UpXHJcbiAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMocGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSksIHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnbG9jYWwnLCBpbWcuZmlsZU5hbWUpKVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaWYgKHdlYlBhdGgpIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudCh3ZWJQYXRoKX0vJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW1nLmhhc2ggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvbG9jYWwvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICBib2R5OiAnZmFpbGVkIHRvIHVwbG9hZCBpbWFnZSdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3ZWJQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIJykgfVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2xvY2FsJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgTm9kZVNTSCwgdHlwZSBDb25maWcgfSBmcm9tICdub2RlLXNzaC1uby1jcHUtZmVhdHVyZXMnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IHR5cGUgSVNmdHBQbGlzdENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuY2xhc3MgU1NIQ2xpZW50IHtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFNTSENsaWVudFxyXG4gIHByaXZhdGUgc3RhdGljIF9jbGllbnQ6IE5vZGVTU0hcclxuICBwcml2YXRlIF9pc0Nvbm5lY3RlZCA9IGZhbHNlXHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGluc3RhbmNlICgpOiBTU0hDbGllbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyB0aGlzKCkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBjbGllbnQgKCk6IE5vZGVTU0gge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudCB8fCAodGhpcy5fY2xpZW50ID0gbmV3IE5vZGVTU0goKSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4IChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29ubmVjdCAoY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCB7IHVzZXJuYW1lLCBwYXNzd29yZCwgcHJpdmF0ZUtleSwgcGFzc3BocmFzZSB9ID0gY29uZmlnXHJcbiAgICBjb25zdCBsb2dpbkluZm86IENvbmZpZyA9IHByaXZhdGVLZXlcclxuICAgICAgPyB7IHVzZXJuYW1lLCBwcml2YXRlS2V5UGF0aDogcHJpdmF0ZUtleSwgcGFzc3BocmFzZTogcGFzc3BocmFzZSB8fCB1bmRlZmluZWQgfVxyXG4gICAgICA6IHsgdXNlcm5hbWUsIHBhc3N3b3JkIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IFNTSENsaWVudC5jbGllbnQuY29ubmVjdCh7XHJcbiAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXHJcbiAgICAgICAgcG9ydDogTnVtYmVyKGNvbmZpZy5wb3J0KSB8fCAyMixcclxuICAgICAgICAuLi5sb2dpbkluZm9cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5faXNDb25uZWN0ZWQgPSB0cnVlXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwbG9hZCAobG9jYWw6IHN0cmluZywgcmVtb3RlOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCF0aGlzLl9pc0Nvbm5lY3RlZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NTSCDmnKrov57mjqUnKVxyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmVtb3RlID0gdGhpcy5jaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgocmVtb3RlKVxyXG4gICAgICBhd2FpdCB0aGlzLm1rZGlyKHBhdGguZGlybmFtZShyZW1vdGUpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgY29uZmlnKVxyXG4gICAgICBhd2FpdCBTU0hDbGllbnQuY2xpZW50LnB1dEZpbGUobG9jYWwsIHJlbW90ZSlcclxuICAgICAgY29uc3QgZmlsZU1vZGUgPSBjb25maWcuZmlsZU1vZGUgfHwgJzA2NDQnXHJcbiAgICAgIGlmIChmaWxlTW9kZSAhPT0gJzA2NDQnKSB7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gYGNobW9kICR7ZmlsZU1vZGV9IFwiJHtyZW1vdGV9XCJgXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG1rZGlyIChkaXJQYXRoOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCFTU0hDbGllbnQuY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0gg5pyq6L+e5o6lJylcclxuICAgIH1cclxuICAgIGNvbnN0IGRpcmVjdG9yeU1vZGUgPSBjb25maWcuZGlyTW9kZSB8fCAnMDc1NSdcclxuICAgIGlmIChkaXJlY3RvcnlNb2RlICE9PSAnMDc1NScpIHtcclxuICAgICAgY29uc3QgZGlycyA9IGRpclBhdGguc3BsaXQoJy8nKVxyXG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJ1xyXG4gICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XHJcbiAgICAgICAgaWYgKGRpcikge1xyXG4gICAgICAgICAgY3VycmVudFBhdGggKz0gYC8ke2Rpcn1gXHJcbiAgICAgICAgICBjb25zdCBzY3JpcHQgPSBgbWtkaXIgXCIke2N1cnJlbnRQYXRofVwiICYmIGNobW9kICR7ZGlyZWN0b3J5TW9kZX0gXCIke2N1cnJlbnRQYXRofVwiYFxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGBjZCAvICYmIG1rZGlyIC1wIFwiJHtkaXJQYXRofVwiYFxyXG4gICAgICBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNob3duIChyZW1vdGU6IHN0cmluZywgdXNlcjogc3RyaW5nLCBncm91cD86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmVtb3RlID0gdGhpcy5jaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgocmVtb3RlKVxyXG4gICAgY29uc3QgW191c2VyLCBfZ3JvdXBdID0gZ3JvdXAgPyBbdXNlciwgZ3JvdXBdIDogdXNlci5pbmNsdWRlcygnOicpID8gdXNlci5zcGxpdCgnOicpIDogW3VzZXIsIHVzZXJdXHJcblxyXG4gICAgY29uc3Qgc2NyaXB0ID0gYGNob3duICR7X3VzZXJ9OiR7X2dyb3VwfSBcIiR7cmVtb3RlfVwiYFxyXG4gICAgcmV0dXJuIHRoaXMuZXhlYyhzY3JpcHQpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWMgKHNjcmlwdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgU1NIQ2xpZW50LmNsaWVudC5leGVjQ29tbWFuZChzY3JpcHQpXHJcbiAgICByZXR1cm4gZXhlY1Jlc3VsdC5jb2RlID09PSAwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UgKCk6IHZvaWQge1xyXG4gICAgU1NIQ2xpZW50LmNsaWVudC5kaXNwb3NlKClcclxuICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNTSENsaWVudFxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElTZnRwUGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgU1NIQ2xpZW50IGZyb20gJy4uLy4uL3V0aWxzL3NzaENsaWVudCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBzZnRwcGxpc3RDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTZnRwUGxpc3RDb25maWc+KCdwaWNCZWQuc2Z0cHBsaXN0JylcclxuICBpZiAoIXNmdHBwbGlzdENvbmZpZykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc2Z0cHBsaXN0IGNvbmZpZyEnKVxyXG4gIH1cclxuICBzZnRwcGxpc3RDb25maWcucG9ydCA9IE51bWJlcihzZnRwcGxpc3RDb25maWcucG9ydCkgfHwgMjJcclxuICBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9IChzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgY29uc3Qgd2ViUGF0aCA9IChzZnRwcGxpc3RDb25maWcud2ViUGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cGxvYWRUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3VwbG9hZFRlbXAnKVxyXG4gICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICdzZnRwcGxpc3QnKVxyXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmModXBsb2FkVGVtcFBhdGgpXHJcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhpbWdUZW1wUGF0aClcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4odXBsb2FkVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgY2xpZW50ID0gU1NIQ2xpZW50Lmluc3RhbmNlXHJcbiAgICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3Qoc2Z0cHBsaXN0Q29uZmlnKVxyXG4gICAgICAgIGNvbnN0IHJlbW90ZVBhdGggPSBwYXRoLmpvaW4oYC8ke3NmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRofWAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgYXdhaXQgY2xpZW50LnVwbG9hZCh0ZW1wRmlsZVBhdGgsIHJlbW90ZVBhdGgsIHNmdHBwbGlzdENvbmZpZylcclxuICAgICAgICBzZnRwcGxpc3RDb25maWcuZmlsZVVzZXIgJiYgYXdhaXQgY2xpZW50LmNob3duKHJlbW90ZVBhdGgsIHNmdHBwbGlzdENvbmZpZy5maWxlVXNlcilcclxuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICBjb25zdCBiYXNlVXJsID0gc2Z0cHBsaXN0Q29uZmlnLmN1c3RvbVVybCB8fCBzZnRwcGxpc3RDb25maWcuaG9zdFxyXG4gICAgICAgIGlmIChzZnRwcGxpc3RDb25maWcud2ViUGF0aCkge1xyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7d2ViUGF0aCA9PT0gJy8nID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQod2ViUGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3NmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZzLm1vdmVTeW5jKHRlbXBGaWxlUGF0aCwgcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpKVxyXG4gICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3NmdHBwbGlzdC8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcclxuICAgICAgICBjbGllbnQuY2xvc2UoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNmdHBQbGlzdENvbmZpZz4oJ3BpY0JlZC5zZnRwcGxpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BvcnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAyMixcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3ByaXZhdGVLZXknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJpdmF0ZUtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3BocmFzZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3BocmFzZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXBsb2FkUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2ViUGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZmlsZVVzZXInLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVInKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVVc2VyIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmaWxlTW9kZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZmlsZU1vZGUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2Rpck1vZGUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5kaXJNb2RlIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdzZnRwcGxpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJVGVsZWdyYXBoQ29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgdHlwZSB7IFJlYWRTdHJlYW0gfSBmcm9tICdmcydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKG9wdGlvbnM6IElUZWxlZ3JhcGhDb25maWcsIGltYWdlOiBSZWFkU3RyZWFtKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xyXG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnaHR0cHM6Ly90ZWxlZ3JhLnBoL3VwbG9hZCcsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBmaWxlOiBpbWFnZVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAob3B0aW9ucy5wcm94eSkge1xyXG4gICAgcmVxdWVzdE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XHJcbiAgfVxyXG4gIHJldHVybiByZXF1ZXN0T3B0aW9uc1xyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGxldCB0Z09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElUZWxlZ3JhcGhDb25maWc+KCdwaWNCZWQudGVsZWdyYXBocGxpc3QnKVxyXG4gIGlmICghdGdPcHRpb25zKSB7XHJcbiAgICB0Z09wdGlvbnMgPSB7fVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVwbG9hZFRlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAndXBsb2FkVGVtcCcpXHJcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyh1cGxvYWRUZW1wUGF0aClcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4odXBsb2FkVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBvc3RPcHRpb25zKHRnT3B0aW9ucywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0ZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcclxuICAgICAgICBmcy5yZW1vdmUodGVtcEZpbGVQYXRoKVxyXG4gICAgICAgIGlmIChib2R5Py5bMF0/LnNyYykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly90ZWxlZ3JhLnBoJHtib2R5WzBdLnNyY31gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXHJcbiAgICAgIHRleHQ6ICcnXHJcbiAgICB9KVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBzdHJpbmcgfCBJRXJyb3JcclxuICAgIHRocm93IGVycj8ucmVzcG9uc2U/LmRhdGEgfHwgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElUZWxlZ3JhcGhDb25maWc+KCdwaWNCZWQudGVsZWdyYXBocGxpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncHJveHknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJveHkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3RlbGVncmFwaHBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTEVHUkFQSCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQaWNHb1BsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgU01NU1VwbG9hZGVyIGZyb20gJy4vc21tcydcclxuaW1wb3J0IHRjWXVuVXBsb2FkZXIgZnJvbSAnLi90Y3l1bidcclxuaW1wb3J0IGdpdGh1YlVwbG9hZGVyIGZyb20gJy4vZ2l0aHViJ1xyXG5pbXBvcnQgcWluaXVVcGxvYWRlciBmcm9tICcuL3Fpbml1J1xyXG5pbXBvcnQgaW1ndXJVcGxvYWRlciBmcm9tICcuL2ltZ3VyJ1xyXG5pbXBvcnQgYWxpWXVuVXBsb2FkZXIgZnJvbSAnLi9hbGl5dW4nXHJcbmltcG9ydCB1cFl1blVwbG9hZGVyIGZyb20gJy4vdXB5dW4nXHJcbmltcG9ydCB3ZWJkYXZwbGlzdFVwbG9hZGVyIGZyb20gJy4vd2ViZGF2J1xyXG5pbXBvcnQgbG9jYWxVcGxvYWRlciBmcm9tICcuL2xvY2FsJ1xyXG5pbXBvcnQgc2Z0cFVwbG9hZGVyIGZyb20gJy4vc2Z0cCdcclxuaW1wb3J0IHRlbGVncmFwaFVwbG9hZGVyIGZyb20gJy4vdGVsZWdyYXBoJ1xyXG5cclxuY29uc3QgYnVpbGRJblVwbG9hZGVyczogSVBpY0dvUGx1Z2luID0gKCkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICByZWdpc3RlciAoY3R4OiBJUGljR28pIHtcclxuICAgICAgYWxpWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICB0Y1l1blVwbG9hZGVyKGN0eClcclxuICAgICAgU01NU1VwbG9hZGVyKGN0eClcclxuICAgICAgZ2l0aHViVXBsb2FkZXIoY3R4KVxyXG4gICAgICBxaW5pdVVwbG9hZGVyKGN0eClcclxuICAgICAgaW1ndXJVcGxvYWRlcihjdHgpXHJcbiAgICAgIHVwWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICB3ZWJkYXZwbGlzdFVwbG9hZGVyKGN0eClcclxuICAgICAgbG9jYWxVcGxvYWRlcihjdHgpXHJcbiAgICAgIHNmdHBVcGxvYWRlcihjdHgpXHJcbiAgICAgIHRlbGVncmFwaFVwbG9hZGVyKGN0eClcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5VcGxvYWRlcnNcclxuIiwiaW1wb3J0IHtcclxuICBpc1VybCxcclxuICBnZXRJbWFnZVNpemUsXHJcbiAgZ2V0RlNGaWxlLFxyXG4gIGdldFVSTEZpbGVcclxufSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCB0eXBlIElJbWdJbmZvLCB0eXBlIElJbWdTaXplIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcclxuICBhd2FpdCBQcm9taXNlLmFsbChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcgfCBCdWZmZXIsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihpdGVtKSkge1xyXG4gICAgICBpbmZvID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYnVmZmVyOiBpdGVtLFxyXG4gICAgICAgIGZpbGVOYW1lOiAnJyxcclxuICAgICAgICBleHRuYW1lOiAnJ1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRGU0ZpbGUoaXRlbSlcclxuICAgIH1cclxuICAgIGlmIChpbmZvLnN1Y2Nlc3MgJiYgaW5mby5idWZmZXIpIHtcclxuICAgICAgY29uc3QgaW1nU2l6ZSA9IGdldEltZ1NpemUoY3R4LCBpbmZvLmJ1ZmZlciwgaXRlbSlcclxuICAgICAgY29uc3QgZXh0bmFtZSA9IGluZm8uZXh0bmFtZSB8fCBpbWdTaXplLmV4dG5hbWUgfHwgJy5wbmcnXHJcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0ge1xyXG4gICAgICAgIGJ1ZmZlcjogaW5mby5idWZmZXIsXHJcbiAgICAgICAgZmlsZU5hbWU6IGluZm8uZmlsZU5hbWUgfHwgYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyl9JHtleHRuYW1lfX1gLFxyXG4gICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcgfCBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXHJcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xyXG4gICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjdHgubG9nLndhcm4oYGNhbid0IGdldCAke3BhdGh9J3MgaW1hZ2Ugc2l6ZWApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLndhcm4oJ2NhblxcJ3QgZ2V0IGltYWdlIHNpemUnKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxyXG4gIH1cclxuICByZXR1cm4gaW1hZ2VTaXplXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGN0eC5vdXRwdXQucHVzaCguLi5jdHguaW5wdXQpXHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgaGFuZGxlXHJcbn1cclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdyZXNvbHZlJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBpY0dvUGx1Z2luLCB0eXBlIElQbHVnaW5Mb2FkZXIsIHR5cGUgSVBpY0dvUGx1Z2luSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXgnXHJcbmltcG9ydCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5cclxuLyoqXHJcbiAqIExvY2FsIHBsdWdpbiBsb2FkZXIsIGZpbGUgc3lzdGVtIGlzIHJlcXVpcmVkXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9hZGVyIGltcGxlbWVudHMgSVBsdWdpbkxvYWRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbGlzdDogc3RyaW5nW10gPSBbXVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZnVsbExpc3QgPSBuZXcgU2V0PHN0cmluZz4oKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTWFwID0gbmV3IE1hcDxzdHJpbmcsIElQaWNHb1BsdWdpbkludGVyZmFjZT4oKVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZVBhdGgpKSB7XHJcbiAgICAgIGNvbnN0IHBrZyA9IHtcclxuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUnLFxyXG4gICAgICAgIGxpY2Vuc2U6ICdNSVQnXHJcbiAgICAgIH1cclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBlbnRyeVxyXG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbiAoY3R4OiBJUGljR28sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gcmVzb2x2ZS5zeW5jKG5hbWUsIHsgYmFzZWRpcjogY3R4LmJhc2VEaXIgfSlcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxvYWQgYWxsIHRoaXJkIHBhcnR5IHBsdWdpblxyXG4gIGxvYWQgKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gVGhhbmtzIHRvIGhleG8gLT4gaHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2Jsb2IvbWFzdGVyL2xpYi9oZXhvL2xvYWRfcGx1Z2lucy5qc1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxyXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgZGV2RGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMucmVzb2x2ZVBsdWdpbih0aGlzLmN0eCwgbmFtZSlcclxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcclxuICAgIH0pXHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gcmVnaXN0ZXIgbG9jYWwgcGx1Z2luXHJcbiAgICAgIGlmICghcGx1Z2luKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fCAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxyXG4gICAgICAgICAgdGhpcy5jdHguc2F2ZUNvbmZpZyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXHJcbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXHJcbiAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcclxuICAgICAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luSW50ZXJmYWNlKVxyXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBgUGx1Z2luICR7bmFtZX0gTG9hZCBFcnJvcmAsXHJcbiAgICAgICAgYm9keTogZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmNtZC51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcclxuICBnZXRQbHVnaW4gKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbk1hcC5nZXQobmFtZSlcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcclxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXHJcbiAgICByZXR1cm4gcGx1Z2luXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdFxyXG4gIH1cclxuXHJcbiAgaGFzUGx1Z2luIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZ1bGxMaXN0LmhhcyhuYW1lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxyXG4gICAqL1xyXG4gIGdldEZ1bGxMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZnVsbExpc3RdXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkxvYWRlclxyXG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSUNsaXBib2FyZEltYWdlIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuL2VudW0nXHJcbmltcG9ydCBtYWNDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbWFjLmFwcGxlc2NyaXB0J1xyXG5pbXBvcnQgd2luZG93c0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzLnBzMSdcclxuaW1wb3J0IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzMTAucHMxJ1xyXG5pbXBvcnQgbGludXhDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbGludXguc2gnXHJcbmltcG9ydCB3c2xDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd3NsLnNoJ1xyXG5pbXBvcnQgeyBDTElQQk9BUkRfSU1BR0VfRk9MREVSIH0gZnJvbSAnLi9zdGF0aWMnXHJcblxyXG5leHBvcnQgdHlwZSBQbGF0Zm9ybSA9ICdkYXJ3aW4nIHwgJ3dpbjMyJyB8ICd3aW4xMCcgfCAnbGludXgnIHwgJ3dzbCdcclxuXHJcbmNvbnN0IGdldEN1cnJlbnRQbGF0Zm9ybSA9ICgpOiBQbGF0Zm9ybSA9PiB7XHJcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXHJcbiAgaWYgKGlzV3NsKSB7XHJcbiAgICByZXR1cm4gJ3dzbCdcclxuICB9XHJcbiAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICBjb25zdCBjdXJyZW50T1MgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKVswXVxyXG4gICAgaWYgKGN1cnJlbnRPUyA9PT0gJzEwJykge1xyXG4gICAgICByZXR1cm4gJ3dpbjEwJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICd3aW4zMidcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgcmV0dXJuICdkYXJ3aW4nXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiAnbGludXgnXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50OiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogbWFjQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdpbjMyOiB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdpbjEwOiB3aW5kb3dzMTBDbGlwYm9hcmRTY3JpcHQsXHJcbiAgbGludXg6IGxpbnV4Q2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdzbDogd3NsQ2xpcGJvYXJkU2NyaXB0XHJcbn1cclxuLyoqXHJcbiAqIHBvd2Vyc2hlbGwgd2lsbCByZXBvcnQgZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBoYXZlIGEgJy5wczEnIGV4dGVuc2lvbixcclxuICogc28gd2Ugc2hvdWxkIGtlZXAgdGhlIGV4dGVuc2lvbiBuYW1lIGNvbnNpc3RlbnQgd2l0aCBjb3JyZXNwb25kaW5nIHNoZWxsXHJcbiAqL1xyXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZToge1xyXG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcclxufSA9IHtcclxuICBkYXJ3aW46ICdtYWMuYXBwbGVzY3JpcHQnLFxyXG4gIHdpbjMyOiAnd2luZG93cy5wczEnLFxyXG4gIHdpbjEwOiAnd2luZG93czEwLnBzMScsXHJcbiAgbGludXg6ICdsaW51eC5zaCcsXHJcbiAgd3NsOiAnd3NsLnNoJ1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbWFnZUZvbGRlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIENMSVBCT0FSRF9JTUFHRV9GT0xERVIpXHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGltYWdlUGF0aCkpIHtcclxuICAgIGZzLm1rZGlyU3luYyhpbWFnZVBhdGgpXHJcbiAgfVxyXG59XHJcblxyXG4vLyBUaGFua3MgdG8gdnMtcGljZ286IGh0dHBzOi8vZ2l0aHViLmNvbS9TcGFkZXMtUy92cy1waWNnby9ibG9iL21hc3Rlci9zcmMvZXh0ZW5zaW9uLnRzXHJcbmNvbnN0IGdldENsaXBib2FyZEltYWdlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJQ2xpcGJvYXJkSW1hZ2U+ID0+IHtcclxuICBjcmVhdGVJbWFnZUZvbGRlcihjdHgpXHJcbiAgLy8gYWRkIGFuIGNsaXBib2FyZCBpbWFnZSBmb2xkZXIgdG8gY29udHJvbCB0aGUgaW1hZ2UgY2FjaGUgZmlsZVxyXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiwgYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyl9LnBuZ2ApXHJcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4oKHJlc29sdmU6IGFueSwgcmVqZWN0OiBhbnkpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFBsYXRmb3JtKClcclxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lW3BsYXRmb3JtXSlcclxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHNjcmlwdFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXHJcbiAgICAgICAgc2NyaXB0UGF0aCxcclxuICAgICAgICBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSxcclxuICAgICAgICAndXRmOCdcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgbGV0IGV4ZWN1dGlvblxyXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignb3Nhc2NyaXB0JywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXHJcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInIHx8IHBsYXRmb3JtID09PSAnd2luMTAnKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xyXG4gICAgICAgICctbm9wcm9maWxlJyxcclxuICAgICAgICAnLW5vbmludGVyYWN0aXZlJyxcclxuICAgICAgICAnLW5vbG9nbycsXHJcbiAgICAgICAgJy1zdGEnLFxyXG4gICAgICAgICctZXhlY3V0aW9ucG9saWN5JywgJ3VucmVzdHJpY3RlZCcsXHJcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUvaXNzdWVzLzMyXHJcbiAgICAgICAgLy8gJy13aW5kb3dzdHlsZScsJ2hpZGRlbicsXHJcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxyXG4gICAgICAgICctZmlsZScsIHNjcmlwdFBhdGgsXHJcbiAgICAgICAgaW1hZ2VQYXRoXHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignc2gnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRpb24uc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcclxuICAgICAgICBpZiAoZGF0YS50b1N0cmluZygpLnRyaW0oKSA9PT0gJ25vIHhjbGlwIG9yIHdsLWNsaXBib2FyZCcpIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXHJcbiAgICAgICAgICAgIGJvZHk6ICdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxyXG5cclxuICAgICAgLy8gaWYgdGhlIGZpbGVQYXRoIGlzIHRoZSByZWFsIGZpbGUgaW4gc3lzdGVtXHJcbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcclxuICAgICAgbGV0IHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IGZhbHNlXHJcblxyXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXHJcbiAgICAgIGlmIChwYXRoLmJhc2VuYW1lKGltZ1BhdGgpICE9PSBwYXRoLmJhc2VuYW1lKGltYWdlUGF0aCkpIHtcclxuICAgICAgICAvLyBpZiB0aGUgcGF0aCBpcyBub3QgZ2VuZXJhdGUgYnkgcGljZ29cclxuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XHJcbiAgICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIHRoZSBpbWdQYXRoIGlzIGludmFsaWRcclxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQ2FuJ3QgZmluZCAke2ltZ1BhdGh9YCkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIGltZ1BhdGgsXHJcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXHJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuXHJcbmNvbnN0IGV2ZW50QnVzID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcbmV4cG9ydCB7XHJcbiAgZXZlbnRCdXNcclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmMgKi9cclxuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NSZXF1ZXN0Q29uZmlnLCB0eXBlIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcydcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgVW5kZWZpbmFibGUsIHR5cGUgSUNvbmZpZ0NoYW5nZVBheWxvYWQsIHR5cGUgSUNvbmZpZywgdHlwZSBJUmVxdWVzdENvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9ucywgdHlwZSBJUmVzcG9uc2UsIHR5cGUgSUZ1bGxSZXNwb25zZSwgdHlwZSBJUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBldmVudEJ1cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50QnVzJ1xyXG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXHJcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnXHJcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcclxuaW1wb3J0IHR1bm5lbCBmcm9tICd0dW5uZWwnXHJcbmNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xyXG4gIG1heFZlcnNpb246ICdUTFN2MS4yJyxcclxuICBtaW5WZXJzaW9uOiAnVExTdjEuMidcclxufSlcclxuXHJcbi8vIHRoYW5rcyBmb3IgaHR0cHM6Ly9naXRodWIuZGV2L3JlcXVlc3QvcmVxdWVzdC9ibG9iL21hc3Rlci9pbmRleC5qc1xyXG5mdW5jdGlvbiBhcHBlbmRGb3JtRGF0YSAoZm9ybTogRm9ybURhdGEsIGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZGF0YSAmJiAnb3B0aW9ucycgaW4gZGF0YSkge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhLnZhbHVlLCBkYXRhLm9wdGlvbnMpXHJcbiAgfSBlbHNlIHtcclxuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcXVlc3RJbnRlcmNlcHRvciAob3B0aW9uczogSU9sZFJlcU9wdGlvbnMgfCBBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1JlcXVlc3RDb25maWcgJiB7XHJcbiAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbn0ge1xyXG4gIGxldCBfX2lzT2xkT3B0aW9ucyA9IGZhbHNlXHJcbiAgY29uc3Qgb3B0OiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiAmIHtcclxuICAgIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxyXG4gIH0gPSB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgdXJsOiAob3B0aW9ucy51cmwgYXMgc3RyaW5nKSB8fCAnJyxcclxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gIH1cclxuICAvLyB1c2VyIHJlcXVlc3QgY29uZmlnIHByb3h5XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIGxldCBwcm94eU9wdGlvbnMgPSBvcHRpb25zLnByb3h5XHJcbiAgICBpZiAodHlwZW9mIHByb3h5T3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKG9wdGlvbnMucHJveHkpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKHByb3h5T3B0aW9ucykge1xyXG4gICAgICBpZiAob3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgICAgcHJveHk6IHtcclxuICAgICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zPy5ob3N0bmFtZSxcclxuICAgICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zPy5wb3J0LCAxMClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0LCAxMCksXHJcbiAgICAgICAgICBwcm90b2NvbDogJ2h0dHAnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICgnZm9ybURhdGEnIGluIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5mb3JtRGF0YSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5mb3JtRGF0YVtrZXldXHJcbiAgICAgIGFwcGVuZEZvcm1EYXRhKGZvcm0sIGtleSwgZGF0YSlcclxuICAgIH1cclxuICAgIG9wdC5kYXRhID0gZm9ybVxyXG4gICAgb3B0LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKG9wdC5oZWFkZXJzIHx8IHt9LCBmb3JtLmdldEhlYWRlcnMoKSlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25cclxuICAgIGRlbGV0ZSBvcHQuZm9ybURhdGFcclxuICB9XHJcbiAgaWYgKCdib2R5JyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQuZGF0YSA9IG9wdGlvbnMuYm9keVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgb2xkIG9wdGlvbnNcclxuICAgIGRlbGV0ZSBvcHQuYm9keVxyXG4gIH1cclxuICBpZiAoJ3FzJyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQucGFyYW1zID0gb3B0aW9ucy5xc1xyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgfVxyXG4gIG9wdC5fX2lzT2xkT3B0aW9ucyA9IF9faXNPbGRPcHRpb25zXHJcbiAgcmV0dXJuIG9wdFxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNwb25zZUludGVyY2VwdG9yIChyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IElGdWxsUmVzcG9uc2Uge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5yZXNwb25zZSxcclxuICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcclxuICAgIGJvZHk6IHJlc3BvbnNlLmRhdGFcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlRXJyb3JIYW5kbGVyIChlcnJvcjogYW55KSB7XHJcbiAgLy8gaWYgKGVycm9yLnJlc3BvbnNlKSB7XHJcbiAgLy8gICAvLyBUaGUgcmVxdWVzdCB3YXMgbWFkZSBhbmQgdGhlIHNlcnZlciByZXNwb25kZWQgd2l0aCBhIHN0YXR1cyBjb2RlXHJcbiAgLy8gICAvLyB0aGF0IGZhbGxzIG91dCBvZiB0aGUgcmFuZ2Ugb2YgMnh4XHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJybylcclxuICAvLyB9IGVsc2UgaWYgKGVycm9yLnJlcXVlc3QpIHtcclxuICAvLyAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGJ1dCBubyByZXNwb25zZSB3YXMgcmVjZWl2ZWRcclxuICAvLyAgIC8vIGBlcnJvci5yZXF1ZXN0YCBpcyBhbiBpbnN0YW5jZSBvZiBYTUxIdHRwUmVxdWVzdCBpbiB0aGUgYnJvd3NlciBhbmQgYW4gaW5zdGFuY2Ugb2ZcclxuICAvLyAgIC8vIGh0dHAuQ2xpZW50UmVxdWVzdCBpbiBub2RlLmpzXHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IucmVxdWVzdClcclxuICAvLyB9IGVsc2Uge1xyXG4gIC8vICAgLy8gU29tZXRoaW5nIGhhcHBlbmVkIGluIHNldHRpbmcgdXAgdGhlIHJlcXVlc3QgdGhhdCB0cmlnZ2VyZWQgYW4gRXJyb3JcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5tZXNzYWdlKVxyXG4gIC8vIH1cclxuICBjb25zdCBlcnJvck9iaiA9IHtcclxuICAgIG1ldGhvZDogZXJyb3I/LmNvbmZpZz8ubWV0aG9kPy50b1VwcGVyQ2FzZSgpIHx8ICcnLFxyXG4gICAgdXJsOiBlcnJvcj8uY29uZmlnPy51cmwgfHwgJycsXHJcbiAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgfHwgJycsXHJcbiAgICBzdGFjazogZXJyb3I/LnN0YWNrIHx8IHt9LFxyXG4gICAgcmVzcG9uc2U6IHtcclxuICAgICAgc3RhdHVzOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgICBib2R5OiBlcnJvcj8ucmVzcG9uc2U/LmRhdGEgfHwgJydcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yT2JqKVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdCBpbXBsZW1lbnRzIElSZXF1ZXN0IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBwcm94eTogVW5kZWZpbmFibGU8c3RyaW5nPiA9ICcnXHJcbiAgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gPSB7fVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgICBldmVudEJ1cy5vbihJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwgKGRhdGE6IElDb25maWdDaGFuZ2VQYXlsb2FkPHN0cmluZyB8IElDb25maWdbJ3BpY0JlZCddPikgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGRhdGEuY29uZmlnTmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ3BpY0JlZCc6XHJcbiAgICAgICAgICBpZiAoKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pPy5wcm94eSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3h5ID0gKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pLnByb3h5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ3BpY0JlZC5wcm94eSc6XHJcbiAgICAgICAgICB0aGlzLnByb3h5ID0gZGF0YS52YWx1ZSBhcyBzdHJpbmdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJveHkgPSB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5wcm94eScpXHJcbiAgICBpZiAocHJveHkpIHtcclxuICAgICAgdGhpcy5wcm94eSA9IHByb3h5XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVByb3h5ICgpOiBBeGlvc1JlcXVlc3RDb25maWdbJ3Byb3h5J10gfCBmYWxzZSB7XHJcbiAgICBpZiAodGhpcy5wcm94eSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHByb3h5T3B0aW9ucyA9IG5ldyBVUkwodGhpcy5wcm94eSlcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxyXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQgfHwgJzAnLCAxMCksXHJcbiAgICAgICAgICBwcm90b2NvbDogcHJveHlPcHRpb25zLnByb3RvY29sXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLy8gIzY0IGR5bmFtaWMgZ2V0IHByb3h5IHZhbHVlXHJcbiAgcmVxdWVzdDxULCBVIGV4dGVuZHMgKFxyXG4gICAgSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBJT2xkUmVxT3B0aW9ucyA/IElPbGRSZXFPcHRpb25zIDogSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBBeGlvc1JlcXVlc3RDb25maWcgPyBBeGlvc1JlcXVlc3RDb25maWcgOiBuZXZlclxyXG4gICk+IChvcHRpb25zOiBVKTogUHJvbWlzZTxJUmVzcG9uc2U8VCwgVT4+IHtcclxuICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IHRoaXMuaGFuZGxlUHJveHkoKVxyXG4gICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gSW5maW5pdHlcclxuICAgIHRoaXMub3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoID0gSW5maW5pdHlcclxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJveHkgJiYgb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSB0dW5uZWwuaHR0cHNPdmVySHR0cCh7XHJcbiAgICAgICAgcHJveHk6IHtcclxuICAgICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5wcm94eS5ob3N0LFxyXG4gICAgICAgICAgcG9ydDogdGhpcy5vcHRpb25zLnByb3h5LnBvcnRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IGh0dHBzQWdlbnRcclxuICAgIH1cclxuICAgIC8vICFOT1RJQ0UgdGhpcy5vcHRpb25zICE9PSBvcHRpb25zXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uc1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBheGlvcy5jcmVhdGUodGhpcy5vcHRpb25zKVxyXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShyZXNwb25zZUludGVyY2VwdG9yLCByZXNwb25zZUVycm9ySGFuZGxlcilcclxuXHJcbiAgICAvLyBjb21wYXRpYmxlIHdpdGggb2xkIHJlcXVlc3Qgb3B0aW9ucyB0byBuZXcgb3B0aW9uc1xyXG4gICAgY29uc3Qgb3B0ID0gcmVxdWVzdEludGVyY2VwdG9yKG9wdGlvbnMpXHJcblxyXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgLy8gaGFuZGxlIENvbnRlbnQtVHlwZVxyXG4gICAgICBsZXQgY29udGVudFR5cGUgPSAnJ1xyXG4gICAgICBpZiAob2JqPy5oZWFkZXJzPy5jb250ZW50VHlwZSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnMuY29udGVudFR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlXHJcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5Db250ZW50VHlwZSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnMuQ29udGVudFR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlXHJcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5bJ2NvbnRlbnQtdHlwZSddKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ10gYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gJycgJiYgb2JqLmhlYWRlcnMpIHtcclxuICAgICAgICBvYmouaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBjb250ZW50VHlwZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvYmpcclxuICAgIH0pXHJcbiAgICBpZiAoJ3Jlc29sdmVXaXRoRnVsbFJlc3BvbnNlJyBpbiBvcHRpb25zICYmIG9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcclxuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgLy8gdXNlIG9sZCByZXF1ZXN0IG9wdGlvbiBmb3JtYXRcclxuICAgICAgICBpZiAob3B0Ll9faXNPbGRPcHRpb25zKSB7XHJcbiAgICAgICAgICBpZiAoJ2pzb24nIGluIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiByZXMuZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSkgYXMgUHJvbWlzZTxJUmVzcG9uc2U8VCwgVT4+XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0XHJcbiIsImltcG9ydCB7IHR5cGUgSUNvbmZpZywgdHlwZSBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSlNPTlN0b3JlIH0gZnJvbSAnQHBpY2dvL3N0b3JlJ1xyXG5pbXBvcnQgeyB0eXBlIElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXHJcblxyXG5jbGFzcyBEQiB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGI6IEpTT05TdG9yZVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXHJcblxyXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljQmVkJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiLnNldCgncGljQmVkJywge1xyXG4gICAgICAgICAgdXBsb2FkZXI6ICdzbW1zJyxcclxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljZ29QbHVnaW5zJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiLnNldCgncGljZ29QbHVnaW5zJywge30pXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVhZCAoZmx1c2g/OiBib29sZWFuKTogSUpTT04ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGIucmVhZChmbHVzaClcclxuICB9XHJcblxyXG4gIGdldCAoa2V5OiBzdHJpbmcgPSAnJyk6IGFueSB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmdldChrZXkpXHJcbiAgfVxyXG5cclxuICBzZXQgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBoYXMgKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmhhcyhrZXkpXHJcbiAgfVxyXG5cclxuICB1bnNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIudW5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogUGFydGlhbDxJQ29uZmlnPik6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnVuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEQlxyXG5cclxuLy8gY29uc3QgaW5pdENvbmZpZyA9IChjb25maWdQYXRoOiBzdHJpbmcpOiBsb3dkYi5Mb3dkYlN5bmM8YW55PiA9PiB7XHJcbi8vIH1cclxuXHJcbi8vIGNvbnN0IHNhdmVDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nLCBjb25maWc6IGFueSk6IHZvaWQgPT4ge1xyXG4vLyAgIGNvbnN0IGRiID0gaW5pdENvbmZpZyhjb25maWdQYXRoKVxyXG4vLyAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbi8vICAgICBkYi5yZWFkKCkuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSkud3JpdGUoKVxyXG4vLyAgIH0pXHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCB7XHJcbi8vIGluaXRDb25maWcsXHJcbi8vIHNhdmVDb25maWdcclxuLy8gfVxyXG4iLCJpbXBvcnQgc3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nXHJcbmltcG9ydCB7XHJcbiAgdHlwZSBJUmVzdWx0LFxyXG4gIHR5cGUgSVByb2Nlc3NFbnYsXHJcbiAgdHlwZSBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCxcclxuICB0eXBlIElQbHVnaW5IYW5kbGVyLFxyXG4gIHR5cGUgSVBsdWdpbkhhbmRsZXJPcHRpb25zLFxyXG4gIHR5cGUgVW5kZWZpbmFibGUsXHJcbiAgdHlwZSBJUGljR28sXHJcbiAgdHlwZSBJUGx1Z2luSGFuZGxlclJlc3VsdFxyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUsIGdldE5vcm1hbFBsdWdpbk5hbWUgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi9pMThuL3poLUNOJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFBsdWdpbkhhbmRsZXIgaW1wbGVtZW50cyBJUGx1Z2luSGFuZGxlciB7XHJcbiAgLy8gVGhhbmtzIHRvIGZlZmxvdyAtPiBodHRwczovL2dpdGh1Yi5jb20vZmVmbG93L2ZlZmxvdy9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvaW5zdGFsbC9wbHVnaW4uanNcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xyXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIC8vIGRldGVjdCBpZiBoYXMgYWxyZWFkeSBpbnN0YWxsZWRcclxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LnBsdWdpbkxvYWRlci5oYXNQbHVnaW4oaXRlbS5wa2dOYW1lKSkge1xyXG4gICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKGl0ZW0ucGtnTmFtZSlcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNHbyBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcclxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcclxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXHJcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVuaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZSAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kIChjbWQ6IHN0cmluZywgbW9kdWxlczogc3RyaW5nW10sIHdoZXJlOiBzdHJpbmcsIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY6IElQcm9jZXNzRW52ID0ge30pOiBQcm9taXNlPElSZXN1bHQ+IHtcclxuICAgIC8vIG9wdGlvbnMgZmlyc3RcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcclxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXHJcbiAgICAgIGlmIChyZWdpc3RyeSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3h5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7IGN3ZDogd2hlcmUsIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudikgfSlcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXHJcbiAgICAgICAgbnBtLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRvdXQpXHJcblxyXG4gICAgICAgIG5wbS5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3RkZXJyKVxyXG5cclxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xyXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IHtcclxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgZnVsbE5hbWU6ICcnLFxyXG4gICAgcGtnTmFtZTogJydcclxuICB9XHJcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcclxuICBpZiAoIXJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXHJcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxyXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcclxuICBpZiAoIXBrZ05hbWUpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxyXG4gICAgcGtnTmFtZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgeyBaSF9DTiwgdHlwZSBJTG9jYWxlc0tleSwgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXHJcblxyXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXHJcbmltcG9ydCB7IHR5cGUgSVN0cmluZ0tleU1hcCwgdHlwZSBJSTE4bk1hbmFnZXIgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcclxuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xyXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXHJcblxyXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcclxuICAnemgtQ04nOiBaSF9DTixcclxuICAnemgtVFcnOiBaSF9UVyxcclxuICBlbjogRU5cclxufVxyXG5cclxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcclxuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XHJcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcclxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4biAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xyXG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcclxuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcclxuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIgKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XHJcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcclxuICAgIH1cclxuICAgIHJldHVybiBpMThuRm9sZGVyXHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXHJcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGUgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFkZExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcclxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFuZ3VhZ2VMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBJMThuTWFuYWdlclxyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXHJcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLDkuIrkvKAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6K6+5a6a6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrppLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWumktleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICforr7lrprmjqXlhaXngrknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5p6B5pm65Y6L57ypJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAn5Zu+54mH5p6B5pm65Y6L57yp77yM6K+m5oOF6K+35Y+C6ICDW+aWh+aho+ivtOaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi80OTI1OSknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn5byA5ZCvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn5YWz6ZetJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICforr7lrprku5PlupPlkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICforr7lrprliIbmlK/lkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6K6+5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+iuvuWumuiuv+mXrue9keWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+iuvuWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICforr7lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6K6+5a6a55u45YaM5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICforr7lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5Lyg5pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6K6+5a6a5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAn6K6+5a6a6Ziy55uX6ZO+VG9rZW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ+iuvuWumui/h+acn+aXtumXtCjnp5IpJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeaTjeS9nOWRmOWvhueggScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG5cclxuICAvLyB3ZWJkYXZwbGlzdFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICforr7lrprmjqXlj6PnvZHlnYAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn5ZCv55SoU1NMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHlnYDot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+iuvuWumuiupOivgeaWueW8jycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPml7blkK/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5a+G56CBJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee9keWdgOaXtuS9v+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHNmdHBwbGlzdFxyXG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhoXnva5TRlRQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+iuvuWumuerr+WPoycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6K6+5a6a56eB6ZKlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+iuvuWumuengemSpeWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6K6+5a6a5paH5Lu255So5oi3Oue7hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICforr7lrprmlofku7bmnYPpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICforr7lrprmlofku7blpLnmnYPpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5jorqQyMicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6L6T5YWl56eB6ZKl5a+G56CBJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee9keWdgOaXtuS9v+eUqCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaC77yaMDc3NScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAn5piv5ZCm5re75Yqg5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAn6ZyA6KaB5re75Yqg5rC05Y2w5pe25ZCv55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6K6+5a6a5rC05Y2w57G75Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICfor7fpgInmi6nmsLTljbDnsbvlnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+aYr+WQpuWFqOWxj+awtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ+iuvuWumuawtOWNsOinkuW6picsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICforr7lrprmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ+ivt+i+k+WFpeawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAn6K6+5a6a5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6K+36L6T5YWl5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU86ICforr7lrprmsLTljbDnm7jlr7nkuo7lm77niYfnmoTmr5TkvosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAn6K+36L6T5YWlMC0x55qE5bCP5pWwJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICforr7lrprmsLTljbDlrZfkvZPpopzoibInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAn6K+36L6T5YWlcmdi6aKc6Imy5YC8JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICforr7lrprmsLTljbDlm77niYfot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K+36L6T5YWl5rC05Y2w5Zu+54mH6Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ+iuvuWumuawtOWNsOS9jee9ricsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+ivt+mAieaLqeawtOWNsOS9jee9ricsXHJcblxyXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+iuvuWumumHjeWRveWQjeagvOW8jycsXHJcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAn5piv5ZCm5ZCv55So6YeN5ZG95ZCNJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAn6K6+5a6a5Zu+54mH6LSo6YePJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+ivt+i+k+WFpTAtMTAw55qE5pW05pWwJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpui/m+ihjOagvOW8j+i9rOaNoicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ+mcgOimgei9rOaNouaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6K6+5a6a6L2s5o2i5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+ivt+mAieaLqei9rOaNouagvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ+aYr+WQpui/m+ihjOWbvueJh+e8qeaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57yp5pS+5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6K6+5a6a57yp5pS+5a695bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6K6+5a6a57yp5pS+6auY5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAn5piv5ZCm5oyJ55m+5YiG5q+U6L+b6KGM57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnvKnmlL7ml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAn5piv5ZCm5Z6C55u057+76L2s5Zu+54mHJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxPUDogJ+aYr+WQpuawtOW5s+e/u+i9rOWbvueJhycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6K6+5a6a57yp5pS+55m+5YiG5q+UJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ+aYr+WQpui3s+i/h+Wwj+Wbvue8qeaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpui/m+ihjOWbvueJh+aXi+i9rCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2s5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ+iuvuWumuaXi+i9rOinkuW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+ivt+i+k+WFpeaVsOWtl++8jOWPr+S4uui0n+aVsCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG5L+h5oGvJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAn6ZyA6KaB56e76ZmkRVhJRuS/oeaBr+aXtuWQr+eUqCcsXHJcblxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWuieijheaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOF5aSx6LSlJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICfmj5Lku7blronoo4XlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI3miJblkIjms5Xlronoo4Xot6/lvoQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi9veaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovb3lpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWNuOi9veWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246L295aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAn5o+S5Lu25pu05paw5aSx6LSlJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjSdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSUxvY2FsZXNLZXkgPSBrZXlvZiB0eXBlb2YgWkhfQ05cclxuZXhwb3J0IHR5cGUgSUxvY2FsZXMgPSB0eXBlb2YgWkhfQ05cclxuIiwiaW1wb3J0IHsgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IFpIX1RXOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAn5LiK5YKz5aSx5pWXJyxcclxuICBDSEVDS19TRVRUSU5HUzogJ+iri+aqouafpeS9oOeahOioreWumuaYr+WQpuato+eiuicsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprlj4rntrLot68nLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6Yyv6Kqk56K877yaJHtjb2Rlfe+8jOiri+aJk+mWi+eAj+imveWZqOiyvOS4iuWcsOWdgOafpeeci+ebuOmXnOWOn+WboCcsXHJcbiAgU0VSVkVSX0VSUk9SOiAn5Ly65pyN5Zmo5Ye66Yyv77yM6KuL6YeN6KmmJyxcclxuICBBVVRIX0ZBSUxFRDogJ+iqjeitieWkseaVlycsXHJcblxyXG4gIC8vIHNtbXNcclxuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcclxuICBQSUNCRURfU01NU19UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAn5YKZ55So5LiK5YKz57ay5Z2AJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxyXG5cclxuICAvLyBsb2NhbFxyXG4gIFBJQ0JFRF9MT0NBTDogJ+acrOWcsCcsXHJcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICfkvovlpoIgL3Vzci9sb2NhbC9pbWFnZXMvJyxcclxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICfoqK3lrprntrLlnYDot6/lvpEnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICfnlKjkuo7ntrLpoIHpoa/npLrnmoTot6/lvpEnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICfpmL/ph4zkupFPU1MnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+ioreWumktleUlkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6Kit5a6aS2V5U2VjcmV0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yab3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAn6aiw6KiK5LqRQ09TJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICfoqK3lrppTZWNyZXRJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICfoqK3lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICfoqK3lrppBcHBJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ+ioreWumuaOpeWFpem7nicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mmFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZU1vZ3IyJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICdTZXQgSW1hZ2VTbGltJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAnSW1hZ2UgZXh0cmVtZWx5IGludGVsbGlnZW50IGNvbXByZXNzaW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlIFtkb2N1bWVudCBkZXNjcmlwdGlvbl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi80OTI1OSknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAnT1BFTicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ0NMT1NFJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICfoqK3lrprliIbmlK/lkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6Kit5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+ioreWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6Kit5a6a55u457C/5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICfoqK3lrppQUk9YWScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6Kit5a6a5pON5L2c5ZOhJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICfoqK3lrprmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAn6Kit5a6a5Yqg6YCf57ay5Z2AJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICfoqK3lrprpmLLnm5zpj4hUb2tlbicsXHJcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6Kit5a6a6YGO5pyf5pmC6ZaTKOenkiknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl5pON5L2c5ZOh5a+G56K8JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICfoqK3lrppBUEnkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAn6Kit5a6a6KqN6K2J5pa55byPJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aZguWVn+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXnlKjmiLblr4bnorwnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ+WFp+e9rlNGVFAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+ioreWumuS4u+apnycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICfoqK3lrprnp4HpkbAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6Kit5a6a56eB6ZGw5a+G56K8JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICfoqK3lrprmlofku7bnlKjmiLY657WEJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ+ioreWumuaWh+S7tuasiumZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ+ioreWumuaWh+S7tuWkvuasiumZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiqjTIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ+S+i+Wmgu+8mi9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovLjlhaXnp4HpkbDlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaC77yad3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICfkvovlpoLvvJowNjY0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICfoqK3lrprmsLTljbDpoZ7lnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+iri+mBuOaTh+awtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6Kit5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+ioreWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6KuL6Ly45YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICfoqK3lrprmsLTljbDlrZfpq5QnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfoq4vovLjlhaXmsLTljbDlrZfpq5Tmlofku7bot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ioreWumuawtOWNsOWclueJh+avlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfoq4vovLjlhaUwLTHnmoTmlbjlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ioreWumuawtOWNsOWtl+mrlOmhj+iJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfoq4vovLjlhaVyZ2LpoY/oibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ioreWumuawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfoq4vovLjlhaXmsLTljbDlnJbniYfot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6Kit5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6KuL6YG45pOH5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAn6Kit5a6a6YeN5ZG95ZCN5qC85byPJyxcclxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKbllZ/nlKjph43lkb3lkI0nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICfoqK3lrprlnJbniYfos6rph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMC0xMDDnmoTmlbTmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6YCy6KGM5qC85byP6L2J5o+bJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2J5o+b5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6KuL6YG45pOH6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6YCy6KGM5ZyW54mH57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICfoqK3lrprnuK7mlL7lr6zluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5TpgLLooYznuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICfmmK/lkKblnoLnm7Tnv7vovYnlnJbniYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2J5ZyW54mHJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICfoqK3lrprnuK7mlL7nmb7liIbmr5QnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6KuL6Ly45YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6YGO5bCP5ZyW57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6YCy6KGM5ZyW54mH5peL6L2JJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovYnmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6Kit5a6a5peL6L2J6KeS5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6KuL6Ly45YWl5pW45a2X77yM5Y+v54K66LKg5pW4JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ+aYr+WQpuenu+mZpEVYSUbos4foqIonLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG6LOH6KiK5pmC5ZWf55SoJyxcclxuXHJcbiAgLy8gUGx1Z2luIEhhbmRsZXJcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOd5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo53lpLHmlZcnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo53lpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijneWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeoseaIluato+eiuueahOWuieijnei3r+W+kScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246LyJ5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi8ieWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246LyJ5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovInlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZcnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ixJ1xyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBFTjogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ1VwbG9hZCBmYWlsZWQnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MnLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MgYW5kIG5ldHdvcmsnLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAnRXJyb3IgY29kZTogJHtjb2RlfSwgcGxlYXNlIG9wZW4gdGhlIGJyb3dzZXIgYW5kIHBhc3RlIHRoZSBhZGRyZXNzIHRvIHNlZSB0aGUgcmVhc29uJyxcclxuICBTRVJWRVJfRVJST1I6ICdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLFxyXG4gIEFVVEhfRkFJTEVEOiAnQXV0aGVudGljYXRpb24gZmFpbGVkJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAnU2V0IEJhY2t1cCBVcGxvYWQgRG9tYWluJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICdFeC4gc21tcy5hcHAnLFxyXG5cclxuICAvLyBsb2NhbFxyXG4gIFBJQ0JFRF9MT0NBTDogJ0xvY2FsJyxcclxuICBQSUNCRURfTE9DQUxfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAnRXguIC9Vc2Vycy9uYW1lL1BpY3R1cmVzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICdTZXQgV2ViIFBhdGgnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHVybCBwYXRoJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAnQWxpIENsb3VkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICdTZXQgS2V5SWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICdTZXQgS2V5U2VjcmV0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIG9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAnRXguID94LW9zcy1wcm9jZXNzPXh4eCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ1RlbmNlbnQgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0Nob29zZSBDT1MgdmVyc2lvbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ1NldCBTZWNyZXRJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICdTZXQgU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAnU2V0IEFwcElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ0V4LiAxMjM0NTY3ODkwJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBhcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAnRXguID9pbWFnZU1vZ3IyJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5qW15pm65aOT57iuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn6Zec6ZaJJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+mWi+WVkycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDogJ+WclueJh+alteaZuuWjk+e4ru+8jOips+aDheiri+WPg+iAg1vmlofmqpToqqrmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ1NldCBUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAnU2V0IFJlcG8gTmFtZScsXHJcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAnU2V0IEJyYW5jaCcsXHJcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICdFeC4gdXNlcm5hbWUvcmVwbycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ0V4LiBtYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gcWluaXVcclxuICBQSUNCRURfUUlOSVU6ICdRaW5pdScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ1NldCBBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICdTZXQgU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ1NldCBVUkwnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICdFeC4gejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlc2xpbScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAnRXguIGh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG5cclxuICAvLyB0ZWxlZ3JhcGhcclxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAnU2V0IENsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICdTZXQgQWNjZXNzIFRva2VuJyxcclxuICBQSUNCRURfSU1HVVJfQUxCVU06ICdTZXQgQWxidW0gTmFtZScsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAnU2V0IFByb3h5JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgYXMgYW5vbnltb3VzJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICdVcHl1bicsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ1NldCBPcGVyYXRvcicsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAnU2V0IE9wZXJhdG9yIFBhc3N3b3JkJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICdTZXQgQW50aS1MZWVjaCBUb2tlbicsXHJcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAnU2V0IEV4cGlyZSBUaW1lKHNlY29uZHMpJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgb3BlcmF0b3IgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ0V4LiBodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAnRXguICFpbWdzbGltJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2XHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ1NldCBIb3N0JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ1NldCBBdXRoIFR5cGUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAnRXguIG1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBwYXNzd29yZCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSB0aGUgVVJMIG9mIHRoZSBpbWFnZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAnU0ZUUCBCdWlsZGluJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ1NldCBQcml2YXRlIEtleScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdTZXQgUHJpdmF0ZSBLZXkgUGFzc3BocmFzZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAnU2V0IEZpbGUgVXNlcjpHcm91cCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICdTZXQgRmlsZSBNb2RlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAnU2V0IERpcmVjdG9yeSBNb2RlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiAxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ0RlZmF1bHQgMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAnRXguIC9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdQbGVhc2UgdHlwZSB0aGUgcHJpdmF0ZSBrZXkgcGFzc3BocmFzZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICdFeC4gd3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICdFeC4gMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAnRXguIDA3NzUnLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICdTZXQgcmVuYW1lIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAnRW5hYmxlIHJlbmFtZScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAnU2V0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdXaGV0aGVyIHRvIHVzZSBmdWxsLXNjcmVlbiB3YXRlcm1hcmsnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gZnVsbC1zY3JlZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ1NldCB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICdTZXQgd2F0ZXJtYXJrIGZvbnQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBmb250IGZpbGUgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICdQbGVhc2UgZW50ZXIgYSBudW1iZXIgYmV0d2VlbiAwLTEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1NldCB3YXRlcm1hcmsgZm9udCBjb2xvcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAnU2V0IHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ1BsZWFzZSBzZWxlY3Qgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAnU2V0IGltYWdlIHF1YWxpdHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAwLTEwMCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICdXaGV0aGVyIHRvIHBlcmZvcm0gZm9ybWF0IGNvbnZlcnNpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICdFbmFibGUgd2hlbiBmb3JtYXQgY29udmVyc2lvbiBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ1BsZWFzZSBzZWxlY3QgY29udmVyc2lvbiBmb3JtYXQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAnU2V0IHJlc2l6aW5nIHdpZHRoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZSBieSBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ1doZXRoZXIgdG8gZmxpcCB0aGUgaW1hZ2UgdmVydGljYWxseScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIGhvcml6b250YWxseScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAnV2hldGhlciB0byBza2lwIHJlc2l6aW5nIG9mIHNtYWxsIGltYWdlcycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAnRW5hYmxlIHdoZW4gaW1hZ2Ugcm90YXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAnV2hldGhlciB0byByZW1vdmUgRVhJRiBpbmZvcm1hdGlvbicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ0VuYWJsZSB3aGVuIHJlbW92aW5nIEVYSUYgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcclxufVxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgQ29tbWFuZGVyIGZyb20gJy4uL2xpYi9Db21tYW5kZXInXHJcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXHJcbmltcG9ydCBMaWZlY3ljbGUgZnJvbSAnLi9MaWZlY3ljbGUnXHJcbmltcG9ydCBMaWZlY3ljbGVQbHVnaW5zLCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXHJcbmltcG9ydCB1cGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcclxuaW1wb3J0IHRyYW5zZm9ybWVycyBmcm9tICcuLi9wbHVnaW5zL3RyYW5zZm9ybWVyJ1xyXG5pbXBvcnQgUGx1Z2luTG9hZGVyIGZyb20gJy4uL2xpYi9QbHVnaW5Mb2FkZXInXHJcbmltcG9ydCB7IGdldCwgc2V0LCB1bnNldCB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgdHlwZSBJSGVscGVyLCB0eXBlIElJbWdJbmZvLCB0eXBlIElDb25maWcsIHR5cGUgSVBpY0dvLCB0eXBlIElTdHJpbmdLZXlNYXAsIHR5cGUgSVBsdWdpbkxvYWRlciwgdHlwZSBJSTE4bk1hbmFnZXIsIHR5cGUgSVBpY0dvUGx1Z2luLCB0eXBlIElQaWNHb1BsdWdpbkludGVyZmFjZSwgdHlwZSBJUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZ2V0Q2xpcGJvYXJkSW1hZ2UgZnJvbSAnLi4vdXRpbHMvZ2V0Q2xpcGJvYXJkSW1hZ2UnXHJcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xyXG5pbXBvcnQgREIgZnJvbSAnLi4vdXRpbHMvZGInXHJcbmltcG9ydCBQbHVnaW5IYW5kbGVyIGZyb20gJy4uL2xpYi9QbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50LCBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBldmVudEJ1cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50QnVzJ1xyXG5pbXBvcnQgeyBpc0NvbmZpZ0tleUluQmxhY2tMaXN0LCBpc0lucHV0Q29uZmlnVmFsaWQgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IEkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vaTE4bidcclxuXHJcbmV4cG9ydCBjbGFzcyBQaWNHbyBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElQaWNHbyB7XHJcbiAgcHJpdmF0ZSBfY29uZmlnITogSUNvbmZpZ1xyXG4gIHByaXZhdGUgbGlmZWN5Y2xlITogTGlmZWN5Y2xlXHJcbiAgcHJpdmF0ZSBkYiE6IERCXHJcbiAgcHJpdmF0ZSBfcGx1Z2luTG9hZGVyITogUGx1Z2luTG9hZGVyXHJcbiAgY29uZmlnUGF0aDogc3RyaW5nXHJcbiAgYmFzZURpciE6IHN0cmluZ1xyXG4gIGhlbHBlciE6IElIZWxwZXJcclxuICBsb2c6IExvZ2dlclxyXG4gIGNtZDogQ29tbWFuZGVyXHJcbiAgb3V0cHV0OiBJSW1nSW5mb1tdXHJcbiAgaW5wdXQ6IGFueVtdXHJcbiAgcmF3SW5wdXQ6IGFueVtdXHJcbiAgcGx1Z2luSGFuZGxlcjogUGx1Z2luSGFuZGxlclxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MS41LjArXHJcbiAgICpcclxuICAgKiB1c2UgcmVxdWVzdCBpbnN0ZWFkXHJcbiAgICovXHJcbiAgUmVxdWVzdCE6IFJlcXVlc3RcclxuICBpMThuITogSUkxOG5NYW5hZ2VyXHJcbiAgVkVSU0lPTjogc3RyaW5nID0gcHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTlxyXG4gIEdVSV9WRVJTSU9OPzogc3RyaW5nXHJcblxyXG4gIGdldCBwbHVnaW5Mb2FkZXIgKCk6IElQbHVnaW5Mb2FkZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsdWdpbkxvYWRlclxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IgKGNvbmZpZ1BhdGg6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBjb25maWdQYXRoXHJcbiAgICB0aGlzLm91dHB1dCA9IFtdXHJcbiAgICB0aGlzLmlucHV0ID0gW11cclxuICAgIHRoaXMucmF3SW5wdXQgPSBbXVxyXG4gICAgdGhpcy5oZWxwZXIgPSB7XHJcbiAgICAgIHRyYW5zZm9ybWVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndHJhbnNmb3JtZXInKSxcclxuICAgICAgdXBsb2FkZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd1cGxvYWRlcicpLFxyXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxyXG4gICAgICBiZWZvcmVVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVXBsb2FkUGx1Z2lucycpLFxyXG4gICAgICBhZnRlclVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdhZnRlclVwbG9hZFBsdWdpbnMnKVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Q29uZmlnUGF0aCgpXHJcbiAgICB0aGlzLmxvZyA9IG5ldyBMb2dnZXIodGhpcylcclxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxyXG4gICAgdGhpcy5wbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIodGhpcylcclxuICAgIHRoaXMuaW5pdENvbmZpZygpXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSBob21lZGlyKCkgKyAnLy5waWNsaXN0L2NvbmZpZy5qc29uJ1xyXG4gICAgfVxyXG4gICAgaWYgKHBhdGguZXh0bmFtZSh0aGlzLmNvbmZpZ1BhdGgpLnRvVXBwZXJDYXNlKCkgIT09ICcuSlNPTicpIHtcclxuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgfVxyXG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcclxuICAgIGNvbnN0IGV4aXN0ID0gZnMucGF0aEV4aXN0c1N5bmModGhpcy5jb25maWdQYXRoKVxyXG4gICAgaWYgKCFleGlzdCkge1xyXG4gICAgICBmcy5lbnN1cmVGaWxlU3luYyhgJHt0aGlzLmNvbmZpZ1BhdGh9YClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXHJcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRiLnJlYWQodHJ1ZSkgYXMgSUNvbmZpZ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGluaXQgMThuIGF0IGZpcnN0XHJcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxyXG4gICAgICB0aGlzLlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzKVxyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIgPSBuZXcgUGx1Z2luTG9hZGVyKHRoaXMpXHJcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXHJcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCdwaWNnbycpXHJcbiAgICAgIHVwbG9hZGVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICB0cmFuc2Zvcm1lcnModGhpcykucmVnaXN0ZXIodGhpcylcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJycpXHJcbiAgICAgIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgIHRoaXMubGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSh0aGlzKVxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIHRoaXMubG9nLmVycm9yKGUpXHJcbiAgICAgIHRocm93IGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGVhc2lseSBtYW5udWFsbHkgbG9hZCBhIHBsdWdpblxyXG4gICAqIGlmIHByb3ZpZGUgcGx1Z2luIG5hbWUsIHdpbGwgcmVnaXN0ZXIgcGx1Z2luIGJ5IG5hbWVcclxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXHJcbiAgICovXHJcbiAgdXNlIChwbHVnaW46IElQaWNHb1BsdWdpbiwgbmFtZT86IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHBsdWdpbih0aGlzKVxyXG4gICAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5jbWQuaW5pdCgpXHJcbiAgICAgIHRoaXMuY21kLmxvYWRDb21tYW5kcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWc8VD4gKG5hbWU/OiBzdHJpbmcpOiBUIHtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIHVua25vd24gYXMgVFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGdldCh0aGlzLl9jb25maWcsIG5hbWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlnIChjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcclxuICAgIHRoaXMuZGIuc2F2ZUNvbmZpZyhjb25maWcpXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXHJcbiAgICB0aGlzLmRiLnVuc2V0KGtleSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcclxuICAgICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7bmFtZX0gY2FuJ3QgYmUgbW9kaWZpZWRgKVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcclxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXHJcbiAgICAgIH1cclxuICAgICAgc2V0KHRoaXMuX2NvbmZpZywgbmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XHJcbiAgICAgICAgY29uZmlnTmFtZTogbmFtZSxcclxuICAgICAgICB2YWx1ZTogY29uZmlnW25hbWVdXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdW5zZXRDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBnZXQgcmVxdWVzdCAoKTogSVJlcXVlc3RbJ3JlcXVlc3QnXSB7XHJcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWQgKGlucHV0PzogYW55W10pOiBQcm9taXNlPElJbWdJbmZvW10gfCBFcnJvcj4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgICByZXR1cm4gW11cclxuICAgIH1cclxuICAgIC8vIHVwbG9hZCBmcm9tIGNsaXBib2FyZFxyXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgeyBpbWdQYXRoLCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgfSA9IGF3YWl0IGdldENsaXBib2FyZEltYWdlKHRoaXMpXHJcbiAgICAgICAgaWYgKGltZ1BhdGggPT09ICdubyBpbWFnZScpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZBSUxFRCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xyXG4gICAgICAgICAgICAgIC8vIOWIoOmZpCBwaWNnbyDnlJ/miJDnmoTlm77niYfmlofku7bvvIzkvovlpoIgYH4vLnBpY2dvLzIwMjAwNjIxMjA1NzIwLnBuZ2BcclxuICAgICAgICAgICAgICBmcy5yZW1vdmUoaW1nUGF0aCkuY2F0Y2goKGUpID0+IHsgdGhpcy5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMub25jZSgnZmluaXNoZWQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgZnMucmVtb3ZlKGltZ1BhdGgpLmNhdGNoKChlKSA9PiB7IHRoaXMubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdKVxyXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHVwbG9hZCBmcm9tIHBhdGhcclxuICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0KVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQaWNHb1BsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgSW1nRnJvbVBhdGggZnJvbSAnLi9wYXRoJ1xyXG5pbXBvcnQgSW1nRnJvbUJhc2U2NCBmcm9tICcuL2Jhc2U2NCdcclxuXHJcbmNvbnN0IGJ1aWxkSW5UcmFuc2Zvcm1lcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ3BhdGgnLCBJbWdGcm9tUGF0aClcclxuICAgICAgY3R4LmhlbHBlci50cmFuc2Zvcm1lci5yZWdpc3RlcignYmFzZTY0JywgSW1nRnJvbUJhc2U2NClcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5UcmFuc2Zvcm1lcnNcclxuIl0sIm5hbWVzIjpbInBsdWdpbkhhbmRsZXIiLCJoYW5kbGUiLCJjdHgiLCJjbWQiLCJwcm9ncmFtIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxpYXMiLCJvcHRpb24iLCJhY3Rpb24iLCJwbHVnaW5zIiwicHJveHkiLCJyZWdpc3RyeSIsIm9wdGlvbnMiLCJpbnN0YWxsIiwiY2F0Y2giLCJlIiwibG9nIiwiZXJyb3IiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiLCJjb25maWciLCJyYW5kb21TdHJpbmdHZW5lcmF0b3IiLCJsZW5ndGgiLCJjaGFycyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImNoYXJBdCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImpvaW4iLCJyZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmciLCJvbGROYW1lIiwiY3VzdG9tRm9ybWF0IiwiYWZmaXhGaWxlTmFtZSIsImNvbnZlcnNpb25NYXAiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJ0b1N0cmluZyIsInNsaWNlIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImNyeXB0byIsImNyZWF0ZUhhc2giLCJwYXRoIiwiYmFzZW5hbWUiLCJleHRuYW1lIiwiZGlnZXN0IiwidXVpZHY0IiwidjQiLCJyZXBsYWNlIiwibm93IiwidW5kZWZpbmVkIiwiT2JqZWN0Iiwia2V5cyIsInNvbWUiLCJpdGVtIiwiaW5jbHVkZXMiLCJleHQiLCJuZXdOYW1lIiwicmVkdWNlIiwiYWNjIiwiY3VyIiwiUmVnRXhwIiwiX3Jlc3VsdCIsImtleSIsImNvdW50IiwibWF4IiwiZGlybmFtZSIsInNwbGl0Iiwic2VwIiwiYSIsImIiLCJpc1VybCIsInVybCIsInRlc3QiLCJpc1VybEVuY29kZSIsImRlY29kZVVSSSIsImhhbmRsZVVybEVuY29kZSIsImVuY29kZVVSSSIsImdldEltYWdlU2l6ZSIsImZpbGUiLCJ3aWR0aCIsImhlaWdodCIsInR5cGUiLCJpbWFnZVNpemUiLCJyZWFsIiwiZ2V0RlNGaWxlIiwiYXN5bmMiLCJmaWxlUGF0aCIsImZpbGVOYW1lIiwiYnVmZmVyIiwiZnMiLCJyZWFkRmlsZSIsInN1Y2Nlc3MiLCJfYSIsInJlYXNvbiIsImdldFVSTEZpbGUiLCJ0aW1lb3V0SWQiLCJyZXF1ZXN0Rm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcyIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsInRoZW4iLCJyZXNwIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInVybFBhdGgiLCJVUkwiLCJwYXRobmFtZSIsInNlYXJjaFBhcmFtcyIsImdldCIsInN0YXJ0c1dpdGgiLCJtZXNzYWdlIiwidGltZW91dFByb21pc2UiLCJzZXRUaW1lb3V0IiwicmFjZSIsImdldFBsdWdpbk5hbWVUeXBlIiwibmFtZSIsImlzU2ltcGxlTmFtZSIsIm5hbWVPclBhdGgiLCJpc0Fic29sdXRlIiwicGx1Z2luUGF0aCIsInByb2Nlc3MiLCJjd2QiLCJleGlzdHNTeW5jIiwiaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lIiwic2NvcGUiLCJnZXRQcm9jZXNzUGx1Z2luTmFtZSIsImxvZ2dlciIsImNvbnNvbGUiLCJoYW5kbGVVbml4U3R5bGVQYXRoIiwid2FybiIsImdldE5vcm1hbFBsdWdpbk5hbWUiLCJyZW1vdmVQbHVnaW5WZXJzaW9uIiwicGFja2FnZUpTT05QYXRoIiwicG9zaXgiLCJwa2ciLCJyZWFkSlNPTlN5bmMiLCJwYXRoU3RyIiwicmVnIiwibWF0Y2hBcnIiLCJtYXRjaCIsImNvbmZpZ0JsYWNrTGlzdCIsImlzQ29uZmlnS2V5SW5CbGFja0xpc3QiLCJibGFja0l0ZW0iLCJpc0lucHV0Q29uZmlnVmFsaWQiLCJpc0FycmF5Iiwic2FmZVBhcnNlIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiZm9yY2VOdW1iZXIiLCJudW0iLCJpc05hTiIsIk51bWJlciIsImlzRGV2IiwiZW52IiwiTk9ERV9FTlYiLCJkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoIiwiX19kaXJuYW1lIiwiQWRkV2F0ZXJtYXJrIiwiaW1nIiwid2F0ZXJtYXJrVHlwZSIsImRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCIsImlzRnVsbFNjcmVlbldhdGVybWFyayIsIndhdGVybWFya0RlZ3JlZSIsInRleHQiLCJ3YXRlcm1hcmtGb250UGF0aCIsIndhdGVybWFya1NjYWxlUmF0aW8iLCJ3YXRlcm1hcmtDb2xvciIsIndhdGVybWFya0ltYWdlUGF0aCIsInBvc2l0aW9uIiwiaW1hZ2UiLCJzaGFycCIsImFuaW1hdGVkIiwiaW1nV2lkdGgiLCJtZXRhZGF0YSIsIndhdGVybWFyayIsInRvQnVmZmVyIiwiY29sb3IiLCJmb250RmFtaWx5IiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImZpbGwiLCJ0ZXh0U1ZHIiwiVGV4dFRvU1ZHIiwibG9hZFN5bmMiLCJnZXRTVkciLCJCdWZmZXIiLCJ0ZXh0MlNWRyIsIndhdGVybWFya1dpZHRoIiwid2F0ZXJtYXJrSGVpZ2h0IiwiZ2V0U2l6ZSIsIndhdGVybWFya1Jlc2l6ZVdpZHRoIiwid2F0ZXJtYXJrUmVzaXplSGVpZ2h0IiwicmVzaXplIiwiZml0Iiwicm90YXRlIiwiYmFja2dyb3VuZCIsInIiLCJnIiwiYWxwaGEiLCJjcmVhdGVXYXRlcm1hcmsiLCJjb21wb3NpdGUiLCJpbnB1dCIsImdyYXZpdHkiLCJ0aWxlIiwidmFsaWRQYXJhbSIsInBhcmFtcyIsImV2ZXJ5IiwicGFyYW0iLCJhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCIsImltYWdlRXh0TGlzdCIsImltYWdlQWRkV2F0ZXJNYXJrIiwid2F0ZXJtYXJrVGV4dCIsIndhdGVybWFya1Bvc2l0aW9uIiwiZm9ybWF0T3B0aW9ucyIsInF1YWxpdHkiLCJpc0NvbnZlcnQiLCJjb252ZXJ0Rm9ybWF0IiwiaXNSZVNpemUiLCJyZVNpemVIZWlnaHQiLCJyZVNpemVXaWR0aCIsInNraXBSZVNpemVPZlNtYWxsSW1nIiwiaXNSZVNpemVCeVBlcmNlbnQiLCJyZVNpemVQZXJjZW50IiwiaXNSb3RhdGUiLCJpc0ZsaXAiLCJpc0Zsb3AiLCJyb3RhdGVEZWdyZWUiLCJwaWNCZWQiLCJpbWFnZVByb2Nlc3MiLCJyYXdGb3JtYXQiLCJ0b0xvd2VyQ2FzZSIsImltYWdlV2lkdGgiLCJpbWFnZUhlaWdodCIsInJvdW5kIiwic2NhbGVSYXRpbyIsImZsaXAiLCJmbG9wIiwibmV3Rm9ybWF0IiwidG9Gb3JtYXQiLCJmb3JtYXQiLCJpbWFnZUZvcm1hdExpc3QiLCJuZWVkQWRkV2F0ZXJtYXJrIiwid2F0ZXJtYXJrT3B0aW9ucyIsImZpbGVFeHQiLCJpc0FkZFdhdGVybWFyayIsIm5lZWRDb21wcmVzcyIsImNvbXByZXNzT3B0aW9ucyIsIm5vcm1hbGl6ZWRFeHQiLCJyZW1vdmVFeGlmIiwidXBsb2FkIiwiYXJndW1lbnRzIiwiaW5wdXRMaXN0IiwiZmlsdGVyIiwiZXhpc3QiLCJjb21wcmVzcyIsInVzZXJDb25maWciLCJnZXRDb25maWciLCJpMThuIiwidHJhbnNsYXRlIiwicmVxdWlyZWQiLCJkZWZhdWx0IiwiY2hvaWNlcyIsImlzUmVtb3ZlRXhpZiIsInJlbmFtZSIsImVuYWJsZSIsImhhbmRsZUNvbmZpZyIsInByb21wdHMiLCJtb2R1bGUiLCJhbnN3ZXIiLCJpbnF1aXJlciIsInByb21wdCIsImNvbmZpZ05hbWUiLCJzYXZlQ29uZmlnIiwic2V0dGluZyIsImJ1aWxkaW4iLCJoZWxwZXIiLCJnZXRJZExpc3QiLCJwbHVnaW5Mb2FkZXIiLCJnZXRQbHVnaW4iLCJnZXRGdWxsTGlzdCIsIl9iIiwicGx1Z2luIiwiaW5mbyIsImFyZ3YiLCJ1c2UiLCJ1cGxvYWRlciIsInRyYW5zZm9ybWVyIiwicHVzaCIsImZvckVhY2giLCJwaWNnb1BsdWdpbnMiLCJzZXRDb25maWciLCJnZW5lcmF0ZSIsIm9wdHMiLCJnZXRPcHRpb25zIiwidG1wIiwic291cmNlIiwiYW5zd2VycyIsIl9maWxlcyIsImdsb2JieSIsImRvdCIsImdsb2IiLCJmaWx0ZXJzIiwiZmlsZXMiLCJyZW5kZXIiLCJ3cml0ZUZpbGVUcmVlIiwiZGVzdCIsImNvbXBsZXRlIiwiY29tcGxldGVNZXNzYWdlIiwiZXhwIiwiZm4iLCJGdW5jdGlvbiIsInN0cmluZ2lmeSIsInRlbXBsYXRlUGF0aCIsIm9wdGlvbnNQYXRoIiwicmVxdWlyZSIsImZpbGVUcmVlIiwicmVhZEZpbGVTeW5jIiwiY29udGVudCIsImVqcyIsImlzQnVmZmVyIiwiZGlyIiwiZW5zdXJlRGlyU3luYyIsIndyaXRlRmlsZVN5bmMiLCJydW4iLCJvZmZsaW5lIiwidGVtcGxhdGUiLCJoYXNTbGFzaCIsImRvd25sb2FkQW5kR2VuZXJhdGUiLCJybSIsInN5bmMiLCJkb3dubG9hZCIsImNsb25lIiwiZXJyIiwiaW5pdCIsInByb2plY3QiLCJpblBsYWNlIiwiaG9tZWRpciIsIm9rIiwib24iLCJjaGFsayIsImdyYXkiLCJsYW5nIiwibGlzdCIsImdldExhbmd1YWdlTGlzdCIsInNldExhbmd1YWdlIiwiTGlmZWN5Y2xlUGx1Z2lucyIsImNvbnN0cnVjdG9yIiwidGhpcyIsIk1hcCIsInBsdWdpbklkTWFwIiwicmVnaXN0ZXIiLCJpZCIsIlR5cGVFcnJvciIsImhhcyIsInNldCIsImN1cnJlbnRQbHVnaW4iLCJ1bnJlZ2lzdGVyIiwicGx1Z2luTmFtZSIsInBsdWdpbkxpc3QiLCJkZWxldGUiLCJnZXROYW1lIiwiZ2V0TGlzdCIsInZhbHVlcyIsInNldEN1cnJlbnRQbHVnaW5OYW1lIiwiQ29tbWFuZGVyIiwiQ29tbWFuZCIsInZlcnNpb24iLCJkZWJ1ZyIsInNpbGVudCIsImFyZ3MiLCJleGl0IiwiY3VycmVudFBsdWdpbk5hbWUiLCJsb2FkQ29tbWFuZHMiLCJJTG9nVHlwZSIsIklCdWlsZEluRXZlbnQiLCJJQnVzRXZlbnQiLCJMb2dnZXIiLCJsZXZlbCIsImhhbmRsZUxvZyIsIm1zZyIsImxvZ0xldmVsIiwiY2hlY2tMb2dMZXZlbCIsImxvZ0hlYWRlciIsInRvVXBwZXJDYXNlIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJ5ZWxsb3ciLCJyZWNyZWF0ZUxvZ0ZpbGUiLCJ1bnNoaWZ0IiwiaGFuZGxlV3JpdGVMb2ciLCJsb2dGaWxlU2l6ZSIsInN0YXRTeW5jIiwic2l6ZSIsImxvZ0ZpbGVTaXplTGltaXQiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJkYXlqcyIsIkVycm9yIiwidXRpbCIsInN0YWNrIiwiYXBwZW5kRmlsZVN5bmMiLCJMaWZlY3ljbGUiLCJFdmVudEVtaXR0ZXIiLCJzdXBlciIsInR0ZkxpbmsiLCJ0ZW1wRmlsZVBhdGgiLCJpbWdGbGVQYXRoIiwiZW1wdHlEaXJTeW5jIiwidHRmUGF0aCIsIm91dHB1dERpciIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsImF4aW9zIiwiY29uZmlnUGF0aCIsIm91dHB1dCIsInJhd0lucHV0IiwiUmVxdWVzdCIsIlZFUlNJT04iLCJHVUlfVkVSU0lPTiIsImJpbmQiLCJyZW1vdmVDb25maWciLCJ1bnNldENvbmZpZyIsImFkZExpc3RlbmVyIiwib25jZSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwibGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwiZW1pdCIsImxpc3RlbmVyQ291bnQiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiZXZlbnROYW1lcyIsImNyZWF0ZUNvbnRleHQiLCJyYXdJbnB1dFBhdGgiLCJjbG9uZURlZXAiLCJ3YXRlcm1hcmtNc2ciLCJjb21wcmVzc01zZyIsImFsbFNldHRsZWQiLCJpbmRleCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiaXNTa2lwIiwiZG93bmxvYWRUVEYiLCJfYyIsIl9kIiwibmV3RXh0IiwiX2UiLCJfZiIsInRlbXBGaWxlIiwiZ2V0VGltZSIsImhlaWNCdWZmZXIiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwiX2ciLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsInJlbmFtZUNvbmZpZyIsImJlZm9yZVVwbG9hZCIsImRvVXBsb2FkIiwiYWZ0ZXJVcGxvYWQiLCJGQUlMRUQiLCJVUExPQURfUFJPR1JFU1MiLCJCRUZPUkVfVFJBTlNGT1JNIiwiaGFuZGxlUGx1Z2lucyIsImJlZm9yZVRyYW5zZm9ybVBsdWdpbnMiLCJjdXJyZW50VHJhbnNmb3JtZXIiLCJCRUZPUkVfVVBMT0FEIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsIm91dHB1dEltZyIsIkFGVEVSX1VQTE9BRCIsImFmdGVyVXBsb2FkUGx1Z2lucyIsImlzRW5jb2RlT3V0cHV0VVJMIiwiaSIsImltZ1VybCIsImJhc2U2NEltYWdlIiwiRklOSVNIRUQiLCJsaWZlQ3ljbGVQbHVnaW5zIiwicGx1Z2luTmFtZXMiLCJsaWZlQ3ljbGVOYW1lIiwiYWxsIiwicG9zdE9wdGlvbnMiLCJhcGlUb2tlbiIsImJhY2t1cERvbWFpbiIsImhlYWRlcnMiLCJjb250ZW50VHlwZSIsIkF1dGhvcml6YXRpb24iLCJmb3JtRGF0YSIsInNtZmlsZSIsInZhbHVlIiwiZmlsZW5hbWUiLCJzc2wiLCJzbW1zQ29uZmlnIiwiaW1nTGlzdCIsInBvc3RDb25maWciLCJ0b2tlbiIsImJvZHkiLCJjb2RlIiwiaGFzaCIsImltYWdlcyIsIk5PVElGSUNBVElPTiIsInRpdGxlIiwicHJlZml4IiwiZ2VuZXJhdGVTaWduYXR1cmUiLCJzZWNyZXRJZCIsInNlY3JldEtleSIsImFwcElkIiwiYnVja2V0Iiwic2lnbmF0dXJlIiwic2lnblRpbWUiLCJ0b2RheSIsInNpZ25LZXkiLCJjcmVhdGVIbWFjIiwiZW5kcG9pbnQiLCJhcmVhIiwiaHR0cFN0cmluZyIsInN0cmluZ1RvU2lnbiIsImN1cnJlbnQiLCJtdWx0aVNpZ25hdHVyZSIsInNpZ25IZXhLZXkiLCJ0ZW1wU3RyaW5nIiwiY29uY2F0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSG9zdCIsIm1pbWUiLCJsb29rdXAiLCJvcCIsImZpbGVjb250ZW50IiwidGNZdW5PcHRpb25zIiwiY3VzdG9tVXJsIiwidXNlVjQiLCJzdGF0dXNDb2RlIiwib3B0aW9uVXJsIiwic2xpbSIsInNvdXJjZV91cmwiLCJjb25maXJtVGV4dCIsImNhbmNlbFRleHQiLCJ0aXBzIiwicmVwbyIsImpzb24iLCJicmFuY2giLCJnaXRodWJPcHRpb25zIiwidXBsb2FkUGF0aCIsImRvd25sb2FkX3VybCIsInNoYSIsImltZ0Jhc2U2NCIsInNlbGVjdEFyZWEiLCJnZXRUb2tlbiIsInFpbml1T3B0aW9ucyIsImFjY2Vzc0tleSIsIm1hYyIsInFpbml1IiwiYXV0aCIsIk1hYyIsInJzIiwiUHV0UG9saWN5IiwidXBsb2FkVG9rZW4iLCJiYXNlVXJsIiwidXJsT3B0aW9ucyIsInJlc3BvbnNlIiwiY2xpZW50SWQiLCJ1c2VybmFtZSIsImFjY2Vzc1Rva2VuIiwiZm9ybWF0QWNjZXNzVG9rZW4iLCJhbGJ1bSIsImF1dGhvcml6YXRpb24iLCJyZXF1ZXN0T3B0aW9ucyIsImluaXRQYWdlcyIsImFsYnVtSGFzaCIsImdldEFsYnVtSGFzaE9wdGlvbnMiLCJ0aW1lb3V0IiwiYWxidW1MaXN0IiwiaW1ndXJPcHRpb25zIiwibGluayIsImRlbGV0ZWhhc2giLCJkYXRlIiwidG9VVENTdHJpbmciLCJzaWduU3RyaW5nIiwiYWNjZXNzS2V5U2VjcmV0IiwiYWNjZXNzS2V5SWQiLCJhbGlZdW5PcHRpb25zIiwib3BlcmF0b3IiLCJtZDVQYXNzd29yZCIsIk1ENSIsInBhc3N3b3JkIiwiZ2V0QW50aUxlZWNoUGFyYW0iLCJhbnRpTGVlY2hUb2tlbiIsImV4cGlyZVRpbWUiLCJ1cmkiLCJleHBpcmUiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInVweXVuT3B0aW9ucyIsInN1ZmZpeCIsInVwdCIsIndlYmRhdnBsaXN0T3B0aW9ucyIsImhvc3QiLCJzc2xFbmFibGVkIiwiYXV0aFR5cGUiLCJ3ZWJwYXRoIiwiY2xpZW50T3B0aW9ucyIsIm1heEJvZHlMZW5ndGgiLCJtYXhDb250ZW50TGVuZ3RoIiwiQXV0aFR5cGUiLCJEaWdlc3QiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJwYXRoVG9DcmVhdGUiLCJjcmVhdGVEaXJlY3RvcnkiLCJwdXRGaWxlQ29udGVudHMiLCJvdmVyd3JpdGUiLCJpbWdUZW1wUGF0aCIsImltZ1RlbXBGaWxlUGF0aCIsImdhbGxlcnlQYXRoIiwibG9jYWxDb25maWciLCJ3ZWJQYXRoIiwiY29weUZpbGVTeW5jIiwiU1NIQ2xpZW50IiwiX2lzQ29ubmVjdGVkIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJfY2xpZW50IiwiTm9kZVNTSCIsImNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCIsInByaXZhdGVLZXkiLCJwYXNzcGhyYXNlIiwibG9naW5JbmZvIiwicHJpdmF0ZUtleVBhdGgiLCJjb25uZWN0IiwicG9ydCIsImxvY2FsIiwicmVtb3RlIiwibWtkaXIiLCJwdXRGaWxlIiwiZmlsZU1vZGUiLCJzY3JpcHQiLCJleGVjIiwiZGlyUGF0aCIsImlzQ29ubmVjdGVkIiwiZGlyZWN0b3J5TW9kZSIsImRpck1vZGUiLCJkaXJzIiwiY3VycmVudFBhdGgiLCJ1c2VyIiwiZ3JvdXAiLCJfdXNlciIsIl9ncm91cCIsImV4ZWNDb21tYW5kIiwiY2xvc2UiLCJkaXNwb3NlIiwic2Z0cHBsaXN0Q29uZmlnIiwidXBsb2FkVGVtcFBhdGgiLCJyZW1vdGVQYXRoIiwiZmlsZVVzZXIiLCJjaG93biIsIm1vdmVTeW5jIiwidGdPcHRpb25zIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlbW92ZSIsInNyYyIsImJ1aWxkSW5VcGxvYWRlcnMiLCJhbGlZdW5VcGxvYWRlciIsInRjWXVuVXBsb2FkZXIiLCJTTU1TVXBsb2FkZXIiLCJnaXRodWJVcGxvYWRlciIsInFpbml1VXBsb2FkZXIiLCJpbWd1clVwbG9hZGVyIiwidXBZdW5VcGxvYWRlciIsIndlYmRhdnBsaXN0VXBsb2FkZXIiLCJsb2NhbFVwbG9hZGVyIiwic2Z0cFVwbG9hZGVyIiwidGVsZWdyYXBoVXBsb2FkZXIiLCJnZXRJbWdTaXplIiwiSW1nRnJvbVBhdGgiLCJyZXN1bHRzIiwiaW1nU2l6ZSIsIkltZ0Zyb21CYXNlNjQiLCJQbHVnaW5Mb2FkZXIiLCJmdWxsTGlzdCIsIlNldCIsInBsdWdpbk1hcCIsInBhY2thZ2VQYXRoIiwicmVwb3NpdG9yeSIsImxpY2Vuc2UiLCJyZXNvbHZlUGx1Z2luIiwiYmFzZWRpciIsImxvYWQiLCJwbHVnaW5EaXIiLCJkZXBzIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwcyIsImRldkRlcGVuZGVuY2llcyIsIm1vZHVsZXMiLCJyZWdpc3RlclBsdWdpbiIsImFkZCIsInBsdWdpbkludGVyZmFjZSIsInVucmVnaXN0ZXJQbHVnaW4iLCJoYXNQbHVnaW4iLCJwbGF0Zm9ybTJTY3JpcHRDb250ZW50IiwiZGFyd2luIiwid2luMzIiLCJ3aW4xMCIsImxpbnV4Iiwid3NsIiwicGxhdGZvcm0yU2NyaXB0RmlsZW5hbWUiLCJnZXRDbGlwYm9hcmRJbWFnZSIsImltYWdlUGF0aCIsImNyZWF0ZUltYWdlRm9sZGVyIiwicGxhdGZvcm0iLCJpc1dzbCIsIm9zIiwicmVsZWFzZSIsImdldEN1cnJlbnRQbGF0Zm9ybSIsInNjcmlwdFBhdGgiLCJleGVjdXRpb24iLCJzcGF3biIsInN0ZG91dCIsInRyaW0iLCJpbWdQYXRoIiwic2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIiwiZXZlbnRCdXMiLCJodHRwc0FnZW50IiwiaHR0cHMiLCJBZ2VudCIsIm1heFZlcnNpb24iLCJtaW5WZXJzaW9uIiwiYXBwZW5kRm9ybURhdGEiLCJmb3JtIiwiYXBwZW5kIiwicmVzcG9uc2VJbnRlcmNlcHRvciIsImFzc2lnbiIsInN0YXR1cyIsInJlc3BvbnNlRXJyb3JIYW5kbGVyIiwiZXJyb3JPYmoiLCJDT05GSUdfQ0hBTkdFIiwiaGFuZGxlUHJveHkiLCJwcm94eU9wdGlvbnMiLCJob3N0bmFtZSIsInByb3RvY29sIiwiSW5maW5pdHkiLCJ0dW5uZWwiLCJodHRwc092ZXJIdHRwIiwiY3JlYXRlIiwiaW50ZXJjZXB0b3JzIiwib3B0IiwiX19pc09sZE9wdGlvbnMiLCJGb3JtRGF0YSIsImdldEhlYWRlcnMiLCJxcyIsInJlcXVlc3RJbnRlcmNlcHRvciIsIm9iaiIsIkNvbnRlbnRUeXBlIiwiREIiLCJkYiIsIkpTT05TdG9yZSIsInJlYWQiLCJmbHVzaCIsInVuc2V0IiwiUGx1Z2luSGFuZGxlciIsImluc3RhbGxlZFBsdWdpbnMiLCJwcm9jZXNzUGx1Z2lucyIsImhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzIiwicGtnTmFtZSIsImZ1bGxOYW1lTGlzdCIsImZ1bGxOYW1lIiwicGtnTmFtZUxpc3QiLCJ3aGVyZSIsIm5wbSIsInBpcGUiLCJzdGRlcnIiLCJsYW5ndWFnZUxpc3QiLCJVUExPQURfRkFJTEVEIiwiQ0hFQ0tfU0VUVElOR1MiLCJDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSyIsIlVQTE9BRF9GQUlMRURfUkVBU09OIiwiU0VSVkVSX0VSUk9SIiwiQVVUSF9GQUlMRUQiLCJQSUNCRURfU01NUyIsIlBJQ0JFRF9TTU1TX1RPS0VOIiwiUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9MT0NBTCIsIlBJQ0JFRF9MT0NBTF9QQVRIIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9MT0NBTF9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfV0VCUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgiLCJQSUNCRURfQUxJQ0xPVUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUIiwiUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9BTElDTE9VRF9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwiLCJQSUNCRURfR0lUSFVCIiwiUElDQkVEX0dJVEhVQl9UT0tFTiIsIlBJQ0JFRF9HSVRIVUJfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9DVVNUT01VUkwiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfUUlOSVUiLCJQSUNCRURfUUlOSVVfQUNDRVNTS0VZIiwiUElDQkVEX1FJTklVX1NFQ1JFVEtFWSIsIlBJQ0JFRF9RSU5JVV9CVUNLRVQiLCJQSUNCRURfUUlOSVVfUEFUSCIsIlBJQ0JFRF9RSU5JVV9VUkwiLCJQSUNCRURfUUlOSVVfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1FJTklVX01FU1NBR0VfVVJMIiwiUElDQkVEX1RFTEVHUkFQSCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfQUxCVU0iLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOIiwiUElDQkVEX1VQWVVOX0VYUElSRV9USU1FIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUIiwiUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVCIsIlBJQ0JFRF9TRlRQUExJU1RfSE9TVCIsIlBJQ0JFRF9TRlRQUExJU1RfUE9SVCIsIlBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZIiwiUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVIiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfRElSX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVIiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRSIsIkJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fUkVOQU1FX0ZPUk1BVCIsIkJVSUxESU5fUkVOQU1FX0VOQUJMRSIsIkJVSUxESU5fQ09NUFJFU1NfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCIsIkJVSUxESU5fQ09NUFJFU1NfSVNGTE9QIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HIiwiQlVJTERJTl9DT01QUkVTU19JU1JPVEFURSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURSIsIkJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEgiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCIsImVuIiwiSTE4bk1hbmFnZXIiLCJvYmplY3RBZGFwdGVyIiwiT2JqZWN0QWRhcHRlciIsImxhbmd1YWdlIiwiSTE4biIsImFkYXB0ZXIiLCJkZWZhdWx0TGFuZ3VhZ2UiLCJsb2FkT3V0dGVySTE4biIsImkxOG5Gb2xkZXIiLCJnZXRPdXR0ZXJJMThuRm9sZGVyIiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwiaXNGaWxlIiwiZW5kc1dpdGgiLCJpMThuRmlsZVBhdGgiLCJpMThuRmlsZSIsImkxOG5GaWxlT2JqIiwieWFtbCIsInBhdGhFeGlzdHNTeW5jIiwiYWRkTG9jYWxlIiwibG9jYWxlcyIsIm9yaWdpbkxvY2FsZXMiLCJnZXRMb2NhbGUiLCJuZXdMb2NhbGVzIiwibWVyZ2UiLCJzZXRMb2NhbGUiLCJhZGRMYW5ndWFnZSIsIlBpY0dvIiwiX3BsdWdpbkxvYWRlciIsImluaXRDb25maWdQYXRoIiwiaW5pdENvbmZpZyIsImVuc3VyZUZpbGVTeW5jIiwiX2NvbmZpZyIsInVwbG9hZGVycyIsImxpZmVj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
|