piclist 0.6.0 → 0.6.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 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"),i=require("commander"),a=require("inquirer"),s=require("image-size"),o=require("url"),l=require("text-to-svg"),E=require("sharp"),u=require("chalk"),c=require("minimatch"),I=require("globby"),_=require("ejs"),d=require("download-git-repo"),p=require("rimraf"),S=require("dayjs"),g=require("util"),f=require("axios"),A=require("lodash"),P=require("heic-convert"),m=require("crypto"),h=require("mime-types"),C=require("qiniu"),D=require("md5"),U=require("resolve"),L=require("child_process"),T=require("is-wsl"),N=require("form-data"),R=require("https"),B=require("tunnel"),O=require("@picgo/store"),M=require("cross-spawn"),y=require("js-yaml"),G=require("@picgo/i18n");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=w(e),x=w(t),v=w(n),$=w(a),W=w(l),H=w(E),K=w(u),F=w(c),k=w(I),q=w(_),j=w(d),Y=w(p),V=w(S),z=w(g),Q=w(f),X=w(P),Z=w(m),J=w(h),ee=w(C),te=w(D),re=w(U),ne=w(T),ie=w(N),ae=w(R),se=w(B),oe=w(M),le=w(y);const Ee={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").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.install(t,a).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:i}=r,a={proxy:n,registry:i};e.pluginHandler.update(t,a).catch((t=>{e.log.error(t)}))}))}},ue={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}},ce=e=>/^https?:\/\//.test(e),Ie=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},_e=e=>(Ie(e)||(e=encodeURI(e)),e),de=e=>{try{const{width:t=0,height:r=0}=s.imageSize(e);return{real:!0,width:t,height:r}}catch(e){return{real:!1,width:200,height:200}}},pe=async e=>{try{return{extname:x.default.extname(e),fileName:x.default.basename(e),buffer:await b.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},Se=async(e,t)=>{let r;e=_e(e);const n=new Promise(((n,i)=>{(async()=>{var i;try{const i=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const a=new o.URL(e).pathname;n({buffer:i,fileName:x.default.basename(a),extname:x.default.extname(a),success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(i=null==t?void 0:t.message)&&void 0!==i?i:""}`})}})().catch(i)})),i=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,i])},ge=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":fe(e)?"simple":"unknown",fe=e=>{if(x.default.isAbsolute(e))return!1;const t=x.default.join(process.cwd(),e);return!b.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Ae=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,Pe=(e,t=console)=>{switch(ge(e)){case"normal":case"scope":return e;case"simple":return Ae(e);default:{let r=e;return x.default.isAbsolute(e)&&b.default.existsSync(e)?he(r):(r=x.default.join(process.cwd(),e),b.default.existsSync(r)?he(r):(t.warn(`Can't find plugin ${e}`),""))}}},me=(e,t=console)=>{var r;switch(ge(e)){case"normal":return Ce(e);case"scope":return Ce(e,!0);case"simple":return Ce(Ae(e));default:{if(!b.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=x.default.posix.join(e,"package.json");if(b.default.existsSync(n)){const e=b.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(x.default.sep).join("/"),Ce=(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},De=[],Ue=e=>De.some((t=>e.startsWith(t))),Le=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function Te(e){try{return JSON.parse(e)}catch(t){return e}}const Ne=(e=0)=>isNaN(Number(e))?0:Number(e),Re=()=>"development"===process.env.NODE_ENV;const Be=`${__dirname}/assets/piclist.png`;async function Oe(e,t,r,n,i,a,s,o,l,E,u){o=!o||o<0||o>1?.15:o;const c=H.default(e),{width:I=200}=await c.metadata(),_=await async function(e,t,r,n,i,a,s,o=200,l=0){let E;"image"===e?(s=s||Be,E=await H.default(s).toBuffer()):E=await async function(e,t,r,n){t=t||"测试",n=n||e;const i={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},a=W.default.loadSync(n).getSVG(t,i);return Buffer.from(a)}(t,r,a,n||t);const{width:u,height:c}=await async function(e){const{width:t,height:r}=await H.default(e).metadata();return{width:t||200,height:r||200}}(E),I=Math.floor(o*Ne(i)),_=Math.floor(I*c/u);return await H.default(E).resize(I,_,{fit:"inside"}).rotate(l,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,a,s,o,l,E,I,i);return await c.composite([{input:_,gravity:u||"southeast",tile:n}]).toBuffer()}const Me=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),ye=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Ge=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function we(e,t,r){try{let n=H.default(e);return Me(t.watermarkText)&&(n=H.default(await Oe(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Ne(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Ne(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition))),await n.toBuffer()}catch(t){return console.log(t),e}}function be(e){return{quality:Ne(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Ne(e.reSizeHeight),reSizeWidth:Ne(e.reSizeWidth),isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Ne(e.reSizePercent),isRotate:e.isRotate||!1,rotateDegree:Ne(e.rotateDegree)}}async function xe(e,t,r){t=be(t);try{if(r=r.toLowerCase().replace(".",""),!Ge.includes(r))return e;let i=H.default(e),a=100;if(Me(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(Me(t.reSizePercent)){const e=await i.metadata().then((e=>e.width)),r=await i.metadata().then((e=>e.height));e&&r&&(i=i.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else t.isReSize&&Me(t.reSizeHeight,t.reSizeWidth)&&(i=i.resize(t.reSizeWidth,t.reSizeHeight,{fit:"inside"}));if(t.isRotate&&t.rotateDegree&&(i=i.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isConvert){const e=t.convertFormat||"jpg";i=i.toFormat(e,{quality:a})}else i=r&&(n=r,ye.includes(n))?i.toFormat(r,{quality:a}):i.toFormat("jpg",{quality:a});return await i.toBuffer()}catch(t){return console.log(t),e}var n}const ve=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"],$e=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&ve.includes(t)),We=(e,t)=>{if(t=t.toLowerCase().replace(".",""),!ve.includes(t))return!1;if(e){if(e=be(e),Me(e.quality)&&e.quality<100)return!0;if(e.isReSizeByPercent&&Me(e.reSizePercent))return!0;if(e.isReSize&&Me(e.reSizeHeight,e.reSizeWidth))return!0;if(e.isRotate&&e.rotateDegree)return!0;if(e.isConvert){return t!==(e.convertFormat||"jpg")}return!1}return!1},He=async(e,t)=>(t=t.toLowerCase().replace(".",""),ve.includes(t)?await H.default(e).toBuffer():e);var Ke=Object.freeze({__proto__:null,isUrl:ce,isUrlEncode:Ie,handleUrlEncode:_e,getImageSize:de,getFSFile:pe,getURLFile:Se,getPluginNameType:ge,isSimpleName:fe,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Ae,getProcessPluginName:Pe,getNormalPluginName:me,handleUnixStylePath:he,removePluginVersion:Ce,configBlackList:De,isConfigKeyInBlackList:Ue,isInputConfigValid:Le,safeParse:Te,forceNumber:Ne,isDev:Re,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:Oe,imageAddWaterMark:we,imageProcess:xe,needAddWatermark:$e,needCompress:We,removeExif:He});const Fe={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>ce(e)?e:x.default.resolve(e))).filter((t=>{const r=b.default.existsSync(t)||ce(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var ke=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:"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:"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 qe=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"}]};const je=async(e,t,r,n)=>{const i=await e.cmd.inquirer.prompt(t),a="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[a]:i}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},Ye={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,i;try{switch(t){case"buildin":if("compress"===r)await je(e,ke(e),t,r);else if("watermark"===r)await je(e,qe(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await je(e,ke(e),t,n.buildin):"watermark"===n.buildin&&await je(e,qe(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return e.log.error(`No ${t} named ${r}`);n.config&&await je(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),i=e.helper[t].get(n[t]);(null==i?void 0:i.config)&&await je(e,i.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 e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await je(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===(i=e.pluginLoader.getPlugin(r.plugin))||void 0===i?void 0:i.config)&&await je(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),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)}))}))}},Ve={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 i={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(!i[r])return e.log.warn(`No module named ${r}`),e.log.warn("Available modules are uploader|transformer|plugins");n.push(i[r])}else n=Object.keys(i).map((e=>i[e]));const a=await t.inquirer.prompt(n);if(a.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).map((e=>{a.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":a.uploader||e.getConfig("picBed.current"),"picBed.uploader":a.uploader||e.getConfig("picBed.current"),"picBed.transformer":a.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)}))}))}},ze={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},Qe=async(e,t)=>{try{const r=Ze(t.tmp),n=x.default.join(t.tmp,"template");let i={};r.prompts&&r.prompts.length>0&&(i=await e.cmd.inquirer.prompt(r.prompts));let a=await k.default(["**/*"],{cwd:n,dot:!0});if(a=a.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{F.default(t,e,{dot:!0})&&(n=t)})),!n||Xe(e,r.filters[n],i)})),0===a.length)return e.log.warn("Template files not found!");const s=Je(a,n,i);et(t.dest,s),"function"==typeof r.complete&&r.complete({answers:i,options:t,files:a,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){return e.log.error(t)}},Xe=(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}},Ze=e=>{const t=x.default.join(e,"index.js");if(b.default.existsSync(t)){return require(t)}return{}},Je=(e,t,r)=>{const n={};return e.forEach((e=>{const i=b.default.readFileSync(x.default.join(t,e),"utf8"),a=q.default.render(i,r);(Buffer.isBuffer(a)||/[^\s]/.test(a))&&(n[e]=a)})),n},et=(e,t)=>{Object.keys(t).forEach((r=>{const n=x.default.join(e,r);b.default.ensureDirSync(x.default.dirname(n)),b.default.writeFileSync(n,t[r])}))},tt=(e,t)=>{t.offline?b.default.existsSync(t.template)?Qe(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,rt(e,t))},rt=(e,t)=>{b.default.existsSync(t.tmp)&&Y.default.sync(t.tmp),e.log.info("Template files are downloading..."),j.default(t.template,t.tmp,{clone:t.clone},(r=>{if(r)return e.log.error(r);e.log.success("Template files are downloaded!"),Qe(e,t).catch((t=>{e.log.error(t)}))}))},nt={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,i)=>{(async()=>{try{const a=t.includes("/"),s=!r||"."===r,o=x.default.resolve(r||"."),l=i.clone||!1,E=i.offline||!1,u=x.default.join(n.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));i.offline&&(t=u);const c={template:t,project:r,hasSlash:a,inPlace:s,dest:o,clone:l,tmp:u,offline:E};s||b.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&&tt(e,c)})):tt(e,c)}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(K.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(K.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},it={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}`)}if(!r.includes(t))return e.log.warn("No such language");e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)}))}};class at{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),at.currentPlugin&&(this.pluginIdMap.has(at.currentPlugin)?null===(r=this.pluginIdMap.get(at.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(at.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 st=(e=null)=>{at.currentPlugin=e};class ot{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new i.Command,this.inquirer=$.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("0.6.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",Ee),e.cmd.register("config",ue),e.cmd.register("setting",Ye),e.cmd.register("upload",Fe),e.cmd.register("use",Ve),e.cmd.register("proxy",ze),e.cmd.register("init",nt),e.cmd.register("i18n",it)}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=at.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 lt,Et,ut;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(lt||(lt={})),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"}(Et||(Et={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(ut||(ut={}));class ct{constructor(e){this.level={[lt.success]:"green",[lt.info]:"blue",[lt.warn]:"yellow",[lt.error]:"red"},this.ctx=e}handleLog(e,...t){if(!this.ctx.getConfig("silent")){const r=K.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logLevel=this.ctx.getConfig("settings.logLevel"),this.logPath=this.ctx.getConfig("settings.logPath")||x.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(K.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(b.default.existsSync(e)){const t=b.default.statSync(e).size,r=1024*Ne(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){b.default.existsSync(e)&&(b.default.unlinkSync(e),b.default.createFileSync(e))}handleWriteLog(e,t,...r){try{if(this.checkLogLevel(t,this.logLevel)){let n=`${V.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",b.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){return this.handleLog(lt.success,...e)}info(...e){return this.handleLog(lt.info,...e)}error(...e){return this.handleLog(lt.error,...e)}warn(...e){return this.handleLog(lt.warn,...e)}debug(...e){Re()&&this.handleLog(lt.info,...e)}}class It extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=x.default.join(e.baseDir,"piclistTemp");b.default.emptyDirSync(t),this.ttfPath=x.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=x.default.dirname(this.ttfPath);if(b.default.existsSync(e)||b.default.mkdirSync(e,{recursive:!0}),b.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await Q.default.get(this.ttfLink,{responseType:"arraybuffer"});return b.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.rawInput=A.cloneDeep(e),t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("buildIn.watermark");if(r||n){const e=x.default.join(t.baseDir,"piclistTemp");b.default.existsSync(e)||b.default.mkdirSync(e);const i="Add watermark to image",a="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var l,E,u,c,I,_,d;let p;if(ce(s)){if(p=await Se(s,t),!p.success||!p.buffer)throw new Error(p.reason);{let s;if($e(n,null!==(l=p.extname)&&void 0!==l?l:"")){await this.downloadTTF()?(t.log.info(i),s=await we(p.buffer,n,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(We(r,null!==(E=p.extname)&&void 0!==E?E:"")&&(t.log.info(a),s=await xe(null!=s?s:p.buffer,r,null!==(u=p.extname)&&void 0!==u?u:"")),!s&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),s=await He(p.buffer,null!==(c=p.extname)&&void 0!==c?c:"")),s){let n;n=(null==r?void 0:r.isConvert)?null!==(I=null==r?void 0:r.convertFormat)&&void 0!==I?I:"jpg":null!==(_=p.extname)&&void 0!==_?_:"",n=n.startsWith(".")?n:`.${n}`;const i=x.default.join(e,`${p.fileName?`${x.default.basename(p.fileName,x.default.extname(p.fileName))}${n}`:(new Date).getTime()}${n}`);b.default.writeFileSync(i,s),t.input[o]=i}}}else{let l;if($e(n,x.default.extname(s))){await this.downloadTTF()?(t.log.info(i),l=await we(b.default.readFileSync(s),n,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(We(r,x.default.extname(s)))if(t.log.info(a),".heic"===x.default.extname(s)||".heif"===x.default.extname(s)){const t=b.default.readFileSync(s),n=await X.default({buffer:t,format:"JPEG",quality:1}),i=x.default.join(e,`${x.default.basename(s,x.default.extname(s))}.jpg`);b.default.writeFileSync(i,Buffer.from(n)),l=await xe(b.default.readFileSync(i),r,".jpg")}else l=await xe(null!=l?l:b.default.readFileSync(s),r,x.default.extname(s));if(!l&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),l=await He(b.default.readFileSync(s),x.default.extname(s))),l){let n;n=(null==r?void 0:r.isConvert)?null!==(d=null==r?void 0:r.convertFormat)&&void 0!==d?d:"jpg":x.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const i=x.default.join(e,`${x.default.basename(s,x.default.extname(s))}${n}`);b.default.writeFileSync(i,l),t.input[o]=i}}})))}return await this.beforeTransform(t),await this.doTransform(t),await this.beforeUpload(t),await this.doUpload(t),t.input=t.rawInput,await this.afterUpload(t),t}catch(e){if(t.log.warn(Et.FAILED),t.emit(Et.UPLOAD_PROGRESS,-1),t.emit(Et.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(Et.UPLOAD_PROGRESS,0),e.emit(Et.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(Et.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(Et.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(Et.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(Et.AFTER_UPLOAD,e),e.emit(Et.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 i=0;i<r;i++)void 0!==e.output[i].imgUrl&&(t+=n?_e(e.output[i].imgUrl):e.output[i].imgUrl,i!==r-1&&(t+="\n")),delete e.output[i].base64Image,delete e.output[i].buffer;return e.emit(Et.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),i=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${i}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${i}: ${n[r]} error`),e}}))),t}}const _t=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicGo",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),dt=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 i=_t(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(i),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(Et.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},pt=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"password",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 St=(e,t)=>{const r=e.secretId,n=e.secretKey,i=e.appId,a=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const i=Z.default.createHmac("sha1",n).update(o).digest("hex"),a=`put\n/${e.path}${t}\n\nhost=${e.bucket}.cos.${e.area}.myqcloud.com\n`,l=`sha1\n${o}\n${Z.default.createHash("sha1").update(a).digest("hex")}\n`;s=Z.default.createHmac("sha1",i).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${i}&b=${a}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,l=Z.default.createHmac("sha1",n).update(o).digest(),E=Buffer.concat([l,Buffer.from(o)]);s=Buffer.from(E).toString("base64")}return{signature:s,appId:i,bucket:a,signTime:o}},gt=(e,t,r,n,i)=>{const a=e.area,s=e.path;return e.version&&"v4"!==e.version?{method:"PUT",url:`http://${e.bucket}.cos.${e.area}.myqcloud.com/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.cos.${e.area}.myqcloud.com`,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:J.default.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${i};null;null`},body:n,resolveWithFullResponse:!0}:{method:"POST",url:`http://${a}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${a}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${i};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},ft=async e=>{var t,r,n;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const a=e.output,s=i.customUrl,o=i.path,l=!i.version||"v4"===i.version;for(const E of a)if(E.fileName&&E.buffer){const a=St(i,E.fileName);if(!a)return!1;let u=E.buffer;!u&&E.base64Image&&(u=Buffer.from(E.base64Image,"base64"));const c=gt(i,E.fileName,a,u,e.GUI_VERSION||e.VERSION),I=await e.request(c).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let _;if(_=l&&"string"==typeof I?JSON.parse(I):I,400===_.statusCode)throw(null===(t=null==_?void 0:_.body)||void 0===t?void 0:t.err)?_.body.err:new Error((null===(r=null==_?void 0:_.body)||void 0===r?void 0:r.msg)||(null===(n=null==_?void 0:_.body)||void 0===n?void 0:n.message));const d=i.options||"";if(l&&"SUCCESS"===_.message)delete E.base64Image,delete E.buffer,E.imgUrl=s?`${s}/${o}${E.fileName}`:`${_.data.source_url}${d}`;else{if(l||!_||200!==_.statusCode)throw new Error(I.body.msg);delete E.base64Image,delete E.buffer,E.imgUrl=s?`${s}/${encodeURI(o)}${encodeURIComponent(E.fileName)}${d}`:`https://${i.bucket}.cos.${i.area}.myqcloud.com/${encodeURI(o)}${encodeURIComponent(E.fileName)}${d}`}}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(Et.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}},At=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:"password",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:"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}]};const Pt=(e,t,r)=>{const n=t.path||"",{token:i,repo:a}=t;return{method:"PUT",url:`https://api.github.com/repos/${a}/contents/${encodeURI(n)}${encodeURIComponent(e)}`,headers:{Authorization:`token ${i}`,"User-Agent":"PicGo","Content-Type":J.default.lookup(e)||"application/octet-stream"},body:r,json:!0}},mt=(e,t)=>{const r=t.path||"",{token:n,repo:i,branch:a}=t;return{method:"GET",url:`https://api.github.com/repos/${i}/contents/${encodeURI(r)}${encodeURIComponent(e)}?ref=${a}`,headers:{Authorization:`token ${n}`,"User-Agent":"PicGo"},json:!0}},ht=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github 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"),i={message:"Upload by PicGo",branch:t.branch,content:r,path:t.path+encodeURI(n.fileName)},a=Pt(n.fileName,t,i);try{const r=await e.request(a);if(!r)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,t.customUrl?n.imgUrl=`${t.customUrl}/${encodeURI(t.path)}${encodeURIComponent(n.fileName)}`:n.imgUrl=r.content.download_url,n.hash=r.content.sha}catch(r){if(422!==r.statusCode)throw r;{delete n.base64Image,delete n.buffer;const r=await e.request(mt(n.fileName,t));if(!Object.keys(r).length)throw new Error("Get Contents error, please try again");n.hash=r.sha,t.customUrl?n.imgUrl=`${t.customUrl}/${encodeURI(t.path)}${encodeURIComponent(n.fileName)}`:n.imgUrl=r.download_url}}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Ct=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:"password",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 Dt(e,t,r,n){const i=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),a=e.path||"";return{method:"POST",url:`http://upload${i}.qiniup.com/putb64/-1/key/${Buffer.from(a+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":J.default.lookup(t)||"application/octet-stream"},body:n}}function Ut(e){const t=e.accessKey,r=e.secretKey,n=new ee.default.auth.digest.Mac(t,r),i={scope:e.bucket};return new ee.default.rs.PutPolicy(i).uploadToken(n)}const Lt=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"),i=Dt(t,n.fileName,Ut(t),r),a=await e.request(i),s=JSON.parse(a);if(!(null==s?void 0:s.key))throw e.emit(Et.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(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Tt=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:"password",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 Nt=async(e,t,r,n)=>{const i=t.clientId||"",a=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let l;if(a&&s)l=s;else{if(!i)throw new Error("clientId or accessToken is required");l=`Client-ID ${i}`}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(a&&s&&o){let r,n=0,i="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${a}/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){i=e.id;break}n++}while(r.body.data.length>0);i&&E.formData&&(E.formData.album=i)}return t.proxy&&(E.proxy=t.proxy),E},Rt=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"),i=await Nt(e,r,n.fileName,t),a=await e.request(i),s="string"==typeof a?JSON.parse(a):a;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(Et.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}},Bt=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 Ot=(e,t)=>{const r=(new Date).toUTCString(),n=J.default.lookup(t);if(!n)throw Error(`No mime type found for file ${t}`);const i=`PUT\n\n${n}\n${r}\n/${e.bucket}/${e.path}${t}`,a=Z.default.createHmac("sha1",e.accessKeySecret).update(i).digest("base64");return`OSS ${e.accessKeyId}:${a}`},Mt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURIComponent(e.path)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:(new Date).toUTCString(),"Content-Type":J.default.lookup(t)},body:n,resolveWithFullResponse:!0}),yt=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=t.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/","/"===t.path&&(t.path="");try{const r=e.output,n=t.customUrl,i=t.path;for(const a of r)if(a.fileName&&a.buffer){const r=Ot(t,a.fileName);let s=a.buffer;!s&&a.base64Image&&(s=Buffer.from(a.base64Image,"base64"));const o=Mt(t,a.fileName,r,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete a.base64Image,delete a.buffer;const e=t.options||"";a.imgUrl=n?`${n}/${encodeURI(i)}${encodeURIComponent(a.fileName)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${encodeURI(i)}${encodeURIComponent(a.fileName)}${e}`}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Gt=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:"password",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 wt=(e,t)=>{const r=e.path||"",n=e.operator,i=e.password,a=te.default(i),s=(new Date).toUTCString(),o=`PUT&${`/${e.bucket}/${encodeURI(r)}${encodeURIComponent(t)}`}&${s}`;return`UPYUN ${n}:${Z.default.createHmac("sha1",a).update(o).digest("base64")}`},bt=(e,t,r,n)=>{const i=e.bucket,a=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${i}/${encodeURI(a)}${encodeURIComponent(t)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":J.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}},xt=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 i of r)if(i.fileName&&i.buffer){let r=i.buffer;!r&&i.base64Image&&(r=Buffer.from(i.base64Image,"base64"));const a=wt(t,i.fileName),s=bt(t,i.fileName,a,r);if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");delete i.base64Image,delete i.buffer,i.imgUrl=`${t.url}/${encodeURI(n)}${encodeURIComponent(i.fileName)}${t.options}`}return e}catch(t){if("Upload failed"===t.message)e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=Te(t.error);e.emit(Et.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}},vt=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:"password",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}]};const $t=(e,t,r)=>({method:"PUT",url:`${e.host}/${encodeURI(e.path)}${encodeURIComponent(t)}`,headers:{Authorization:`Basic ${Buffer.from(`${e.username}:${e.password}`).toString("base64")}`,"Content-Type":J.default.lookup(t)||"application/octet-stream","Content-Length":r.length},body:r,resolveWithFullResponse:!0}),Wt=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,"")+"/";try{const r=e.output,n=t.customUrl,i=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 s=$t(t,a.fileName,r),o=await e.request(s);if(!(o.statusCode>=200&&o.statusCode<300))throw new Error("Upload failed");{delete a.base64Image,delete a.buffer;const e=n||t.host;a.imgUrl=`${e}/${"/"===i?"":encodeURI(i)}${encodeURIComponent(a.fileName)}`}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ht=e=>{const t=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:t.host||"",required:!0},{name:"sslEnabled",type:"confirm",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!0,default:t.sslEnabled||!0,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:t.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:"password",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:t.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:t.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"customUrl",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:t.customUrl||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}}]};const Kt=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:yt,config:Gt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:ft,config:At})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:dt,config:pt})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:ht,config:Ct})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:Lt,config:Tt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:Rt,config:Bt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:xt,config:vt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:Wt,config:Ht})}(e)}}),Ft=(e,t,r)=>{const n=de(t);return n.real||(e.log.warn(`can't get ${r}'s image size`),e.log.warn("fallback to 200 * 200")),n};var kt={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let i;if(i=ce(r)?await Se(r,e):await pe(r),!i.success||!i.buffer)throw new Error(i.reason);{const a=Ft(e,i.buffer,r);t[n]={buffer:i.buffer,fileName:i.fileName,width:a.width,height:a.height,extname:i.extname}}}))),e.output=t.filter((e=>e)),e}};var qt={handle:async e=>(e.output.push(...e.input),e)};class jt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=x.default.join(this.ctx.baseDir,"package.json");if(!b.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};b.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return re.default.sync(t,{basedir:e.baseDir})}catch(r){return x.default.join(e.baseDir,"node_modules",t)}}load(){const e=x.default.join(this.ctx.baseDir,"package.json"),t=x.default.join(this.ctx.baseDir,"node_modules/");if(!b.default.existsSync(t))return!1;const r=b.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),i=Object.keys(r.devDependencies||{}),a=n.concat(i).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return b.default.existsSync(t)}));for(const e of a)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),st(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),st(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(Et.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),st(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=x.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 Yt={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'},Vt={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const zt=async e=>{!function(e){const t=x.default.join(e.baseDir,"piclist-clipboard-images");b.default.existsSync(t)||b.default.mkdirSync(t)}(e);const t=x.default.join(e.baseDir,"piclist-clipboard-images",`${V.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const i=(()=>{const e=process.platform;if(ne.default)return"wsl";if("win32"===e)return"10"===v.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),a=x.default.join(e.baseDir,Vt[i]);let s;b.default.existsSync(a)||b.default.writeFileSync(a,Yt[i],"utf8"),s="darwin"===i?L.spawn("osascript",[a,t]):"win32"===i||"win10"===i?L.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",a,t]):L.spawn("sh",[a,t]),s.stdout.on("data",(a=>{if("linux"===i&&"no xclip or wl-clipboard"===a.toString().trim())return e.emit(Et.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=a.toString().trim();let o=!1;if(x.default.basename(s)!==x.default.basename(t)&&b.default.existsSync(s)&&(o=!0),"no image"!==s&&!b.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},Qt=new r.EventEmitter,Xt=new ae.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2"});function Zt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Jt(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function er(e){var t,r,n,i,a,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===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.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 tr{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Qt.on(ut.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=se.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=Xt;const r=Q.default.create(this.options);r.interceptors.response.use(Jt,er);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 i=e.proxy;if("string"==typeof i){try{i=new o.URL(e.proxy)}catch(e){i=!1,n.proxy=!1,console.error(e)}r=!0}i&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=se.default.httpsOverHttp({proxy:{host:null==i?void 0:i.hostname,port:parseInt(null==i?void 0:i.port,10)}})):n.proxy={host:i.hostname,port:parseInt(i.port,10),protocol:"http"})}if("formData"in e){const t=new ie.default;for(const r in e.formData)Zt(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 i="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(i=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(i=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(i=e.headers["content-type"],delete e.headers["content-type"]),""!==i&&e.headers&&(e.headers["Content-Type"]=i),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 rr{constructor(e){if(this.ctx=e,this.db=new O.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){return 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 nr{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],i=e.map((e=>ir(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)),a=i.map((e=>e.fullName)),s=i.map((e=>e.pkgName));if(a.length>0){const e=await this.execCommand("install",a,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=>ir(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=>ir(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={},i={}){const a=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");a&&(E=E.concat(`--registry=${a}`)),s&&(E=E.concat(`--proxy=${s}`));try{const e=oe.default("npm",E,{cwd:r,env:Object.assign({},process.env,i)});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(Et.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(Et.FAILED,e)}}))}}const ir=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=Pe(t,e.log);if(!n)return r;const i=me(n,e.log);return i?{success:!0,fullName:n,pkgName:i}:r},ar={"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_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_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_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_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_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_CUSTOMURL:"设定自定义域名",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_CUSTOMURL:"例如:https://test.com",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_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_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",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_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_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_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_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_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_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_CUSTOMURL:"例如:https://test.com",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_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_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",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_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_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_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_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_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_CUSTOMURL:"Set Custom URL",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_CUSTOMURL:"Ex. https://test.com",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_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",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 sr{constructor(e){this.ctx=e,this.objectAdapter=new G.ObjectAdapter(ar);let t=this.ctx.getConfig("settings.language")||"zh-CN";ar[t]||(t="zh-CN"),this.i18n=new G.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();b.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=x.default.join(e,t.name),n=b.default.readFileSync(r,"utf8");try{const e=le.default.load(n);ar[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=x.default.join(this.ctx.baseDir,"i18n-cli");return b.default.pathExistsSync(e)||b.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=A.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),ar[e]=t,!0)}getLanguageList(){return Object.keys(ar)}}class or extends r.EventEmitter{constructor(e=""){super(),this.VERSION="0.6.0",this.configPath=e,this.output=[],this.input=[],this.rawInput=[],this.helper={transformer:new at("transformer"),uploader:new at("uploader"),beforeTransformPlugins:new at("beforeTransformPlugins"),beforeUploadPlugins:new at("beforeUploadPlugins"),afterUploadPlugins:new at("afterUploadPlugins")},this.initConfigPath(),this.log=new ct(this),this.cmd=new ot(this),this.pluginHandler=new nr(this),this.initConfig(),this.init()}get pluginLoader(){return this._pluginLoader}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==x.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=x.default.dirname(this.configPath);b.default.pathExistsSync(this.configPath)||b.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new rr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new sr(this),this.Request=new tr(this),this._pluginLoader=new jt(this),st("picgo"),Kt().register(this),{register(e){e.helper.transformer.register("path",kt),e.helper.transformer.register("base64",qt)}}.register(this),st(""),this._pluginLoader.load(),this.lifecycle=new It(this)}catch(e){throw this.emit(Et.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?A.get(this._config,e):this._config}saveConfig(e){Le(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&&(Ue(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Le(e)?Object.keys(e).forEach((t=>{Ue(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),A.set(this._config,t,e[t]),Qt.emit(ut.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Ue(e)?this.log.warn(`the config.${e} can't be unset`):A.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 zt(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(Et.FAILED,(()=>{t||b.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||b.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(Et.FAILED,e),e}}}exports.Commander=ot,exports.Lifecycle=It,exports.LifecyclePlugins=at,exports.Logger=ct,exports.PicGo=or,exports.PicGoUtils=Ke,exports.PluginHandler=nr,exports.PluginLoader=jt,exports.Request=tr;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3NldHRpbmcudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXNlLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3Byb3h5LnRzIiwiLi4vc3JjL3V0aWxzL2luaXRVdGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbml0LnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2kxOG4udHMiLCIuLi9zcmMvbGliL0xpZmVjeWNsZVBsdWdpbnMudHMiLCIuLi9zcmMvbGliL0NvbW1hbmRlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbmRleC50cyIsIi4uL3NyYy91dGlscy9lbnVtLnRzIiwiLi4vc3JjL2xpYi9Mb2dnZXIudHMiLCIuLi9zcmMvY29yZS9MaWZlY3ljbGUudHMiLCIuLi9zcmMvdXRpbHMvY3JlYXRlQ29udGV4dC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NtbXMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2dpdGh1Yi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3Fpbml1LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGl5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91cHl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3dlYmRhdi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvcGF0aC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2Jhc2U2NC50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9pMThuL2luZGV4LnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHBsdWdpbkhhbmRsZXI6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIC8vIGNvbnN0IHBsdWdpbkhhbmRsZXIgPSBuZXcgUGx1Z2luSGFuZGxlcihjdHgpXHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5zdGFsbCA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2luc3RhbGwgcGljZ28gcGx1Z2luJylcclxuICAgICAgLmFsaWFzKCdhZGQnKVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmFsaWFzKCdybScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudW5pbnN0YWxsKHBsdWdpbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGRhdGUgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGRhdGUgcGljZ28gcGx1Z2luJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHByb3h5LFxyXG4gICAgICAgICAgcmVnaXN0cnlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQge1xyXG4gIElJbWdTaXplLFxyXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxyXG4gIElQbHVnaW5OYW1lVHlwZSxcclxuICBJTG9nZ2VyLFxyXG4gIElQaWNHbyxcclxuICBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcclxuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgVGV4dFRvU1ZHIGZyb20gJ3RleHQtdG8tc3ZnJ1xyXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+ICgvXmh0dHBzPzpcXC9cXC8vKS50ZXN0KHVybClcclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHVybCA9IHVybCB8fCAnJ1xyXG4gIHRyeSB7XHJcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XHJcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcclxuICAgIHVybCA9IGVuY29kZVVSSSh1cmwpXHJcbiAgfVxyXG4gIHJldHVybiB1cmxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwIH0gPSBpbWFnZVNpemUoZmlsZSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IHRydWUsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHRcclxuICAgIH1cclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICAvLyBmYWxsYmFjayB0byAyMDAgKiAyMDBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogMjAwLFxyXG4gICAgICBoZWlnaHQ6IDIwMFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZTRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHRuYW1lOiBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGJ1ZmZlcjogYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpLFxyXG4gICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxyXG4gICAgICBzdWNjZXNzOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXHJcbiAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXRcclxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdCh7XHJcbiAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBidWZmZXI6IHJlcyxcclxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSBlcnJvciwgJHtlcnJvcj8ubWVzc2FnZSA/PyAnJ31gXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSkoKS5jYXRjaChyZWplY3QpXHJcbiAgfSlcclxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xyXG4gICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IHRpbWVvdXRgXHJcbiAgICAgIH0pXHJcbiAgICB9LCAzMDAwMClcclxuICB9KVxyXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxyXG4gKiAzLiB4eHggLT4gc2ltcGxlXHJcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cclxuICogQHBhcmFtIG5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2NvcGUnXHJcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgcmV0dXJuICdub3JtYWwnXHJcbiAgfSBlbHNlIGlmIChpc1NpbXBsZU5hbWUobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2ltcGxlJ1xyXG4gIH1cclxuICByZXR1cm4gJ3Vua25vd24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4geHh4IC0+IHRydWVcclxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKG5hbWVPclBhdGguaW5jbHVkZXMoJy8nKSB8fCBuYW1lT3JQYXRoLmluY2x1ZGVzKCdcXFxcJykpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG4vKipcclxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4geHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL15AW14vXStcXC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXHJcbiAqIEBwYXJhbSBzY29wZSBwbHVnaW5TY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChzY29wZSkge1xyXG4gICAgcmV0dXJuIGBAJHtzY29wZX0vcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3h4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxyXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcclxuICAgIGNhc2UgJ25vcm1hbCc6XHJcbiAgICBjYXNlICdzY29wZSc6XHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICBjYXNlICdzaW1wbGUnOlxyXG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXHJcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcclxuICAgICAgbGV0IHBsdWdpblBhdGggPSBuYW1lT3JQYXRoXHJcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXHJcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIDMuIGludmFsaWQgbmFtZU9yUGF0aFxyXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAzLiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxyXG4gKiB0aGVuIHVzZSBbcGFja2FnZS5qc29uJ3MgbmFtZV0sIHVzdWFsbHkgbWF0Y2ggdGhlIHNjb3BlIHBhY2thZ2UuXHJcbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKSlcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcclxuICAgICAgLy8gdGhlIG5hbWVPclBhdGggaGVyZSB3aWxsIGJlIGVuc3VyZWQgd2l0aCB1bml4IHN0eWxlXHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhY2thZ2VKU09OUGF0aCA9IHBhdGgucG9zaXguam9pbihuYW1lT3JQYXRoLCAncGFja2FnZS5qc29uJylcclxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XHJcbiAgICAgICAgaWYgKCFwa2cubmFtZT8uaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgbG9nZ2VyLndhcm4oYFRoZSBwbHVnaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZCBpcyAke3BrZy5uYW1lIGFzIHN0cmluZyB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gKVxyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwa2cubmFtZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIHRyYW5zZm9ybSB0aGUgcGF0aCB0byB1bml4IHN0eWxlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxyXG4gKiAyLiAveHh4L3h4eCAtPiAveHh4L3h4eFxyXG4gKiBAcGFyYW0gcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVuaXhTdHlsZVBhdGggPSAocGF0aFN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcclxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcclxufVxyXG5cclxuLyoqXHJcbiAqIHJlbW92ZSBwbHVnaW4gdmVyc2lvbiB3aGVuIHJlZ2lzdGVyIHBsdWdpbiBuYW1lXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqIEBwYXJhbSBzY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZVBsdWdpblZlcnNpb24gPSAobmFtZU9yUGF0aDogc3RyaW5nLCBzY29wZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xyXG4gICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hBcnIgPSBuYW1lT3JQYXRoLm1hdGNoKHJlZylcclxuICAgIGlmICghbWF0Y2hBcnIpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcclxuICogb25seSBjYW4gYmUgZ290XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cclxuXHJcbi8qKlxyXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XHJcbiAqIEBwYXJhbSBrZXlcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGNvbmZpZ0JsYWNrTGlzdC5zb21lKGJsYWNrSXRlbSA9PiBrZXkuc3RhcnRzV2l0aChibGFja0l0ZW0pKVxyXG59XHJcblxyXG4vKipcclxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxyXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxyXG4gKiAmJiBjYW4ndCBiZSBhcnJheVxyXG4gKiBAcGFyYW0gY29uZmlnXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKFxyXG4gICAgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiZcclxuICAgICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiZcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4gKHN0cjogc3RyaW5nKTogVCB8IHN0cmluZyB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcmV0dXJuIHN0clxyXG4gIH1cclxufVxyXG5cclxuLy8gaG9sZC4uLlxyXG4vLyBleHBvcnQgY29uc3QgY29uZmlnV2hpdGVMaXN0OiBSZWdFeHBbXSA9IFtcclxuLy8gICAvXnBpY0JlZC8sXHJcbi8vICAgL15waWNnb1BsdWdpbnMvLFxyXG4vLyAgIC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sXHJcbi8vICAgL2RlYnVnLyxcclxuLy8gICAvc2lsZW50LyxcclxuLy8gICAvY29uZmlnUGF0aC8sXHJcbi8vICAgL15zZXR0aW5ncy8sXHJcbi8vIF1cclxuXHJcbi8vIGV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluV2hpdGVMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbi8vICAgcmV0dXJuIGNvbmZpZ1doaXRlTGlzdC5zb21lKHdoaXRlSXRlbSA9PiB3aGl0ZUl0ZW0udGVzdChrZXkpKVxyXG4vLyB9XHJcblxyXG5leHBvcnQgY29uc3QgZm9yY2VOdW1iZXIgPSAobnVtOiBzdHJpbmcgfCBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzUHJvZCA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB0ZXh0MlNWRyAoXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICBjb2xvcj86IHN0cmluZyxcclxuICBmb250RmFtaWx5Pzogc3RyaW5nXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XHJcbiAgZm9udEZhbWlseSA9ICFmb250RmFtaWx5ID8gZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIDogZm9udEZhbWlseVxyXG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxyXG4gIGNvbnN0IG9wdGlvbnM6IFRleHRUb1NWRy5HZW5lcmF0aW9uT3B0aW9ucyA9IHtcclxuICAgIGFuY2hvcjogJ3RvcCcsXHJcbiAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgIGZpbGw6IGNvbG9yXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IHRleHRTVkcgPSB0ZXh0MlNWRy5nZXRTVkcodGV4dCwgb3B0aW9ucylcclxuICBjb25zdCBzdmcgPSBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxyXG4gIHJldHVybiBzdmdcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IGAke19fZGlybmFtZX0vYXNzZXRzL3BpY2xpc3QucG5nYFxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEFkZFdhdGVybWFyayAoXHJcbiAgaW1nOiBCdWZmZXIsXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICBpc0Z1bGxTY3JlZW5XYXRlcm1hcms/OiBib29sZWFuLFxyXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8gPSAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXHJcbiAgY29uc3QgaW1hZ2UgPSBzaGFycChpbWcpXHJcbiAgY29uc3QgeyB3aWR0aDogaW1nV2lkdGggPSAyMDAgfSA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKClcclxuICBjb25zdCB3YXRlcm1hcmsgPSBhd2FpdCBjcmVhdGVXYXRlcm1hcmsoXHJcbiAgICB3YXRlcm1hcmtUeXBlLFxyXG4gICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgdGV4dCxcclxuICAgIHdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgd2F0ZXJtYXJrU2NhbGVSYXRpbyxcclxuICAgIHdhdGVybWFya0NvbG9yLFxyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoLFxyXG4gICAgaW1nV2lkdGgsXHJcbiAgICB3YXRlcm1hcmtEZWdyZWVcclxuICApXHJcbiAgY29uc3QgY29tcG9zaXRlZCA9IGF3YWl0IGltYWdlXHJcbiAgICAuY29tcG9zaXRlKFtcclxuICAgICAge1xyXG4gICAgICAgIGlucHV0OiB3YXRlcm1hcmssXHJcbiAgICAgICAgZ3Jhdml0eTogcG9zaXRpb24gfHwgJ3NvdXRoZWFzdCcsXHJcbiAgICAgICAgdGlsZTogaXNGdWxsU2NyZWVuV2F0ZXJtYXJrXHJcbiAgICAgIH1cclxuICAgIF0pXHJcbiAgICAudG9CdWZmZXIoKVxyXG4gIHJldHVybiBjb21wb3NpdGVkXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdhdGVybWFyayAoXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIGltZ1dpZHRoOiBudW1iZXIgPSAyMDAsXHJcbiAgd2F0ZXJtYXJrRGVncmVlOiBudW1iZXIgPSAwXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgbGV0IHdhdGVybWFyazogYW55XHJcbiAgaWYgKHdhdGVybWFya1R5cGUgPT09ICdpbWFnZScpIHtcclxuICAgIHdhdGVybWFya0ltYWdlUGF0aCA9IHdhdGVybWFya0ltYWdlUGF0aCB8fCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoXHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCBzaGFycCh3YXRlcm1hcmtJbWFnZVBhdGgpLnRvQnVmZmVyKClcclxuICB9IGVsc2Uge1xyXG4gICAgd2F0ZXJtYXJrID0gYXdhaXQgdGV4dDJTVkcoXHJcbiAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgdGV4dCxcclxuICAgICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgIHdhdGVybWFya0ZvbnRQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aFxyXG4gICAgKVxyXG4gIH1cclxuICBjb25zdCB7IHdpZHRoOiB3YXRlcm1hcmtXaWR0aCwgaGVpZ2h0OiB3YXRlcm1hcmtIZWlnaHQgfSA9IGF3YWl0IGdldFNpemUoXHJcbiAgICB3YXRlcm1hcmtcclxuICApXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplV2lkdGggPSBNYXRoLmZsb29yKGltZ1dpZHRoICogZm9yY2VOdW1iZXIod2F0ZXJtYXJrU2NhbGVSYXRpbykpXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0ID0gTWF0aC5mbG9vcihcclxuICAgICh3YXRlcm1hcmtSZXNpemVXaWR0aCAqIHdhdGVybWFya0hlaWdodCkgLyB3YXRlcm1hcmtXaWR0aFxyXG4gIClcclxuICByZXR1cm4gYXdhaXQgc2hhcnAod2F0ZXJtYXJrKVxyXG4gICAgLnJlc2l6ZSh3YXRlcm1hcmtSZXNpemVXaWR0aCwgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0LCB7XHJcbiAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgIH0pXHJcbiAgICAucm90YXRlKHdhdGVybWFya0RlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIC50b0J1ZmZlcigpXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFNpemUgKGltYWdlOiBCdWZmZXIpOiBQcm9taXNlPHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfT4ge1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgc2hhcnAoaW1hZ2UpLm1ldGFkYXRhKClcclxuICByZXR1cm4geyB3aWR0aDogd2lkdGggfHwgMjAwLCBoZWlnaHQ6IGhlaWdodCB8fCAyMDAgfVxyXG59XHJcblxyXG5jb25zdCB2YWxpZFBhcmFtID0gKC4uLnBhcmFtczogYW55W10pOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcGFyYW1zLmV2ZXJ5KHBhcmFtID0+IHtcclxuICAgIGlmIChwYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtICE9PSAnJ1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtID4gMFxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0ID0gW1xyXG4gICdhdmlmJyxcclxuICAnZHonLFxyXG4gICdmaXRzJyxcclxuICAnZ2lmJyxcclxuICAnaGVpZicsXHJcbiAgJ2lucHV0JyxcclxuICAnanBlZycsXHJcbiAgJ2pwZycsXHJcbiAgJ2pwMicsXHJcbiAgJ2p4bCcsXHJcbiAgJ21hZ2ljaycsXHJcbiAgJ29wZW5zbGlkZScsXHJcbiAgJ3BkZicsXHJcbiAgJ3BuZycsXHJcbiAgJ3BwbScsXHJcbiAgJ3JhdycsXHJcbiAgJ3N2ZycsXHJcbiAgJ3RpZmYnLFxyXG4gICd0aWYnLFxyXG4gICd2JyxcclxuICAnd2VicCdcclxuXVxyXG5cclxuY29uc3QgdmFsaWRPdXRwdXRGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QuaW5jbHVkZXMoZm9ybWF0KVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUV4dExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsgKGltZzogQnVmZmVyLCBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0cnkge1xyXG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZylcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMud2F0ZXJtYXJrVGV4dCkpIHtcclxuICAgICAgaW1hZ2UgPSBzaGFycChhd2FpdCBBZGRXYXRlcm1hcmsoXHJcbiAgICAgICAgaW1nLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXHJcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxyXG4gICAgICApKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25zIChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcclxuICByZXR1cm4ge1xyXG4gICAgcXVhbGl0eTogZm9yY2VOdW1iZXIob3B0aW9ucy5xdWFsaXR5KSxcclxuICAgIGlzQ29udmVydDogb3B0aW9ucy5pc0NvbnZlcnQgfHwgZmFsc2UsXHJcbiAgICBjb252ZXJ0Rm9ybWF0OiBvcHRpb25zLmNvbnZlcnRGb3JtYXQgfHwgJ2pwZycsXHJcbiAgICBpc1JlU2l6ZTogb3B0aW9ucy5pc1JlU2l6ZSB8fCBmYWxzZSxcclxuICAgIHJlU2l6ZUhlaWdodDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVIZWlnaHQpLFxyXG4gICAgcmVTaXplV2lkdGg6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplV2lkdGgpLFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQ6IG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2UsXHJcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxyXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlUHJvY2VzcyAoaW1nOiBCdWZmZXIsIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLCByYXdGb3JtYXQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucylcclxuICB0cnkge1xyXG4gICAgcmF3Rm9ybWF0ID0gcmF3Rm9ybWF0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gICAgaWYgKCFpbWFnZUV4dExpc3QuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xyXG4gICAgICByZXR1cm4gaW1nXHJcbiAgICB9XHJcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nKVxyXG4gICAgbGV0IHF1YWxpdHkgPSAxMDBcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucXVhbGl0eSkgJiYgb3B0aW9ucy5xdWFsaXR5ISA8IDEwMCkge1xyXG4gICAgICBxdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5IVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQpIHtcclxuICAgICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5yZVNpemVQZXJjZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZVdpZHRoICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhIC8gMTAwKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pc1JlU2l6ZSkge1xyXG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZUhlaWdodCwgb3B0aW9ucy5yZVNpemVXaWR0aCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgcXVhbGl0eVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChyYXdGb3JtYXQgYXMgYW55LCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUZvcm1hdExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgY29uc3QgbmVlZEFkZFdhdGVybWFyayA9ICh3YXRlcm1hcmtPcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIHJldHVybiAhIXdhdGVybWFya09wdGlvbnMgJiYgISF3YXRlcm1hcmtPcHRpb25zLmlzQWRkV2F0ZXJtYXJrICYmIGltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbmVlZENvbXByZXNzID0gKGNvbXByZXNzT3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgY29tcHJlc3NPcHRpb25zID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXHJcbiAgICBpZiAodmFsaWRQYXJhbShjb21wcmVzc09wdGlvbnMucXVhbGl0eSkgJiYgY29tcHJlc3NPcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzUmVTaXplQnlQZXJjZW50ICYmIHZhbGlkUGFyYW0oY29tcHJlc3NPcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzUmVTaXplICYmIHZhbGlkUGFyYW0oY29tcHJlc3NPcHRpb25zLnJlU2l6ZUhlaWdodCwgY29tcHJlc3NPcHRpb25zLnJlU2l6ZVdpZHRoKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzT3B0aW9ucy5pc1JvdGF0ZSAmJiBjb21wcmVzc09wdGlvbnMucm90YXRlRGVncmVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzQ29udmVydCkge1xyXG4gICAgICBjb25zdCBuZXdGb3JtYXQgPSBjb21wcmVzc09wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJ1xyXG4gICAgICByZXR1cm4gZmlsZUV4dCAhPT0gbmV3Rm9ybWF0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCByZW1vdmVFeGlmID0gYXN5bmMgKGltZzogQnVmZmVyLCBmaWxlRXh0OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpKSB7XHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG4gIHJldHVybiBhd2FpdCBzaGFycChpbWcpLnRvQnVmZmVyKClcclxufVxyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVwbG9hZDogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VwbG9hZCcpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndXBsb2FkLCBnbyBnbyBnbycpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tpbnB1dC4uLl0nKVxyXG4gICAgICAuYWxpYXMoJ3UnKVxyXG4gICAgICAuYWN0aW9uKChpbnB1dDogc3RyaW5nW10pID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gaW5wdXRcclxuICAgICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsKGl0ZW0pID8gaXRlbSA6IHBhdGgucmVzb2x2ZShpdGVtKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBleGlzdCA9IGZzLmV4aXN0c1N5bmMoaXRlbSkgfHwgaXNVcmwoaXRlbSlcclxuICAgICAgICAgICAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYCR7aXRlbX0gZG9lcyBub3QgZXhpc3QuYClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhd2FpdCBjdHgudXBsb2FkKGlucHV0TGlzdClcclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVwbG9hZFxyXG4iLCJcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPignYnVpbGRJbi5jb21wcmVzcycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdxdWFsaXR5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQ29udmVydCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQ29udmVydCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NvbnZlcnRGb3JtYXQnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnYXZpZicsICdkeicsICdmaXRzJywgJ2dpZicsICdoZWlmJywgJ2lucHV0JywgJ2pwZWcnLCAnanBnJywgJ2pwMicsICdqeGwnLCAnbWFnaWNrJywgJ29wZW5zbGlkZScsICdwZGYnLCAncG5nJywgJ3BwbScsICdyYXcnLCAnc3ZnJywgJ3RpZmYnLCAndGlmJywgJ3YnLCAnd2VicCddLFxyXG4gICAgICBkZWZhdWx0OiAnanBnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZSB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVdpZHRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplSGVpZ2h0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZUhlaWdodCB8fCA1MDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZUJ5UGVyY2VudCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVQZXJjZW50JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVQZXJjZW50IHx8IDUwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSb3RhdGUnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUm90YXRlIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncm90YXRlRGVncmVlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVtb3ZlRXhpZicsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVtb3ZlRXhpZiB8fCBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0FkZFdhdGVybWFyaycsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQWRkV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVHlwZScsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsndGV4dCcsICdpbWFnZSddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRnVsbFNjcmVlbldhdGVybWFyayB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0RlZ3JlZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ZvbnRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1NjYWxlUmF0aW8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0NvbG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtDb2xvciB8fCAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtJbWFnZVBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ltYWdlUGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1Bvc2l0aW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnbm9ydGgnLCAnbm9ydGhlYXN0JywgJ3NvdXRoZWFzdCcsICdzb3V0aCcsICdzb3V0aHdlc3QnLCAnbm9ydGh3ZXN0JywgJ3dlc3QnLCAnZWFzdCcsICdjZW50ZXInLCAnY2VudHJlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjb21wcmVzcyBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci9jb21wcmVzcydcclxuaW1wb3J0IHdhdGVybWFyayBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci93YXRlcm1hcmsnXHJcblxyXG4vLyBoYW5kbGUgbW9kdWxlcyBjb25maWcgLT4gc2F2ZSB0byBwaWNnbyBjb25maWcgZmlsZVxyXG5jb25zdCBoYW5kbGVDb25maWcgPSBhc3luYyAoY3R4OiBJUGljR28sIHByb21wdHM6IElQbHVnaW5Db25maWdbXSwgbW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KHByb21wdHMpXHJcbiAgY29uc3QgY29uZmlnTmFtZSA9IG1vZHVsZSA9PT0gJ3VwbG9hZGVyJ1xyXG4gICAgPyBgcGljQmVkLiR7bmFtZX1gIDogbW9kdWxlID09PSAndHJhbnNmb3JtZXInXHJcbiAgICAgID8gYHRyYW5zZm9ybWVyLiR7bmFtZX1gIDogbW9kdWxlID09PSAnYnVpbGRpbidcclxuICAgICAgICA/IGBidWlsZEluLiR7bmFtZX1gIDogbmFtZVxyXG4gIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgIFtjb25maWdOYW1lXTogYW5zd2VyXHJcbiAgfSlcclxuICBpZiAobW9kdWxlID09PSAndXBsb2FkZXInKSB7XHJcbiAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdwaWNCZWQuY3VycmVudCc6IG5hbWUsXHJcbiAgICAgICdwaWNCZWQudXBsb2FkZXInOiBuYW1lXHJcbiAgICB9KVxyXG4gIH0gZWxzZSBpZiAobW9kdWxlID09PSAndHJhbnNmb3JtZXInKSB7XHJcbiAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBuYW1lXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgc2V0dGluZyA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3NldCcpXHJcbiAgICAgIC5hbGlhcygnY29uZmlnJylcclxuICAgICAgLmFyZ3VtZW50cygnPG1vZHVsZT4gW25hbWVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjb25maWd1cmUgY29uZmlnIG9mIHBpY2dvIG1vZHVsZXMsIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgICAgICAgLy8gYXdhaXQgY3R4LnBsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgICAgICAgLy8gaWYgYSBtb2R1bGUgaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnYnVpbGRpbic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbXByZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2F0ZXJtYXJrJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydjb21wcmVzcycsICd3YXRlcm1hcmsnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBidWlsZGluIG1vZHVsZSdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdjb21wcmVzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3dhdGVybWFyaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAndXBsb2FkZXInOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ3RyYW5zZm9ybWVyJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHgubG9nLmVycm9yKGBObyAke21vZHVsZX0gbmFtZWQgJHtuYW1lfWApXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke21vZHVsZX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlclttb2R1bGVdLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYENob29zZSBhKG4pICR7bW9kdWxlfWBcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAncGx1Z2luJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghbmFtZS5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmxvZy5lcnJvcihgTm8gcGx1Z2luIG5hbWVkICR7bmFtZX1gKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHBsdWdpbidcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbik/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBhbnN3ZXIucGx1Z2luKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUgPT09ICdwbHVnaW4nKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBjb25maWcsIHBsZWFzZSBydW4gXFwncGljZ28gdXNlIHBsdWdpbnNcXCcnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNldHRpbmdcclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSwgSUNMSUNvbmZpZ3MsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVzZTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VzZScpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1c2UgbW9kdWxlcyBvZiBwaWNnbycpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICBsZXQgcHJvbXB0czogYW55W10gPSBbXVxyXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xyXG4gICAgICAgICAgICAgIHVwbG9hZGVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhbiB1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnVwbG9hZGVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHBsdWdpbnM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIHBsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBjdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtpdGVtfWApKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcclxuICAgICAgICAgICAgICAgIHByb21wdHMucHVzaChjb25maWdbbW9kdWxlXSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW5zJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcHJvbXB0cyA9IE9iamVjdC5rZXlzKGNvbmZpZykubWFwKChpdGVtOiBzdHJpbmcpID0+IGNvbmZpZ1tpdGVtXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBmb3IgcGx1Z2lucyBvcHRpb24gZnJvbSBBcnJheSB0byBvYmplY3RcclxuICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IGN0eC5nZXRDb25maWc8SVN0cmluZ0tleU1hcDxib29sZWFuPj4oJ3BpY2dvUGx1Z2lucycpXHJcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMocGx1Z2lucykubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgcGx1Z2luc1xyXG4gICAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAgIHBpY2dvUGx1Z2luczogcGx1Z2luc1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHVwbG9hZGVyICYgdHJhbnNmb3JtZXJcclxuICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICdwaWNCZWQuY3VycmVudCc6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IGFuc3dlci50cmFuc2Zvcm1lciB8fCAncGF0aCdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgY29uZmlnIHN1Y2Nlc3NmdWxseSEnKVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1c2VcclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwcm94eTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgJ3BpY0JlZC5wcm94eSc6IHByb3h5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByb3h5XHJcbiIsImltcG9ydCBtYXRjaCBmcm9tICdtaW5pbWF0Y2gnXHJcbmltcG9ydCB7IElQaWNHbywgSU9wdGlvbnMsIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xyXG5pbXBvcnQgZWpzIGZyb20gJ2VqcydcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0ZW1wbGF0ZSBmaWxlcyB0byBkZXN0aW5hdGlvbiBmaWxlcy5cclxuICogQHBhcmFtIHtQaWNHb30gY3R4XHJcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRpb25zKG9wdGlvbnMudG1wKVxyXG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKG9wdGlvbnMudG1wLCAndGVtcGxhdGUnKVxyXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxyXG4gICAgaWYgKG9wdHMucHJvbXB0cyAmJiBvcHRzLnByb21wdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhbnN3ZXJzID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQob3B0cy5wcm9tcHRzKVxyXG4gICAgfVxyXG4gICAgbGV0IF9maWxlczogc3RyaW5nW10gPSBhd2FpdCBnbG9iYnkoWycqKi8qJ10sIHsgY3dkOiBzb3VyY2UsIGRvdDogdHJ1ZSB9KSAvLyBnZXQgZmlsZXMnIG5hbWUgYXJyYXlcclxuICAgIF9maWxlcyA9IF9maWxlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICBsZXQgZ2xvYiA9ICcnXHJcbiAgICAgIE9iamVjdC5rZXlzKG9wdHMuZmlsdGVycykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAobWF0Y2goaXRlbSwga2V5LCB7IGRvdDogdHJ1ZSB9KSkge1xyXG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChnbG9iKSB7IC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzKGN0eCwgb3B0cy5maWx0ZXJzW2dsb2JdLCBhbnN3ZXJzKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gY3R4LmxvZy53YXJuKCdUZW1wbGF0ZSBmaWxlcyBub3QgZm91bmQhJylcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVzID0gcmVuZGVyKF9maWxlcywgc291cmNlLCBhbnN3ZXJzKVxyXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxyXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIG9wdHMuY29tcGxldGUoeyBhbnN3ZXJzLCBvcHRpb25zLCBmaWxlczogX2ZpbGVzLCBjdHggfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xyXG4gICAgICBjdHgubG9nLnN1Y2Nlc3Mob3B0cy5jb21wbGV0ZU1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcclxuICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgIHJldHVybiBjdHgubG9nLmVycm9yKGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcclxuICogQHBhcmFtIGN0eCBQaWNHb1xyXG4gKiBAcGFyYW0gZXhwIGNvbmRpdGlvbiBleHByZXNzaW9uXHJcbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxyXG4gKi9cclxuY29uc3QgZmlsdGVycyA9IChjdHg6IElQaWNHbywgZXhwOiBhbnksIGRhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcclxuICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbignZGF0YScsICd3aXRoIChkYXRhKSB7IHJldHVybiAnICsgZXhwICsgJ30nKVxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gZm4oZGF0YSlcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGBFcnJvciB3aGVuIGV2YWx1YXRpbmcgZmlsdGVyIGNvbmRpdGlvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgb3B0aW9uc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXHJcbiAqL1xyXG5jb25zdCBnZXRPcHRpb25zID0gKHRlbXBsYXRlUGF0aDogc3RyaW5nKTogYW55ID0+IHtcclxuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9uc1BhdGgpKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXHJcbiAgICByZXR1cm4gb3B0aW9uc1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4ge31cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXIgZmlsZXMgdG8gYSB2aXJ0dWFsIHRyZWUgb2JqZWN0XHJcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCByZW5kZXIgPSAoZmlsZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55ID0+IHtcclxuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cclxuICBmaWxlcy5mb3JFYWNoKChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihzb3VyY2UsIGZpbGVQYXRoKSwgJ3V0ZjgnKVxyXG4gICAgY29uc3QgY29udGVudCA9IGVqcy5yZW5kZXIoZmlsZSwgb3B0aW9ucylcclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xyXG4gICAgICBmaWxlVHJlZVtmaWxlUGF0aF0gPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfSlcclxuICByZXR1cm4gZmlsZVRyZWVcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyaXRlIHJlbmRlcmVkIGZpbGVzJyBjb250ZW50IHRvIHJlYWwgZmlsZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWxlc1xyXG4gKi9cclxuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xyXG4gIE9iamVjdC5rZXlzKGZpbGVzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSlcclxuICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcclxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGZpbGVzW25hbWVdKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgZmlsdGVycyxcclxuICBnZW5lcmF0ZSxcclxuICByZW5kZXIsXHJcbiAgd3JpdGVGaWxlVHJlZVxyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luaXRVdGlscydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXHJcbmltcG9ydCB7IElPcHRpb25zLCBJUGx1Z2luLCBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHJtIGZyb20gJ3JpbXJhZidcclxuXHJcbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcclxuICAvLyBjb25zdCBuYW1lID0gb3B0aW9ucy5pblBsYWNlID8gcGF0aC5yZWxhdGl2ZSgnLi4vJywgcHJvY2Vzcy5jd2QoKSkgOiBvcHRpb25zLnByb2plY3RcclxuICBpZiAob3B0aW9ucy5vZmZsaW5lKSB7IC8vIG9mZmxpbmUgbW9kZVxyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50ZW1wbGF0ZSkpIHtcclxuICAgICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXHJcbiAgICB9XHJcbiAgfSBlbHNlIHsgLy8gb25saW5lIG1vZGVcclxuICAgIG9wdGlvbnMudGVtcGxhdGUgPSAhb3B0aW9ucy5oYXNTbGFzaFxyXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxyXG4gICAgICA6IG9wdGlvbnMudGVtcGxhdGVcclxuICAgIGRvd25sb2FkQW5kR2VuZXJhdGUoY3R4LCBvcHRpb25zKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGRvd25sb2FkIHRlbXBsYXRlICYgZ2VuZXJhdGVcclxuICogQHBhcmFtIHsgUGljR28gfSBjdHhcclxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXHJcbiAqL1xyXG5jb25zdCBkb3dubG9hZEFuZEdlbmVyYXRlID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xyXG4gICAgcm0uc3luYyhvcHRpb25zLnRtcClcclxuICB9XHJcbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxyXG4gIGRvd25sb2FkKG9wdGlvbnMudGVtcGxhdGUsIG9wdGlvbnMudG1wLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIH0sIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICBpZiAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBjdHgubG9nLmVycm9yKGVycilcclxuICAgIH1cclxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcclxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbml0JylcclxuICAgICAgLmFyZ3VtZW50cygnPHRlbXBsYXRlPiBbcHJvamVjdF0nKVxyXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxyXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY3JlYXRlIHBpY2dvIHBsdWdpblxcJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzJylcclxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNTbGFzaCA9IHRlbXBsYXRlLmluY2x1ZGVzKCcvJylcclxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHByb2dyYW0uY2xvbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2dvL3RlbXBsYXRlcycsIHRlbXBsYXRlLnJlcGxhY2UoL1svOl0vZywgJy0nKSkgLy8gZm9yIGNhY2hpbmcgdGVtcGxhdGVcclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtLm9mZmxpbmUpIHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgIHByb2plY3QsXHJcbiAgICAgICAgICAgICAgaGFzU2xhc2gsXHJcbiAgICAgICAgICAgICAgaW5QbGFjZSxcclxuICAgICAgICAgICAgICBkZXN0LFxyXG4gICAgICAgICAgICAgIGNsb25lLFxyXG4gICAgICAgICAgICAgIHRtcCxcclxuICAgICAgICAgICAgICBvZmZsaW5lXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHByb2plY3QgaXMgZW1wdHkgb3IgZXhpc3RcclxuICAgICAgICAgICAgaWYgKGluUGxhY2UgfHwgZnMuZXhpc3RzU3luYyhkZXN0KSkge1xyXG4gICAgICAgICAgICAgIGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBpblBsYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnR2VuZXJhdGUgcHJvamVjdCBpbiBjdXJyZW50IGRpcmVjdG9yeT8nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnVGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIENvbnRpbnVlPycsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdvaydcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdKS50aGVuKChhbnN3ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5vaykge1xyXG4gICAgICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHByb2plY3QgaXMgZ2l2ZW5cclxuICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCctLWhlbHAnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFeGFtcGxlczonKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBhbiBvZmZpY2lhbCB0ZW1wbGF0ZScpKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCBwbHVnaW4gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCBzdHJhaWdodCBmcm9tIGEgZ2l0aHViIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHVzZXJuYW1lL3JlcG8gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaW5pdFxyXG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJUGljR28sIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGkxOG46IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpMThuJylcclxuICAgICAgLmFyZ3VtZW50cygnW2xhbmddJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjaGFuZ2UgcGljZ28gbGFuZ3VhZ2UnKVxyXG4gICAgICAuYWN0aW9uKGFzeW5jIChsYW5nOiBzdHJpbmcgPSAnJykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBjdHguaTE4bi5nZXRMYW5ndWFnZUxpc3QoKVxyXG4gICAgICAgIGlmICghbGFuZykge1xyXG4gICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICBuYW1lOiAnaTE4bicsXHJcbiAgICAgICAgICAgICAgY2hvaWNlczogbGlzdCxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgbGFuZ3VhZ2UnLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXHJcbiAgICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShhbnN3ZXIuaTE4bilcclxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7YW5zd2VyLmkxOG59YClcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxpc3QuaW5jbHVkZXMobGFuZykpIHtcclxuICAgICAgICAgIHJldHVybiBjdHgubG9nLndhcm4oJ05vIHN1Y2ggbGFuZ3VhZ2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShsYW5nKVxyXG4gICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7bGFuZ31gKVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaTE4blxyXG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXHJcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcclxuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcclxuaW1wb3J0IGlucXVpcmVyLCB7IElucXVpcmVyIH0gZnJvbSAnaW5xdWlyZXInXHJcbmltcG9ydCB7IElQbHVnaW4sIElDb21tYW5kZXIsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgY29tbWFuZGVycyBmcm9tICcuLi9wbHVnaW5zL2NvbW1hbmRlcidcclxuaW1wb3J0IHsgZ2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIGltcGxlbWVudHMgSUNvbW1hbmRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lID0gJ2NvbW1hbmRlcidcclxuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdDogTWFwPHN0cmluZywgSVBsdWdpbj4gPSBuZXcgTWFwKClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4gPSBuZXcgTWFwKClcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcblxyXG4gIHByb2dyYW06IENvbW1hbmRcclxuICBpbnF1aXJlcjogSW5xdWlyZXJcclxuXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXHJcbiAgICB0aGlzLmlucXVpcmVyID0gaW5xdWlyZXJcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBnZXROYW1lICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZVxyXG4gIH1cclxuXHJcbiAgaW5pdCAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2dyYW1cclxuICAgICAgLnZlcnNpb24ocHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTiwgJy12LCAtLXZlcnNpb24nKVxyXG4gICAgICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdkZWJ1ZyBtb2RlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICBkZWJ1ZzogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vcHRpb24oJy1zLCAtLXNpbGVudCcsICdzaWxlbnQgbW9kZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgc2lsZW50OiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCdjb21tYW5kOionLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGBJbnZhbGlkIGNvbW1hbmQ6ICR7dGhpcy5wcm9ncmFtLmFyZ3Muam9pbignICcpfVxcblNlZSAtLWhlbHAgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuYClcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcclxuICAgICAgfSlcclxuXHJcbiAgICAvLyBidWlsdC1pbiBjb21tYW5kc1xyXG4gICAgY29tbWFuZGVycyh0aGlzLmN0eClcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyIChpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ25hbWUgaXMgcmVxdWlyZWQhJylcclxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcclxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IHBsdWdpbiBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXHJcbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXHJcbiAgICBjb25zdCBjdXJyZW50UGx1Z2luTmFtZSA9IGdldEN1cnJlbnRQbHVnaW5OYW1lKClcclxuICAgIGlmIChjdXJyZW50UGx1Z2luTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoY3VycmVudFBsdWdpbk5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoY3VycmVudFBsdWdpbk5hbWUpPy5wdXNoKGlkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KGN1cnJlbnRQbHVnaW5OYW1lLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRDb21tYW5kcyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldExpc3QoKS5mb3JFYWNoKChpdGVtOiBJUGx1Z2luKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaXRlbS5oYW5kbGUodGhpcy5jdHgpXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcclxuICB9XHJcblxyXG4gIGdldExpc3QgKCk6IElQbHVnaW5bXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cclxuICB9XHJcblxyXG4gIGdldElkTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZGVyXHJcbiIsImltcG9ydCBwbHVnaW5IYW5kbGVyIGZyb20gJy4vcGx1Z2luSGFuZGxlcidcclxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZydcclxuaW1wb3J0IHVwbG9hZCBmcm9tICcuL3VwbG9hZCdcclxuaW1wb3J0IHNldHRpbmcgZnJvbSAnLi9zZXR0aW5nJ1xyXG5pbXBvcnQgdXNlIGZyb20gJy4vdXNlJ1xyXG5pbXBvcnQgcHJveHkgZnJvbSAnLi9wcm94eSdcclxuaW1wb3J0IGluaXQgZnJvbSAnLi9pbml0J1xyXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nXHJcbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGN0eDogSVBpY0dvKTogdm9pZCA9PiB7XHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncGx1Z2luSGFuZGxlcicsIHBsdWdpbkhhbmRsZXIpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3NldHRpbmcnLCBzZXR0aW5nKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VwbG9hZCcsIHVwbG9hZClcclxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncHJveHknLCBwcm94eSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpbml0JywgaW5pdClcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcclxufVxyXG4iLCJleHBvcnQgZW51bSBJTG9nVHlwZSB7XHJcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcclxuICBpbmZvID0gJ2luZm8nLFxyXG4gIHdhcm4gPSAnd2FybicsXHJcbiAgZXJyb3IgPSAnZXJyb3InXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIGJ5IHVzZXJzXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcclxuICBVUExPQURfUFJPR1JFU1MgPSAndXBsb2FkUHJvZ3Jlc3MnLFxyXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxyXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcclxuICBCRUZPUkVfVVBMT0FEID0gJ2JlZm9yZVVwbG9hZCcsXHJcbiAgQUZURVJfVVBMT0FEID0gJ2FmdGVyVXBsb2FkJyxcclxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXHJcbiAgSU5TVEFMTCA9ICdpbnN0YWxsJyxcclxuICBVTklOU1RBTEwgPSAndW5pbnN0YWxsJyxcclxuICBVUERBVEUgPSAndXBkYXRlJyxcclxuICBOT1RJRklDQVRJT04gPSAnbm90aWZpY2F0aW9uJ1xyXG59XHJcblxyXG4vKipcclxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBvbmx5IGJ5IHBpY2dvXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVzRXZlbnQge1xyXG4gIENPTkZJR19DSEFOR0UgPSAnQ09ORklHX0NIQU5HRSdcclxufVxyXG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJ1xyXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7XHJcbiAgSUxvZ0FyZ3ZUeXBlLFxyXG4gIElMb2dBcmd2VHlwZVdpdGhFcnJvcixcclxuICBVbmRlZmluYWJsZSxcclxuICBJTG9nQ29sb3IsXHJcbiAgSUxvZ2dlcixcclxuICBJUGljR29cclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XHJcbiAgICBbSUxvZ1R5cGUuc3VjY2Vzc106ICdncmVlbicsXHJcbiAgICBbSUxvZ1R5cGUuaW5mb106ICdibHVlJyxcclxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXHJcbiAgICBbSUxvZ1R5cGUuZXJyb3JdOiAncmVkJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbG9nTGV2ZWwhOiBzdHJpbmdcclxuICBwcml2YXRlIGxvZ1BhdGghOiBzdHJpbmdcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxvZyAodHlwZTogSUxvZ1R5cGUsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIC8vIGNoZWNrIGNvbmZpZy5zaWxlbnRcclxuICAgIGlmICghdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzaWxlbnQnKSkge1xyXG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcclxuICAgICAgY29uc29sZS5sb2cobG9nSGVhZGVyLCAuLi5tc2cpXHJcbiAgICAgIHRoaXMubG9nTGV2ZWwgPSB0aGlzLmN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxvZ0xldmVsJylcclxuICAgICAgdGhpcy5sb2dQYXRoID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5sb2dQYXRoJykgfHwgcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICcuL3BpY2xpc3QubG9nJylcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gZml4IGxvZyBmaWxlIGlzIHRvbyBsYXJnZSwgbm93IHRoZSBsb2cgZmlsZSdzIGRlZmF1bHQgc2l6ZSBpcyAxMCBNQlxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNoZWNrTG9nRmlsZUlzTGFyZ2UodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0xhcmdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdNc2cgPSBgTG9nIGZpbGUgaXMgdG9vIGxhcmdlICg+ICR7KHJlc3VsdC5sb2dGaWxlU2l6ZUxpbWl0ISkgLyAxMDI0IC8gMTAyNCB8fCAnMTAnfSBNQiksIHJlY3JlYXRlIGxvZyBmaWxlYFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1tQaWNMaXN0IFdBUk5dOicpLCB3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgICB0aGlzLnJlY3JlYXRlTG9nRmlsZSh0aGlzLmxvZ1BhdGgpXHJcbiAgICAgICAgICAgIG1zZy51bnNoaWZ0KHdhcm5pbmdNc2cpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVdyaXRlTG9nKHRoaXMubG9nUGF0aCwgdHlwZSwgLi4ubXNnKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHdoeT8/P1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIGNoZWNraW5nIGxvZyBmaWxlIHNpemUnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dGaWxlSXNMYXJnZSAobG9nUGF0aDogc3RyaW5nKToge1xyXG4gICAgaXNMYXJnZTogYm9vbGVhblxyXG4gICAgbG9nRmlsZVNpemU/OiBudW1iZXJcclxuICAgIGxvZ0ZpbGVTaXplTGltaXQ/OiBudW1iZXJcclxuICB9IHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplID0gZnMuc3RhdFN5bmMobG9nUGF0aCkuc2l6ZVxyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZUxpbWl0ID0gZm9yY2VOdW1iZXIodGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPG51bWJlcj4+KCdzZXR0aW5ncy5sb2dGaWxlU2l6ZUxpbWl0JykgfHwgMTApICogMTAyNCAqIDEwMjQgLy8gMTAgTUIgZGVmYXVsdFxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzTGFyZ2U6IGxvZ0ZpbGVTaXplID4gbG9nRmlsZVNpemVMaW1pdCxcclxuICAgICAgICBsb2dGaWxlU2l6ZSxcclxuICAgICAgICBsb2dGaWxlU2l6ZUxpbWl0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzTGFyZ2U6IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY3JlYXRlTG9nRmlsZSAobG9nUGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBmcy51bmxpbmtTeW5jKGxvZ1BhdGgpXHJcbiAgICAgIGZzLmNyZWF0ZUZpbGVTeW5jKGxvZ1BhdGgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdyaXRlTG9nIChsb2dQYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tMb2dMZXZlbCh0eXBlLCB0aGlzLmxvZ0xldmVsKSkge1xyXG4gICAgICAgIGxldCBsb2cgPSBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpfSBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dIGBcclxuICAgICAgICBtc2cuZm9yRWFjaCgoaXRlbTogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yICYmIHR5cGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgbG9nICs9IGBcXG4tLS0tLS1FcnJvciBTdGFjayBCZWdpbi0tLS0tLVxcbiR7dXRpbC5mb3JtYXQoaXRlbT8uc3RhY2spfVxcbi0tLS0tLS1FcnJvciBTdGFjayBFbmQtLS0tLS0tIGBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSwgbnVsbCwgMilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2cgKz0gYCR7aXRlbSBhcyBzdHJpbmd9IGBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGxvZyArPSAnXFxuJ1xyXG4gICAgICAgIC8vIEEgc3luY2hyb25pemVkIGFwcHJvYWNoIHRvIGF2b2lkIGxvZyBtc2cgc2VxdWVuY2UgZXJyb3JzXHJcbiAgICAgICAgZnMuYXBwZW5kRmlsZVN5bmMobG9nUGF0aCwgbG9nKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiB3cml0aW5nIGxvZyBmaWxlJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dMZXZlbCAodHlwZTogc3RyaW5nLCBsZXZlbDogdW5kZWZpbmVkIHwgc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkIHx8IGxldmVsID09PSAnYWxsJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGV2ZWwpKSB7XHJcbiAgICAgIHJldHVybiBsZXZlbC5zb21lKChpdGVtOiBzdHJpbmcpID0+IChpdGVtID09PSB0eXBlIHx8IGl0ZW0gPT09ICdhbGwnKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0eXBlID09PSBsZXZlbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3VjY2VzcyAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLnN1Y2Nlc3MsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGluZm8gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBlcnJvciAoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmVycm9yLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICB3YXJuICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUud2FybiwgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgZGVidWcgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIGlmIChpc0RldigpKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExvZ2dlclxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCB7IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIElMaWZlY3ljbGVQbHVnaW5zLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBnZXRVUkxGaWxlLCBoYW5kbGVVcmxFbmNvZGUsIGltYWdlUHJvY2VzcywgaXNVcmwsIG5lZWRDb21wcmVzcywgbmVlZEFkZFdhdGVybWFyaywgaW1hZ2VBZGRXYXRlck1hcmssIHJlbW92ZUV4aWYgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi4vdXRpbHMvY3JlYXRlQ29udGV4dCdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IGhlaWNDb252ZXJ0IGZyb20gJ2hlaWMtY29udmVydCdcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHJlYWRvbmx5IHR0Zkxpbms6IHN0cmluZyA9ICdodHRwczovL3JlbGVhc2UucGljbGlzdC5jbi9zaW1oZWkudHRmJ1xyXG4gIHR0ZlBhdGg6IHN0cmluZ1xyXG5cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXHJcbiAgICBmcy5lbXB0eURpclN5bmModGVtcEZpbGVQYXRoKVxyXG4gICAgdGhpcy50dGZQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnYXNzZXRzJywgJ3NpbWhlaS50dGYnKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZG93bmxvYWRUVEYgKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gcGF0aC5kaXJuYW1lKHRoaXMudHRmUGF0aClcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXREaXIpKSB7XHJcbiAgICAgIGZzLm1rZGlyU3luYyhvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXHJcbiAgICB9XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy50dGZQYXRoKSkge1xyXG4gICAgICB0aGlzLmN0eC5sb2cuaW5mbygnRG93bmxvYWQgdHRmIGZpbGUuJylcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodGhpcy50dGZMaW5rLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy50dGZQYXRoLCByZXMuZGF0YSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuaW5mbygnRG93bmxvYWQgdHRmIGZpbGUgc3VjY2Vzcy4nKVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLicpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdGFydCAoaW5wdXQ6IGFueVtdKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIC8vIGVuc3VyZSBldmVyeSB1cGxvYWQgcHJvY2VzcyBoYXMgYW4gdW5pcXVlIGNvbnRleHRcclxuICAgIGNvbnN0IGN0eCA9IGNyZWF0ZUNvbnRleHQodGhpcy5jdHgpXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBpbWFnZXMgaW5wdXRcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgbXVzdCBiZSBhbiBhcnJheS4nKVxyXG4gICAgICB9XHJcbiAgICAgIGN0eC5pbnB1dCA9IGlucHV0XHJcbiAgICAgIGN0eC5yYXdJbnB1dCA9IGNsb25lRGVlcChpbnB1dClcclxuICAgICAgY3R4Lm91dHB1dCA9IFtdXHJcbiAgICAgIGNvbnN0IGNvbXByZXNzT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJylcclxuICAgICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKVxyXG4gICAgICBpZiAoY29tcHJlc3NPcHRpb25zIHx8IHdhdGVybWFya09wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRlbXBGaWxlUGF0aCkpIHtcclxuICAgICAgICAgIGZzLm1rZGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdhdGVybWFya01zZyA9ICdBZGQgd2F0ZXJtYXJrIHRvIGltYWdlJ1xyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzTXNnID0gJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvXHJcbiAgICAgICAgICBpZiAoaXNVcmwoaXRlbSkpIHtcclxuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgICAgICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGluZm8uYnVmZmVyLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBpbmZvLmJ1ZmZlciwgY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGluZm8uYnVmZmVyLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gaW5mby5leHRuYW1lID8/ICcnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgPyBgJHtwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSl9JHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcclxuICAgICAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlclxyXG4gICAgICAgICAgICBpZiAobmVlZEFkZFdhdGVybWFyayh3YXRlcm1hcmtPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICBpZiAoIWRvd25sb2FkVFRGUmV0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5sb2cud2FybignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLCBza2lwIGFkZCB3YXRlcm1hcmsuJylcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKHdhdGVybWFya01zZylcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VBZGRXYXRlck1hcmsoZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKGNvbXByZXNzTXNnKVxyXG4gICAgICAgICAgICAgIGlmIChwYXRoLmV4dG5hbWUoaXRlbSkgPT09ICcuaGVpYycgfHwgcGF0aC5leHRuYW1lKGl0ZW0pID09PSAnLmhlaWYnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWljQnVmZmVyID0gZnMucmVhZEZpbGVTeW5jKGl0ZW0pXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWljUmVzdWx0ID0gYXdhaXQgaGVpY0NvbnZlcnQoe1xyXG4gICAgICAgICAgICAgICAgICBidWZmZXI6IGhlaWNCdWZmZXIsXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ0pQRUcnLFxyXG4gICAgICAgICAgICAgICAgICBxdWFsaXR5OiAxXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEhlaWNDb252ZXJ0RmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgcGF0aC5leHRuYW1lKGl0ZW0pKX0uanBnYClcclxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEhlaWNDb252ZXJ0RmlsZSwgQnVmZmVyLmZyb20oaGVpY1Jlc3VsdCkpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyhmcy5yZWFkRmlsZVN5bmModGVtcEhlaWNDb252ZXJ0RmlsZSksIGNvbXByZXNzT3B0aW9ucywgJy5qcGcnKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBmcy5yZWFkRmlsZVN5bmMoaXRlbSksIGNvbXByZXNzT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybWVkQnVmZmVyICYmIGNvbXByZXNzT3B0aW9ucz8uaXNSZW1vdmVFeGlmKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdSZW1vdmUgZXhpZiBpbmZvLicpXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgcGF0aC5leHRuYW1lKGl0ZW0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgIGxldCBuZXdFeHRcclxuICAgICAgICAgICAgICBpZiAoY29tcHJlc3NPcHRpb25zPy5pc0NvbnZlcnQpIHtcclxuICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBwYXRoLmV4dG5hbWUoaXRlbSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBGaWxlID0gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBwYXRoLmV4dG5hbWUoaXRlbSkpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZSwgdHJhbnNmb3JtZWRCdWZmZXIpXHJcbiAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgICAgfVxyXG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9UcmFuc2Zvcm0oY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVVwbG9hZChjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9VcGxvYWQoY3R4KVxyXG4gICAgICBjdHguaW5wdXQgPSBjdHgucmF3SW5wdXRcclxuICAgICAgYXdhaXQgdGhpcy5hZnRlclVwbG9hZChjdHgpXHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICBjdHgubG9nLndhcm4oSUJ1aWxkSW5FdmVudC5GQUlMRUQpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgaWYgKGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ2RlYnVnJykpIHtcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGN0eFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVUcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAwKVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVFJBTlNGT1JNLCBjdHgpXHJcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB0cmFuc2Zvcm0nKVxyXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucywgY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBkb1RyYW5zZm9ybSAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDMwKVxyXG4gICAgY29uc3QgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xyXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcclxuICAgIGxldCB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KHR5cGUpXHJcbiAgICBpZiAoIXRyYW5zZm9ybWVyKSB7XHJcbiAgICAgIHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQoJ3BhdGgnKVxyXG4gICAgICBjdXJyZW50VHJhbnNmb3JtZXIgPSAncGF0aCdcclxuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHRyYW5zZm9ybWVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdHJhbnNmb3JtZXIgLSBwYXRoYClcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVHJhbnNmb3JtaW5nLi4uIEN1cnJlbnQgdHJhbnNmb3JtZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdHJhbnNmb3JtZXI/LmhhbmRsZShjdHgpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDYwKVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdXBsb2FkJylcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1VQTE9BRCwgY3R4KVxyXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucywgY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBkb1VwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgbGV0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgbGV0IHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQodHlwZSlcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBpZiAoIXVwbG9hZGVyKSB7XHJcbiAgICAgIHR5cGUgPSAnc21tcydcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3NtbXMnXHJcbiAgICAgIHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQoJ3NtbXMnKVxyXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdXBsb2FkZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB1cGxvYWRlciAtIHNtbXNgKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5pbmZvKGBVcGxvYWRpbmcuLi4gQ3VycmVudCB1cGxvYWRlciBpcyBbJHtjdXJyZW50VHJhbnNmb3JtZXJ9XWApXHJcbiAgICBhd2FpdCB1cGxvYWRlcj8uaGFuZGxlKGN0eClcclxuICAgIGZvciAoY29uc3Qgb3V0cHV0SW1nIG9mIGN0eC5vdXRwdXQpIHtcclxuICAgICAgb3V0cHV0SW1nLnR5cGUgPSB0eXBlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGFmdGVyVXBsb2FkIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkFGVEVSX1VQTE9BRCwgY3R4KVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDEwMClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucywgY3R4KVxyXG4gICAgbGV0IG1zZyA9ICcnXHJcbiAgICBjb25zdCBsZW5ndGggPSBjdHgub3V0cHV0Lmxlbmd0aFxyXG4gICAgY29uc3QgaXNFbmNvZGVPdXRwdXRVUkwgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPGJvb2xlYW4+Pignc2V0dGluZ3MuZW5jb2RlT3V0cHV0VVJMJykgPT09IHRydWVcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHR5cGVvZiBjdHgub3V0cHV0W2ldLmltZ1VybCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBtc2cgKz0gaXNFbmNvZGVPdXRwdXRVUkwgPyBoYW5kbGVVcmxFbmNvZGUoY3R4Lm91dHB1dFtpXS5pbWdVcmwhKSA6IGN0eC5vdXRwdXRbaV0uaW1nVXJsIVxyXG4gICAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICBtc2cgKz0gJ1xcbidcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYmFzZTY0SW1hZ2VcclxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYnVmZmVyXHJcbiAgICB9XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjdHgpXHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoYFxcbiR7bXNnfWApXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVBsdWdpbnMgKGxpZmVDeWNsZVBsdWdpbnM6IElMaWZlY3ljbGVQbHVnaW5zLCBjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRMaXN0KClcclxuICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRJZExpc3QoKVxyXG4gICAgY29uc3QgbGlmZUN5Y2xlTmFtZSA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TmFtZSgpXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChwbHVnaW5zLm1hcChhc3luYyAocGx1Z2luOiBJUGx1Z2luLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY3R4LmxvZy5pbmZvKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gcnVubmluZ2ApXHJcbiAgICAgICAgYXdhaXQgcGx1Z2luLmhhbmRsZShjdHgpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gZXJyb3JgKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfSkpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVcclxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG4vKipcclxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXHJcbiAqIEBwYXJhbSBjdHhcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgY29uZmlnUGF0aDogY3R4LmNvbmZpZ1BhdGgsXHJcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcclxuICAgIGxvZzogY3R4LmxvZyxcclxuICAgIGNtZDogY3R4LmNtZCxcclxuICAgIG91dHB1dDogW10sXHJcbiAgICBpbnB1dDogW10sXHJcbiAgICByYXdJbnB1dDogW10sXHJcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXHJcbiAgICBwbHVnaW5IYW5kbGVyOiBjdHgucGx1Z2luSGFuZGxlcixcclxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxyXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxyXG4gICAgVkVSU0lPTjogY3R4LlZFUlNJT04sXHJcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxyXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXHJcbiAgICBpMThuOiBjdHguaTE4bixcclxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVDb25maWc6IGN0eC5yZW1vdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdXBsb2FkOiBjdHgudXBsb2FkLmJpbmQoY3R4KSxcclxuICAgIGFkZExpc3RlbmVyOiBjdHguYWRkTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXHJcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVMaXN0ZW5lcjogY3R4LnJlbW92ZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgc2V0TWF4TGlzdGVuZXJzOiBjdHguc2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgcmF3TGlzdGVuZXJzOiBjdHgucmF3TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRMaXN0ZW5lcjogY3R4LnByZXBlbmRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU21tc0NvbmZpZywgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xyXG4gIGNvbnN0IGRvbWFpbiA9IGJhY2t1cERvbWFpbiB8fCAnc20ubXMnXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly8ke2RvbWFpbn0vYXBpL3YyL3VwbG9hZGAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0dvJyxcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXBpVG9rZW5cclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBzbWZpbGU6IHtcclxuICAgICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBzc2w6ICd0cnVlJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBzbW1zQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJylcclxuICBpZiAoIXNtbXNDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXHJcbiAgfVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgaW1hZ2UsIHNtbXNDb25maWc/LnRva2VuLCBzbW1zQ29uZmlnPy5iYWNrdXBEb21haW4pXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keS5jb2RlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLnVybFxyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEuaGFzaFxyXG4gICAgICAgIH0gZWxzZSBpZiAoYm9keS5jb2RlID09PSAnaW1hZ2VfcmVwZWF0ZWQnICYmIHR5cGVvZiBib2R5LmltYWdlcyA9PT0gJ3N0cmluZycpIHsgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndG9rZW4nLFxyXG4gICAgICBtZXNzYWdlOiAnYXBpIHRva2VuJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdiYWNrdXBEb21haW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5iYWNrdXBEb21haW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NtbXMnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElUY3l1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2lnbmF0dXJlIHtcclxuICBzaWduYXR1cmU6IHN0cmluZ1xyXG4gIGFwcElkOiBzdHJpbmdcclxuICBidWNrZXQ6IHN0cmluZ1xyXG4gIHNpZ25UaW1lOiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogSVNpZ25hdHVyZSA9PiB7XHJcbiAgY29uc3Qgc2VjcmV0SWQgPSBvcHRpb25zLnNlY3JldElkXHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gb3B0aW9ucy5zZWNyZXRLZXlcclxuICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWRcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGxldCBzaWduYXR1cmVcclxuICBsZXQgc2lnblRpbWU6IHN0cmluZyA9ICcnXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwMClcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgLSAxXHJcbiAgICBjb25zdCBleHBpcmVkID0gY3VycmVudCArIDM2MDBcclxuXHJcbiAgICBjb25zdCBtdWx0aVNpZ25hdHVyZSA9IGBhPSR7YXBwSWR9JmI9JHtidWNrZXR9Jms9JHtzZWNyZXRJZH0mZT0ke2V4cGlyZWR9JnQ9JHtjdXJyZW50fSZyPSR7cmFuZG9tfSZmPWBcclxuXHJcbiAgICBjb25zdCBzaWduSGV4S2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShtdWx0aVNpZ25hdHVyZSkuZGlnZXN0KClcclxuICAgIGNvbnN0IHRlbXBTdHJpbmcgPSBCdWZmZXIuY29uY2F0KFtzaWduSGV4S2V5LCBCdWZmZXIuZnJvbShtdWx0aVNpZ25hdHVyZSldKVxyXG4gICAgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVtcFN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNzc3OCNzaWduYXR1cmVcclxuICAgIGNvbnN0IHRvZGF5ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRvZGF5ICsgODY0MDBcclxuICAgIHNpZ25UaW1lID0gYCR7dG9kYXl9OyR7dG9tb3Jyb3d9YFxyXG4gICAgY29uc3Qgc2lnbktleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUoc2lnblRpbWUpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IGh0dHBTdHJpbmcgPSBgcHV0XFxuLyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9XFxuXFxuaG9zdD0ke29wdGlvbnMuYnVja2V0fS5jb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbVxcbmBcclxuICAgIGNvbnN0IHNoYTFlZEh0dHBTdHJpbmcgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShodHRwU3RyaW5nKS5kaWdlc3QoJ2hleCcpXHJcbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBgc2hhMVxcbiR7c2lnblRpbWV9XFxuJHtzaGExZWRIdHRwU3RyaW5nfVxcbmBcclxuICAgIHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2lnbktleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KCdoZXgnKVxyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgc2lnbmF0dXJlLFxyXG4gICAgYXBwSWQsXHJcbiAgICBidWNrZXQsXHJcbiAgICBzaWduVGltZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IElTaWduYXR1cmUsIGltYWdlOiBCdWZmZXIsIHZlcnNpb246IHN0cmluZyk6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgY29uc3QgYXJlYSA9IG9wdGlvbnMuYXJlYVxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGhcclxuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICB1cmw6IGBodHRwOi8vJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbS9maWxlcy92Mi8ke3NpZ25hdHVyZS5hcHBJZH0vJHtzaWduYXR1cmUuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2ZpbGVOYW1lfWAsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICBIb3N0OiBgJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbWAsXHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLnNpZ25hdHVyZSxcclxuICAgICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxyXG4gICAgICB9LFxyXG4gICAgICBmb3JtRGF0YToge1xyXG4gICAgICAgIG9wOiAndXBsb2FkJyxcclxuICAgICAgICBmaWxlY29udGVudDogaW1hZ2VcclxuICAgICAgfSxcclxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7b3B0aW9ucy5idWNrZXR9LmNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LmNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IGltYWdlLFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxyXG4gIGlmICghdGNZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHRjWXVuT3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHBhdGggPSB0Y1l1bk9wdGlvbnMucGF0aFxyXG4gICAgY29uc3QgdXNlVjQgPSAhdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCdcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlLCBjdHguR1VJX1ZFUlNJT04gfHwgY3R4LlZFUlNJT04pXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzKVxyXG4gICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxyXG4gICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgICAgIGVyclxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICBsZXQgYm9keVxyXG4gICAgICAgIGlmICh1c2VWNCAmJiB0eXBlb2YgcmVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBib2R5ID0gcmVzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgaWYgKGJvZHk/LmJvZHk/LmVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBib2R5LmJvZHkuZXJyXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keT8uYm9keT8ubXNnIHx8IGJvZHk/LmJvZHk/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvblVybCA9IHRjWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgaWYgKHVzZVY0ICYmIGJvZHkubWVzc2FnZSA9PT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke3BhdGh9JHtpbWcuZmlsZU5hbWV9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2JvZHkuZGF0YS5zb3VyY2VfdXJsIGFzIHN0cmluZ30ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdXNlVjQgJiYgYm9keSAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHt0Y1l1bk9wdGlvbnMuYnVja2V0fS5jb3MuJHt0Y1l1bk9wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tLyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZXJyLmVycm9yKVxyXG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICAgIGNvZGU6IGJvZHkuY29kZSBhcyBzdHJpbmdcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGV4dDogJ2h0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODQzMidcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7fVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBhbGlhczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJyksXHJcbiAgICAgIGNob2ljZXM6IFsndjQnLCAndjUnXSxcclxuICAgICAgZGVmYXVsdDogJ3Y1JyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXBwSWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXBwSWQgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd0Y3l1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElHaXRodWJDb25maWcsIElPbGRSZXFPcHRpb25zV2l0aEpTT04gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcsIGRhdGE6IGFueSk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCB7IHRva2VuLCByZXBvIH0gPSBvcHRpb25zXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0dvJyxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGRhdGEsXHJcbiAgICBqc29uOiB0cnVlXHJcbiAgfSBhcyBjb25zdFxyXG59XHJcblxyXG5jb25zdCBnZXRPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbywgYnJhbmNoIH0gPSBvcHRpb25zXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfT9yZWY9JHticmFuY2h9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljR28nXHJcbiAgICB9LFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBnaXRodWJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpXHJcbiAgaWYgKCFnaXRodWJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBnaXRodWIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0dvJyxcclxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXHJcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcclxuICAgICAgICAgIHBhdGg6IGdpdGh1Yk9wdGlvbnMucGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMsIGRhdGEpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IHtcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXHJcbiAgICAgICAgICAgICAgc2hhOiBzdHJpbmdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgICBpZiAoYm9keSkge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChnaXRodWJPcHRpb25zLmN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVVUkkoZ2l0aHViT3B0aW9ucy5wYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5jb250ZW50LmRvd25sb2FkX3VybFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1c0NvZGUgPT09IDQyMikge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KGdldE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zKSkgYXMgYW55XHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXMpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGltZy5oYXNoID0gcmVzLnNoYVxyXG4gICAgICAgICAgICAgIGlmIChnaXRodWJPcHRpb25zLmN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVVSSShnaXRodWJPcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gcmVzLmRvd25sb2FkX3VybFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dldCBDb250ZW50cyBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZXBvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnJhbmNoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2dpdGh1YicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgcWluaXUgZnJvbSAncWluaXUnXHJcbmltcG9ydCB7IElQbHVnaW5Db25maWcsIElRaW5pdUNvbmZpZywgSVBpY0dvLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuZnVuY3Rpb24gcG9zdE9wdGlvbnMgKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XHJcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgVXBUb2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWdCYXNlNjRcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlbGVjdEFyZWEgKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9rZW4gKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gcWluaXVPcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIHNjb3BlOiBxaW5pdU9wdGlvbnMuYnVja2V0XHJcbiAgfVxyXG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcclxuICByZXR1cm4gcHV0UG9saWN5LnVwbG9hZFRva2VuKG1hYylcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXHJcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHFpbml1IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtib2R5LmtleSBhcyBzdHJpbmd9JHtvcHRpb25zfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjdHgubG9nLmVycm9yKCdxaW5pdSBlcnJvcicsIGJvZHkpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXHJcbiAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJSW1ndXJDb25maWcsIElPbGRSZXFPcHRpb25zLCBJRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4uc3RhcnRzV2l0aCgnQmVhcmVyJykgPyBhY2Nlc3NUb2tlbiA6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIDogJydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJSW1ndXJDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xyXG4gIGNvbnN0IGNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZCB8fCAnJ1xyXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xyXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gZm9ybWF0QWNjZXNzVG9rZW4ob3B0aW9ucy5hY2Nlc3NUb2tlbiB8fCAnJylcclxuICBjb25zdCBhbGJ1bSA9IG9wdGlvbnMuYWxidW0gfHwgJydcclxuICBsZXQgYXV0aG9yaXphdGlvblxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbikge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGFjY2Vzc1Rva2VuXHJcbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGBDbGllbnQtSUQgJHtjbGllbnRJZH1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxyXG4gIH1cclxuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2ltYWdlJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgSG9zdDogJ2FwaS5pbWd1ci5jb20nLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXHJcbiAgICAgIHR5cGU6ICdiYXNlNjQnLFxyXG4gICAgICBuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xyXG4gICAgbGV0IGluaXRQYWdlcyA9IDBcclxuICAgIGxldCByZXNcclxuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xyXG4gICAgZG8ge1xyXG4gICAgICBjb25zdCBnZXRBbGJ1bUhhc2hPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2FjY291bnQvJHt1c2VybmFtZX0vYWxidW1zLyR7aW5pdFBhZ2VzfWAsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICAgICAgZ2V0QWxidW1IYXNoT3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICAgICAgfVxyXG4gICAgICByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRBbGJ1bUhhc2hPcHRpb25zKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcclxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhbGJ1bUxpc3QpIHtcclxuICAgICAgICBpZiAoaXRlbS50aXRsZSA9PT0gYWxidW0pIHtcclxuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGluaXRQYWdlcysrXHJcbiAgICB9IHdoaWxlIChyZXMuYm9keS5kYXRhLmxlbmd0aCA+IDApXHJcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhLmFsYnVtID0gYWxidW1IYXNoXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgaW1ndXJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKVxyXG4gIGlmICghaW1ndXJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBpbWd1ciBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBvc3RPcHRpb25zKGN0eCwgaW1ndXJPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcclxuICAgICAgICBpZiAoYm9keS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS5saW5rXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXHJcbiAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy5pbWd1ci5jb20vYXBpL2Vycm5vLydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY2xpZW50SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY2xpZW50SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW0nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW0gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdpbWd1cicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUFsaXl1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgT1NTIHNpZ25hdHVyZVxyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgbWltZVR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSlcclxuICBpZiAoIW1pbWVUeXBlKSB0aHJvdyBFcnJvcihgTm8gbWltZSB0eXBlIGZvdW5kIGZvciBmaWxlICR7ZmlsZU5hbWV9YClcclxuXHJcbiAgY29uc3Qgc2lnblN0cmluZyA9IGBQVVRcXG5cXG4ke21pbWVUeXBlfVxcbiR7ZGF0ZX1cXG4vJHtvcHRpb25zLmJ1Y2tldH0vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gXHJcblxyXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBPU1MgJHtvcHRpb25zLmFjY2Vzc0tleUlkfToke3NpZ25hdHVyZX1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbWAsXHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXHJcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBhbGlZdW4gT1NTIGNvbmZpZycpXHJcbiAgfVxyXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aC5yZXBsYWNlKC9cXC8qJC8sICcnKS5yZXBsYWNlKC9eXFwvKi8sICcnKSArICcvJ1xyXG4gIGlmIChhbGlZdW5PcHRpb25zLnBhdGggPT09ICcvJykge1xyXG4gICAgYWxpWXVuT3B0aW9ucy5wYXRoID0gJydcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSBhbGlZdW5PcHRpb25zLmN1c3RvbVVybFxyXG4gICAgY29uc3QgcGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZShhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gYWxpWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7YWxpWXVuT3B0aW9ucy5idWNrZXR9LiR7YWxpWXVuT3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleUlkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5U2VjcmV0JyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYWxpeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEJylcclxuICAgIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVVweXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCBNRDUgZnJvbSAnbWQ1J1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcclxuICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcclxuICBjb25zdCBtZDVQYXNzd29yZCA9IE1ENShwYXNzd29yZClcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YFxyXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcclxuICBjb25zdCBzaWduID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBtZDVQYXNzd29yZCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBVUFlVTiAke29wZXJhdG9yfToke3NpZ259YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbS8ke2J1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCB1cHl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpXHJcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHVwWXVuIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgcGF0aCA9IHVweXVuT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHt1cHl1bk9wdGlvbnMub3B0aW9uc31gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGlmIChlcnIubWVzc2FnZSA9PT0gJ1VwbG9hZCBmYWlsZWQnKSB7XHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBib2R5ID0gc2FmZVBhcnNlPHsgY29kZTogc3RyaW5nIH0+KGVyci5lcnJvcilcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keS5jb2RlIDogYm9keVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy51cHl1bi5jb20vYXBpL2Vycm5vLydcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcGVyYXRvcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKSB9LFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1InKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wZXJhdG9yIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndXB5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU4nKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElXZWJkYXZQbGlzdENvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJV2ViZGF2UGxpc3RDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgJHtvcHRpb25zLmhvc3R9LyR7ZW5jb2RlVVJJKG9wdGlvbnMucGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke29wdGlvbnMudXNlcm5hbWV9OiR7b3B0aW9ucy5wYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0Jyl9YCxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcclxuICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogaW1hZ2UubGVuZ3RoXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3Qgd2ViZGF2cGxpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJV2ViZGF2UGxpc3RDb25maWc+KCdwaWNCZWQud2ViZGF2cGxpc3QnKVxyXG4gIGlmICghd2ViZGF2cGxpc3RPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB3ZWJkYXZwbGlzdCBjb25maWcnKVxyXG4gIH1cclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0LnJlcGxhY2UoL15odHRwcz86XFwvXFwvfFxcLyskL2csICcnKVxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5zc2xFbmFibGVkID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGgucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh3ZWJkYXZwbGlzdE9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA+PSAyMDAgJiYgYm9keS5zdGF0dXNDb2RlIDwgMzAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IGN1c3RvbVVybCB8fCB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7cGF0aCA9PT0gJy8nID8gJycgOiBlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc3NsRW5hYmxlZCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3NsRW5hYmxlZCB8fCB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRScpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJykgfVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3dlYmRhdnBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IFNNTVNVcGxvYWRlciBmcm9tICcuL3NtbXMnXHJcbmltcG9ydCB0Y1l1blVwbG9hZGVyIGZyb20gJy4vdGN5dW4nXHJcbmltcG9ydCBnaXRodWJVcGxvYWRlciBmcm9tICcuL2dpdGh1YidcclxuaW1wb3J0IHFpbml1VXBsb2FkZXIgZnJvbSAnLi9xaW5pdSdcclxuaW1wb3J0IGltZ3VyVXBsb2FkZXIgZnJvbSAnLi9pbWd1cidcclxuaW1wb3J0IGFsaVl1blVwbG9hZGVyIGZyb20gJy4vYWxpeXVuJ1xyXG5pbXBvcnQgdXBZdW5VcGxvYWRlciBmcm9tICcuL3VweXVuJ1xyXG5pbXBvcnQgd2ViZGF2cGxpc3RVcGxvYWRlciBmcm9tICcuL3dlYmRhdidcclxuXHJcbmNvbnN0IGJ1aWxkSW5VcGxvYWRlcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGFsaVl1blVwbG9hZGVyKGN0eClcclxuICAgICAgdGNZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIFNNTVNVcGxvYWRlcihjdHgpXHJcbiAgICAgIGdpdGh1YlVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICB1cFl1blVwbG9hZGVyKGN0eClcclxuICAgICAgd2ViZGF2cGxpc3RVcGxvYWRlcihjdHgpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVXBsb2FkZXJzXHJcbiIsImltcG9ydCB7XHJcbiAgaXNVcmwsXHJcbiAgZ2V0SW1hZ2VTaXplLFxyXG4gIGdldEZTRmlsZSxcclxuICBnZXRVUkxGaWxlXHJcbn0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCBJSW1nSW5mbywgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcclxuICBhd2FpdCBQcm9taXNlLmFsbChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRGU0ZpbGUoaXRlbSlcclxuICAgIH1cclxuICAgIGlmIChpbmZvLnN1Y2Nlc3MgJiYgaW5mby5idWZmZXIpIHtcclxuICAgICAgY29uc3QgaW1nU2l6ZSA9IGdldEltZ1NpemUoY3R4LCBpbmZvLmJ1ZmZlciwgaXRlbSlcclxuICAgICAgcmVzdWx0c1tpbmRleF0gPSB7XHJcbiAgICAgICAgYnVmZmVyOiBpbmZvLmJ1ZmZlcixcclxuICAgICAgICBmaWxlTmFtZTogaW5mby5maWxlTmFtZSxcclxuICAgICAgICB3aWR0aDogaW1nU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGltZ1NpemUuaGVpZ2h0LFxyXG4gICAgICAgIGV4dG5hbWU6IGluZm8uZXh0bmFtZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXHJcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xyXG4gICAgY3R4LmxvZy53YXJuKGBjYW4ndCBnZXQgJHtwYXRofSdzIGltYWdlIHNpemVgKVxyXG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxyXG4gIH1cclxuICByZXR1cm4gaW1hZ2VTaXplXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHJlc29sdmUgZnJvbSAncmVzb2x2ZSdcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luLCBJUGx1Z2luTG9hZGVyLCBJUGljR29QbHVnaW5JbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG4vKipcclxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb2FkZXIgaW1wbGVtZW50cyBJUGx1Z2luTG9hZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsTGlzdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcDogTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPiA9IG5ldyBNYXAoKVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZVBhdGgpKSB7XHJcbiAgICAgIGNvbnN0IHBrZyA9IHtcclxuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUnLFxyXG4gICAgICAgIGxpY2Vuc2U6ICdNSVQnXHJcbiAgICAgIH1cclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBlbnRyeVxyXG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbiAoY3R4OiBJUGljR28sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gcmVzb2x2ZS5zeW5jKG5hbWUsIHsgYmFzZWRpcjogY3R4LmJhc2VEaXIgfSlcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxvYWQgYWxsIHRoaXJkIHBhcnR5IHBsdWdpblxyXG4gIGxvYWQgKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gVGhhbmtzIHRvIGhleG8gLT4gaHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2Jsb2IvbWFzdGVyL2xpYi9oZXhvL2xvYWRfcGx1Z2lucy5qc1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxyXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgZGV2RGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMucmVzb2x2ZVBsdWdpbih0aGlzLmN0eCwgbmFtZSlcclxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcclxuICAgIH0pXHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gcmVnaXN0ZXIgbG9jYWwgcGx1Z2luXHJcbiAgICAgIGlmICghcGx1Z2luKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fCAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxyXG4gICAgICAgICAgdGhpcy5jdHguc2F2ZUNvbmZpZyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXHJcbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXHJcbiAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcclxuICAgICAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luSW50ZXJmYWNlKVxyXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBgUGx1Z2luICR7bmFtZX0gTG9hZCBFcnJvcmAsXHJcbiAgICAgICAgYm9keTogZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmNtZC51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcclxuICBnZXRQbHVnaW4gKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbk1hcC5nZXQobmFtZSlcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcclxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXHJcbiAgICByZXR1cm4gcGx1Z2luXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdFxyXG4gIH1cclxuXHJcbiAgaGFzUGx1Z2luIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZ1bGxMaXN0LmhhcyhuYW1lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxyXG4gICAqL1xyXG4gIGdldEZ1bGxMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZnVsbExpc3RdXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkxvYWRlclxyXG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcclxuaW1wb3J0IHsgSVBpY0dvLCBJQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4vZW51bSdcclxuaW1wb3J0IG1hY0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9tYWMuYXBwbGVzY3JpcHQnXHJcbmltcG9ydCB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MucHMxJ1xyXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXHJcbmltcG9ydCBsaW51eENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9saW51eC5zaCdcclxuaW1wb3J0IHdzbENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93c2wuc2gnXHJcbmltcG9ydCB7IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgfSBmcm9tICcuL3N0YXRpYydcclxuXHJcbmV4cG9ydCB0eXBlIFBsYXRmb3JtID0gJ2RhcndpbicgfCAnd2luMzInIHwgJ3dpbjEwJyB8ICdsaW51eCcgfCAnd3NsJ1xyXG5cclxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcclxuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cclxuICBpZiAoaXNXc2wpIHtcclxuICAgIHJldHVybiAnd3NsJ1xyXG4gIH1cclxuICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRPUyA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpWzBdXHJcbiAgICBpZiAoY3VycmVudE9TID09PSAnMTAnKSB7XHJcbiAgICAgIHJldHVybiAnd2luMTAnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ3dpbjMyJ1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICByZXR1cm4gJ2RhcndpbidcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuICdsaW51eCdcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdENvbnRlbnQ6IHtcclxuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXHJcbn0gPSB7XHJcbiAgZGFyd2luOiBtYWNDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMzI6IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcclxuICBsaW51eDogbGludXhDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd3NsOiB3c2xDbGlwYm9hcmRTY3JpcHRcclxufVxyXG4vKipcclxuICogcG93ZXJzaGVsbCB3aWxsIHJlcG9ydCBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGhhdmUgYSAnLnBzMScgZXh0ZW5zaW9uLFxyXG4gKiBzbyB3ZSBzaG91bGQga2VlcCB0aGUgZXh0ZW5zaW9uIG5hbWUgY29uc2lzdGVudCB3aXRoIGNvcnJlc3BvbmRpbmcgc2hlbGxcclxuICovXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lOiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogJ21hYy5hcHBsZXNjcmlwdCcsXHJcbiAgd2luMzI6ICd3aW5kb3dzLnBzMScsXHJcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcclxuICBsaW51eDogJ2xpbnV4LnNoJyxcclxuICB3c2w6ICd3c2wuc2gnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUltYWdlRm9sZGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUilcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoaW1hZ2VQYXRoKSkge1xyXG4gICAgZnMubWtkaXJTeW5jKGltYWdlUGF0aClcclxuICB9XHJcbn1cclxuXHJcbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcclxuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xyXG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcclxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcclxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFBsYXRmb3JtKClcclxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lW3BsYXRmb3JtXSlcclxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHNjcmlwdFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXHJcbiAgICAgICAgc2NyaXB0UGF0aCxcclxuICAgICAgICBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSxcclxuICAgICAgICAndXRmOCdcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgbGV0IGV4ZWN1dGlvblxyXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignb3Nhc2NyaXB0JywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXHJcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInIHx8IHBsYXRmb3JtID09PSAnd2luMTAnKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xyXG4gICAgICAgICctbm9wcm9maWxlJyxcclxuICAgICAgICAnLW5vbmludGVyYWN0aXZlJyxcclxuICAgICAgICAnLW5vbG9nbycsXHJcbiAgICAgICAgJy1zdGEnLFxyXG4gICAgICAgICctZXhlY3V0aW9ucG9saWN5JywgJ3VucmVzdHJpY3RlZCcsXHJcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUvaXNzdWVzLzMyXHJcbiAgICAgICAgLy8gJy13aW5kb3dzdHlsZScsJ2hpZGRlbicsXHJcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxyXG4gICAgICAgICctZmlsZScsIHNjcmlwdFBhdGgsXHJcbiAgICAgICAgaW1hZ2VQYXRoXHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignc2gnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRpb24uc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcclxuICAgICAgICBpZiAoZGF0YS50b1N0cmluZygpLnRyaW0oKSA9PT0gJ25vIHhjbGlwIG9yIHdsLWNsaXBib2FyZCcpIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXHJcbiAgICAgICAgICAgIGJvZHk6ICdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxyXG5cclxuICAgICAgLy8gaWYgdGhlIGZpbGVQYXRoIGlzIHRoZSByZWFsIGZpbGUgaW4gc3lzdGVtXHJcbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcclxuICAgICAgbGV0IHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IGZhbHNlXHJcblxyXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXHJcbiAgICAgIGlmIChwYXRoLmJhc2VuYW1lKGltZ1BhdGgpICE9PSBwYXRoLmJhc2VuYW1lKGltYWdlUGF0aCkpIHtcclxuICAgICAgICAvLyBpZiB0aGUgcGF0aCBpcyBub3QgZ2VuZXJhdGUgYnkgcGljZ29cclxuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XHJcbiAgICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIHRoZSBpbWdQYXRoIGlzIGludmFsaWRcclxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQ2FuJ3QgZmluZCAke2ltZ1BhdGh9YCkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIGltZ1BhdGgsXHJcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXHJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuXHJcbmNvbnN0IGV2ZW50QnVzID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcbmV4cG9ydCB7XHJcbiAgZXZlbnRCdXNcclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmMgKi9cclxuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgeyBJUGljR28sIFVuZGVmaW5hYmxlLCBJQ29uZmlnQ2hhbmdlUGF5bG9hZCwgSUNvbmZpZywgSVJlcXVlc3RDb25maWcsIElPbGRSZXFPcHRpb25zLCBJUmVzcG9uc2UsIElGdWxsUmVzcG9uc2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcclxuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xyXG5pbXBvcnQgdHVubmVsIGZyb20gJ3R1bm5lbCdcclxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XHJcbiAgbWF4VmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIG1pblZlcnNpb246ICdUTFN2MS4yJ1xyXG59KVxyXG5cclxuLy8gdGhhbmtzIGZvciBodHRwczovL2dpdGh1Yi5kZXYvcmVxdWVzdC9yZXF1ZXN0L2Jsb2IvbWFzdGVyL2luZGV4LmpzXHJcbmZ1bmN0aW9uIGFwcGVuZEZvcm1EYXRhIChmb3JtOiBGb3JtRGF0YSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBkYXRhICYmICdvcHRpb25zJyBpbiBkYXRhKSB7XHJcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEudmFsdWUsIGRhdGEub3B0aW9ucylcclxuICB9IGVsc2Uge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVxdWVzdEludGVyY2VwdG9yIChvcHRpb25zOiBJT2xkUmVxT3B0aW9ucyB8IEF4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUmVxdWVzdENvbmZpZyAmIHtcclxuICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cclxufSB7XHJcbiAgbGV0IF9faXNPbGRPcHRpb25zID0gZmFsc2VcclxuICBjb25zdCBvcHQ6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ICYge1xyXG4gICAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbiAgfSA9IHtcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgICB1cmw6IChvcHRpb25zLnVybCBhcyBzdHJpbmcpIHx8ICcnLFxyXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgfVxyXG4gIC8vIHVzZXIgcmVxdWVzdCBjb25maWcgcHJveHlcclxuICBpZiAob3B0aW9ucy5wcm94eSkge1xyXG4gICAgbGV0IHByb3h5T3B0aW9ucyA9IG9wdGlvbnMucHJveHlcclxuICAgIGlmICh0eXBlb2YgcHJveHlPcHRpb25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IG5ldyBVUkwob3B0aW9ucy5wcm94eSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IGZhbHNlXHJcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAocHJveHlPcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgb3B0Lmh0dHBzQWdlbnQgPSB0dW5uZWwuaHR0cHNPdmVySHR0cCh7XHJcbiAgICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnM/Lmhvc3RuYW1lLFxyXG4gICAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnM/LnBvcnQsIDEwKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0LnByb3h5ID0ge1xyXG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxyXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiAnaHR0cCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaWYgKCdmb3JtRGF0YScgaW4gb3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBvcHRpb25zLmZvcm1EYXRhW2tleV1cclxuICAgICAgYXBwZW5kRm9ybURhdGEoZm9ybSwga2V5LCBkYXRhKVxyXG4gICAgfVxyXG4gICAgb3B0LmRhdGEgPSBmb3JtXHJcbiAgICBvcHQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0LmhlYWRlcnMgfHwge30sIGZvcm0uZ2V0SGVhZGVycygpKVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICBkZWxldGUgb3B0LmZvcm1EYXRhXHJcbiAgfVxyXG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xyXG4gICAgb3B0LmRhdGEgPSBvcHRpb25zLmJvZHlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgZGVsZXRlIG9wdC5ib2R5XHJcbiAgfVxyXG4gIGlmICgncXMnIGluIG9wdGlvbnMpIHtcclxuICAgIG9wdC5wYXJhbXMgPSBvcHRpb25zLnFzXHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICB9XHJcbiAgb3B0Ll9faXNPbGRPcHRpb25zID0gX19pc09sZE9wdGlvbnNcclxuICByZXR1cm4gb3B0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlSW50ZXJjZXB0b3IgKHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlKTogSUZ1bGxSZXNwb25zZSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc3BvbnNlLFxyXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxyXG4gICAgYm9keTogcmVzcG9uc2UuZGF0YVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVzcG9uc2VFcnJvckhhbmRsZXIgKGVycm9yOiBhbnkpIHtcclxuICAvLyBpZiAoZXJyb3IucmVzcG9uc2UpIHtcclxuICAvLyAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRlZCB3aXRoIGEgc3RhdHVzIGNvZGVcclxuICAvLyAgIC8vIHRoYXQgZmFsbHMgb3V0IG9mIHRoZSByYW5nZSBvZiAyeHhcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvKVxyXG4gIC8vIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xyXG4gIC8vICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYnV0IG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxyXG4gIC8vICAgLy8gYGVycm9yLnJlcXVlc3RgIGlzIGFuIGluc3RhbmNlIG9mIFhNTEh0dHBSZXF1ZXN0IGluIHRoZSBicm93c2VyIGFuZCBhbiBpbnN0YW5jZSBvZlxyXG4gIC8vICAgLy8gaHR0cC5DbGllbnRSZXF1ZXN0IGluIG5vZGUuanNcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5yZXF1ZXN0KVxyXG4gIC8vIH0gZWxzZSB7XHJcbiAgLy8gICAvLyBTb21ldGhpbmcgaGFwcGVuZWQgaW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCBhbiBFcnJvclxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLm1lc3NhZ2UpXHJcbiAgLy8gfVxyXG4gIGNvbnN0IGVycm9yT2JqID0ge1xyXG4gICAgbWV0aG9kOiBlcnJvcj8uY29uZmlnPy5tZXRob2Q/LnRvVXBwZXJDYXNlKCkgfHwgJycsXHJcbiAgICB1cmw6IGVycm9yPy5jb25maWc/LnVybCB8fCAnJyxcclxuICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSB8fCAnJyxcclxuICAgIHN0YWNrOiBlcnJvcj8uc3RhY2sgfHwge30sXHJcbiAgICByZXNwb25zZToge1xyXG4gICAgICBzdGF0dXM6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIGJvZHk6IGVycm9yPy5yZXNwb25zZT8uZGF0YSB8fCAnJ1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3JPYmopXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgSVJlcXVlc3Qge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHByb3h5OiBVbmRlZmluYWJsZTxzdHJpbmc+ID0gJydcclxuICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiA9IHt9XHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5pbml0KClcclxuICAgIGV2ZW50QnVzLm9uKElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCAoZGF0YTogSUNvbmZpZ0NoYW5nZVBheWxvYWQ8c3RyaW5nIHwgSUNvbmZpZ1sncGljQmVkJ10+KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZGF0YS5jb25maWdOYW1lKSB7XHJcbiAgICAgICAgY2FzZSAncGljQmVkJzpcclxuICAgICAgICAgIGlmICgoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSk/LnByb3h5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSAoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSkucHJveHlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAncGljQmVkLnByb3h5JzpcclxuICAgICAgICAgIHRoaXMucHJveHkgPSBkYXRhLnZhbHVlIGFzIHN0cmluZ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcm94eSA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnByb3h5JylcclxuICAgIGlmIChwcm94eSkge1xyXG4gICAgICB0aGlzLnByb3h5ID0gcHJveHlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJveHkgKCk6IEF4aW9zUmVxdWVzdENvbmZpZ1sncHJveHknXSB8IGZhbHNlIHtcclxuICAgIGlmICh0aGlzLnByb3h5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcHJveHlPcHRpb25zID0gbmV3IFVSTCh0aGlzLnByb3h5KVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXHJcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCB8fCAnMCcsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiBwcm94eU9wdGlvbnMucHJvdG9jb2xcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICAvLyAjNjQgZHluYW1pYyBnZXQgcHJveHkgdmFsdWVcclxuICByZXF1ZXN0PFQsIFUgZXh0ZW5kcyAoXHJcbiAgICBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIElPbGRSZXFPcHRpb25zID8gSU9sZFJlcU9wdGlvbnMgOiBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIEF4aW9zUmVxdWVzdENvbmZpZyA/IEF4aW9zUmVxdWVzdENvbmZpZyA6IG5ldmVyXHJcbiAgKT4gKG9wdGlvbnM6IFUpOiBQcm9taXNlPElSZXNwb25zZTxULCBVPj4ge1xyXG4gICAgdGhpcy5vcHRpb25zLnByb3h5ID0gdGhpcy5oYW5kbGVQcm94eSgpXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLm1heEJvZHlMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgdGhpcy5vcHRpb25zLm1heENvbnRlbnRMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcm94eSAmJiBvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IHR1bm5lbC5odHRwc092ZXJIdHRwKHtcclxuICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLnByb3h5Lmhvc3QsXHJcbiAgICAgICAgICBwb3J0OiB0aGlzLm9wdGlvbnMucHJveHkucG9ydFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5vcHRpb25zLnByb3h5ID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNBZ2VudFxyXG4gICAgfVxyXG4gICAgLy8gIU5PVElDRSB0aGlzLm9wdGlvbnMgIT09IG9wdGlvbnNcclxuICAgIC8vIHRoaXMub3B0aW9ucyBpcyB0aGUgZGVmYXVsdCBvcHRpb25zXHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh0aGlzLm9wdGlvbnMpXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHJlc3BvbnNlSW50ZXJjZXB0b3IsIHJlc3BvbnNlRXJyb3JIYW5kbGVyKVxyXG5cclxuICAgIC8vIGNvbXBhdGlibGUgd2l0aCBvbGQgcmVxdWVzdCBvcHRpb25zIHRvIG5ldyBvcHRpb25zXHJcbiAgICBjb25zdCBvcHQgPSByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9ucylcclxuXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAvLyBoYW5kbGUgQ29udGVudC1UeXBlXHJcbiAgICAgIGxldCBjb250ZW50VHlwZSA9ICcnXHJcbiAgICAgIGlmIChvYmo/LmhlYWRlcnM/LmNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5jb250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuY29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LkNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5Db250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuQ29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LlsnY29udGVudC10eXBlJ10pIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSAnJyAmJiBvYmouaGVhZGVycykge1xyXG4gICAgICAgIG9iai5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGNvbnRlbnRUeXBlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9ialxyXG4gICAgfSlcclxuICAgIGlmICgncmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UnIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAvLyB1c2Ugb2xkIHJlcXVlc3Qgb3B0aW9uIGZvcm1hdFxyXG4gICAgICAgIGlmIChvcHQuX19pc09sZE9wdGlvbnMpIHtcclxuICAgICAgICAgIGlmICgnanNvbicgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSBhcyBQcm9taXNlPElSZXNwb25zZTxULCBVPj5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RcclxuIiwiaW1wb3J0IHsgSUNvbmZpZywgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcclxuaW1wb3J0IHsgSUpTT04gfSBmcm9tICdAcGljZ28vc3RvcmUvZGlzdC90eXBlcydcclxuXHJcbmNsYXNzIERCIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYjogSlNPTlN0b3JlXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5kYiA9IG5ldyBKU09OU3RvcmUodGhpcy5jdHguY29uZmlnUGF0aClcclxuXHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNCZWQnLCB7XHJcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxyXG4gICAgICAgICAgY3VycmVudDogJ3NtbXMnXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNnb1BsdWdpbnMnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkIChmbHVzaD86IGJvb2xlYW4pOiBJSlNPTiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYi5yZWFkKGZsdXNoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IChrZXk6IHN0cmluZyA9ICcnKTogYW55IHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcclxuICB9XHJcblxyXG4gIHNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBoYXMgKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmhhcyhrZXkpXHJcbiAgfVxyXG5cclxuICB1bnNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIudW5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogUGFydGlhbDxJQ29uZmlnPik6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnVuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEQlxyXG5cclxuLy8gY29uc3QgaW5pdENvbmZpZyA9IChjb25maWdQYXRoOiBzdHJpbmcpOiBsb3dkYi5Mb3dkYlN5bmM8YW55PiA9PiB7XHJcbi8vIH1cclxuXHJcbi8vIGNvbnN0IHNhdmVDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nLCBjb25maWc6IGFueSk6IHZvaWQgPT4ge1xyXG4vLyAgIGNvbnN0IGRiID0gaW5pdENvbmZpZyhjb25maWdQYXRoKVxyXG4vLyAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbi8vICAgICBkYi5yZWFkKCkuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSkud3JpdGUoKVxyXG4vLyAgIH0pXHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCB7XHJcbi8vIGluaXRDb25maWcsXHJcbi8vIHNhdmVDb25maWdcclxuLy8gfVxyXG4iLCJpbXBvcnQgc3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nXHJcbmltcG9ydCB7XHJcbiAgSVJlc3VsdCxcclxuICBJUHJvY2Vzc0VudixcclxuICBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCxcclxuICBJUGx1Z2luSGFuZGxlcixcclxuICBJUGx1Z2luSGFuZGxlck9wdGlvbnMsXHJcbiAgVW5kZWZpbmFibGUsXHJcbiAgSVBpY0dvLFxyXG4gIElQbHVnaW5IYW5kbGVyUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBnZXRQcm9jZXNzUGx1Z2luTmFtZSwgZ2V0Tm9ybWFsUGx1Z2luTmFtZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi9pMThuL3poLUNOJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFBsdWdpbkhhbmRsZXIgaW1wbGVtZW50cyBJUGx1Z2luSGFuZGxlciB7XHJcbiAgLy8gVGhhbmtzIHRvIGZlZmxvdyAtPiBodHRwczovL2dpdGh1Yi5jb20vZmVmbG93L2ZlZmxvdy9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvaW5zdGFsbC9wbHVnaW4uanNcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xyXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIC8vIGRldGVjdCBpZiBoYXMgYWxyZWFkeSBpbnN0YWxsZWRcclxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LnBsdWdpbkxvYWRlci5oYXNQbHVnaW4oaXRlbS5wa2dOYW1lKSkge1xyXG4gICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKGl0ZW0ucGtnTmFtZSlcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNHbyBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcclxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcclxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXHJcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVuaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZSAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kIChjbWQ6IHN0cmluZywgbW9kdWxlczogc3RyaW5nW10sIHdoZXJlOiBzdHJpbmcsIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY6IElQcm9jZXNzRW52ID0ge30pOiBQcm9taXNlPElSZXN1bHQ+IHtcclxuICAgIC8vIG9wdGlvbnMgZmlyc3RcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcclxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXHJcbiAgICAgIGlmIChyZWdpc3RyeSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3h5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7IGN3ZDogd2hlcmUsIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudikgfSlcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXHJcbiAgICAgICAgbnBtLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRvdXQpXHJcblxyXG4gICAgICAgIG5wbS5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3RkZXJyKVxyXG5cclxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xyXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IHtcclxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgZnVsbE5hbWU6ICcnLFxyXG4gICAgcGtnTmFtZTogJydcclxuICB9XHJcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcclxuICBpZiAoIXJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXHJcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxyXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcclxuICBpZiAoIXBrZ05hbWUpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxyXG4gICAgcGtnTmFtZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgeyBaSF9DTiwgSUxvY2FsZXNLZXksIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXHJcblxyXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXHJcbmltcG9ydCB7IElTdHJpbmdLZXlNYXAsIElJMThuTWFuYWdlciB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xyXG5pbXBvcnQgeyBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcclxuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xyXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXHJcblxyXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcclxuICAnemgtQ04nOiBaSF9DTixcclxuICAnemgtVFcnOiBaSF9UVyxcclxuICBlbjogRU5cclxufVxyXG5cclxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcclxuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XHJcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcclxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4biAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xyXG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcclxuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcclxuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIgKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XHJcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcclxuICAgIH1cclxuICAgIHJldHVybiBpMThuRm9sZGVyXHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXHJcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGUgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFkZExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcclxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFuZ3VhZ2VMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBJMThuTWFuYWdlclxyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXHJcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrppLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWumktleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6K6+5a6a5LuT5bqT5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6K6+5a6a5YiG5pSv5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+iuvuWumkFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICforr7lrprorr/pl67nvZHlnYAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6K6+5a6aQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ+iuvuWummFjY2Vzc1Rva2VuJyxcclxuICBQSUNCRURfSU1HVVJfQUxCVU06ICforr7lrprnm7jlhozlkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+iuvuWumuS7o+eQhicsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrkvKDml7bloavlhpknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6K6+5a6a5pON5L2c5ZGYJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICforr7lrprmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAn6K6+5a6a5Yqg6YCf5Z+f5ZCNJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2cGxpc3RcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6K6+5a6a5o6l5Y+j572R5Z2AJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+WQr+eUqFNTTCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aXtuWQr+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAn5piv5ZCm5re75Yqg5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAn6ZyA6KaB5re75Yqg5rC05Y2w5pe25ZCv55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6K6+5a6a5rC05Y2w57G75Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICfor7fpgInmi6nmsLTljbDnsbvlnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+aYr+WQpuWFqOWxj+awtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ+iuvuWumuawtOWNsOinkuW6picsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICforr7lrprmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ+ivt+i+k+WFpeawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAn6K6+5a6a5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6K+36L6T5YWl5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU86ICforr7lrprmsLTljbDnm7jlr7nkuo7lm77niYfnmoTmr5TkvosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAn6K+36L6T5YWlMC0x55qE5bCP5pWwJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICforr7lrprmsLTljbDlrZfkvZPpopzoibInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAn6K+36L6T5YWlcmdi6aKc6Imy5YC8JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICforr7lrprmsLTljbDlm77niYfot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K+36L6T5YWl5rC05Y2w5Zu+54mH6Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ+iuvuWumuawtOWNsOS9jee9ricsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+ivt+mAieaLqeawtOWNsOS9jee9ricsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+iuvuWumuWbvueJh+i0qOmHjycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfor7fovpPlhaUwLTEwMOeahOaVtOaVsCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbov5vooYzmoLzlvI/ovazmjaInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovazmjaLml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+iuvuWumui9rOaNouagvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfor7fpgInmi6novazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbov5vooYzlm77niYfnvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+iuvuWumue8qeaUvuWuveW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+iuvuWumue8qeaUvumrmOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOi/m+ihjOe8qeaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57yp5pS+5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICforr7lrprnvKnmlL7nmb7liIbmr5QnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6L+b6KGM5Zu+54mH5peL6L2sJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovazml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6K6+5a6a5peL6L2s6KeS5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6K+36L6T5YWl5pWw5a2X77yM5Y+v5Li66LSf5pWwJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ+aYr+WQpuenu+mZpEVYSUbkv6Hmga8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG5L+h5oGv5pe25ZCv55SoJyxcclxuXHJcbiAgLy8gUGx1Z2luIEhhbmRsZXJcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOF5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo4XlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo4XlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijheWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjeaIluWQiOazleWuieijhei3r+W+hCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246L295oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi9veWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246L295aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovb3lpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTG9jYWxlc0tleSA9IGtleW9mIHR5cGVvZiBaSF9DTlxyXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxyXG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IFpIX1RXOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAn5LiK5YKz5aSx5pWXJyxcclxuICBDSEVDS19TRVRUSU5HUzogJ+iri+aqouafpeS9oOeahOioreWumuaYr+WQpuato+eiuicsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprlj4rntrLot68nLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6Yyv6Kqk56K877yaJHtjb2Rlfe+8jOiri+aJk+mWi+eAj+imveWZqOiyvOS4iuWcsOWdgOafpeeci+ebuOmXnOWOn+WboCcsXHJcbiAgU0VSVkVSX0VSUk9SOiAn5Ly65pyN5Zmo5Ye66Yyv77yM6KuL6YeN6KmmJyxcclxuICBBVVRIX0ZBSUxFRDogJ+iqjeitieWkseaVlycsXHJcblxyXG4gIC8vIHNtbXNcclxuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcclxuICBQSUNCRURfU01NU19UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAn5YKZ55So5LiK5YKz57ay5Z2AJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICfpmL/ph4zkupFPU1MnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+ioreWumktleUlkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6Kit5a6aS2V5U2VjcmV0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yab3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAn6aiw6KiK5LqRQ09TJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICfoqK3lrppTZWNyZXRJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICfoqK3lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICfoqK3lrppBcHBJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mmFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZU1vZ3IyJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICfoqK3lrprliIbmlK/lkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6Kit5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG5cclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICfoqK3lrppDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6Kit5a6aYWNjZXNzVG9rZW4nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+ioreWumuebuOewv+WQjScsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAn6Kit5a6aUFJPWFknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5YKz5pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+ioreWumuaTjeS9nOWToScsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6Kit5a6a5pON5L2c5ZOh5a+G56K8JyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+ioreWumuWKoOmAn+e2suWdgCcsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl5pON5L2c5ZOh5a+G56K8JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICfoqK3lrppBUEnkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+ioreWumuawtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6KuL6YG45pOH5rC05Y2w6aGe5Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICfoqK3lrprmsLTljbDop5LluqYnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6Kit5a6a5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfoq4vovLjlhaXmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+ioreWumuawtOWNsOWtl+mrlCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+iri+i8uOWFpeawtOWNsOWtl+mrlOaWh+S7tui3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6Kit5a6a5rC05Y2w5ZyW54mH5q+U5L6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iri+i8uOWFpTAtMeeahOaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6Kit5a6a5rC05Y2w5a2X6auU6aGP6ImyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iri+i8uOWFpXJnYumhj+iJsuWAvCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6Kit5a6a5rC05Y2w5ZyW54mH6Lev5b6RJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iri+i8uOWFpeawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICfoqK3lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfoq4vpgbjmk4fmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICfoqK3lrprlnJbniYfos6rph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMC0xMDDnmoTmlbTmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6YCy6KGM5qC85byP6L2J5o+bJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2J5o+b5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6KuL6YG45pOH6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6YCy6KGM5ZyW54mH57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICfoqK3lrprnuK7mlL7lr6zluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5TpgLLooYznuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6Kit5a6a57iu5pS+55m+5YiG5q+UJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+iri+i8uOWFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+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+eiuueahOaPkuS7tuWQjeeosSdcclxufVxyXG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IEVOOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncycsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncyBhbmQgbmV0d29yaycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxyXG4gIFNFUlZFUl9FUlJPUjogJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsXHJcbiAgQVVUSF9GQUlMRUQ6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ0V4LiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIEFsaS1jbG91ZFxyXG4gIFBJQ0JFRF9BTElDTE9VRDogJ0FsaSBDbG91ZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAnU2V0IEtleUlkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAnU2V0IEtleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBvc3MtY24tYmVpamluZycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gVGVuY2VudC1jbG91ZFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICdUZW5jZW50IENsb3VkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDaG9vc2UgQ09TIHZlcnNpb24nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICdTZXQgU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ1NldCBBcHBJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICdFeC4gMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gYXAtYmVpamluZycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cDovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VNb2dyMicsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ1NldCBSZXBvIE5hbWUnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ1NldCBCcmFuY2gnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAnRXguIHVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICdFeC4gbWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAnUWluaXUnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICdTZXQgQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICdTZXQgVVJMJyxcclxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAnRXguIHowJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAnRXguID9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ0V4LiBodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAnU2V0IENsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICdTZXQgQWNjZXNzIFRva2VuJyxcclxuICBQSUNCRURfSU1HVVJfQUxCVU06ICdTZXQgQWxidW0gTmFtZScsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAnU2V0IFByb3h5JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgYXMgYW5vbnltb3VzJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICdVcHl1bicsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ1NldCBPcGVyYXRvcicsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAnU2V0IE9wZXJhdG9yIFBhc3N3b3JkJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICdFeC4gbWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIG9wZXJhdG9yIHBhc3N3b3JkJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICdFeC4gaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ0V4LiAhaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAnRXguIG1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBwYXNzd29yZCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ1doZXRoZXIgdG8gYWRkIHdhdGVybWFyaycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ1NldCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAnUGxlYXNlIHNlbGVjdCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIGZ1bGwtc2NyZWVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAnU2V0IHdhdGVybWFyayBhbmdsZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICdTZXQgd2F0ZXJtYXJrIHRleHQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ1BsZWFzZSBlbnRlciB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgZm9udCBmaWxlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ1NldCB0aGUgcmF0aW8gb2YgdGhlIHdhdGVybWFyayB0byB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICdTZXQgd2F0ZXJtYXJrIGZvbnQgY29sb3InLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAnUGxlYXNlIGVudGVyIHRoZSBSR0IgY29sb3IgdmFsdWUnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ1NldCB3YXRlcm1hcmsgcG9zaXRpb24nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ1NldCBpbWFnZSBxdWFsaXR5JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ1BsZWFzZSBlbnRlciBhbiBpbnRlZ2VyIGJldHdlZW4gMC0xMDAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAnV2hldGhlciB0byBwZXJmb3JtIGZvcm1hdCBjb252ZXJzaW9uJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAnRW5hYmxlIHdoZW4gZm9ybWF0IGNvbnZlcnNpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ1NldCBjb252ZXJzaW9uIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICdQbGVhc2Ugc2VsZWN0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICdFbmFibGUgd2hlbiBpbWFnZSByZXNpemluZyBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ1NldCByZXNpemluZyB3aWR0aCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ1NldCByZXNpemluZyBoZWlnaHQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UgYnkgcGVyY2VudGFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAnRW5hYmxlIHdoZW4gcmVzaXppbmcgYnkgcGVyY2VudGFnZSBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAnV2hldGhlciB0byByb3RhdGUgdGhlIGltYWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICdFbmFibGUgd2hlbiBpbWFnZSByb3RhdGlvbiBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICdTZXQgcm90YXRpb24gYW5nbGUnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXIsIGNhbiBiZSBuZWdhdGl2ZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICdXaGV0aGVyIHRvIHJlbW92ZSBFWElGIGluZm9ybWF0aW9uJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAnRW5hYmxlIHdoZW4gcmVtb3ZpbmcgRVhJRiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCcsXHJcbiAgLy8gUGx1Z2luIEhhbmRsZXJcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAnUGx1Z2luIGluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSBvciB2YWxpZCBpbnN0YWxsYXRpb24gcGF0aCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAnUGx1Z2luIHVuaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAnUGx1Z2luIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lJ1xyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xyXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXHJcbmltcG9ydCBDb21tYW5kZXIgZnJvbSAnLi4vbGliL0NvbW1hbmRlcidcclxuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi4vbGliL0xvZ2dlcidcclxuaW1wb3J0IExpZmVjeWNsZSBmcm9tICcuL0xpZmVjeWNsZSdcclxuaW1wb3J0IExpZmVjeWNsZVBsdWdpbnMsIHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuLi9saWIvTGlmZWN5Y2xlUGx1Z2lucydcclxuaW1wb3J0IHVwbG9hZGVycyBmcm9tICcuLi9wbHVnaW5zL3VwbG9hZGVyJ1xyXG5pbXBvcnQgdHJhbnNmb3JtZXJzIGZyb20gJy4uL3BsdWdpbnMvdHJhbnNmb3JtZXInXHJcbmltcG9ydCBQbHVnaW5Mb2FkZXIgZnJvbSAnLi4vbGliL1BsdWdpbkxvYWRlcidcclxuaW1wb3J0IHsgZ2V0LCBzZXQsIHVuc2V0IH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyBJSGVscGVyLCBJSW1nSW5mbywgSUNvbmZpZywgSVBpY0dvLCBJU3RyaW5nS2V5TWFwLCBJUGx1Z2luTG9hZGVyLCBJSTE4bk1hbmFnZXIsIElQaWNHb1BsdWdpbiwgSVBpY0dvUGx1Z2luSW50ZXJmYWNlLCBJUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZ2V0Q2xpcGJvYXJkSW1hZ2UgZnJvbSAnLi4vdXRpbHMvZ2V0Q2xpcGJvYXJkSW1hZ2UnXHJcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xyXG5pbXBvcnQgREIgZnJvbSAnLi4vdXRpbHMvZGInXHJcbmltcG9ydCBQbHVnaW5IYW5kbGVyIGZyb20gJy4uL2xpYi9QbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50LCBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBldmVudEJ1cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50QnVzJ1xyXG5pbXBvcnQgeyBpc0NvbmZpZ0tleUluQmxhY2tMaXN0LCBpc0lucHV0Q29uZmlnVmFsaWQgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IEkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vaTE4bidcclxuXHJcbmV4cG9ydCBjbGFzcyBQaWNHbyBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElQaWNHbyB7XHJcbiAgcHJpdmF0ZSBfY29uZmlnITogSUNvbmZpZ1xyXG4gIHByaXZhdGUgbGlmZWN5Y2xlITogTGlmZWN5Y2xlXHJcbiAgcHJpdmF0ZSBkYiE6IERCXHJcbiAgcHJpdmF0ZSBfcGx1Z2luTG9hZGVyITogUGx1Z2luTG9hZGVyXHJcbiAgY29uZmlnUGF0aDogc3RyaW5nXHJcbiAgYmFzZURpciE6IHN0cmluZ1xyXG4gIGhlbHBlciE6IElIZWxwZXJcclxuICBsb2c6IExvZ2dlclxyXG4gIGNtZDogQ29tbWFuZGVyXHJcbiAgb3V0cHV0OiBJSW1nSW5mb1tdXHJcbiAgaW5wdXQ6IGFueVtdXHJcbiAgcmF3SW5wdXQ6IGFueVtdXHJcbiAgcGx1Z2luSGFuZGxlcjogUGx1Z2luSGFuZGxlclxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MS41LjArXHJcbiAgICpcclxuICAgKiB1c2UgcmVxdWVzdCBpbnN0ZWFkXHJcbiAgICovXHJcbiAgUmVxdWVzdCE6IFJlcXVlc3RcclxuICBpMThuITogSUkxOG5NYW5hZ2VyXHJcbiAgVkVSU0lPTjogc3RyaW5nID0gcHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTlxyXG4gIEdVSV9WRVJTSU9OPzogc3RyaW5nXHJcblxyXG4gIGdldCBwbHVnaW5Mb2FkZXIgKCk6IElQbHVnaW5Mb2FkZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsdWdpbkxvYWRlclxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IgKGNvbmZpZ1BhdGg6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBjb25maWdQYXRoXHJcbiAgICB0aGlzLm91dHB1dCA9IFtdXHJcbiAgICB0aGlzLmlucHV0ID0gW11cclxuICAgIHRoaXMucmF3SW5wdXQgPSBbXVxyXG4gICAgdGhpcy5oZWxwZXIgPSB7XHJcbiAgICAgIHRyYW5zZm9ybWVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndHJhbnNmb3JtZXInKSxcclxuICAgICAgdXBsb2FkZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd1cGxvYWRlcicpLFxyXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxyXG4gICAgICBiZWZvcmVVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVXBsb2FkUGx1Z2lucycpLFxyXG4gICAgICBhZnRlclVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdhZnRlclVwbG9hZFBsdWdpbnMnKVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Q29uZmlnUGF0aCgpXHJcbiAgICB0aGlzLmxvZyA9IG5ldyBMb2dnZXIodGhpcylcclxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxyXG4gICAgdGhpcy5wbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIodGhpcylcclxuICAgIHRoaXMuaW5pdENvbmZpZygpXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSBob21lZGlyKCkgKyAnLy5waWNsaXN0L2NvbmZpZy5qc29uJ1xyXG4gICAgfVxyXG4gICAgaWYgKHBhdGguZXh0bmFtZSh0aGlzLmNvbmZpZ1BhdGgpLnRvVXBwZXJDYXNlKCkgIT09ICcuSlNPTicpIHtcclxuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgfVxyXG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcclxuICAgIGNvbnN0IGV4aXN0ID0gZnMucGF0aEV4aXN0c1N5bmModGhpcy5jb25maWdQYXRoKVxyXG4gICAgaWYgKCFleGlzdCkge1xyXG4gICAgICBmcy5lbnN1cmVGaWxlU3luYyhgJHt0aGlzLmNvbmZpZ1BhdGh9YClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXHJcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRiLnJlYWQodHJ1ZSkgYXMgSUNvbmZpZ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGluaXQgMThuIGF0IGZpcnN0XHJcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxyXG4gICAgICB0aGlzLlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzKVxyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIgPSBuZXcgUGx1Z2luTG9hZGVyKHRoaXMpXHJcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXHJcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCdwaWNnbycpXHJcbiAgICAgIHVwbG9hZGVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICB0cmFuc2Zvcm1lcnModGhpcykucmVnaXN0ZXIodGhpcylcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJycpXHJcbiAgICAgIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgIHRoaXMubGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSh0aGlzKVxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIHRoaXMubG9nLmVycm9yKGUpXHJcbiAgICAgIHRocm93IGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGVhc2lseSBtYW5udWFsbHkgbG9hZCBhIHBsdWdpblxyXG4gICAqIGlmIHByb3ZpZGUgcGx1Z2luIG5hbWUsIHdpbGwgcmVnaXN0ZXIgcGx1Z2luIGJ5IG5hbWVcclxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXHJcbiAgICovXHJcbiAgdXNlIChwbHVnaW46IElQaWNHb1BsdWdpbiwgbmFtZT86IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHBsdWdpbih0aGlzKVxyXG4gICAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5jbWQuaW5pdCgpXHJcbiAgICAgIHRoaXMuY21kLmxvYWRDb21tYW5kcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWc8VD4gKG5hbWU/OiBzdHJpbmcpOiBUIHtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIHVua25vd24gYXMgVFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGdldCh0aGlzLl9jb25maWcsIG5hbWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlnIChjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcclxuICAgIHRoaXMuZGIuc2F2ZUNvbmZpZyhjb25maWcpXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXHJcbiAgICB0aGlzLmRiLnVuc2V0KGtleSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcclxuICAgICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7bmFtZX0gY2FuJ3QgYmUgbW9kaWZpZWRgKVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcclxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXHJcbiAgICAgIH1cclxuICAgICAgc2V0KHRoaXMuX2NvbmZpZywgbmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XHJcbiAgICAgICAgY29uZmlnTmFtZTogbmFtZSxcclxuICAgICAgICB2YWx1ZTogY29uZmlnW25hbWVdXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdW5zZXRDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBnZXQgcmVxdWVzdCAoKTogSVJlcXVlc3RbJ3JlcXVlc3QnXSB7XHJcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWQgKGlucHV0PzogYW55W10pOiBQcm9taXNlPElJbWdJbmZvW10gfCBFcnJvcj4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgICByZXR1cm4gW11cclxuICAgIH1cclxuICAgIC8vIHVwbG9hZCBmcm9tIGNsaXBib2FyZFxyXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgeyBpbWdQYXRoLCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgfSA9IGF3YWl0IGdldENsaXBib2FyZEltYWdlKHRoaXMpXHJcbiAgICAgICAgaWYgKGltZ1BhdGggPT09ICdubyBpbWFnZScpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZBSUxFRCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xyXG4gICAgICAgICAgICAgIC8vIOWIoOmZpCBwaWNnbyDnlJ/miJDnmoTlm77niYfmlofku7bvvIzkvovlpoIgYH4vLnBpY2dvLzIwMjAwNjIxMjA1NzIwLnBuZ2BcclxuICAgICAgICAgICAgICBmcy5yZW1vdmUoaW1nUGF0aCkuY2F0Y2goKGUpID0+IHsgdGhpcy5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMub25jZSgnZmluaXNoZWQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgZnMucmVtb3ZlKGltZ1BhdGgpLmNhdGNoKChlKSA9PiB7IHRoaXMubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdKVxyXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHVwbG9hZCBmcm9tIHBhdGhcclxuICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0KVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBJbWdGcm9tUGF0aCBmcm9tICcuL3BhdGgnXHJcbmltcG9ydCBJbWdGcm9tQmFzZTY0IGZyb20gJy4vYmFzZTY0J1xyXG5cclxuY29uc3QgYnVpbGRJblRyYW5zZm9ybWVyczogSVBpY0dvUGx1Z2luID0gKCkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICByZWdpc3RlciAoY3R4OiBJUGljR28pIHtcclxuICAgICAgY3R4LmhlbHBlci50cmFuc2Zvcm1lci5yZWdpc3RlcigncGF0aCcsIEltZ0Zyb21QYXRoKVxyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdiYXNlNjQnLCBJbWdGcm9tQmFzZTY0KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblRyYW5zZm9ybWVyc1xyXG4iXSwibmFtZXMiOlsicGx1Z2luSGFuZGxlciIsImhhbmRsZSIsImN0eCIsImNtZCIsInByb2dyYW0iLCJjb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGlhcyIsIm9wdGlvbiIsImFjdGlvbiIsInBsdWdpbnMiLCJwcm94eSIsInJlZ2lzdHJ5Iiwib3B0aW9ucyIsImluc3RhbGwiLCJjYXRjaCIsImUiLCJsb2ciLCJlcnJvciIsInVuaW5zdGFsbCIsInVwZGF0ZSIsImNvbmZpZyIsImlzVXJsIiwidXJsIiwidGVzdCIsImlzVXJsRW5jb2RlIiwiZGVjb2RlVVJJIiwiaGFuZGxlVXJsRW5jb2RlIiwiZW5jb2RlVVJJIiwiZ2V0SW1hZ2VTaXplIiwiZmlsZSIsIndpZHRoIiwiaGVpZ2h0IiwiaW1hZ2VTaXplIiwicmVhbCIsImdldEZTRmlsZSIsImFzeW5jIiwiZmlsZVBhdGgiLCJleHRuYW1lIiwicGF0aCIsImZpbGVOYW1lIiwiYmFzZW5hbWUiLCJidWZmZXIiLCJmcyIsInJlYWRGaWxlIiwic3VjY2VzcyIsInJlYXNvbiIsImdldFVSTEZpbGUiLCJ0aW1lb3V0SWQiLCJyZXF1ZXN0Rm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcyIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsInRoZW4iLCJyZXNwIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInVybFBhdGgiLCJVUkwiLCJwYXRobmFtZSIsIm1lc3NhZ2UiLCJ0aW1lb3V0UHJvbWlzZSIsInNldFRpbWVvdXQiLCJyYWNlIiwiZ2V0UGx1Z2luTmFtZVR5cGUiLCJuYW1lIiwic3RhcnRzV2l0aCIsImlzU2ltcGxlTmFtZSIsIm5hbWVPclBhdGgiLCJpc0Fic29sdXRlIiwicGx1Z2luUGF0aCIsImpvaW4iLCJwcm9jZXNzIiwiY3dkIiwiZXhpc3RzU3luYyIsImluY2x1ZGVzIiwiaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lIiwic2NvcGUiLCJnZXRQcm9jZXNzUGx1Z2luTmFtZSIsImxvZ2dlciIsImNvbnNvbGUiLCJoYW5kbGVVbml4U3R5bGVQYXRoIiwid2FybiIsImdldE5vcm1hbFBsdWdpbk5hbWUiLCJyZW1vdmVQbHVnaW5WZXJzaW9uIiwicGFja2FnZUpTT05QYXRoIiwicG9zaXgiLCJwa2ciLCJyZWFkSlNPTlN5bmMiLCJwYXRoU3RyIiwic3BsaXQiLCJzZXAiLCJyZWciLCJtYXRjaEFyciIsIm1hdGNoIiwiY29uZmlnQmxhY2tMaXN0IiwiaXNDb25maWdLZXlJbkJsYWNrTGlzdCIsImtleSIsInNvbWUiLCJibGFja0l0ZW0iLCJpc0lucHV0Q29uZmlnVmFsaWQiLCJBcnJheSIsImlzQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwic2FmZVBhcnNlIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiZm9yY2VOdW1iZXIiLCJudW0iLCJpc05hTiIsIk51bWJlciIsImlzRGV2IiwiZW52IiwiTk9ERV9FTlYiLCJkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoIiwiX19kaXJuYW1lIiwiQWRkV2F0ZXJtYXJrIiwiaW1nIiwid2F0ZXJtYXJrVHlwZSIsImRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCIsImlzRnVsbFNjcmVlbldhdGVybWFyayIsIndhdGVybWFya0RlZ3JlZSIsInRleHQiLCJ3YXRlcm1hcmtGb250UGF0aCIsIndhdGVybWFya1NjYWxlUmF0aW8iLCJ3YXRlcm1hcmtDb2xvciIsIndhdGVybWFya0ltYWdlUGF0aCIsInBvc2l0aW9uIiwiaW1hZ2UiLCJzaGFycCIsImltZ1dpZHRoIiwibWV0YWRhdGEiLCJ3YXRlcm1hcmsiLCJ0b0J1ZmZlciIsImNvbG9yIiwiZm9udEZhbWlseSIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJmaWxsIiwidGV4dFNWRyIsIlRleHRUb1NWRyIsImxvYWRTeW5jIiwiZ2V0U1ZHIiwiQnVmZmVyIiwiZnJvbSIsInRleHQyU1ZHIiwid2F0ZXJtYXJrV2lkdGgiLCJ3YXRlcm1hcmtIZWlnaHQiLCJnZXRTaXplIiwid2F0ZXJtYXJrUmVzaXplV2lkdGgiLCJNYXRoIiwiZmxvb3IiLCJ3YXRlcm1hcmtSZXNpemVIZWlnaHQiLCJyZXNpemUiLCJmaXQiLCJyb3RhdGUiLCJiYWNrZ3JvdW5kIiwiciIsImciLCJiIiwiYWxwaGEiLCJjcmVhdGVXYXRlcm1hcmsiLCJjb21wb3NpdGUiLCJpbnB1dCIsImdyYXZpdHkiLCJ0aWxlIiwidmFsaWRQYXJhbSIsInBhcmFtcyIsImV2ZXJ5IiwicGFyYW0iLCJhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCIsImltYWdlRXh0TGlzdCIsImltYWdlQWRkV2F0ZXJNYXJrIiwid2F0ZXJtYXJrVGV4dCIsIndhdGVybWFya1Bvc2l0aW9uIiwiZm9ybWF0T3B0aW9ucyIsInF1YWxpdHkiLCJpc0NvbnZlcnQiLCJjb252ZXJ0Rm9ybWF0IiwiaXNSZVNpemUiLCJyZVNpemVIZWlnaHQiLCJyZVNpemVXaWR0aCIsImlzUmVTaXplQnlQZXJjZW50IiwicmVTaXplUGVyY2VudCIsImlzUm90YXRlIiwicm90YXRlRGVncmVlIiwiaW1hZ2VQcm9jZXNzIiwicmF3Rm9ybWF0IiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0Iiwicm91bmQiLCJuZXdGb3JtYXQiLCJ0b0Zvcm1hdCIsImZvcm1hdCIsImltYWdlRm9ybWF0TGlzdCIsIm5lZWRBZGRXYXRlcm1hcmsiLCJ3YXRlcm1hcmtPcHRpb25zIiwiZmlsZUV4dCIsImlzQWRkV2F0ZXJtYXJrIiwibmVlZENvbXByZXNzIiwiY29tcHJlc3NPcHRpb25zIiwicmVtb3ZlRXhpZiIsInVwbG9hZCIsImFyZ3VtZW50cyIsImlucHV0TGlzdCIsIm1hcCIsIml0ZW0iLCJmaWx0ZXIiLCJleGlzdCIsInVzZXJDb25maWciLCJnZXRDb25maWciLCJ0eXBlIiwiaTE4biIsInRyYW5zbGF0ZSIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImNob2ljZXMiLCJpc1JlbW92ZUV4aWYiLCJoYW5kbGVDb25maWciLCJwcm9tcHRzIiwibW9kdWxlIiwiYW5zd2VyIiwiaW5xdWlyZXIiLCJwcm9tcHQiLCJjb25maWdOYW1lIiwic2F2ZUNvbmZpZyIsInNldHRpbmciLCJjb21wcmVzcyIsImJ1aWxkaW4iLCJoZWxwZXIiLCJnZXQiLCJnZXRJZExpc3QiLCJwbHVnaW5Mb2FkZXIiLCJnZXRQbHVnaW4iLCJnZXRGdWxsTGlzdCIsInBsdWdpbiIsImluZm8iLCJhcmd2IiwidXNlIiwidXBsb2FkZXIiLCJ0cmFuc2Zvcm1lciIsInB1c2giLCJwaWNnb1BsdWdpbnMiLCJzZXRDb25maWciLCJnZW5lcmF0ZSIsIm9wdHMiLCJnZXRPcHRpb25zIiwidG1wIiwic291cmNlIiwiYW5zd2VycyIsIl9maWxlcyIsImdsb2JieSIsImRvdCIsImdsb2IiLCJmaWx0ZXJzIiwiZm9yRWFjaCIsImZpbGVzIiwicmVuZGVyIiwid3JpdGVGaWxlVHJlZSIsImRlc3QiLCJjb21wbGV0ZSIsImNvbXBsZXRlTWVzc2FnZSIsImV4cCIsImZuIiwiRnVuY3Rpb24iLCJzdHJpbmdpZnkiLCJ0ZW1wbGF0ZVBhdGgiLCJvcHRpb25zUGF0aCIsInJlcXVpcmUiLCJmaWxlVHJlZSIsInJlYWRGaWxlU3luYyIsImNvbnRlbnQiLCJlanMiLCJpc0J1ZmZlciIsImRpciIsImVuc3VyZURpclN5bmMiLCJkaXJuYW1lIiwid3JpdGVGaWxlU3luYyIsInJ1biIsIm9mZmxpbmUiLCJ0ZW1wbGF0ZSIsImhhc1NsYXNoIiwiZG93bmxvYWRBbmRHZW5lcmF0ZSIsInJtIiwic3luYyIsImRvd25sb2FkIiwiY2xvbmUiLCJlcnIiLCJpbml0IiwicHJvamVjdCIsImluUGxhY2UiLCJob21lZGlyIiwib2siLCJvbiIsImNoYWxrIiwiZ3JheSIsImxhbmciLCJsaXN0IiwiZ2V0TGFuZ3VhZ2VMaXN0Iiwic2V0TGFuZ3VhZ2UiLCJMaWZlY3ljbGVQbHVnaW5zIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiTWFwIiwicGx1Z2luSWRNYXAiLCJyZWdpc3RlciIsImlkIiwiVHlwZUVycm9yIiwiaGFzIiwic2V0IiwiY3VycmVudFBsdWdpbiIsInVucmVnaXN0ZXIiLCJwbHVnaW5OYW1lIiwicGx1Z2luTGlzdCIsImRlbGV0ZSIsImdldE5hbWUiLCJnZXRMaXN0IiwidmFsdWVzIiwic2V0Q3VycmVudFBsdWdpbk5hbWUiLCJDb21tYW5kZXIiLCJDb21tYW5kIiwidmVyc2lvbiIsImRlYnVnIiwic2lsZW50IiwiYXJncyIsImV4aXQiLCJjdXJyZW50UGx1Z2luTmFtZSIsImxvYWRDb21tYW5kcyIsIklMb2dUeXBlIiwiSUJ1aWxkSW5FdmVudCIsIklCdXNFdmVudCIsIkxvZ2dlciIsImhhbmRsZUxvZyIsIm1zZyIsImxvZ0hlYWRlciIsImxldmVsIiwidG9VcHBlckNhc2UiLCJsb2dMZXZlbCIsImxvZ1BhdGgiLCJiYXNlRGlyIiwicmVzdWx0IiwiY2hlY2tMb2dGaWxlSXNMYXJnZSIsImlzTGFyZ2UiLCJ3YXJuaW5nTXNnIiwieWVsbG93IiwicmVjcmVhdGVMb2dGaWxlIiwidW5zaGlmdCIsImhhbmRsZVdyaXRlTG9nIiwibG9nRmlsZVNpemUiLCJzdGF0U3luYyIsInNpemUiLCJsb2dGaWxlU2l6ZUxpbWl0IiwidW5saW5rU3luYyIsImNyZWF0ZUZpbGVTeW5jIiwiY2hlY2tMb2dMZXZlbCIsImRheWpzIiwiRXJyb3IiLCJ1dGlsIiwic3RhY2siLCJhcHBlbmRGaWxlU3luYyIsInVuZGVmaW5lZCIsIkxpZmVjeWNsZSIsIkV2ZW50RW1pdHRlciIsInN1cGVyIiwidGVtcEZpbGVQYXRoIiwiZW1wdHlEaXJTeW5jIiwidHRmUGF0aCIsIm91dHB1dERpciIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsImF4aW9zIiwidHRmTGluayIsImNvbmZpZ1BhdGgiLCJvdXRwdXQiLCJyYXdJbnB1dCIsIlJlcXVlc3QiLCJWRVJTSU9OIiwiR1VJX1ZFUlNJT04iLCJiaW5kIiwicmVtb3ZlQ29uZmlnIiwidW5zZXRDb25maWciLCJhZGRMaXN0ZW5lciIsIm9uY2UiLCJyZW1vdmVMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImxpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImVtaXQiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0IiwiY2xvbmVEZWVwIiwid2F0ZXJtYXJrTXNnIiwiY29tcHJlc3NNc2ciLCJhbGxTZXR0bGVkIiwiaW5kZXgiLCJ0cmFuc2Zvcm1lZEJ1ZmZlciIsImRvd25sb2FkVFRGIiwibmV3RXh0IiwidGVtcEZpbGUiLCJEYXRlIiwiZ2V0VGltZSIsImhlaWNCdWZmZXIiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwiYmVmb3JlVHJhbnNmb3JtIiwiZG9UcmFuc2Zvcm0iLCJiZWZvcmVVcGxvYWQiLCJkb1VwbG9hZCIsImFmdGVyVXBsb2FkIiwiRkFJTEVEIiwiVVBMT0FEX1BST0dSRVNTIiwiQkVGT1JFX1RSQU5TRk9STSIsImhhbmRsZVBsdWdpbnMiLCJiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zIiwiY3VycmVudFRyYW5zZm9ybWVyIiwiQkVGT1JFX1VQTE9BRCIsImJlZm9yZVVwbG9hZFBsdWdpbnMiLCJvdXRwdXRJbWciLCJBRlRFUl9VUExPQUQiLCJhZnRlclVwbG9hZFBsdWdpbnMiLCJpc0VuY29kZU91dHB1dFVSTCIsImkiLCJpbWdVcmwiLCJiYXNlNjRJbWFnZSIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJBdXRob3JpemF0aW9uIiwiZm9ybURhdGEiLCJzbWZpbGUiLCJ2YWx1ZSIsImZpbGVuYW1lIiwic3NsIiwic21tc0NvbmZpZyIsImltZ0xpc3QiLCJwb3N0Q29uZmlnIiwidG9rZW4iLCJib2R5IiwiY29kZSIsImhhc2giLCJpbWFnZXMiLCJOT1RJRklDQVRJT04iLCJ0aXRsZSIsInByZWZpeCIsImdlbmVyYXRlU2lnbmF0dXJlIiwic2VjcmV0SWQiLCJzZWNyZXRLZXkiLCJhcHBJZCIsImJ1Y2tldCIsInNpZ25hdHVyZSIsInNpZ25UaW1lIiwidG9kYXkiLCJzaWduS2V5IiwiY3J5cHRvIiwiY3JlYXRlSG1hYyIsImRpZ2VzdCIsImh0dHBTdHJpbmciLCJhcmVhIiwic3RyaW5nVG9TaWduIiwiY3JlYXRlSGFzaCIsInJhbmRvbSIsImN1cnJlbnQiLCJtdWx0aVNpZ25hdHVyZSIsInNpZ25IZXhLZXkiLCJ0ZW1wU3RyaW5nIiwiY29uY2F0IiwidG9TdHJpbmciLCJlbmNvZGVVUklDb21wb25lbnQiLCJIb3N0IiwibWltZSIsImxvb2t1cCIsIm9wIiwiZmlsZWNvbnRlbnQiLCJ0Y1l1bk9wdGlvbnMiLCJjdXN0b21VcmwiLCJ1c2VWNCIsInN0YXR1c0NvZGUiLCJvcHRpb25VcmwiLCJzb3VyY2VfdXJsIiwicmVwbyIsImpzb24iLCJicmFuY2giLCJnaXRodWJPcHRpb25zIiwiZG93bmxvYWRfdXJsIiwic2hhIiwiaW1nQmFzZTY0Iiwic2VsZWN0QXJlYSIsImdldFRva2VuIiwicWluaXVPcHRpb25zIiwiYWNjZXNzS2V5IiwibWFjIiwicWluaXUiLCJhdXRoIiwiTWFjIiwicnMiLCJQdXRQb2xpY3kiLCJ1cGxvYWRUb2tlbiIsImJhc2VVcmwiLCJyZXNwb25zZSIsImNsaWVudElkIiwidXNlcm5hbWUiLCJhY2Nlc3NUb2tlbiIsImZvcm1hdEFjY2Vzc1Rva2VuIiwiYWxidW0iLCJhdXRob3JpemF0aW9uIiwicmVxdWVzdE9wdGlvbnMiLCJpbml0UGFnZXMiLCJhbGJ1bUhhc2giLCJnZXRBbGJ1bUhhc2hPcHRpb25zIiwidGltZW91dCIsImFsYnVtTGlzdCIsImltZ3VyT3B0aW9ucyIsImxpbmsiLCJkZWxldGVoYXNoIiwiZGF0ZSIsInRvVVRDU3RyaW5nIiwibWltZVR5cGUiLCJzaWduU3RyaW5nIiwiYWNjZXNzS2V5U2VjcmV0IiwiYWNjZXNzS2V5SWQiLCJhbGlZdW5PcHRpb25zIiwib3BlcmF0b3IiLCJwYXNzd29yZCIsIm1kNVBhc3N3b3JkIiwiTUQ1IiwidXB5dW5PcHRpb25zIiwiaG9zdCIsIndlYmRhdnBsaXN0T3B0aW9ucyIsInNzbEVuYWJsZWQiLCJidWlsZEluVXBsb2FkZXJzIiwiYWxpWXVuVXBsb2FkZXIiLCJ0Y1l1blVwbG9hZGVyIiwiU01NU1VwbG9hZGVyIiwiZ2l0aHViVXBsb2FkZXIiLCJxaW5pdVVwbG9hZGVyIiwiaW1ndXJVcGxvYWRlciIsInVwWXVuVXBsb2FkZXIiLCJ3ZWJkYXZwbGlzdFVwbG9hZGVyIiwiZ2V0SW1nU2l6ZSIsInJlc3VsdHMiLCJpbWdTaXplIiwiUGx1Z2luTG9hZGVyIiwiU2V0IiwicGFja2FnZVBhdGgiLCJyZXBvc2l0b3J5IiwibGljZW5zZSIsInJlc29sdmVQbHVnaW4iLCJiYXNlZGlyIiwibG9hZCIsInBsdWdpbkRpciIsImRlcHMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBzIiwiZGV2RGVwZW5kZW5jaWVzIiwibW9kdWxlcyIsInJlZ2lzdGVyUGx1Z2luIiwiZnVsbExpc3QiLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJwbHVnaW5NYXAiLCJ1bnJlZ2lzdGVyUGx1Z2luIiwiaGFzUGx1Z2luIiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwic3Bhd24iLCJzdGRvdXQiLCJ0cmltIiwiaW1nUGF0aCIsInNob3VsZEtlZXBBZnRlclVwbG9hZGluZyIsImV2ZW50QnVzIiwiaHR0cHNBZ2VudCIsImh0dHBzIiwiQWdlbnQiLCJtYXhWZXJzaW9uIiwibWluVmVyc2lvbiIsImFwcGVuZEZvcm1EYXRhIiwiZm9ybSIsImFwcGVuZCIsInJlc3BvbnNlSW50ZXJjZXB0b3IiLCJzdGF0dXMiLCJyZXNwb25zZUVycm9ySGFuZGxlciIsImVycm9yT2JqIiwiQ09ORklHX0NIQU5HRSIsImhhbmRsZVByb3h5IiwicHJveHlPcHRpb25zIiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwcm90b2NvbCIsIm1heEJvZHlMZW5ndGgiLCJJbmZpbml0eSIsIm1heENvbnRlbnRMZW5ndGgiLCJ0dW5uZWwiLCJodHRwc092ZXJIdHRwIiwiaW5zdGFuY2UiLCJjcmVhdGUiLCJpbnRlcmNlcHRvcnMiLCJvcHQiLCJfX2lzT2xkT3B0aW9ucyIsIkZvcm1EYXRhIiwiYXNzaWduIiwiZ2V0SGVhZGVycyIsInFzIiwicmVxdWVzdEludGVyY2VwdG9yIiwib2JqIiwiQ29udGVudFR5cGUiLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwicmVhZCIsImZsdXNoIiwidW5zZXQiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwiZnVsbE5hbWUiLCJwa2dOYW1lTGlzdCIsImV4ZWNDb21tYW5kIiwid2hlcmUiLCJucG0iLCJwaXBlIiwic3RkZXJyIiwibGFuZ3VhZ2VMaXN0IiwiVVBMT0FEX0ZBSUxFRCIsIkNIRUNLX1NFVFRJTkdTIiwiQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksiLCJVUExPQURfRkFJTEVEX1JFQVNPTiIsIlNFUlZFUl9FUlJPUiIsIkFVVEhfRkFJTEVEIiwiUElDQkVEX1NNTVMiLCJQSUNCRURfU01NU19UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfQUxJQ0xPVUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUIiwiUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9BTElDTE9VRF9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfQUxCVU0iLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRSIsIkJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fQ09NUFJFU1NfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRiIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUYiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQiLCJlbiIsIkkxOG5NYW5hZ2VyIiwib2JqZWN0QWRhcHRlciIsIk9iamVjdEFkYXB0ZXIiLCJsYW5ndWFnZSIsIkkxOG4iLCJhZGFwdGVyIiwiZGVmYXVsdExhbmd1YWdlIiwibG9hZE91dHRlckkxOG4iLCJpMThuRm9sZGVyIiwiZ2V0T3V0dGVySTE4bkZvbGRlciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImlzRmlsZSIsImVuZHNXaXRoIiwiaTE4bkZpbGVQYXRoIiwiaTE4bkZpbGUiLCJpMThuRmlsZU9iaiIsInlhbWwiLCJwYXRoRXhpc3RzU3luYyIsImFkZExvY2FsZSIsImxvY2FsZXMiLCJvcmlnaW5Mb2NhbGVzIiwiZ2V0TG9jYWxlIiwibmV3TG9jYWxlcyIsIm1lcmdlIiwic2V0TG9jYWxlIiwiYWRkTGFuZ3VhZ2UiLCJQaWNHbyIsImluaXRDb25maWdQYXRoIiwiaW5pdENvbmZpZyIsIl9wbHVnaW5Mb2FkZXIiLCJlbnN1cmVGaWxlU3luYyIsIl9jb25maWciLCJ1cGxvYWRlcnMiLCJJbWdGcm9tUGF0aCIsIkltZ0Zyb21CYXNlNjQiLCJsaWZlY3ljbGUiLCJyZWdpc3RlckNvbW1hbmRzIiwicHJvcE5hbWUiLCJzdGFydCIsInJlbW92ZSJdLCJtYXBwaW5ncyI6Im1rQ0FFQSxNQUFNQSxHQUF5QixDQUM3QkMsT0FBU0MsSUFFUCxNQUFNQyxFQUFNRCxFQUFJQyxJQUNoQkEsRUFBSUMsUUFDREMsUUFBUSx3QkFDUkMsWUFBWSx3QkFDWkMsTUFBTSxPQUNOQyxPQUFPLHNCQUF1Qiw0QkFDOUJBLE9BQU8sNEJBQTZCLG9DQUNwQ0MsUUFBTyxDQUFDQyxFQUFtQk4sS0FDMUIsTUFBTU8sTUFBRUEsRUFBS0MsU0FBRUEsR0FBYVIsRUFDdEJTLEVBQVUsQ0FDZEYsTUFBQUEsRUFDQUMsU0FBQUEsR0FFRlYsRUFBSUYsY0FBY2MsUUFBUUosRUFBU0csR0FBU0UsT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsU0FFN0ViLEVBQUlDLFFBQ0RDLFFBQVEsMEJBQ1JFLE1BQU0sTUFDTkQsWUFBWSwwQkFDWkcsUUFBUUMsSUFDUFIsRUFBSUYsY0FBY21CLFVBQVVULEdBQVNLLE9BQU9DLElBQVFkLEVBQUllLElBQUlDLE1BQU1GLFNBRXRF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
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),r=require("events"),n=require("os"),i=require("commander"),a=require("inquirer"),s=require("image-size"),o=require("url"),l=require("text-to-svg"),E=require("sharp"),u=require("chalk"),c=require("minimatch"),I=require("globby"),_=require("ejs"),d=require("download-git-repo"),p=require("rimraf"),S=require("dayjs"),g=require("util"),A=require("axios"),f=require("lodash"),P=require("heic-convert"),m=require("crypto"),h=require("mime-types"),C=require("qiniu"),D=require("md5"),U=require("resolve"),T=require("child_process"),L=require("is-wsl"),N=require("form-data"),R=require("https"),B=require("tunnel"),O=require("@picgo/store"),M=require("cross-spawn"),y=require("js-yaml"),G=require("@picgo/i18n");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=w(e),x=w(t),v=w(n),W=w(a),$=w(l),H=w(E),K=w(u),F=w(c),k=w(I),q=w(_),j=w(d),V=w(p),Y=w(S),z=w(g),Q=w(A),X=w(P),Z=w(m),J=w(h),ee=w(C),te=w(D),re=w(U),ne=w(L),ie=w(N),ae=w(R),se=w(B),oe=w(M),le=w(y);const Ee={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").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.install(t,a).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:i}=r,a={proxy:n,registry:i};e.pluginHandler.update(t,a).catch((t=>{e.log.error(t)}))}))}},ue={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}},ce=e=>/^https?:\/\//.test(e),Ie=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},_e=e=>(Ie(e)||(e=encodeURI(e)),e),de=e=>{try{const{width:t=0,height:r=0}=s.imageSize(e);return{real:!0,width:t,height:r}}catch(e){return{real:!1,width:200,height:200}}},pe=async e=>{try{return{extname:x.default.extname(e),fileName:x.default.basename(e),buffer:await b.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},Se=async(e,t)=>{let r;e=_e(e);const n=new Promise(((n,i)=>{(async()=>{var i;try{const i=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const a=new o.URL(e).pathname;n({buffer:i,fileName:x.default.basename(a),extname:x.default.extname(a),success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(i=null==t?void 0:t.message)&&void 0!==i?i:""}`})}})().catch(i)})),i=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,i])},ge=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Ae(e)?"simple":"unknown",Ae=e=>{if(x.default.isAbsolute(e))return!1;const t=x.default.join(process.cwd(),e);return!b.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},fe=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,Pe=(e,t=console)=>{switch(ge(e)){case"normal":case"scope":return e;case"simple":return fe(e);default:{let r=e;return x.default.isAbsolute(e)&&b.default.existsSync(e)?he(r):(r=x.default.join(process.cwd(),e),b.default.existsSync(r)?he(r):(t.warn(`Can't find plugin ${e}`),""))}}},me=(e,t=console)=>{var r;switch(ge(e)){case"normal":return Ce(e);case"scope":return Ce(e,!0);case"simple":return Ce(fe(e));default:{if(!b.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=x.default.posix.join(e,"package.json");if(b.default.existsSync(n)){const e=b.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(x.default.sep).join("/"),Ce=(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},De=[],Ue=e=>De.some((t=>e.startsWith(t))),Te=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function Le(e){try{return JSON.parse(e)}catch(t){return e}}const Ne=(e=0)=>isNaN(Number(e))?0:Number(e),Re=()=>"development"===process.env.NODE_ENV;const Be=`${__dirname}/assets/piclist.png`;async function Oe(e,t,r,n,i,a,s,o,l,E,u){o=!o||o<0||o>1?.15:o;const c=H.default(e),{width:I=200}=await c.metadata(),_=await async function(e,t,r,n,i,a,s,o=200,l=0){let E;"image"===e?(s=s||Be,E=await H.default(s).toBuffer()):E=await async function(e,t,r,n){t=t||"测试",n=n||e;const i={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},a=$.default.loadSync(n).getSVG(t,i);return Buffer.from(a)}(t,r,a,n||t);const{width:u,height:c}=await async function(e){const{width:t,height:r}=await H.default(e).metadata();return{width:t||200,height:r||200}}(E),I=Math.floor(o*Ne(i)),_=Math.floor(I*c/u);return await H.default(E).resize(I,_,{fit:"inside"}).rotate(l,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,a,s,o,l,E,I,i);return await c.composite([{input:_,gravity:u||"southeast",tile:n}]).toBuffer()}const Me=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),ye=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Ge=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function we(e,t,r){try{let n=H.default(e);return Me(t.watermarkText)&&(n=H.default(await Oe(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Ne(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Ne(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition))),await n.toBuffer()}catch(t){return console.log(t),e}}function be(e){return{quality:Ne(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Ne(e.reSizeHeight),reSizeWidth:Ne(e.reSizeWidth),isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Ne(e.reSizePercent),isRotate:e.isRotate||!1,rotateDegree:Ne(e.rotateDegree)}}async function xe(e,t,r){t=be(t);try{if(r=r.toLowerCase().replace(".",""),!Ge.includes(r))return e;let i=H.default(e),a=100;if(Me(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(Me(t.reSizePercent)){const e=await i.metadata().then((e=>e.width)),r=await i.metadata().then((e=>e.height));e&&r&&(i=i.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else t.isReSize&&Me(t.reSizeHeight,t.reSizeWidth)&&(i=i.resize(t.reSizeWidth,t.reSizeHeight,{fit:"inside"}));if(t.isRotate&&t.rotateDegree&&(i=i.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isConvert){const e=t.convertFormat||"jpg";i=i.toFormat(e,{quality:a})}else i=r&&(n=r,ye.includes(n))?i.toFormat(r,{quality:a}):i.toFormat("jpg",{quality:a});return await i.toBuffer()}catch(t){return console.log(t),e}var n}const ve=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"],We=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&ve.includes(t)),$e=(e,t)=>{if(t=t.toLowerCase().replace(".",""),!ve.includes(t))return!1;if(e){if(e=be(e),Me(e.quality)&&e.quality<100)return!0;if(e.isReSizeByPercent&&Me(e.reSizePercent))return!0;if(e.isReSize&&Me(e.reSizeHeight,e.reSizeWidth))return!0;if(e.isRotate&&e.rotateDegree)return!0;if(e.isConvert){return t!==(e.convertFormat||"jpg")}return!1}return!1},He=async(e,t)=>(t=t.toLowerCase().replace(".",""),ve.includes(t)?await H.default(e).toBuffer():e);var Ke=Object.freeze({__proto__:null,isUrl:ce,isUrlEncode:Ie,handleUrlEncode:_e,getImageSize:de,getFSFile:pe,getURLFile:Se,getPluginNameType:ge,isSimpleName:Ae,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:fe,getProcessPluginName:Pe,getNormalPluginName:me,handleUnixStylePath:he,removePluginVersion:Ce,configBlackList:De,isConfigKeyInBlackList:Ue,isInputConfigValid:Te,safeParse:Le,forceNumber:Ne,isDev:Re,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:Oe,imageAddWaterMark:we,imageProcess:xe,needAddWatermark:We,needCompress:$e,removeExif:He});const Fe={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>ce(e)?e:x.default.resolve(e))).filter((t=>{const r=b.default.existsSync(t)||ce(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var ke=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:"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:"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 qe=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"}]};const je=async(e,t,r,n)=>{const i=await e.cmd.inquirer.prompt(t),a="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[a]:i}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},Ve={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,i;try{switch(t){case"buildin":if("compress"===r)await je(e,ke(e),t,r);else if("watermark"===r)await je(e,qe(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await je(e,ke(e),t,n.buildin):"watermark"===n.buildin&&await je(e,qe(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return e.log.error(`No ${t} named ${r}`);n.config&&await je(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),i=e.helper[t].get(n[t]);(null==i?void 0:i.config)&&await je(e,i.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 e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await je(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===(i=e.pluginLoader.getPlugin(r.plugin))||void 0===i?void 0:i.config)&&await je(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),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)}))}))}},Ye={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 i={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(!i[r])return e.log.warn(`No module named ${r}`),e.log.warn("Available modules are uploader|transformer|plugins");n.push(i[r])}else n=Object.keys(i).map((e=>i[e]));const a=await t.inquirer.prompt(n);if(a.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).map((e=>{a.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":a.uploader||e.getConfig("picBed.current"),"picBed.uploader":a.uploader||e.getConfig("picBed.current"),"picBed.transformer":a.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)}))}))}},ze={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},Qe=async(e,t)=>{try{const r=Ze(t.tmp),n=x.default.join(t.tmp,"template");let i={};r.prompts&&r.prompts.length>0&&(i=await e.cmd.inquirer.prompt(r.prompts));let a=await k.default(["**/*"],{cwd:n,dot:!0});if(a=a.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{F.default(t,e,{dot:!0})&&(n=t)})),!n||Xe(e,r.filters[n],i)})),0===a.length)return e.log.warn("Template files not found!");const s=Je(a,n,i);et(t.dest,s),"function"==typeof r.complete&&r.complete({answers:i,options:t,files:a,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){return e.log.error(t)}},Xe=(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}},Ze=e=>{const t=x.default.join(e,"index.js");if(b.default.existsSync(t)){return require(t)}return{}},Je=(e,t,r)=>{const n={};return e.forEach((e=>{const i=b.default.readFileSync(x.default.join(t,e),"utf8"),a=q.default.render(i,r);(Buffer.isBuffer(a)||/[^\s]/.test(a))&&(n[e]=a)})),n},et=(e,t)=>{Object.keys(t).forEach((r=>{const n=x.default.join(e,r);b.default.ensureDirSync(x.default.dirname(n)),b.default.writeFileSync(n,t[r])}))},tt=(e,t)=>{t.offline?b.default.existsSync(t.template)?Qe(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,rt(e,t))},rt=(e,t)=>{b.default.existsSync(t.tmp)&&V.default.sync(t.tmp),e.log.info("Template files are downloading..."),j.default(t.template,t.tmp,{clone:t.clone},(r=>{if(r)return e.log.error(r);e.log.success("Template files are downloaded!"),Qe(e,t).catch((t=>{e.log.error(t)}))}))},nt={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,i)=>{(async()=>{try{const a=t.includes("/"),s=!r||"."===r,o=x.default.resolve(r||"."),l=i.clone||!1,E=i.offline||!1,u=x.default.join(n.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));i.offline&&(t=u);const c={template:t,project:r,hasSlash:a,inPlace:s,dest:o,clone:l,tmp:u,offline:E};s||b.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&&tt(e,c)})):tt(e,c)}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(K.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(K.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},it={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}`)}if(!r.includes(t))return e.log.warn("No such language");e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)}))}};class at{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),at.currentPlugin&&(this.pluginIdMap.has(at.currentPlugin)?null===(r=this.pluginIdMap.get(at.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(at.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 st=(e=null)=>{at.currentPlugin=e};class ot{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new i.Command,this.inquirer=W.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("0.6.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",Ee),e.cmd.register("config",ue),e.cmd.register("setting",Ve),e.cmd.register("upload",Fe),e.cmd.register("use",Ye),e.cmd.register("proxy",ze),e.cmd.register("init",nt),e.cmd.register("i18n",it)}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=at.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 lt,Et,ut;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(lt||(lt={})),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"}(Et||(Et={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(ut||(ut={}));class ct{constructor(e){this.level={[lt.success]:"green",[lt.info]:"blue",[lt.warn]:"yellow",[lt.error]:"red"},this.ctx=e}handleLog(e,...t){if(!this.ctx.getConfig("silent")){const r=K.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logLevel=this.ctx.getConfig("settings.logLevel"),this.logPath=this.ctx.getConfig("settings.logPath")||x.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(K.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(b.default.existsSync(e)){const t=b.default.statSync(e).size,r=1024*Ne(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){b.default.existsSync(e)&&(b.default.unlinkSync(e),b.default.createFileSync(e))}handleWriteLog(e,t,...r){try{if(this.checkLogLevel(t,this.logLevel)){let n=`${Y.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",b.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){return this.handleLog(lt.success,...e)}info(...e){return this.handleLog(lt.info,...e)}error(...e){return this.handleLog(lt.error,...e)}warn(...e){return this.handleLog(lt.warn,...e)}debug(...e){Re()&&this.handleLog(lt.info,...e)}}class It extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=x.default.join(e.baseDir,"piclistTemp");b.default.emptyDirSync(t),this.ttfPath=x.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=x.default.dirname(this.ttfPath);if(b.default.existsSync(e)||b.default.mkdirSync(e,{recursive:!0}),b.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await Q.default.get(this.ttfLink,{responseType:"arraybuffer"});return b.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.rawInput=f.cloneDeep(e),t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("buildIn.watermark");if(r||n){const e=x.default.join(t.baseDir,"piclistTemp");b.default.existsSync(e)||b.default.mkdirSync(e);const i="Add watermark to image",a="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var l,E,u,c,I,_,d;let p;if(ce(s)){if(p=await Se(s,t),!p.success||!p.buffer)throw new Error(p.reason);{let s;if(We(n,null!==(l=p.extname)&&void 0!==l?l:"")){await this.downloadTTF()?(t.log.info(i),s=await we(p.buffer,n,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if($e(r,null!==(E=p.extname)&&void 0!==E?E:"")&&(t.log.info(a),s=await xe(null!=s?s:p.buffer,r,null!==(u=p.extname)&&void 0!==u?u:"")),!s&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),s=await He(p.buffer,null!==(c=p.extname)&&void 0!==c?c:"")),s){let n;n=(null==r?void 0:r.isConvert)?null!==(I=null==r?void 0:r.convertFormat)&&void 0!==I?I:"jpg":null!==(_=p.extname)&&void 0!==_?_:"",n=n.startsWith(".")?n:`.${n}`;const i=x.default.join(e,`${p.fileName?`${x.default.basename(p.fileName,x.default.extname(p.fileName))}${n}`:(new Date).getTime()}${n}`);b.default.writeFileSync(i,s),t.input[o]=i}}}else{let l;if(We(n,x.default.extname(s))){await this.downloadTTF()?(t.log.info(i),l=await we(b.default.readFileSync(s),n,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if($e(r,x.default.extname(s)))if(t.log.info(a),".heic"===x.default.extname(s)||".heif"===x.default.extname(s)){const t=b.default.readFileSync(s),n=await X.default({buffer:t,format:"JPEG",quality:1}),i=x.default.join(e,`${x.default.basename(s,x.default.extname(s))}.jpg`);b.default.writeFileSync(i,Buffer.from(n)),l=await xe(b.default.readFileSync(i),r,".jpg")}else l=await xe(null!=l?l:b.default.readFileSync(s),r,x.default.extname(s));if(!l&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),l=await He(b.default.readFileSync(s),x.default.extname(s))),l){let n;n=(null==r?void 0:r.isConvert)?null!==(d=null==r?void 0:r.convertFormat)&&void 0!==d?d:"jpg":x.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const i=x.default.join(e,`${x.default.basename(s,x.default.extname(s))}${n}`);b.default.writeFileSync(i,l),t.input[o]=i}}})))}return await this.beforeTransform(t),await this.doTransform(t),await this.beforeUpload(t),await this.doUpload(t),t.input=t.rawInput,await this.afterUpload(t),t}catch(e){if(t.log.warn(Et.FAILED),t.emit(Et.UPLOAD_PROGRESS,-1),t.emit(Et.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(Et.UPLOAD_PROGRESS,0),e.emit(Et.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(Et.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(Et.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(Et.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(Et.AFTER_UPLOAD,e),e.emit(Et.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 i=0;i<r;i++)void 0!==e.output[i].imgUrl&&(t+=n?_e(e.output[i].imgUrl):e.output[i].imgUrl,i!==r-1&&(t+="\n")),delete e.output[i].base64Image,delete e.output[i].buffer;return e.emit(Et.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),i=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${i}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${i}: ${n[r]} error`),e}}))),t}}const _t=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicGo",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),dt=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 i=_t(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(i),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(Et.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},pt=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"password",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 St=(e,t)=>{const r=e.secretId,n=e.secretKey,i=e.appId,a=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const i=Z.default.createHmac("sha1",n).update(o).digest("hex"),a=`put\n/${e.path}${t}\n\nhost=${e.bucket}.cos.${e.area}.myqcloud.com\n`,l=`sha1\n${o}\n${Z.default.createHash("sha1").update(a).digest("hex")}\n`;s=Z.default.createHmac("sha1",i).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${i}&b=${a}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,l=Z.default.createHmac("sha1",n).update(o).digest(),E=Buffer.concat([l,Buffer.from(o)]);s=Buffer.from(E).toString("base64")}return{signature:s,appId:i,bucket:a,signTime:o}},gt=(e,t,r,n,i)=>{const a=e.area,s=e.path;return e.version&&"v4"!==e.version?{method:"PUT",url:`http://${e.bucket}.cos.${e.area}.myqcloud.com/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.cos.${e.area}.myqcloud.com`,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:J.default.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${i};null;null`},body:n,resolveWithFullResponse:!0}:{method:"POST",url:`http://${a}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${a}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${i};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},At=async e=>{var t,r,n;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const a=e.output,s=i.customUrl,o=i.path,l=!i.version||"v4"===i.version;for(const E of a)if(E.fileName&&E.buffer){const a=St(i,E.fileName);if(!a)return!1;let u=E.buffer;!u&&E.base64Image&&(u=Buffer.from(E.base64Image,"base64"));const c=gt(i,E.fileName,a,u,e.GUI_VERSION||e.VERSION),I=await e.request(c).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let _;if(_=l&&"string"==typeof I?JSON.parse(I):I,400===_.statusCode)throw(null===(t=null==_?void 0:_.body)||void 0===t?void 0:t.err)?_.body.err:new Error((null===(r=null==_?void 0:_.body)||void 0===r?void 0:r.msg)||(null===(n=null==_?void 0:_.body)||void 0===n?void 0:n.message));const d=i.options||"";if(l&&"SUCCESS"===_.message)delete E.base64Image,delete E.buffer,E.imgUrl=s?`${s}/${o}${E.fileName}`:`${_.data.source_url}${d}`;else{if(l||!_||200!==_.statusCode)throw new Error(I.body.msg);delete E.base64Image,delete E.buffer,E.imgUrl=s?`${s}/${encodeURI(o)}${encodeURIComponent(E.fileName)}${d}`.replace(/%2F/g,"/"):`https://${i.bucket}.cos.${i.area}.myqcloud.com/${encodeURI(o)}${encodeURIComponent(E.fileName)}${d}`.replace(/%2F/g,"/")}}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(Et.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}},ft=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:"password",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:"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}]};const Pt=(e,t,r)=>{const n=t.path||"",{token:i,repo:a}=t;return{method:"PUT",url:`https://api.github.com/repos/${a}/contents/${encodeURI(n)}${encodeURIComponent(e)}`,headers:{Authorization:`token ${i}`,"User-Agent":"PicGo","Content-Type":J.default.lookup(e)||"application/octet-stream"},body:r,json:!0}},mt=(e,t)=>{const r=t.path||"",{token:n,repo:i,branch:a}=t;return{method:"GET",url:`https://api.github.com/repos/${i}/contents/${encodeURI(r)}${encodeURIComponent(e)}?ref=${a}`,headers:{Authorization:`token ${n}`,"User-Agent":"PicGo"},json:!0}},ht=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github 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"),i={message:"Upload by PicGo",branch:t.branch,content:r,path:t.path+encodeURI(n.fileName)},a=Pt(n.fileName,t,i);try{const r=await e.request(a);if(!r)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,t.customUrl?n.imgUrl=`${t.customUrl}/${encodeURI(t.path)}${encodeURIComponent(n.fileName)}`.replace(/%2F/g,"/"):n.imgUrl=r.content.download_url,n.hash=r.content.sha}catch(r){if(422!==r.statusCode)throw r;{delete n.base64Image,delete n.buffer;const r=await e.request(mt(n.fileName,t));if(!Object.keys(r).length)throw new Error("Get Contents error, please try again");n.hash=r.sha,t.customUrl?n.imgUrl=`${t.customUrl}/${encodeURI(t.path)}${encodeURIComponent(n.fileName)}`.replace(/%2F/g,"/"):n.imgUrl=r.download_url}}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Ct=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:"password",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 Dt(e,t,r,n){const i=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),a=e.path||"";return{method:"POST",url:`http://upload${i}.qiniup.com/putb64/-1/key/${Buffer.from(a+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":J.default.lookup(t)||"application/octet-stream"},body:n}}function Ut(e){const t=e.accessKey,r=e.secretKey,n=new ee.default.auth.digest.Mac(t,r),i={scope:e.bucket};return new ee.default.rs.PutPolicy(i).uploadToken(n)}const Tt=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"),i=Dt(t,n.fileName,Ut(t),r),a=await e.request(i),s=JSON.parse(a);if(!(null==s?void 0:s.key))throw e.emit(Et.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(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Lt=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:"password",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 Nt=async(e,t,r,n)=>{const i=t.clientId||"",a=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let l;if(a&&s)l=s;else{if(!i)throw new Error("clientId or accessToken is required");l=`Client-ID ${i}`}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(a&&s&&o){let r,n=0,i="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${a}/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){i=e.id;break}n++}while(r.body.data.length>0);i&&E.formData&&(E.formData.album=i)}return t.proxy&&(E.proxy=t.proxy),E},Rt=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"),i=await Nt(e,r,n.fileName,t),a=await e.request(i),s="string"==typeof a?JSON.parse(a):a;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(Et.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}},Bt=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 Ot=(e,t)=>{const r=(new Date).toUTCString(),n=J.default.lookup(t);if(!n)throw Error(`No mime type found for file ${t}`);const i=`PUT\n\n${n}\n${r}\n/${e.bucket}/${e.path}${t}`,a=Z.default.createHmac("sha1",e.accessKeySecret).update(i).digest("base64");return`OSS ${e.accessKeyId}:${a}`},Mt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURIComponent(e.path)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:(new Date).toUTCString(),"Content-Type":J.default.lookup(t)},body:n,resolveWithFullResponse:!0}),yt=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=t.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/","/"===t.path&&(t.path="");try{const r=e.output,n=t.customUrl,i=t.path;for(const a of r)if(a.fileName&&a.buffer){const r=Ot(t,a.fileName);let s=a.buffer;!s&&a.base64Image&&(s=Buffer.from(a.base64Image,"base64"));const o=Mt(t,a.fileName,r,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete a.base64Image,delete a.buffer;const e=t.options||"";a.imgUrl=n?`${n}/${encodeURI(i)}${encodeURIComponent(a.fileName)}${e}`.replace(/%2F/g,"/"):`https://${t.bucket}.${t.area}.aliyuncs.com/${encodeURI(i)}${encodeURIComponent(a.fileName)}${e}`.replace(/%2F/g,"/")}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Gt=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:"password",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 wt=(e,t)=>{const r=e.path||"",n=e.operator,i=e.password,a=te.default(i),s=(new Date).toUTCString(),o=`PUT&${`/${e.bucket}/${encodeURI(r)}${encodeURIComponent(t)}`}&${s}`;return`UPYUN ${n}:${Z.default.createHmac("sha1",a).update(o).digest("base64")}`},bt=(e,t,r,n)=>{const i=e.bucket,a=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${i}/${encodeURI(a)}${encodeURIComponent(t)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":J.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}},xt=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 i of r)if(i.fileName&&i.buffer){let r=i.buffer;!r&&i.base64Image&&(r=Buffer.from(i.base64Image,"base64"));const a=wt(t,i.fileName),s=bt(t,i.fileName,a,r);if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");delete i.base64Image,delete i.buffer,i.imgUrl=`${t.url}/${encodeURI(n)}${encodeURIComponent(i.fileName)}${t.options}`.replace(/%2F/g,"/")}return e}catch(t){if("Upload failed"===t.message)e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=Le(t.error);e.emit(Et.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}},vt=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:"password",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}]};const Wt=(e,t,r)=>({method:"PUT",url:`${e.host}/${encodeURI(e.path)}${encodeURIComponent(t)}`,headers:{Authorization:`Basic ${Buffer.from(`${e.username}:${e.password}`).toString("base64")}`,"Content-Type":J.default.lookup(t)||"application/octet-stream","Content-Length":r.length},body:r,resolveWithFullResponse:!0}),$t=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,"")+"/",t.webpath=(t.webpath||"").replace(/^\/+|\/+$/g,"")+"/";try{const r=e.output,n=t.customUrl,i=t.path,a=t.webpath;for(const s of r)if(s.fileName&&s.buffer){let r=s.buffer;!r&&s.base64Image&&(r=Buffer.from(s.base64Image,"base64"));const o=Wt(t,s.fileName,r),l=await e.request(o);if(!(l.statusCode>=200&&l.statusCode<300))throw new Error("Upload failed");{delete s.base64Image,delete s.buffer;const e=n||t.host;s.imgUrl=a?`${e}/${"/"===a?"":encodeURI(a)}${encodeURIComponent(s.fileName)}`.replace(/%2F/g,"/"):`${e}/${"/"===i?"":encodeURI(i)}${encodeURIComponent(s.fileName)}`.replace(/%2F/g,"/")}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ht=e=>{const t=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:t.host||"",required:!0},{name:"sslEnabled",type:"confirm",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!0,default:t.sslEnabled||!0,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:t.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:"password",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:t.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:t.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:t.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:t.customUrl||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}}]};const Kt=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:yt,config:Gt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:At,config:ft})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:dt,config:pt})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:ht,config:Ct})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:Tt,config:Lt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:Rt,config:Bt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:xt,config:vt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:$t,config:Ht})}(e)}}),Ft=(e,t,r)=>{const n=de(t);return n.real||(e.log.warn(`can't get ${r}'s image size`),e.log.warn("fallback to 200 * 200")),n};var kt={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let i;if(i=ce(r)?await Se(r,e):await pe(r),!i.success||!i.buffer)throw new Error(i.reason);{const a=Ft(e,i.buffer,r);t[n]={buffer:i.buffer,fileName:i.fileName,width:a.width,height:a.height,extname:i.extname}}}))),e.output=t.filter((e=>e)),e}};var qt={handle:async e=>(e.output.push(...e.input),e)};class jt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=x.default.join(this.ctx.baseDir,"package.json");if(!b.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};b.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return re.default.sync(t,{basedir:e.baseDir})}catch(r){return x.default.join(e.baseDir,"node_modules",t)}}load(){const e=x.default.join(this.ctx.baseDir,"package.json"),t=x.default.join(this.ctx.baseDir,"node_modules/");if(!b.default.existsSync(t))return!1;const r=b.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),i=Object.keys(r.devDependencies||{}),a=n.concat(i).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return b.default.existsSync(t)}));for(const e of a)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),st(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),st(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(Et.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),st(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=x.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 Vt={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'},Yt={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const zt=async e=>{!function(e){const t=x.default.join(e.baseDir,"piclist-clipboard-images");b.default.existsSync(t)||b.default.mkdirSync(t)}(e);const t=x.default.join(e.baseDir,"piclist-clipboard-images",`${Y.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const i=(()=>{const e=process.platform;if(ne.default)return"wsl";if("win32"===e)return"10"===v.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),a=x.default.join(e.baseDir,Yt[i]);let s;b.default.existsSync(a)||b.default.writeFileSync(a,Vt[i],"utf8"),s="darwin"===i?T.spawn("osascript",[a,t]):"win32"===i||"win10"===i?T.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",a,t]):T.spawn("sh",[a,t]),s.stdout.on("data",(a=>{if("linux"===i&&"no xclip or wl-clipboard"===a.toString().trim())return e.emit(Et.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=a.toString().trim();let o=!1;if(x.default.basename(s)!==x.default.basename(t)&&b.default.existsSync(s)&&(o=!0),"no image"!==s&&!b.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},Qt=new r.EventEmitter,Xt=new ae.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2"});function Zt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Jt(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function er(e){var t,r,n,i,a,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===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.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 tr{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Qt.on(ut.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=se.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=Xt;const r=Q.default.create(this.options);r.interceptors.response.use(Jt,er);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 i=e.proxy;if("string"==typeof i){try{i=new o.URL(e.proxy)}catch(e){i=!1,n.proxy=!1,console.error(e)}r=!0}i&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=se.default.httpsOverHttp({proxy:{host:null==i?void 0:i.hostname,port:parseInt(null==i?void 0:i.port,10)}})):n.proxy={host:i.hostname,port:parseInt(i.port,10),protocol:"http"})}if("formData"in e){const t=new ie.default;for(const r in e.formData)Zt(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 i="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(i=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(i=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(i=e.headers["content-type"],delete e.headers["content-type"]),""!==i&&e.headers&&(e.headers["Content-Type"]=i),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 rr{constructor(e){if(this.ctx=e,this.db=new O.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){return 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 nr{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],i=e.map((e=>ir(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)),a=i.map((e=>e.fullName)),s=i.map((e=>e.pkgName));if(a.length>0){const e=await this.execCommand("install",a,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=>ir(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=>ir(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={},i={}){const a=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");a&&(E=E.concat(`--registry=${a}`)),s&&(E=E.concat(`--proxy=${s}`));try{const e=oe.default("npm",E,{cwd:r,env:Object.assign({},process.env,i)});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(Et.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(Et.FAILED,e)}}))}}const ir=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=Pe(t,e.log);if(!n)return r;const i=me(n,e.log);return i?{success:!0,fullName:n,pkgName:i}:r},ar={"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_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_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_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_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_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_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",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_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_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",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_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_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_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_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_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_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",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_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_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",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_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_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_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_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_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_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",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_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",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 sr{constructor(e){this.ctx=e,this.objectAdapter=new G.ObjectAdapter(ar);let t=this.ctx.getConfig("settings.language")||"zh-CN";ar[t]||(t="zh-CN"),this.i18n=new G.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();b.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=x.default.join(e,t.name),n=b.default.readFileSync(r,"utf8");try{const e=le.default.load(n);ar[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=x.default.join(this.ctx.baseDir,"i18n-cli");return b.default.pathExistsSync(e)||b.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=f.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),ar[e]=t,!0)}getLanguageList(){return Object.keys(ar)}}class or extends r.EventEmitter{constructor(e=""){super(),this.VERSION="0.6.2",this.configPath=e,this.output=[],this.input=[],this.rawInput=[],this.helper={transformer:new at("transformer"),uploader:new at("uploader"),beforeTransformPlugins:new at("beforeTransformPlugins"),beforeUploadPlugins:new at("beforeUploadPlugins"),afterUploadPlugins:new at("afterUploadPlugins")},this.initConfigPath(),this.log=new ct(this),this.cmd=new ot(this),this.pluginHandler=new nr(this),this.initConfig(),this.init()}get pluginLoader(){return this._pluginLoader}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==x.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=x.default.dirname(this.configPath);b.default.pathExistsSync(this.configPath)||b.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new rr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new sr(this),this.Request=new tr(this),this._pluginLoader=new jt(this),st("picgo"),Kt().register(this),{register(e){e.helper.transformer.register("path",kt),e.helper.transformer.register("base64",qt)}}.register(this),st(""),this._pluginLoader.load(),this.lifecycle=new It(this)}catch(e){throw this.emit(Et.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?f.get(this._config,e):this._config}saveConfig(e){Te(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&&(Ue(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Te(e)?Object.keys(e).forEach((t=>{Ue(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),f.set(this._config,t,e[t]),Qt.emit(ut.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Ue(e)?this.log.warn(`the config.${e} can't be unset`):f.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 zt(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(Et.FAILED,(()=>{t||b.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||b.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(Et.FAILED,e),e}}}exports.Commander=ot,exports.Lifecycle=It,exports.LifecyclePlugins=at,exports.Logger=ct,exports.PicGo=or,exports.PicGoUtils=Ke,exports.PluginHandler=nr,exports.PluginLoader=jt,exports.Request=tr;
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3NldHRpbmcudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXNlLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3Byb3h5LnRzIiwiLi4vc3JjL3V0aWxzL2luaXRVdGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbml0LnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2kxOG4udHMiLCIuLi9zcmMvbGliL0xpZmVjeWNsZVBsdWdpbnMudHMiLCIuLi9zcmMvbGliL0NvbW1hbmRlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9pbmRleC50cyIsIi4uL3NyYy91dGlscy9lbnVtLnRzIiwiLi4vc3JjL2xpYi9Mb2dnZXIudHMiLCIuLi9zcmMvY29yZS9MaWZlY3ljbGUudHMiLCIuLi9zcmMvdXRpbHMvY3JlYXRlQ29udGV4dC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NtbXMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2dpdGh1Yi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3Fpbml1LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGl5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91cHl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3dlYmRhdi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvcGF0aC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2Jhc2U2NC50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9pMThuL2luZGV4LnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHBsdWdpbkhhbmRsZXI6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIC8vIGNvbnN0IHBsdWdpbkhhbmRsZXIgPSBuZXcgUGx1Z2luSGFuZGxlcihjdHgpXHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5zdGFsbCA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2luc3RhbGwgcGljZ28gcGx1Z2luJylcclxuICAgICAgLmFsaWFzKCdhZGQnKVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmFsaWFzKCdybScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudW5pbnN0YWxsKHBsdWdpbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGRhdGUgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGRhdGUgcGljZ28gcGx1Z2luJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHByb3h5LFxyXG4gICAgICAgICAgcmVnaXN0cnlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQge1xyXG4gIElJbWdTaXplLFxyXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxyXG4gIElQbHVnaW5OYW1lVHlwZSxcclxuICBJTG9nZ2VyLFxyXG4gIElQaWNHbyxcclxuICBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcclxuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgVGV4dFRvU1ZHIGZyb20gJ3RleHQtdG8tc3ZnJ1xyXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+ICgvXmh0dHBzPzpcXC9cXC8vKS50ZXN0KHVybClcclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHVybCA9IHVybCB8fCAnJ1xyXG4gIHRyeSB7XHJcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XHJcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcclxuICAgIHVybCA9IGVuY29kZVVSSSh1cmwpXHJcbiAgfVxyXG4gIHJldHVybiB1cmxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwIH0gPSBpbWFnZVNpemUoZmlsZSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IHRydWUsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHRcclxuICAgIH1cclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICAvLyBmYWxsYmFjayB0byAyMDAgKiAyMDBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogMjAwLFxyXG4gICAgICBoZWlnaHQ6IDIwMFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZTRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHRuYW1lOiBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGJ1ZmZlcjogYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpLFxyXG4gICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxyXG4gICAgICBzdWNjZXNzOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xyXG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXHJcbiAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXRcclxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdCh7XHJcbiAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBidWZmZXI6IHJlcyxcclxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSBlcnJvciwgJHtlcnJvcj8ubWVzc2FnZSA/PyAnJ31gXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSkoKS5jYXRjaChyZWplY3QpXHJcbiAgfSlcclxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xyXG4gICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IHRpbWVvdXRgXHJcbiAgICAgIH0pXHJcbiAgICB9LCAzMDAwMClcclxuICB9KVxyXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxyXG4gKiAzLiB4eHggLT4gc2ltcGxlXHJcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cclxuICogQHBhcmFtIG5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2NvcGUnXHJcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgcmV0dXJuICdub3JtYWwnXHJcbiAgfSBlbHNlIGlmIChpc1NpbXBsZU5hbWUobmFtZSkpIHtcclxuICAgIHJldHVybiAnc2ltcGxlJ1xyXG4gIH1cclxuICByZXR1cm4gJ3Vua25vd24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4geHh4IC0+IHRydWVcclxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKG5hbWVPclBhdGguaW5jbHVkZXMoJy8nKSB8fCBuYW1lT3JQYXRoLmluY2x1ZGVzKCdcXFxcJykpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG4vKipcclxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4geHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL15AW14vXStcXC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXHJcbiAqIEBwYXJhbSBzY29wZSBwbHVnaW5TY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChzY29wZSkge1xyXG4gICAgcmV0dXJuIGBAJHtzY29wZX0vcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3h4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxyXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcclxuICAgIGNhc2UgJ25vcm1hbCc6XHJcbiAgICBjYXNlICdzY29wZSc6XHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICBjYXNlICdzaW1wbGUnOlxyXG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXHJcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcclxuICAgICAgbGV0IHBsdWdpblBhdGggPSBuYW1lT3JQYXRoXHJcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXHJcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIDMuIGludmFsaWQgbmFtZU9yUGF0aFxyXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAzLiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxyXG4gKiB0aGVuIHVzZSBbcGFja2FnZS5qc29uJ3MgbmFtZV0sIHVzdWFsbHkgbWF0Y2ggdGhlIHNjb3BlIHBhY2thZ2UuXHJcbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKSlcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcclxuICAgICAgLy8gdGhlIG5hbWVPclBhdGggaGVyZSB3aWxsIGJlIGVuc3VyZWQgd2l0aCB1bml4IHN0eWxlXHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhY2thZ2VKU09OUGF0aCA9IHBhdGgucG9zaXguam9pbihuYW1lT3JQYXRoLCAncGFja2FnZS5qc29uJylcclxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XHJcbiAgICAgICAgaWYgKCFwa2cubmFtZT8uaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgbG9nZ2VyLndhcm4oYFRoZSBwbHVnaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZCBpcyAke3BrZy5uYW1lIGFzIHN0cmluZyB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gKVxyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwa2cubmFtZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogaGFuZGxlIHRyYW5zZm9ybSB0aGUgcGF0aCB0byB1bml4IHN0eWxlXHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxyXG4gKiAyLiAveHh4L3h4eCAtPiAveHh4L3h4eFxyXG4gKiBAcGFyYW0gcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVuaXhTdHlsZVBhdGggPSAocGF0aFN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcclxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcclxufVxyXG5cclxuLyoqXHJcbiAqIHJlbW92ZSBwbHVnaW4gdmVyc2lvbiB3aGVuIHJlZ2lzdGVyIHBsdWdpbiBuYW1lXHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqIEBwYXJhbSBzY29wZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZVBsdWdpblZlcnNpb24gPSAobmFtZU9yUGF0aDogc3RyaW5nLCBzY29wZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xyXG4gICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hBcnIgPSBuYW1lT3JQYXRoLm1hdGNoKHJlZylcclxuICAgIGlmICghbWF0Y2hBcnIpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXHJcbiAgICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcclxuICogb25seSBjYW4gYmUgZ290XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cclxuXHJcbi8qKlxyXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XHJcbiAqIEBwYXJhbSBrZXlcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGNvbmZpZ0JsYWNrTGlzdC5zb21lKGJsYWNrSXRlbSA9PiBrZXkuc3RhcnRzV2l0aChibGFja0l0ZW0pKVxyXG59XHJcblxyXG4vKipcclxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxyXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxyXG4gKiAmJiBjYW4ndCBiZSBhcnJheVxyXG4gKiBAcGFyYW0gY29uZmlnXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKFxyXG4gICAgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiZcclxuICAgICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiZcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4gKHN0cjogc3RyaW5nKTogVCB8IHN0cmluZyB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcmV0dXJuIHN0clxyXG4gIH1cclxufVxyXG5cclxuLy8gaG9sZC4uLlxyXG4vLyBleHBvcnQgY29uc3QgY29uZmlnV2hpdGVMaXN0OiBSZWdFeHBbXSA9IFtcclxuLy8gICAvXnBpY0JlZC8sXHJcbi8vICAgL15waWNnb1BsdWdpbnMvLFxyXG4vLyAgIC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sXHJcbi8vICAgL2RlYnVnLyxcclxuLy8gICAvc2lsZW50LyxcclxuLy8gICAvY29uZmlnUGF0aC8sXHJcbi8vICAgL15zZXR0aW5ncy8sXHJcbi8vIF1cclxuXHJcbi8vIGV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluV2hpdGVMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbi8vICAgcmV0dXJuIGNvbmZpZ1doaXRlTGlzdC5zb21lKHdoaXRlSXRlbSA9PiB3aGl0ZUl0ZW0udGVzdChrZXkpKVxyXG4vLyB9XHJcblxyXG5leHBvcnQgY29uc3QgZm9yY2VOdW1iZXIgPSAobnVtOiBzdHJpbmcgfCBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzUHJvZCA9ICgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB0ZXh0MlNWRyAoXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICBjb2xvcj86IHN0cmluZyxcclxuICBmb250RmFtaWx5Pzogc3RyaW5nXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XHJcbiAgZm9udEZhbWlseSA9ICFmb250RmFtaWx5ID8gZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIDogZm9udEZhbWlseVxyXG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxyXG4gIGNvbnN0IG9wdGlvbnM6IFRleHRUb1NWRy5HZW5lcmF0aW9uT3B0aW9ucyA9IHtcclxuICAgIGFuY2hvcjogJ3RvcCcsXHJcbiAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgIGZpbGw6IGNvbG9yXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IHRleHRTVkcgPSB0ZXh0MlNWRy5nZXRTVkcodGV4dCwgb3B0aW9ucylcclxuICBjb25zdCBzdmcgPSBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxyXG4gIHJldHVybiBzdmdcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IGAke19fZGlybmFtZX0vYXNzZXRzL3BpY2xpc3QucG5nYFxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEFkZFdhdGVybWFyayAoXHJcbiAgaW1nOiBCdWZmZXIsXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICBpc0Z1bGxTY3JlZW5XYXRlcm1hcms/OiBib29sZWFuLFxyXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8gPSAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXHJcbiAgY29uc3QgaW1hZ2UgPSBzaGFycChpbWcpXHJcbiAgY29uc3QgeyB3aWR0aDogaW1nV2lkdGggPSAyMDAgfSA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKClcclxuICBjb25zdCB3YXRlcm1hcmsgPSBhd2FpdCBjcmVhdGVXYXRlcm1hcmsoXHJcbiAgICB3YXRlcm1hcmtUeXBlLFxyXG4gICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgdGV4dCxcclxuICAgIHdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgd2F0ZXJtYXJrU2NhbGVSYXRpbyxcclxuICAgIHdhdGVybWFya0NvbG9yLFxyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoLFxyXG4gICAgaW1nV2lkdGgsXHJcbiAgICB3YXRlcm1hcmtEZWdyZWVcclxuICApXHJcbiAgY29uc3QgY29tcG9zaXRlZCA9IGF3YWl0IGltYWdlXHJcbiAgICAuY29tcG9zaXRlKFtcclxuICAgICAge1xyXG4gICAgICAgIGlucHV0OiB3YXRlcm1hcmssXHJcbiAgICAgICAgZ3Jhdml0eTogcG9zaXRpb24gfHwgJ3NvdXRoZWFzdCcsXHJcbiAgICAgICAgdGlsZTogaXNGdWxsU2NyZWVuV2F0ZXJtYXJrXHJcbiAgICAgIH1cclxuICAgIF0pXHJcbiAgICAudG9CdWZmZXIoKVxyXG4gIHJldHVybiBjb21wb3NpdGVkXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdhdGVybWFyayAoXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIGltZ1dpZHRoOiBudW1iZXIgPSAyMDAsXHJcbiAgd2F0ZXJtYXJrRGVncmVlOiBudW1iZXIgPSAwXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgbGV0IHdhdGVybWFyazogYW55XHJcbiAgaWYgKHdhdGVybWFya1R5cGUgPT09ICdpbWFnZScpIHtcclxuICAgIHdhdGVybWFya0ltYWdlUGF0aCA9IHdhdGVybWFya0ltYWdlUGF0aCB8fCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoXHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCBzaGFycCh3YXRlcm1hcmtJbWFnZVBhdGgpLnRvQnVmZmVyKClcclxuICB9IGVsc2Uge1xyXG4gICAgd2F0ZXJtYXJrID0gYXdhaXQgdGV4dDJTVkcoXHJcbiAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgdGV4dCxcclxuICAgICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgIHdhdGVybWFya0ZvbnRQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aFxyXG4gICAgKVxyXG4gIH1cclxuICBjb25zdCB7IHdpZHRoOiB3YXRlcm1hcmtXaWR0aCwgaGVpZ2h0OiB3YXRlcm1hcmtIZWlnaHQgfSA9IGF3YWl0IGdldFNpemUoXHJcbiAgICB3YXRlcm1hcmtcclxuICApXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplV2lkdGggPSBNYXRoLmZsb29yKGltZ1dpZHRoICogZm9yY2VOdW1iZXIod2F0ZXJtYXJrU2NhbGVSYXRpbykpXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0ID0gTWF0aC5mbG9vcihcclxuICAgICh3YXRlcm1hcmtSZXNpemVXaWR0aCAqIHdhdGVybWFya0hlaWdodCkgLyB3YXRlcm1hcmtXaWR0aFxyXG4gIClcclxuICByZXR1cm4gYXdhaXQgc2hhcnAod2F0ZXJtYXJrKVxyXG4gICAgLnJlc2l6ZSh3YXRlcm1hcmtSZXNpemVXaWR0aCwgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0LCB7XHJcbiAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgIH0pXHJcbiAgICAucm90YXRlKHdhdGVybWFya0RlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIC50b0J1ZmZlcigpXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFNpemUgKGltYWdlOiBCdWZmZXIpOiBQcm9taXNlPHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfT4ge1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgc2hhcnAoaW1hZ2UpLm1ldGFkYXRhKClcclxuICByZXR1cm4geyB3aWR0aDogd2lkdGggfHwgMjAwLCBoZWlnaHQ6IGhlaWdodCB8fCAyMDAgfVxyXG59XHJcblxyXG5jb25zdCB2YWxpZFBhcmFtID0gKC4uLnBhcmFtczogYW55W10pOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcGFyYW1zLmV2ZXJ5KHBhcmFtID0+IHtcclxuICAgIGlmIChwYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtICE9PSAnJ1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtID4gMFxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0ID0gW1xyXG4gICdhdmlmJyxcclxuICAnZHonLFxyXG4gICdmaXRzJyxcclxuICAnZ2lmJyxcclxuICAnaGVpZicsXHJcbiAgJ2lucHV0JyxcclxuICAnanBlZycsXHJcbiAgJ2pwZycsXHJcbiAgJ2pwMicsXHJcbiAgJ2p4bCcsXHJcbiAgJ21hZ2ljaycsXHJcbiAgJ29wZW5zbGlkZScsXHJcbiAgJ3BkZicsXHJcbiAgJ3BuZycsXHJcbiAgJ3BwbScsXHJcbiAgJ3JhdycsXHJcbiAgJ3N2ZycsXHJcbiAgJ3RpZmYnLFxyXG4gICd0aWYnLFxyXG4gICd2JyxcclxuICAnd2VicCdcclxuXVxyXG5cclxuY29uc3QgdmFsaWRPdXRwdXRGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QuaW5jbHVkZXMoZm9ybWF0KVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUV4dExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsgKGltZzogQnVmZmVyLCBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0cnkge1xyXG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZylcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMud2F0ZXJtYXJrVGV4dCkpIHtcclxuICAgICAgaW1hZ2UgPSBzaGFycChhd2FpdCBBZGRXYXRlcm1hcmsoXHJcbiAgICAgICAgaW1nLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXHJcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxyXG4gICAgICApKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25zIChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcclxuICByZXR1cm4ge1xyXG4gICAgcXVhbGl0eTogZm9yY2VOdW1iZXIob3B0aW9ucy5xdWFsaXR5KSxcclxuICAgIGlzQ29udmVydDogb3B0aW9ucy5pc0NvbnZlcnQgfHwgZmFsc2UsXHJcbiAgICBjb252ZXJ0Rm9ybWF0OiBvcHRpb25zLmNvbnZlcnRGb3JtYXQgfHwgJ2pwZycsXHJcbiAgICBpc1JlU2l6ZTogb3B0aW9ucy5pc1JlU2l6ZSB8fCBmYWxzZSxcclxuICAgIHJlU2l6ZUhlaWdodDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVIZWlnaHQpLFxyXG4gICAgcmVTaXplV2lkdGg6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplV2lkdGgpLFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQ6IG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2UsXHJcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxyXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlUHJvY2VzcyAoaW1nOiBCdWZmZXIsIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLCByYXdGb3JtYXQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucylcclxuICB0cnkge1xyXG4gICAgcmF3Rm9ybWF0ID0gcmF3Rm9ybWF0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gICAgaWYgKCFpbWFnZUV4dExpc3QuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xyXG4gICAgICByZXR1cm4gaW1nXHJcbiAgICB9XHJcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nKVxyXG4gICAgbGV0IHF1YWxpdHkgPSAxMDBcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucXVhbGl0eSkgJiYgb3B0aW9ucy5xdWFsaXR5ISA8IDEwMCkge1xyXG4gICAgICBxdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5IVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQpIHtcclxuICAgICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5yZVNpemVQZXJjZW50KSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZVdpZHRoICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhIC8gMTAwKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pc1JlU2l6ZSkge1xyXG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZUhlaWdodCwgb3B0aW9ucy5yZVNpemVXaWR0aCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgcXVhbGl0eVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChyYXdGb3JtYXQgYXMgYW55LCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUZvcm1hdExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgY29uc3QgbmVlZEFkZFdhdGVybWFyayA9ICh3YXRlcm1hcmtPcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIHJldHVybiAhIXdhdGVybWFya09wdGlvbnMgJiYgISF3YXRlcm1hcmtPcHRpb25zLmlzQWRkV2F0ZXJtYXJrICYmIGltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbmVlZENvbXByZXNzID0gKGNvbXByZXNzT3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgY29tcHJlc3NPcHRpb25zID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXHJcbiAgICBpZiAodmFsaWRQYXJhbShjb21wcmVzc09wdGlvbnMucXVhbGl0eSkgJiYgY29tcHJlc3NPcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzUmVTaXplQnlQZXJjZW50ICYmIHZhbGlkUGFyYW0oY29tcHJlc3NPcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzUmVTaXplICYmIHZhbGlkUGFyYW0oY29tcHJlc3NPcHRpb25zLnJlU2l6ZUhlaWdodCwgY29tcHJlc3NPcHRpb25zLnJlU2l6ZVdpZHRoKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzT3B0aW9ucy5pc1JvdGF0ZSAmJiBjb21wcmVzc09wdGlvbnMucm90YXRlRGVncmVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zLmlzQ29udmVydCkge1xyXG4gICAgICBjb25zdCBuZXdGb3JtYXQgPSBjb21wcmVzc09wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJ1xyXG4gICAgICByZXR1cm4gZmlsZUV4dCAhPT0gbmV3Rm9ybWF0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCByZW1vdmVFeGlmID0gYXN5bmMgKGltZzogQnVmZmVyLCBmaWxlRXh0OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpKSB7XHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG4gIHJldHVybiBhd2FpdCBzaGFycChpbWcpLnRvQnVmZmVyKClcclxufVxyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVwbG9hZDogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VwbG9hZCcpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndXBsb2FkLCBnbyBnbyBnbycpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tpbnB1dC4uLl0nKVxyXG4gICAgICAuYWxpYXMoJ3UnKVxyXG4gICAgICAuYWN0aW9uKChpbnB1dDogc3RyaW5nW10pID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gaW5wdXRcclxuICAgICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsKGl0ZW0pID8gaXRlbSA6IHBhdGgucmVzb2x2ZShpdGVtKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBleGlzdCA9IGZzLmV4aXN0c1N5bmMoaXRlbSkgfHwgaXNVcmwoaXRlbSlcclxuICAgICAgICAgICAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYCR7aXRlbX0gZG9lcyBub3QgZXhpc3QuYClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhd2FpdCBjdHgudXBsb2FkKGlucHV0TGlzdClcclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVwbG9hZFxyXG4iLCJcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPignYnVpbGRJbi5jb21wcmVzcycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdxdWFsaXR5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQ29udmVydCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQ29udmVydCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NvbnZlcnRGb3JtYXQnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnYXZpZicsICdkeicsICdmaXRzJywgJ2dpZicsICdoZWlmJywgJ2lucHV0JywgJ2pwZWcnLCAnanBnJywgJ2pwMicsICdqeGwnLCAnbWFnaWNrJywgJ29wZW5zbGlkZScsICdwZGYnLCAncG5nJywgJ3BwbScsICdyYXcnLCAnc3ZnJywgJ3RpZmYnLCAndGlmJywgJ3YnLCAnd2VicCddLFxyXG4gICAgICBkZWZhdWx0OiAnanBnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZSB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVdpZHRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplSGVpZ2h0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZUhlaWdodCB8fCA1MDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZUJ5UGVyY2VudCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVQZXJjZW50JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVQZXJjZW50IHx8IDUwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSb3RhdGUnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUm90YXRlIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncm90YXRlRGVncmVlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVtb3ZlRXhpZicsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVtb3ZlRXhpZiB8fCBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0FkZFdhdGVybWFyaycsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQWRkV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVHlwZScsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsndGV4dCcsICdpbWFnZSddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRnVsbFNjcmVlbldhdGVybWFyayB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0RlZ3JlZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ZvbnRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1NjYWxlUmF0aW8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0NvbG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtDb2xvciB8fCAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtJbWFnZVBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ltYWdlUGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1Bvc2l0aW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnbm9ydGgnLCAnbm9ydGhlYXN0JywgJ3NvdXRoZWFzdCcsICdzb3V0aCcsICdzb3V0aHdlc3QnLCAnbm9ydGh3ZXN0JywgJ3dlc3QnLCAnZWFzdCcsICdjZW50ZXInLCAnY2VudHJlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjb21wcmVzcyBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci9jb21wcmVzcydcclxuaW1wb3J0IHdhdGVybWFyayBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci93YXRlcm1hcmsnXHJcblxyXG4vLyBoYW5kbGUgbW9kdWxlcyBjb25maWcgLT4gc2F2ZSB0byBwaWNnbyBjb25maWcgZmlsZVxyXG5jb25zdCBoYW5kbGVDb25maWcgPSBhc3luYyAoY3R4OiBJUGljR28sIHByb21wdHM6IElQbHVnaW5Db25maWdbXSwgbW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KHByb21wdHMpXHJcbiAgY29uc3QgY29uZmlnTmFtZSA9IG1vZHVsZSA9PT0gJ3VwbG9hZGVyJ1xyXG4gICAgPyBgcGljQmVkLiR7bmFtZX1gIDogbW9kdWxlID09PSAndHJhbnNmb3JtZXInXHJcbiAgICAgID8gYHRyYW5zZm9ybWVyLiR7bmFtZX1gIDogbW9kdWxlID09PSAnYnVpbGRpbidcclxuICAgICAgICA/IGBidWlsZEluLiR7bmFtZX1gIDogbmFtZVxyXG4gIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgIFtjb25maWdOYW1lXTogYW5zd2VyXHJcbiAgfSlcclxuICBpZiAobW9kdWxlID09PSAndXBsb2FkZXInKSB7XHJcbiAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdwaWNCZWQuY3VycmVudCc6IG5hbWUsXHJcbiAgICAgICdwaWNCZWQudXBsb2FkZXInOiBuYW1lXHJcbiAgICB9KVxyXG4gIH0gZWxzZSBpZiAobW9kdWxlID09PSAndHJhbnNmb3JtZXInKSB7XHJcbiAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBuYW1lXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgc2V0dGluZyA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3NldCcpXHJcbiAgICAgIC5hbGlhcygnY29uZmlnJylcclxuICAgICAgLmFyZ3VtZW50cygnPG1vZHVsZT4gW25hbWVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjb25maWd1cmUgY29uZmlnIG9mIHBpY2dvIG1vZHVsZXMsIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgICAgICAgLy8gYXdhaXQgY3R4LnBsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgICAgICAgLy8gaWYgYSBtb2R1bGUgaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnYnVpbGRpbic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbXByZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2F0ZXJtYXJrJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydjb21wcmVzcycsICd3YXRlcm1hcmsnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBidWlsZGluIG1vZHVsZSdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdjb21wcmVzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3dhdGVybWFyaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAndXBsb2FkZXInOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ3RyYW5zZm9ybWVyJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHgubG9nLmVycm9yKGBObyAke21vZHVsZX0gbmFtZWQgJHtuYW1lfWApXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke21vZHVsZX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlclttb2R1bGVdLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYENob29zZSBhKG4pICR7bW9kdWxlfWBcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAncGx1Z2luJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghbmFtZS5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmxvZy5lcnJvcihgTm8gcGx1Z2luIG5hbWVkICR7bmFtZX1gKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHBsdWdpbidcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbik/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBhbnN3ZXIucGx1Z2luKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUgPT09ICdwbHVnaW4nKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBjb25maWcsIHBsZWFzZSBydW4gXFwncGljZ28gdXNlIHBsdWdpbnNcXCcnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNldHRpbmdcclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSwgSUNMSUNvbmZpZ3MsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVzZTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VzZScpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1c2UgbW9kdWxlcyBvZiBwaWNnbycpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICBsZXQgcHJvbXB0czogYW55W10gPSBbXVxyXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xyXG4gICAgICAgICAgICAgIHVwbG9hZGVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhbiB1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnVwbG9hZGVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHBsdWdpbnM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIHBsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBjdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtpdGVtfWApKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcclxuICAgICAgICAgICAgICAgIHByb21wdHMucHVzaChjb25maWdbbW9kdWxlXSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW5zJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcHJvbXB0cyA9IE9iamVjdC5rZXlzKGNvbmZpZykubWFwKChpdGVtOiBzdHJpbmcpID0+IGNvbmZpZ1tpdGVtXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBmb3IgcGx1Z2lucyBvcHRpb24gZnJvbSBBcnJheSB0byBvYmplY3RcclxuICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IGN0eC5nZXRDb25maWc8SVN0cmluZ0tleU1hcDxib29sZWFuPj4oJ3BpY2dvUGx1Z2lucycpXHJcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMocGx1Z2lucykubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgcGx1Z2luc1xyXG4gICAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAgIHBpY2dvUGx1Z2luczogcGx1Z2luc1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHVwbG9hZGVyICYgdHJhbnNmb3JtZXJcclxuICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICdwaWNCZWQuY3VycmVudCc6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IGFuc3dlci50cmFuc2Zvcm1lciB8fCAncGF0aCdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgY29uZmlnIHN1Y2Nlc3NmdWxseSEnKVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1c2VcclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwcm94eTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgJ3BpY0JlZC5wcm94eSc6IHByb3h5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByb3h5XHJcbiIsImltcG9ydCBtYXRjaCBmcm9tICdtaW5pbWF0Y2gnXHJcbmltcG9ydCB7IElQaWNHbywgSU9wdGlvbnMsIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xyXG5pbXBvcnQgZWpzIGZyb20gJ2VqcydcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0ZW1wbGF0ZSBmaWxlcyB0byBkZXN0aW5hdGlvbiBmaWxlcy5cclxuICogQHBhcmFtIHtQaWNHb30gY3R4XHJcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRpb25zKG9wdGlvbnMudG1wKVxyXG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKG9wdGlvbnMudG1wLCAndGVtcGxhdGUnKVxyXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxyXG4gICAgaWYgKG9wdHMucHJvbXB0cyAmJiBvcHRzLnByb21wdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhbnN3ZXJzID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQob3B0cy5wcm9tcHRzKVxyXG4gICAgfVxyXG4gICAgbGV0IF9maWxlczogc3RyaW5nW10gPSBhd2FpdCBnbG9iYnkoWycqKi8qJ10sIHsgY3dkOiBzb3VyY2UsIGRvdDogdHJ1ZSB9KSAvLyBnZXQgZmlsZXMnIG5hbWUgYXJyYXlcclxuICAgIF9maWxlcyA9IF9maWxlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICBsZXQgZ2xvYiA9ICcnXHJcbiAgICAgIE9iamVjdC5rZXlzKG9wdHMuZmlsdGVycykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAobWF0Y2goaXRlbSwga2V5LCB7IGRvdDogdHJ1ZSB9KSkge1xyXG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChnbG9iKSB7IC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzKGN0eCwgb3B0cy5maWx0ZXJzW2dsb2JdLCBhbnN3ZXJzKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gY3R4LmxvZy53YXJuKCdUZW1wbGF0ZSBmaWxlcyBub3QgZm91bmQhJylcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVzID0gcmVuZGVyKF9maWxlcywgc291cmNlLCBhbnN3ZXJzKVxyXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxyXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIG9wdHMuY29tcGxldGUoeyBhbnN3ZXJzLCBvcHRpb25zLCBmaWxlczogX2ZpbGVzLCBjdHggfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xyXG4gICAgICBjdHgubG9nLnN1Y2Nlc3Mob3B0cy5jb21wbGV0ZU1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcclxuICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgIHJldHVybiBjdHgubG9nLmVycm9yKGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcclxuICogQHBhcmFtIGN0eCBQaWNHb1xyXG4gKiBAcGFyYW0gZXhwIGNvbmRpdGlvbiBleHByZXNzaW9uXHJcbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxyXG4gKi9cclxuY29uc3QgZmlsdGVycyA9IChjdHg6IElQaWNHbywgZXhwOiBhbnksIGRhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcclxuICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbignZGF0YScsICd3aXRoIChkYXRhKSB7IHJldHVybiAnICsgZXhwICsgJ30nKVxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gZm4oZGF0YSlcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGBFcnJvciB3aGVuIGV2YWx1YXRpbmcgZmlsdGVyIGNvbmRpdGlvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgb3B0aW9uc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXHJcbiAqL1xyXG5jb25zdCBnZXRPcHRpb25zID0gKHRlbXBsYXRlUGF0aDogc3RyaW5nKTogYW55ID0+IHtcclxuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9uc1BhdGgpKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXHJcbiAgICByZXR1cm4gb3B0aW9uc1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4ge31cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXIgZmlsZXMgdG8gYSB2aXJ0dWFsIHRyZWUgb2JqZWN0XHJcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCByZW5kZXIgPSAoZmlsZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55ID0+IHtcclxuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cclxuICBmaWxlcy5mb3JFYWNoKChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihzb3VyY2UsIGZpbGVQYXRoKSwgJ3V0ZjgnKVxyXG4gICAgY29uc3QgY29udGVudCA9IGVqcy5yZW5kZXIoZmlsZSwgb3B0aW9ucylcclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xyXG4gICAgICBmaWxlVHJlZVtmaWxlUGF0aF0gPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfSlcclxuICByZXR1cm4gZmlsZVRyZWVcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyaXRlIHJlbmRlcmVkIGZpbGVzJyBjb250ZW50IHRvIHJlYWwgZmlsZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWxlc1xyXG4gKi9cclxuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xyXG4gIE9iamVjdC5rZXlzKGZpbGVzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSlcclxuICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcclxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGZpbGVzW25hbWVdKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgZmlsdGVycyxcclxuICBnZW5lcmF0ZSxcclxuICByZW5kZXIsXHJcbiAgd3JpdGVGaWxlVHJlZVxyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luaXRVdGlscydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXHJcbmltcG9ydCB7IElPcHRpb25zLCBJUGx1Z2luLCBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHJtIGZyb20gJ3JpbXJhZidcclxuXHJcbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcclxuICAvLyBjb25zdCBuYW1lID0gb3B0aW9ucy5pblBsYWNlID8gcGF0aC5yZWxhdGl2ZSgnLi4vJywgcHJvY2Vzcy5jd2QoKSkgOiBvcHRpb25zLnByb2plY3RcclxuICBpZiAob3B0aW9ucy5vZmZsaW5lKSB7IC8vIG9mZmxpbmUgbW9kZVxyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50ZW1wbGF0ZSkpIHtcclxuICAgICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXHJcbiAgICB9XHJcbiAgfSBlbHNlIHsgLy8gb25saW5lIG1vZGVcclxuICAgIG9wdGlvbnMudGVtcGxhdGUgPSAhb3B0aW9ucy5oYXNTbGFzaFxyXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxyXG4gICAgICA6IG9wdGlvbnMudGVtcGxhdGVcclxuICAgIGRvd25sb2FkQW5kR2VuZXJhdGUoY3R4LCBvcHRpb25zKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGRvd25sb2FkIHRlbXBsYXRlICYgZ2VuZXJhdGVcclxuICogQHBhcmFtIHsgUGljR28gfSBjdHhcclxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXHJcbiAqL1xyXG5jb25zdCBkb3dubG9hZEFuZEdlbmVyYXRlID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xyXG4gICAgcm0uc3luYyhvcHRpb25zLnRtcClcclxuICB9XHJcbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxyXG4gIGRvd25sb2FkKG9wdGlvbnMudGVtcGxhdGUsIG9wdGlvbnMudG1wLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIH0sIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICBpZiAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBjdHgubG9nLmVycm9yKGVycilcclxuICAgIH1cclxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcclxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbml0JylcclxuICAgICAgLmFyZ3VtZW50cygnPHRlbXBsYXRlPiBbcHJvamVjdF0nKVxyXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxyXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY3JlYXRlIHBpY2dvIHBsdWdpblxcJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzJylcclxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNTbGFzaCA9IHRlbXBsYXRlLmluY2x1ZGVzKCcvJylcclxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHByb2dyYW0uY2xvbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2dvL3RlbXBsYXRlcycsIHRlbXBsYXRlLnJlcGxhY2UoL1svOl0vZywgJy0nKSkgLy8gZm9yIGNhY2hpbmcgdGVtcGxhdGVcclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtLm9mZmxpbmUpIHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgIHByb2plY3QsXHJcbiAgICAgICAgICAgICAgaGFzU2xhc2gsXHJcbiAgICAgICAgICAgICAgaW5QbGFjZSxcclxuICAgICAgICAgICAgICBkZXN0LFxyXG4gICAgICAgICAgICAgIGNsb25lLFxyXG4gICAgICAgICAgICAgIHRtcCxcclxuICAgICAgICAgICAgICBvZmZsaW5lXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHByb2plY3QgaXMgZW1wdHkgb3IgZXhpc3RcclxuICAgICAgICAgICAgaWYgKGluUGxhY2UgfHwgZnMuZXhpc3RzU3luYyhkZXN0KSkge1xyXG4gICAgICAgICAgICAgIGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBpblBsYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnR2VuZXJhdGUgcHJvamVjdCBpbiBjdXJyZW50IGRpcmVjdG9yeT8nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnVGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIENvbnRpbnVlPycsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdvaydcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdKS50aGVuKChhbnN3ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5vaykge1xyXG4gICAgICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHByb2plY3QgaXMgZ2l2ZW5cclxuICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCctLWhlbHAnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFeGFtcGxlczonKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBhbiBvZmZpY2lhbCB0ZW1wbGF0ZScpKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCBwbHVnaW4gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCBzdHJhaWdodCBmcm9tIGEgZ2l0aHViIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHVzZXJuYW1lL3JlcG8gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaW5pdFxyXG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJUGljR28sIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGkxOG46IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpMThuJylcclxuICAgICAgLmFyZ3VtZW50cygnW2xhbmddJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjaGFuZ2UgcGljZ28gbGFuZ3VhZ2UnKVxyXG4gICAgICAuYWN0aW9uKGFzeW5jIChsYW5nOiBzdHJpbmcgPSAnJykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBjdHguaTE4bi5nZXRMYW5ndWFnZUxpc3QoKVxyXG4gICAgICAgIGlmICghbGFuZykge1xyXG4gICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICBuYW1lOiAnaTE4bicsXHJcbiAgICAgICAgICAgICAgY2hvaWNlczogbGlzdCxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgbGFuZ3VhZ2UnLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXHJcbiAgICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShhbnN3ZXIuaTE4bilcclxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7YW5zd2VyLmkxOG59YClcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxpc3QuaW5jbHVkZXMobGFuZykpIHtcclxuICAgICAgICAgIHJldHVybiBjdHgubG9nLndhcm4oJ05vIHN1Y2ggbGFuZ3VhZ2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShsYW5nKVxyXG4gICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7bGFuZ31gKVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaTE4blxyXG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXHJcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcclxuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcclxuaW1wb3J0IGlucXVpcmVyLCB7IElucXVpcmVyIH0gZnJvbSAnaW5xdWlyZXInXHJcbmltcG9ydCB7IElQbHVnaW4sIElDb21tYW5kZXIsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgY29tbWFuZGVycyBmcm9tICcuLi9wbHVnaW5zL2NvbW1hbmRlcidcclxuaW1wb3J0IHsgZ2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIGltcGxlbWVudHMgSUNvbW1hbmRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lID0gJ2NvbW1hbmRlcidcclxuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdDogTWFwPHN0cmluZywgSVBsdWdpbj4gPSBuZXcgTWFwKClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4gPSBuZXcgTWFwKClcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcblxyXG4gIHByb2dyYW06IENvbW1hbmRcclxuICBpbnF1aXJlcjogSW5xdWlyZXJcclxuXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXHJcbiAgICB0aGlzLmlucXVpcmVyID0gaW5xdWlyZXJcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBnZXROYW1lICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZVxyXG4gIH1cclxuXHJcbiAgaW5pdCAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2dyYW1cclxuICAgICAgLnZlcnNpb24ocHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTiwgJy12LCAtLXZlcnNpb24nKVxyXG4gICAgICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdkZWJ1ZyBtb2RlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICBkZWJ1ZzogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vcHRpb24oJy1zLCAtLXNpbGVudCcsICdzaWxlbnQgbW9kZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgc2lsZW50OiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCdjb21tYW5kOionLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGBJbnZhbGlkIGNvbW1hbmQ6ICR7dGhpcy5wcm9ncmFtLmFyZ3Muam9pbignICcpfVxcblNlZSAtLWhlbHAgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuYClcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcclxuICAgICAgfSlcclxuXHJcbiAgICAvLyBidWlsdC1pbiBjb21tYW5kc1xyXG4gICAgY29tbWFuZGVycyh0aGlzLmN0eClcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyIChpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ25hbWUgaXMgcmVxdWlyZWQhJylcclxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcclxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IHBsdWdpbiBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXHJcbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXHJcbiAgICBjb25zdCBjdXJyZW50UGx1Z2luTmFtZSA9IGdldEN1cnJlbnRQbHVnaW5OYW1lKClcclxuICAgIGlmIChjdXJyZW50UGx1Z2luTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoY3VycmVudFBsdWdpbk5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoY3VycmVudFBsdWdpbk5hbWUpPy5wdXNoKGlkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KGN1cnJlbnRQbHVnaW5OYW1lLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRDb21tYW5kcyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldExpc3QoKS5mb3JFYWNoKChpdGVtOiBJUGx1Z2luKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaXRlbS5oYW5kbGUodGhpcy5jdHgpXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcclxuICB9XHJcblxyXG4gIGdldExpc3QgKCk6IElQbHVnaW5bXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cclxuICB9XHJcblxyXG4gIGdldElkTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZGVyXHJcbiIsImltcG9ydCBwbHVnaW5IYW5kbGVyIGZyb20gJy4vcGx1Z2luSGFuZGxlcidcclxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZydcclxuaW1wb3J0IHVwbG9hZCBmcm9tICcuL3VwbG9hZCdcclxuaW1wb3J0IHNldHRpbmcgZnJvbSAnLi9zZXR0aW5nJ1xyXG5pbXBvcnQgdXNlIGZyb20gJy4vdXNlJ1xyXG5pbXBvcnQgcHJveHkgZnJvbSAnLi9wcm94eSdcclxuaW1wb3J0IGluaXQgZnJvbSAnLi9pbml0J1xyXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nXHJcbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGN0eDogSVBpY0dvKTogdm9pZCA9PiB7XHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncGx1Z2luSGFuZGxlcicsIHBsdWdpbkhhbmRsZXIpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3NldHRpbmcnLCBzZXR0aW5nKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VwbG9hZCcsIHVwbG9hZClcclxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncHJveHknLCBwcm94eSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpbml0JywgaW5pdClcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcclxufVxyXG4iLCJleHBvcnQgZW51bSBJTG9nVHlwZSB7XHJcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcclxuICBpbmZvID0gJ2luZm8nLFxyXG4gIHdhcm4gPSAnd2FybicsXHJcbiAgZXJyb3IgPSAnZXJyb3InXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIGJ5IHVzZXJzXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcclxuICBVUExPQURfUFJPR1JFU1MgPSAndXBsb2FkUHJvZ3Jlc3MnLFxyXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxyXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcclxuICBCRUZPUkVfVVBMT0FEID0gJ2JlZm9yZVVwbG9hZCcsXHJcbiAgQUZURVJfVVBMT0FEID0gJ2FmdGVyVXBsb2FkJyxcclxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXHJcbiAgSU5TVEFMTCA9ICdpbnN0YWxsJyxcclxuICBVTklOU1RBTEwgPSAndW5pbnN0YWxsJyxcclxuICBVUERBVEUgPSAndXBkYXRlJyxcclxuICBOT1RJRklDQVRJT04gPSAnbm90aWZpY2F0aW9uJ1xyXG59XHJcblxyXG4vKipcclxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBvbmx5IGJ5IHBpY2dvXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVzRXZlbnQge1xyXG4gIENPTkZJR19DSEFOR0UgPSAnQ09ORklHX0NIQU5HRSdcclxufVxyXG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJ1xyXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7XHJcbiAgSUxvZ0FyZ3ZUeXBlLFxyXG4gIElMb2dBcmd2VHlwZVdpdGhFcnJvcixcclxuICBVbmRlZmluYWJsZSxcclxuICBJTG9nQ29sb3IsXHJcbiAgSUxvZ2dlcixcclxuICBJUGljR29cclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XHJcbiAgICBbSUxvZ1R5cGUuc3VjY2Vzc106ICdncmVlbicsXHJcbiAgICBbSUxvZ1R5cGUuaW5mb106ICdibHVlJyxcclxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXHJcbiAgICBbSUxvZ1R5cGUuZXJyb3JdOiAncmVkJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbG9nTGV2ZWwhOiBzdHJpbmdcclxuICBwcml2YXRlIGxvZ1BhdGghOiBzdHJpbmdcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxvZyAodHlwZTogSUxvZ1R5cGUsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIC8vIGNoZWNrIGNvbmZpZy5zaWxlbnRcclxuICAgIGlmICghdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzaWxlbnQnKSkge1xyXG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcclxuICAgICAgY29uc29sZS5sb2cobG9nSGVhZGVyLCAuLi5tc2cpXHJcbiAgICAgIHRoaXMubG9nTGV2ZWwgPSB0aGlzLmN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxvZ0xldmVsJylcclxuICAgICAgdGhpcy5sb2dQYXRoID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5sb2dQYXRoJykgfHwgcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICcuL3BpY2xpc3QubG9nJylcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gZml4IGxvZyBmaWxlIGlzIHRvbyBsYXJnZSwgbm93IHRoZSBsb2cgZmlsZSdzIGRlZmF1bHQgc2l6ZSBpcyAxMCBNQlxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNoZWNrTG9nRmlsZUlzTGFyZ2UodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0xhcmdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdNc2cgPSBgTG9nIGZpbGUgaXMgdG9vIGxhcmdlICg+ICR7KHJlc3VsdC5sb2dGaWxlU2l6ZUxpbWl0ISkgLyAxMDI0IC8gMTAyNCB8fCAnMTAnfSBNQiksIHJlY3JlYXRlIGxvZyBmaWxlYFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1tQaWNMaXN0IFdBUk5dOicpLCB3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgICB0aGlzLnJlY3JlYXRlTG9nRmlsZSh0aGlzLmxvZ1BhdGgpXHJcbiAgICAgICAgICAgIG1zZy51bnNoaWZ0KHdhcm5pbmdNc2cpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVdyaXRlTG9nKHRoaXMubG9nUGF0aCwgdHlwZSwgLi4ubXNnKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHdoeT8/P1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIGNoZWNraW5nIGxvZyBmaWxlIHNpemUnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dGaWxlSXNMYXJnZSAobG9nUGF0aDogc3RyaW5nKToge1xyXG4gICAgaXNMYXJnZTogYm9vbGVhblxyXG4gICAgbG9nRmlsZVNpemU/OiBudW1iZXJcclxuICAgIGxvZ0ZpbGVTaXplTGltaXQ/OiBudW1iZXJcclxuICB9IHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplID0gZnMuc3RhdFN5bmMobG9nUGF0aCkuc2l6ZVxyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZUxpbWl0ID0gZm9yY2VOdW1iZXIodGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPG51bWJlcj4+KCdzZXR0aW5ncy5sb2dGaWxlU2l6ZUxpbWl0JykgfHwgMTApICogMTAyNCAqIDEwMjQgLy8gMTAgTUIgZGVmYXVsdFxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzTGFyZ2U6IGxvZ0ZpbGVTaXplID4gbG9nRmlsZVNpemVMaW1pdCxcclxuICAgICAgICBsb2dGaWxlU2l6ZSxcclxuICAgICAgICBsb2dGaWxlU2l6ZUxpbWl0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzTGFyZ2U6IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY3JlYXRlTG9nRmlsZSAobG9nUGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBmcy51bmxpbmtTeW5jKGxvZ1BhdGgpXHJcbiAgICAgIGZzLmNyZWF0ZUZpbGVTeW5jKGxvZ1BhdGgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdyaXRlTG9nIChsb2dQYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tMb2dMZXZlbCh0eXBlLCB0aGlzLmxvZ0xldmVsKSkge1xyXG4gICAgICAgIGxldCBsb2cgPSBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpfSBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dIGBcclxuICAgICAgICBtc2cuZm9yRWFjaCgoaXRlbTogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yICYmIHR5cGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgbG9nICs9IGBcXG4tLS0tLS1FcnJvciBTdGFjayBCZWdpbi0tLS0tLVxcbiR7dXRpbC5mb3JtYXQoaXRlbT8uc3RhY2spfVxcbi0tLS0tLS1FcnJvciBTdGFjayBFbmQtLS0tLS0tIGBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSwgbnVsbCwgMilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2cgKz0gYCR7aXRlbSBhcyBzdHJpbmd9IGBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGxvZyArPSAnXFxuJ1xyXG4gICAgICAgIC8vIEEgc3luY2hyb25pemVkIGFwcHJvYWNoIHRvIGF2b2lkIGxvZyBtc2cgc2VxdWVuY2UgZXJyb3JzXHJcbiAgICAgICAgZnMuYXBwZW5kRmlsZVN5bmMobG9nUGF0aCwgbG9nKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiB3cml0aW5nIGxvZyBmaWxlJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dMZXZlbCAodHlwZTogc3RyaW5nLCBsZXZlbDogdW5kZWZpbmVkIHwgc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkIHx8IGxldmVsID09PSAnYWxsJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGV2ZWwpKSB7XHJcbiAgICAgIHJldHVybiBsZXZlbC5zb21lKChpdGVtOiBzdHJpbmcpID0+IChpdGVtID09PSB0eXBlIHx8IGl0ZW0gPT09ICdhbGwnKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0eXBlID09PSBsZXZlbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3VjY2VzcyAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLnN1Y2Nlc3MsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGluZm8gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBlcnJvciAoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmVycm9yLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICB3YXJuICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUud2FybiwgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgZGVidWcgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIGlmIChpc0RldigpKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExvZ2dlclxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCB7IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIElMaWZlY3ljbGVQbHVnaW5zLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBnZXRVUkxGaWxlLCBoYW5kbGVVcmxFbmNvZGUsIGltYWdlUHJvY2VzcywgaXNVcmwsIG5lZWRDb21wcmVzcywgbmVlZEFkZFdhdGVybWFyaywgaW1hZ2VBZGRXYXRlck1hcmssIHJlbW92ZUV4aWYgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi4vdXRpbHMvY3JlYXRlQ29udGV4dCdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IGhlaWNDb252ZXJ0IGZyb20gJ2hlaWMtY29udmVydCdcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHJlYWRvbmx5IHR0Zkxpbms6IHN0cmluZyA9ICdodHRwczovL3JlbGVhc2UucGljbGlzdC5jbi9zaW1oZWkudHRmJ1xyXG4gIHR0ZlBhdGg6IHN0cmluZ1xyXG5cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXHJcbiAgICBmcy5lbXB0eURpclN5bmModGVtcEZpbGVQYXRoKVxyXG4gICAgdGhpcy50dGZQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnYXNzZXRzJywgJ3NpbWhlaS50dGYnKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZG93bmxvYWRUVEYgKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gcGF0aC5kaXJuYW1lKHRoaXMudHRmUGF0aClcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXREaXIpKSB7XHJcbiAgICAgIGZzLm1rZGlyU3luYyhvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXHJcbiAgICB9XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy50dGZQYXRoKSkge1xyXG4gICAgICB0aGlzLmN0eC5sb2cuaW5mbygnRG93bmxvYWQgdHRmIGZpbGUuJylcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodGhpcy50dGZMaW5rLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy50dGZQYXRoLCByZXMuZGF0YSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuaW5mbygnRG93bmxvYWQgdHRmIGZpbGUgc3VjY2Vzcy4nKVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLicpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdGFydCAoaW5wdXQ6IGFueVtdKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIC8vIGVuc3VyZSBldmVyeSB1cGxvYWQgcHJvY2VzcyBoYXMgYW4gdW5pcXVlIGNvbnRleHRcclxuICAgIGNvbnN0IGN0eCA9IGNyZWF0ZUNvbnRleHQodGhpcy5jdHgpXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBpbWFnZXMgaW5wdXRcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgbXVzdCBiZSBhbiBhcnJheS4nKVxyXG4gICAgICB9XHJcbiAgICAgIGN0eC5pbnB1dCA9IGlucHV0XHJcbiAgICAgIGN0eC5yYXdJbnB1dCA9IGNsb25lRGVlcChpbnB1dClcclxuICAgICAgY3R4Lm91dHB1dCA9IFtdXHJcbiAgICAgIGNvbnN0IGNvbXByZXNzT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJylcclxuICAgICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKVxyXG4gICAgICBpZiAoY29tcHJlc3NPcHRpb25zIHx8IHdhdGVybWFya09wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRlbXBGaWxlUGF0aCkpIHtcclxuICAgICAgICAgIGZzLm1rZGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdhdGVybWFya01zZyA9ICdBZGQgd2F0ZXJtYXJrIHRvIGltYWdlJ1xyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzTXNnID0gJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvXHJcbiAgICAgICAgICBpZiAoaXNVcmwoaXRlbSkpIHtcclxuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgICAgICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGluZm8uYnVmZmVyLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBpbmZvLmJ1ZmZlciwgY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGluZm8uYnVmZmVyLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gaW5mby5leHRuYW1lID8/ICcnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgPyBgJHtwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSl9JHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcclxuICAgICAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlclxyXG4gICAgICAgICAgICBpZiAobmVlZEFkZFdhdGVybWFyayh3YXRlcm1hcmtPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICBpZiAoIWRvd25sb2FkVFRGUmV0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5sb2cud2FybignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLCBza2lwIGFkZCB3YXRlcm1hcmsuJylcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKHdhdGVybWFya01zZylcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VBZGRXYXRlck1hcmsoZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKGNvbXByZXNzTXNnKVxyXG4gICAgICAgICAgICAgIGlmIChwYXRoLmV4dG5hbWUoaXRlbSkgPT09ICcuaGVpYycgfHwgcGF0aC5leHRuYW1lKGl0ZW0pID09PSAnLmhlaWYnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWljQnVmZmVyID0gZnMucmVhZEZpbGVTeW5jKGl0ZW0pXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWljUmVzdWx0ID0gYXdhaXQgaGVpY0NvbnZlcnQoe1xyXG4gICAgICAgICAgICAgICAgICBidWZmZXI6IGhlaWNCdWZmZXIsXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ0pQRUcnLFxyXG4gICAgICAgICAgICAgICAgICBxdWFsaXR5OiAxXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEhlaWNDb252ZXJ0RmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgcGF0aC5leHRuYW1lKGl0ZW0pKX0uanBnYClcclxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEhlaWNDb252ZXJ0RmlsZSwgQnVmZmVyLmZyb20oaGVpY1Jlc3VsdCkpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyhmcy5yZWFkRmlsZVN5bmModGVtcEhlaWNDb252ZXJ0RmlsZSksIGNvbXByZXNzT3B0aW9ucywgJy5qcGcnKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBmcy5yZWFkRmlsZVN5bmMoaXRlbSksIGNvbXByZXNzT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybWVkQnVmZmVyICYmIGNvbXByZXNzT3B0aW9ucz8uaXNSZW1vdmVFeGlmKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdSZW1vdmUgZXhpZiBpbmZvLicpXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgcGF0aC5leHRuYW1lKGl0ZW0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgIGxldCBuZXdFeHRcclxuICAgICAgICAgICAgICBpZiAoY29tcHJlc3NPcHRpb25zPy5pc0NvbnZlcnQpIHtcclxuICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBwYXRoLmV4dG5hbWUoaXRlbSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBGaWxlID0gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBwYXRoLmV4dG5hbWUoaXRlbSkpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZSwgdHJhbnNmb3JtZWRCdWZmZXIpXHJcbiAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgICAgfVxyXG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9UcmFuc2Zvcm0oY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVVwbG9hZChjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9VcGxvYWQoY3R4KVxyXG4gICAgICBjdHguaW5wdXQgPSBjdHgucmF3SW5wdXRcclxuICAgICAgYXdhaXQgdGhpcy5hZnRlclVwbG9hZChjdHgpXHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICBjdHgubG9nLndhcm4oSUJ1aWxkSW5FdmVudC5GQUlMRUQpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgaWYgKGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ2RlYnVnJykpIHtcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGN0eFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVUcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAwKVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVFJBTlNGT1JNLCBjdHgpXHJcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB0cmFuc2Zvcm0nKVxyXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucywgY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBkb1RyYW5zZm9ybSAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDMwKVxyXG4gICAgY29uc3QgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xyXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcclxuICAgIGxldCB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KHR5cGUpXHJcbiAgICBpZiAoIXRyYW5zZm9ybWVyKSB7XHJcbiAgICAgIHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQoJ3BhdGgnKVxyXG4gICAgICBjdXJyZW50VHJhbnNmb3JtZXIgPSAncGF0aCdcclxuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHRyYW5zZm9ybWVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdHJhbnNmb3JtZXIgLSBwYXRoYClcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVHJhbnNmb3JtaW5nLi4uIEN1cnJlbnQgdHJhbnNmb3JtZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdHJhbnNmb3JtZXI/LmhhbmRsZShjdHgpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDYwKVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdXBsb2FkJylcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1VQTE9BRCwgY3R4KVxyXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucywgY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBkb1VwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgbGV0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgbGV0IHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQodHlwZSlcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBpZiAoIXVwbG9hZGVyKSB7XHJcbiAgICAgIHR5cGUgPSAnc21tcydcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3NtbXMnXHJcbiAgICAgIHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQoJ3NtbXMnKVxyXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdXBsb2FkZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB1cGxvYWRlciAtIHNtbXNgKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5pbmZvKGBVcGxvYWRpbmcuLi4gQ3VycmVudCB1cGxvYWRlciBpcyBbJHtjdXJyZW50VHJhbnNmb3JtZXJ9XWApXHJcbiAgICBhd2FpdCB1cGxvYWRlcj8uaGFuZGxlKGN0eClcclxuICAgIGZvciAoY29uc3Qgb3V0cHV0SW1nIG9mIGN0eC5vdXRwdXQpIHtcclxuICAgICAgb3V0cHV0SW1nLnR5cGUgPSB0eXBlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGFmdGVyVXBsb2FkIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkFGVEVSX1VQTE9BRCwgY3R4KVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDEwMClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucywgY3R4KVxyXG4gICAgbGV0IG1zZyA9ICcnXHJcbiAgICBjb25zdCBsZW5ndGggPSBjdHgub3V0cHV0Lmxlbmd0aFxyXG4gICAgY29uc3QgaXNFbmNvZGVPdXRwdXRVUkwgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPGJvb2xlYW4+Pignc2V0dGluZ3MuZW5jb2RlT3V0cHV0VVJMJykgPT09IHRydWVcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHR5cGVvZiBjdHgub3V0cHV0W2ldLmltZ1VybCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBtc2cgKz0gaXNFbmNvZGVPdXRwdXRVUkwgPyBoYW5kbGVVcmxFbmNvZGUoY3R4Lm91dHB1dFtpXS5pbWdVcmwhKSA6IGN0eC5vdXRwdXRbaV0uaW1nVXJsIVxyXG4gICAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICBtc2cgKz0gJ1xcbidcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYmFzZTY0SW1hZ2VcclxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYnVmZmVyXHJcbiAgICB9XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjdHgpXHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoYFxcbiR7bXNnfWApXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVBsdWdpbnMgKGxpZmVDeWNsZVBsdWdpbnM6IElMaWZlY3ljbGVQbHVnaW5zLCBjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRMaXN0KClcclxuICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRJZExpc3QoKVxyXG4gICAgY29uc3QgbGlmZUN5Y2xlTmFtZSA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TmFtZSgpXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChwbHVnaW5zLm1hcChhc3luYyAocGx1Z2luOiBJUGx1Z2luLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY3R4LmxvZy5pbmZvKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gcnVubmluZ2ApXHJcbiAgICAgICAgYXdhaXQgcGx1Z2luLmhhbmRsZShjdHgpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gZXJyb3JgKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfSkpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVcclxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG4vKipcclxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXHJcbiAqIEBwYXJhbSBjdHhcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgY29uZmlnUGF0aDogY3R4LmNvbmZpZ1BhdGgsXHJcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcclxuICAgIGxvZzogY3R4LmxvZyxcclxuICAgIGNtZDogY3R4LmNtZCxcclxuICAgIG91dHB1dDogW10sXHJcbiAgICBpbnB1dDogW10sXHJcbiAgICByYXdJbnB1dDogW10sXHJcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXHJcbiAgICBwbHVnaW5IYW5kbGVyOiBjdHgucGx1Z2luSGFuZGxlcixcclxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxyXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxyXG4gICAgVkVSU0lPTjogY3R4LlZFUlNJT04sXHJcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxyXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXHJcbiAgICBpMThuOiBjdHguaTE4bixcclxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVDb25maWc6IGN0eC5yZW1vdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdXBsb2FkOiBjdHgudXBsb2FkLmJpbmQoY3R4KSxcclxuICAgIGFkZExpc3RlbmVyOiBjdHguYWRkTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXHJcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVMaXN0ZW5lcjogY3R4LnJlbW92ZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgc2V0TWF4TGlzdGVuZXJzOiBjdHguc2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgcmF3TGlzdGVuZXJzOiBjdHgucmF3TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRMaXN0ZW5lcjogY3R4LnByZXBlbmRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU21tc0NvbmZpZywgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xyXG4gIGNvbnN0IGRvbWFpbiA9IGJhY2t1cERvbWFpbiB8fCAnc20ubXMnXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly8ke2RvbWFpbn0vYXBpL3YyL3VwbG9hZGAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0dvJyxcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXBpVG9rZW5cclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBzbWZpbGU6IHtcclxuICAgICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBzc2w6ICd0cnVlJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBzbW1zQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJylcclxuICBpZiAoIXNtbXNDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXHJcbiAgfVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgaW1hZ2UsIHNtbXNDb25maWc/LnRva2VuLCBzbW1zQ29uZmlnPy5iYWNrdXBEb21haW4pXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keS5jb2RlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLnVybFxyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEuaGFzaFxyXG4gICAgICAgIH0gZWxzZSBpZiAoYm9keS5jb2RlID09PSAnaW1hZ2VfcmVwZWF0ZWQnICYmIHR5cGVvZiBib2R5LmltYWdlcyA9PT0gJ3N0cmluZycpIHsgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndG9rZW4nLFxyXG4gICAgICBtZXNzYWdlOiAnYXBpIHRva2VuJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdiYWNrdXBEb21haW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5iYWNrdXBEb21haW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NtbXMnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElUY3l1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2lnbmF0dXJlIHtcclxuICBzaWduYXR1cmU6IHN0cmluZ1xyXG4gIGFwcElkOiBzdHJpbmdcclxuICBidWNrZXQ6IHN0cmluZ1xyXG4gIHNpZ25UaW1lOiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogSVNpZ25hdHVyZSA9PiB7XHJcbiAgY29uc3Qgc2VjcmV0SWQgPSBvcHRpb25zLnNlY3JldElkXHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gb3B0aW9ucy5zZWNyZXRLZXlcclxuICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWRcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGxldCBzaWduYXR1cmVcclxuICBsZXQgc2lnblRpbWU6IHN0cmluZyA9ICcnXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwMClcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgLSAxXHJcbiAgICBjb25zdCBleHBpcmVkID0gY3VycmVudCArIDM2MDBcclxuXHJcbiAgICBjb25zdCBtdWx0aVNpZ25hdHVyZSA9IGBhPSR7YXBwSWR9JmI9JHtidWNrZXR9Jms9JHtzZWNyZXRJZH0mZT0ke2V4cGlyZWR9JnQ9JHtjdXJyZW50fSZyPSR7cmFuZG9tfSZmPWBcclxuXHJcbiAgICBjb25zdCBzaWduSGV4S2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShtdWx0aVNpZ25hdHVyZSkuZGlnZXN0KClcclxuICAgIGNvbnN0IHRlbXBTdHJpbmcgPSBCdWZmZXIuY29uY2F0KFtzaWduSGV4S2V5LCBCdWZmZXIuZnJvbShtdWx0aVNpZ25hdHVyZSldKVxyXG4gICAgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVtcFN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNzc3OCNzaWduYXR1cmVcclxuICAgIGNvbnN0IHRvZGF5ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRvZGF5ICsgODY0MDBcclxuICAgIHNpZ25UaW1lID0gYCR7dG9kYXl9OyR7dG9tb3Jyb3d9YFxyXG4gICAgY29uc3Qgc2lnbktleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUoc2lnblRpbWUpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IGh0dHBTdHJpbmcgPSBgcHV0XFxuLyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9XFxuXFxuaG9zdD0ke29wdGlvbnMuYnVja2V0fS5jb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbVxcbmBcclxuICAgIGNvbnN0IHNoYTFlZEh0dHBTdHJpbmcgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShodHRwU3RyaW5nKS5kaWdlc3QoJ2hleCcpXHJcbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBgc2hhMVxcbiR7c2lnblRpbWV9XFxuJHtzaGExZWRIdHRwU3RyaW5nfVxcbmBcclxuICAgIHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2lnbktleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KCdoZXgnKVxyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgc2lnbmF0dXJlLFxyXG4gICAgYXBwSWQsXHJcbiAgICBidWNrZXQsXHJcbiAgICBzaWduVGltZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IElTaWduYXR1cmUsIGltYWdlOiBCdWZmZXIsIHZlcnNpb246IHN0cmluZyk6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgY29uc3QgYXJlYSA9IG9wdGlvbnMuYXJlYVxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGhcclxuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICB1cmw6IGBodHRwOi8vJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbS9maWxlcy92Mi8ke3NpZ25hdHVyZS5hcHBJZH0vJHtzaWduYXR1cmUuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2ZpbGVOYW1lfWAsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICBIb3N0OiBgJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbWAsXHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLnNpZ25hdHVyZSxcclxuICAgICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxyXG4gICAgICB9LFxyXG4gICAgICBmb3JtRGF0YToge1xyXG4gICAgICAgIG9wOiAndXBsb2FkJyxcclxuICAgICAgICBmaWxlY29udGVudDogaW1hZ2VcclxuICAgICAgfSxcclxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7b3B0aW9ucy5idWNrZXR9LmNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LmNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IGltYWdlLFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxyXG4gIGlmICghdGNZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHRjWXVuT3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHBhdGggPSB0Y1l1bk9wdGlvbnMucGF0aFxyXG4gICAgY29uc3QgdXNlVjQgPSAhdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCdcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlLCBjdHguR1VJX1ZFUlNJT04gfHwgY3R4LlZFUlNJT04pXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzKVxyXG4gICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxyXG4gICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgICAgIGVyclxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICBsZXQgYm9keVxyXG4gICAgICAgIGlmICh1c2VWNCAmJiB0eXBlb2YgcmVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBib2R5ID0gcmVzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgaWYgKGJvZHk/LmJvZHk/LmVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBib2R5LmJvZHkuZXJyXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keT8uYm9keT8ubXNnIHx8IGJvZHk/LmJvZHk/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvblVybCA9IHRjWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgaWYgKHVzZVY0ICYmIGJvZHkubWVzc2FnZSA9PT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke3BhdGh9JHtpbWcuZmlsZU5hbWV9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2JvZHkuZGF0YS5zb3VyY2VfdXJsIGFzIHN0cmluZ30ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdXNlVjQgJiYgYm9keSAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHt0Y1l1bk9wdGlvbnMuYnVja2V0fS5jb3MuJHt0Y1l1bk9wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tLyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZXJyLmVycm9yKVxyXG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICAgIGNvZGU6IGJvZHkuY29kZSBhcyBzdHJpbmdcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGV4dDogJ2h0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODQzMidcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7fVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBhbGlhczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJyksXHJcbiAgICAgIGNob2ljZXM6IFsndjQnLCAndjUnXSxcclxuICAgICAgZGVmYXVsdDogJ3Y1JyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXBwSWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXBwSWQgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd0Y3l1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElHaXRodWJDb25maWcsIElPbGRSZXFPcHRpb25zV2l0aEpTT04gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcsIGRhdGE6IGFueSk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCB7IHRva2VuLCByZXBvIH0gPSBvcHRpb25zXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0dvJyxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGRhdGEsXHJcbiAgICBqc29uOiB0cnVlXHJcbiAgfSBhcyBjb25zdFxyXG59XHJcblxyXG5jb25zdCBnZXRPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbywgYnJhbmNoIH0gPSBvcHRpb25zXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfT9yZWY9JHticmFuY2h9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljR28nXHJcbiAgICB9LFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBnaXRodWJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpXHJcbiAgaWYgKCFnaXRodWJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBnaXRodWIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0dvJyxcclxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXHJcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcclxuICAgICAgICAgIHBhdGg6IGdpdGh1Yk9wdGlvbnMucGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMsIGRhdGEpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IHtcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXHJcbiAgICAgICAgICAgICAgc2hhOiBzdHJpbmdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgICBpZiAoYm9keSkge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChnaXRodWJPcHRpb25zLmN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVVUkkoZ2l0aHViT3B0aW9ucy5wYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5jb250ZW50LmRvd25sb2FkX3VybFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1c0NvZGUgPT09IDQyMikge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KGdldE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zKSkgYXMgYW55XHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXMpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGltZy5oYXNoID0gcmVzLnNoYVxyXG4gICAgICAgICAgICAgIGlmIChnaXRodWJPcHRpb25zLmN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVVSSShnaXRodWJPcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gcmVzLmRvd25sb2FkX3VybFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dldCBDb250ZW50cyBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZXBvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnJhbmNoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2dpdGh1YicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgcWluaXUgZnJvbSAncWluaXUnXHJcbmltcG9ydCB7IElQbHVnaW5Db25maWcsIElRaW5pdUNvbmZpZywgSVBpY0dvLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuZnVuY3Rpb24gcG9zdE9wdGlvbnMgKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XHJcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgVXBUb2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWdCYXNlNjRcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlbGVjdEFyZWEgKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9rZW4gKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gcWluaXVPcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIHNjb3BlOiBxaW5pdU9wdGlvbnMuYnVja2V0XHJcbiAgfVxyXG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcclxuICByZXR1cm4gcHV0UG9saWN5LnVwbG9hZFRva2VuKG1hYylcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXHJcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHFpbml1IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtib2R5LmtleSBhcyBzdHJpbmd9JHtvcHRpb25zfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjdHgubG9nLmVycm9yKCdxaW5pdSBlcnJvcicsIGJvZHkpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXHJcbiAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJSW1ndXJDb25maWcsIElPbGRSZXFPcHRpb25zLCBJRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4uc3RhcnRzV2l0aCgnQmVhcmVyJykgPyBhY2Nlc3NUb2tlbiA6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIDogJydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJSW1ndXJDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xyXG4gIGNvbnN0IGNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZCB8fCAnJ1xyXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xyXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gZm9ybWF0QWNjZXNzVG9rZW4ob3B0aW9ucy5hY2Nlc3NUb2tlbiB8fCAnJylcclxuICBjb25zdCBhbGJ1bSA9IG9wdGlvbnMuYWxidW0gfHwgJydcclxuICBsZXQgYXV0aG9yaXphdGlvblxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbikge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGFjY2Vzc1Rva2VuXHJcbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGBDbGllbnQtSUQgJHtjbGllbnRJZH1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxyXG4gIH1cclxuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2ltYWdlJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgSG9zdDogJ2FwaS5pbWd1ci5jb20nLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXHJcbiAgICAgIHR5cGU6ICdiYXNlNjQnLFxyXG4gICAgICBuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xyXG4gICAgbGV0IGluaXRQYWdlcyA9IDBcclxuICAgIGxldCByZXNcclxuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xyXG4gICAgZG8ge1xyXG4gICAgICBjb25zdCBnZXRBbGJ1bUhhc2hPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2FjY291bnQvJHt1c2VybmFtZX0vYWxidW1zLyR7aW5pdFBhZ2VzfWAsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICAgICAgZ2V0QWxidW1IYXNoT3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICAgICAgfVxyXG4gICAgICByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRBbGJ1bUhhc2hPcHRpb25zKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcclxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhbGJ1bUxpc3QpIHtcclxuICAgICAgICBpZiAoaXRlbS50aXRsZSA9PT0gYWxidW0pIHtcclxuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGluaXRQYWdlcysrXHJcbiAgICB9IHdoaWxlIChyZXMuYm9keS5kYXRhLmxlbmd0aCA+IDApXHJcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhLmFsYnVtID0gYWxidW1IYXNoXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgaW1ndXJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKVxyXG4gIGlmICghaW1ndXJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBpbWd1ciBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBvc3RPcHRpb25zKGN0eCwgaW1ndXJPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcclxuICAgICAgICBpZiAoYm9keS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS5saW5rXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXHJcbiAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy5pbWd1ci5jb20vYXBpL2Vycm5vLydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY2xpZW50SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY2xpZW50SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW0nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW0gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdpbWd1cicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUFsaXl1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgT1NTIHNpZ25hdHVyZVxyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgbWltZVR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSlcclxuICBpZiAoIW1pbWVUeXBlKSB0aHJvdyBFcnJvcihgTm8gbWltZSB0eXBlIGZvdW5kIGZvciBmaWxlICR7ZmlsZU5hbWV9YClcclxuXHJcbiAgY29uc3Qgc2lnblN0cmluZyA9IGBQVVRcXG5cXG4ke21pbWVUeXBlfVxcbiR7ZGF0ZX1cXG4vJHtvcHRpb25zLmJ1Y2tldH0vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gXHJcblxyXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBPU1MgJHtvcHRpb25zLmFjY2Vzc0tleUlkfToke3NpZ25hdHVyZX1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbWAsXHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXHJcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBhbGlZdW4gT1NTIGNvbmZpZycpXHJcbiAgfVxyXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aC5yZXBsYWNlKC9cXC8qJC8sICcnKS5yZXBsYWNlKC9eXFwvKi8sICcnKSArICcvJ1xyXG4gIGlmIChhbGlZdW5PcHRpb25zLnBhdGggPT09ICcvJykge1xyXG4gICAgYWxpWXVuT3B0aW9ucy5wYXRoID0gJydcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSBhbGlZdW5PcHRpb25zLmN1c3RvbVVybFxyXG4gICAgY29uc3QgcGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZShhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gYWxpWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7YWxpWXVuT3B0aW9ucy5idWNrZXR9LiR7YWxpWXVuT3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleUlkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5U2VjcmV0JyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYWxpeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEJylcclxuICAgIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVVweXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCBNRDUgZnJvbSAnbWQ1J1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcclxuICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcclxuICBjb25zdCBtZDVQYXNzd29yZCA9IE1ENShwYXNzd29yZClcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YFxyXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcclxuICBjb25zdCBzaWduID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBtZDVQYXNzd29yZCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBVUFlVTiAke29wZXJhdG9yfToke3NpZ259YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbS8ke2J1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCB1cHl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpXHJcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHVwWXVuIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgcGF0aCA9IHVweXVuT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHt1cHl1bk9wdGlvbnMub3B0aW9uc31gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGlmIChlcnIubWVzc2FnZSA9PT0gJ1VwbG9hZCBmYWlsZWQnKSB7XHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBib2R5ID0gc2FmZVBhcnNlPHsgY29kZTogc3RyaW5nIH0+KGVyci5lcnJvcilcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keS5jb2RlIDogYm9keVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy51cHl1bi5jb20vYXBpL2Vycm5vLydcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcGVyYXRvcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKSB9LFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1InKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wZXJhdG9yIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndXB5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU4nKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElXZWJkYXZQbGlzdENvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJV2ViZGF2UGxpc3RDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgJHtvcHRpb25zLmhvc3R9LyR7ZW5jb2RlVVJJKG9wdGlvbnMucGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke29wdGlvbnMudXNlcm5hbWV9OiR7b3B0aW9ucy5wYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0Jyl9YCxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcclxuICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogaW1hZ2UubGVuZ3RoXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3Qgd2ViZGF2cGxpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJV2ViZGF2UGxpc3RDb25maWc+KCdwaWNCZWQud2ViZGF2cGxpc3QnKVxyXG4gIGlmICghd2ViZGF2cGxpc3RPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB3ZWJkYXZwbGlzdCBjb25maWcnKVxyXG4gIH1cclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0LnJlcGxhY2UoL15odHRwcz86XFwvXFwvfFxcLyskL2csICcnKVxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5zc2xFbmFibGVkID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoIHx8ICcnKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLydcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcclxuICAgIGNvbnN0IHdlYnBhdGggPSB3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHdlYmRhdnBsaXN0T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID49IDIwMCAmJiBib2R5LnN0YXR1c0NvZGUgPCAzMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gY3VzdG9tVXJsIHx8IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0XHJcbiAgICAgICAgICBpZiAod2VicGF0aCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt3ZWJwYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSSh3ZWJwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3BhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NzbEVuYWJsZWQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNzbEVuYWJsZWQgfHwgdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3ZWJwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJykgfVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3dlYmRhdnBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IFNNTVNVcGxvYWRlciBmcm9tICcuL3NtbXMnXHJcbmltcG9ydCB0Y1l1blVwbG9hZGVyIGZyb20gJy4vdGN5dW4nXHJcbmltcG9ydCBnaXRodWJVcGxvYWRlciBmcm9tICcuL2dpdGh1YidcclxuaW1wb3J0IHFpbml1VXBsb2FkZXIgZnJvbSAnLi9xaW5pdSdcclxuaW1wb3J0IGltZ3VyVXBsb2FkZXIgZnJvbSAnLi9pbWd1cidcclxuaW1wb3J0IGFsaVl1blVwbG9hZGVyIGZyb20gJy4vYWxpeXVuJ1xyXG5pbXBvcnQgdXBZdW5VcGxvYWRlciBmcm9tICcuL3VweXVuJ1xyXG5pbXBvcnQgd2ViZGF2cGxpc3RVcGxvYWRlciBmcm9tICcuL3dlYmRhdidcclxuXHJcbmNvbnN0IGJ1aWxkSW5VcGxvYWRlcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGFsaVl1blVwbG9hZGVyKGN0eClcclxuICAgICAgdGNZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIFNNTVNVcGxvYWRlcihjdHgpXHJcbiAgICAgIGdpdGh1YlVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICB1cFl1blVwbG9hZGVyKGN0eClcclxuICAgICAgd2ViZGF2cGxpc3RVcGxvYWRlcihjdHgpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVXBsb2FkZXJzXHJcbiIsImltcG9ydCB7XHJcbiAgaXNVcmwsXHJcbiAgZ2V0SW1hZ2VTaXplLFxyXG4gIGdldEZTRmlsZSxcclxuICBnZXRVUkxGaWxlXHJcbn0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCBJSW1nSW5mbywgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcclxuICBhd2FpdCBQcm9taXNlLmFsbChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRGU0ZpbGUoaXRlbSlcclxuICAgIH1cclxuICAgIGlmIChpbmZvLnN1Y2Nlc3MgJiYgaW5mby5idWZmZXIpIHtcclxuICAgICAgY29uc3QgaW1nU2l6ZSA9IGdldEltZ1NpemUoY3R4LCBpbmZvLmJ1ZmZlciwgaXRlbSlcclxuICAgICAgcmVzdWx0c1tpbmRleF0gPSB7XHJcbiAgICAgICAgYnVmZmVyOiBpbmZvLmJ1ZmZlcixcclxuICAgICAgICBmaWxlTmFtZTogaW5mby5maWxlTmFtZSxcclxuICAgICAgICB3aWR0aDogaW1nU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGltZ1NpemUuaGVpZ2h0LFxyXG4gICAgICAgIGV4dG5hbWU6IGluZm8uZXh0bmFtZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXHJcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xyXG4gICAgY3R4LmxvZy53YXJuKGBjYW4ndCBnZXQgJHtwYXRofSdzIGltYWdlIHNpemVgKVxyXG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxyXG4gIH1cclxuICByZXR1cm4gaW1hZ2VTaXplXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHJlc29sdmUgZnJvbSAncmVzb2x2ZSdcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luLCBJUGx1Z2luTG9hZGVyLCBJUGljR29QbHVnaW5JbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG4vKipcclxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb2FkZXIgaW1wbGVtZW50cyBJUGx1Z2luTG9hZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsTGlzdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcDogTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPiA9IG5ldyBNYXAoKVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZVBhdGgpKSB7XHJcbiAgICAgIGNvbnN0IHBrZyA9IHtcclxuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUnLFxyXG4gICAgICAgIGxpY2Vuc2U6ICdNSVQnXHJcbiAgICAgIH1cclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBlbnRyeVxyXG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbiAoY3R4OiBJUGljR28sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gcmVzb2x2ZS5zeW5jKG5hbWUsIHsgYmFzZWRpcjogY3R4LmJhc2VEaXIgfSlcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxvYWQgYWxsIHRoaXJkIHBhcnR5IHBsdWdpblxyXG4gIGxvYWQgKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gVGhhbmtzIHRvIGhleG8gLT4gaHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2Jsb2IvbWFzdGVyL2xpYi9oZXhvL2xvYWRfcGx1Z2lucy5qc1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxyXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgZGV2RGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMucmVzb2x2ZVBsdWdpbih0aGlzLmN0eCwgbmFtZSlcclxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcclxuICAgIH0pXHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gcmVnaXN0ZXIgbG9jYWwgcGx1Z2luXHJcbiAgICAgIGlmICghcGx1Z2luKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fCAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxyXG4gICAgICAgICAgdGhpcy5jdHguc2F2ZUNvbmZpZyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXHJcbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXHJcbiAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcclxuICAgICAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luSW50ZXJmYWNlKVxyXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBgUGx1Z2luICR7bmFtZX0gTG9hZCBFcnJvcmAsXHJcbiAgICAgICAgYm9keTogZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmNtZC51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcclxuICBnZXRQbHVnaW4gKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbk1hcC5nZXQobmFtZSlcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcclxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXHJcbiAgICByZXR1cm4gcGx1Z2luXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdFxyXG4gIH1cclxuXHJcbiAgaGFzUGx1Z2luIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZ1bGxMaXN0LmhhcyhuYW1lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxyXG4gICAqL1xyXG4gIGdldEZ1bGxMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZnVsbExpc3RdXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkxvYWRlclxyXG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcclxuaW1wb3J0IHsgSVBpY0dvLCBJQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4vZW51bSdcclxuaW1wb3J0IG1hY0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9tYWMuYXBwbGVzY3JpcHQnXHJcbmltcG9ydCB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MucHMxJ1xyXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXHJcbmltcG9ydCBsaW51eENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9saW51eC5zaCdcclxuaW1wb3J0IHdzbENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93c2wuc2gnXHJcbmltcG9ydCB7IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgfSBmcm9tICcuL3N0YXRpYydcclxuXHJcbmV4cG9ydCB0eXBlIFBsYXRmb3JtID0gJ2RhcndpbicgfCAnd2luMzInIHwgJ3dpbjEwJyB8ICdsaW51eCcgfCAnd3NsJ1xyXG5cclxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcclxuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cclxuICBpZiAoaXNXc2wpIHtcclxuICAgIHJldHVybiAnd3NsJ1xyXG4gIH1cclxuICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRPUyA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpWzBdXHJcbiAgICBpZiAoY3VycmVudE9TID09PSAnMTAnKSB7XHJcbiAgICAgIHJldHVybiAnd2luMTAnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ3dpbjMyJ1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICByZXR1cm4gJ2RhcndpbidcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuICdsaW51eCdcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdENvbnRlbnQ6IHtcclxuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXHJcbn0gPSB7XHJcbiAgZGFyd2luOiBtYWNDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMzI6IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcclxuICBsaW51eDogbGludXhDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd3NsOiB3c2xDbGlwYm9hcmRTY3JpcHRcclxufVxyXG4vKipcclxuICogcG93ZXJzaGVsbCB3aWxsIHJlcG9ydCBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGhhdmUgYSAnLnBzMScgZXh0ZW5zaW9uLFxyXG4gKiBzbyB3ZSBzaG91bGQga2VlcCB0aGUgZXh0ZW5zaW9uIG5hbWUgY29uc2lzdGVudCB3aXRoIGNvcnJlc3BvbmRpbmcgc2hlbGxcclxuICovXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lOiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogJ21hYy5hcHBsZXNjcmlwdCcsXHJcbiAgd2luMzI6ICd3aW5kb3dzLnBzMScsXHJcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcclxuICBsaW51eDogJ2xpbnV4LnNoJyxcclxuICB3c2w6ICd3c2wuc2gnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUltYWdlRm9sZGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUilcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoaW1hZ2VQYXRoKSkge1xyXG4gICAgZnMubWtkaXJTeW5jKGltYWdlUGF0aClcclxuICB9XHJcbn1cclxuXHJcbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcclxuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xyXG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcclxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcclxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFBsYXRmb3JtKClcclxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lW3BsYXRmb3JtXSlcclxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHNjcmlwdFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXHJcbiAgICAgICAgc2NyaXB0UGF0aCxcclxuICAgICAgICBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSxcclxuICAgICAgICAndXRmOCdcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgbGV0IGV4ZWN1dGlvblxyXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignb3Nhc2NyaXB0JywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXHJcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInIHx8IHBsYXRmb3JtID09PSAnd2luMTAnKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xyXG4gICAgICAgICctbm9wcm9maWxlJyxcclxuICAgICAgICAnLW5vbmludGVyYWN0aXZlJyxcclxuICAgICAgICAnLW5vbG9nbycsXHJcbiAgICAgICAgJy1zdGEnLFxyXG4gICAgICAgICctZXhlY3V0aW9ucG9saWN5JywgJ3VucmVzdHJpY3RlZCcsXHJcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUvaXNzdWVzLzMyXHJcbiAgICAgICAgLy8gJy13aW5kb3dzdHlsZScsJ2hpZGRlbicsXHJcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxyXG4gICAgICAgICctZmlsZScsIHNjcmlwdFBhdGgsXHJcbiAgICAgICAgaW1hZ2VQYXRoXHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignc2gnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRpb24uc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcclxuICAgICAgICBpZiAoZGF0YS50b1N0cmluZygpLnRyaW0oKSA9PT0gJ25vIHhjbGlwIG9yIHdsLWNsaXBib2FyZCcpIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXHJcbiAgICAgICAgICAgIGJvZHk6ICdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxyXG5cclxuICAgICAgLy8gaWYgdGhlIGZpbGVQYXRoIGlzIHRoZSByZWFsIGZpbGUgaW4gc3lzdGVtXHJcbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcclxuICAgICAgbGV0IHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IGZhbHNlXHJcblxyXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXHJcbiAgICAgIGlmIChwYXRoLmJhc2VuYW1lKGltZ1BhdGgpICE9PSBwYXRoLmJhc2VuYW1lKGltYWdlUGF0aCkpIHtcclxuICAgICAgICAvLyBpZiB0aGUgcGF0aCBpcyBub3QgZ2VuZXJhdGUgYnkgcGljZ29cclxuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XHJcbiAgICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIHRoZSBpbWdQYXRoIGlzIGludmFsaWRcclxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQ2FuJ3QgZmluZCAke2ltZ1BhdGh9YCkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIGltZ1BhdGgsXHJcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXHJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuXHJcbmNvbnN0IGV2ZW50QnVzID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcbmV4cG9ydCB7XHJcbiAgZXZlbnRCdXNcclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmMgKi9cclxuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgeyBJUGljR28sIFVuZGVmaW5hYmxlLCBJQ29uZmlnQ2hhbmdlUGF5bG9hZCwgSUNvbmZpZywgSVJlcXVlc3RDb25maWcsIElPbGRSZXFPcHRpb25zLCBJUmVzcG9uc2UsIElGdWxsUmVzcG9uc2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcclxuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xyXG5pbXBvcnQgdHVubmVsIGZyb20gJ3R1bm5lbCdcclxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XHJcbiAgbWF4VmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIG1pblZlcnNpb246ICdUTFN2MS4yJ1xyXG59KVxyXG5cclxuLy8gdGhhbmtzIGZvciBodHRwczovL2dpdGh1Yi5kZXYvcmVxdWVzdC9yZXF1ZXN0L2Jsb2IvbWFzdGVyL2luZGV4LmpzXHJcbmZ1bmN0aW9uIGFwcGVuZEZvcm1EYXRhIChmb3JtOiBGb3JtRGF0YSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBkYXRhICYmICdvcHRpb25zJyBpbiBkYXRhKSB7XHJcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEudmFsdWUsIGRhdGEub3B0aW9ucylcclxuICB9IGVsc2Uge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVxdWVzdEludGVyY2VwdG9yIChvcHRpb25zOiBJT2xkUmVxT3B0aW9ucyB8IEF4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUmVxdWVzdENvbmZpZyAmIHtcclxuICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cclxufSB7XHJcbiAgbGV0IF9faXNPbGRPcHRpb25zID0gZmFsc2VcclxuICBjb25zdCBvcHQ6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ICYge1xyXG4gICAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbiAgfSA9IHtcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgICB1cmw6IChvcHRpb25zLnVybCBhcyBzdHJpbmcpIHx8ICcnLFxyXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgfVxyXG4gIC8vIHVzZXIgcmVxdWVzdCBjb25maWcgcHJveHlcclxuICBpZiAob3B0aW9ucy5wcm94eSkge1xyXG4gICAgbGV0IHByb3h5T3B0aW9ucyA9IG9wdGlvbnMucHJveHlcclxuICAgIGlmICh0eXBlb2YgcHJveHlPcHRpb25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IG5ldyBVUkwob3B0aW9ucy5wcm94eSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IGZhbHNlXHJcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAocHJveHlPcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgb3B0Lmh0dHBzQWdlbnQgPSB0dW5uZWwuaHR0cHNPdmVySHR0cCh7XHJcbiAgICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnM/Lmhvc3RuYW1lLFxyXG4gICAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnM/LnBvcnQsIDEwKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0LnByb3h5ID0ge1xyXG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxyXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiAnaHR0cCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaWYgKCdmb3JtRGF0YScgaW4gb3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBvcHRpb25zLmZvcm1EYXRhW2tleV1cclxuICAgICAgYXBwZW5kRm9ybURhdGEoZm9ybSwga2V5LCBkYXRhKVxyXG4gICAgfVxyXG4gICAgb3B0LmRhdGEgPSBmb3JtXHJcbiAgICBvcHQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0LmhlYWRlcnMgfHwge30sIGZvcm0uZ2V0SGVhZGVycygpKVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICBkZWxldGUgb3B0LmZvcm1EYXRhXHJcbiAgfVxyXG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xyXG4gICAgb3B0LmRhdGEgPSBvcHRpb25zLmJvZHlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgZGVsZXRlIG9wdC5ib2R5XHJcbiAgfVxyXG4gIGlmICgncXMnIGluIG9wdGlvbnMpIHtcclxuICAgIG9wdC5wYXJhbXMgPSBvcHRpb25zLnFzXHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICB9XHJcbiAgb3B0Ll9faXNPbGRPcHRpb25zID0gX19pc09sZE9wdGlvbnNcclxuICByZXR1cm4gb3B0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlSW50ZXJjZXB0b3IgKHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlKTogSUZ1bGxSZXNwb25zZSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc3BvbnNlLFxyXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxyXG4gICAgYm9keTogcmVzcG9uc2UuZGF0YVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVzcG9uc2VFcnJvckhhbmRsZXIgKGVycm9yOiBhbnkpIHtcclxuICAvLyBpZiAoZXJyb3IucmVzcG9uc2UpIHtcclxuICAvLyAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRlZCB3aXRoIGEgc3RhdHVzIGNvZGVcclxuICAvLyAgIC8vIHRoYXQgZmFsbHMgb3V0IG9mIHRoZSByYW5nZSBvZiAyeHhcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvKVxyXG4gIC8vIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xyXG4gIC8vICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYnV0IG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxyXG4gIC8vICAgLy8gYGVycm9yLnJlcXVlc3RgIGlzIGFuIGluc3RhbmNlIG9mIFhNTEh0dHBSZXF1ZXN0IGluIHRoZSBicm93c2VyIGFuZCBhbiBpbnN0YW5jZSBvZlxyXG4gIC8vICAgLy8gaHR0cC5DbGllbnRSZXF1ZXN0IGluIG5vZGUuanNcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5yZXF1ZXN0KVxyXG4gIC8vIH0gZWxzZSB7XHJcbiAgLy8gICAvLyBTb21ldGhpbmcgaGFwcGVuZWQgaW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCBhbiBFcnJvclxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLm1lc3NhZ2UpXHJcbiAgLy8gfVxyXG4gIGNvbnN0IGVycm9yT2JqID0ge1xyXG4gICAgbWV0aG9kOiBlcnJvcj8uY29uZmlnPy5tZXRob2Q/LnRvVXBwZXJDYXNlKCkgfHwgJycsXHJcbiAgICB1cmw6IGVycm9yPy5jb25maWc/LnVybCB8fCAnJyxcclxuICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSB8fCAnJyxcclxuICAgIHN0YWNrOiBlcnJvcj8uc3RhY2sgfHwge30sXHJcbiAgICByZXNwb25zZToge1xyXG4gICAgICBzdGF0dXM6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIGJvZHk6IGVycm9yPy5yZXNwb25zZT8uZGF0YSB8fCAnJ1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3JPYmopXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgSVJlcXVlc3Qge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHByb3h5OiBVbmRlZmluYWJsZTxzdHJpbmc+ID0gJydcclxuICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiA9IHt9XHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5pbml0KClcclxuICAgIGV2ZW50QnVzLm9uKElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCAoZGF0YTogSUNvbmZpZ0NoYW5nZVBheWxvYWQ8c3RyaW5nIHwgSUNvbmZpZ1sncGljQmVkJ10+KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZGF0YS5jb25maWdOYW1lKSB7XHJcbiAgICAgICAgY2FzZSAncGljQmVkJzpcclxuICAgICAgICAgIGlmICgoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSk/LnByb3h5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSAoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSkucHJveHlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAncGljQmVkLnByb3h5JzpcclxuICAgICAgICAgIHRoaXMucHJveHkgPSBkYXRhLnZhbHVlIGFzIHN0cmluZ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcm94eSA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnByb3h5JylcclxuICAgIGlmIChwcm94eSkge1xyXG4gICAgICB0aGlzLnByb3h5ID0gcHJveHlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJveHkgKCk6IEF4aW9zUmVxdWVzdENvbmZpZ1sncHJveHknXSB8IGZhbHNlIHtcclxuICAgIGlmICh0aGlzLnByb3h5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcHJveHlPcHRpb25zID0gbmV3IFVSTCh0aGlzLnByb3h5KVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXHJcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCB8fCAnMCcsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiBwcm94eU9wdGlvbnMucHJvdG9jb2xcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICAvLyAjNjQgZHluYW1pYyBnZXQgcHJveHkgdmFsdWVcclxuICByZXF1ZXN0PFQsIFUgZXh0ZW5kcyAoXHJcbiAgICBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIElPbGRSZXFPcHRpb25zID8gSU9sZFJlcU9wdGlvbnMgOiBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIEF4aW9zUmVxdWVzdENvbmZpZyA/IEF4aW9zUmVxdWVzdENvbmZpZyA6IG5ldmVyXHJcbiAgKT4gKG9wdGlvbnM6IFUpOiBQcm9taXNlPElSZXNwb25zZTxULCBVPj4ge1xyXG4gICAgdGhpcy5vcHRpb25zLnByb3h5ID0gdGhpcy5oYW5kbGVQcm94eSgpXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLm1heEJvZHlMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgdGhpcy5vcHRpb25zLm1heENvbnRlbnRMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcm94eSAmJiBvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IHR1bm5lbC5odHRwc092ZXJIdHRwKHtcclxuICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLnByb3h5Lmhvc3QsXHJcbiAgICAgICAgICBwb3J0OiB0aGlzLm9wdGlvbnMucHJveHkucG9ydFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5vcHRpb25zLnByb3h5ID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNBZ2VudFxyXG4gICAgfVxyXG4gICAgLy8gIU5PVElDRSB0aGlzLm9wdGlvbnMgIT09IG9wdGlvbnNcclxuICAgIC8vIHRoaXMub3B0aW9ucyBpcyB0aGUgZGVmYXVsdCBvcHRpb25zXHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh0aGlzLm9wdGlvbnMpXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHJlc3BvbnNlSW50ZXJjZXB0b3IsIHJlc3BvbnNlRXJyb3JIYW5kbGVyKVxyXG5cclxuICAgIC8vIGNvbXBhdGlibGUgd2l0aCBvbGQgcmVxdWVzdCBvcHRpb25zIHRvIG5ldyBvcHRpb25zXHJcbiAgICBjb25zdCBvcHQgPSByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9ucylcclxuXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAvLyBoYW5kbGUgQ29udGVudC1UeXBlXHJcbiAgICAgIGxldCBjb250ZW50VHlwZSA9ICcnXHJcbiAgICAgIGlmIChvYmo/LmhlYWRlcnM/LmNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5jb250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuY29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LkNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5Db250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuQ29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LlsnY29udGVudC10eXBlJ10pIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSAnJyAmJiBvYmouaGVhZGVycykge1xyXG4gICAgICAgIG9iai5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGNvbnRlbnRUeXBlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9ialxyXG4gICAgfSlcclxuICAgIGlmICgncmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UnIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAvLyB1c2Ugb2xkIHJlcXVlc3Qgb3B0aW9uIGZvcm1hdFxyXG4gICAgICAgIGlmIChvcHQuX19pc09sZE9wdGlvbnMpIHtcclxuICAgICAgICAgIGlmICgnanNvbicgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSBhcyBQcm9taXNlPElSZXNwb25zZTxULCBVPj5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RcclxuIiwiaW1wb3J0IHsgSUNvbmZpZywgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcclxuaW1wb3J0IHsgSUpTT04gfSBmcm9tICdAcGljZ28vc3RvcmUvZGlzdC90eXBlcydcclxuXHJcbmNsYXNzIERCIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYjogSlNPTlN0b3JlXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5kYiA9IG5ldyBKU09OU3RvcmUodGhpcy5jdHguY29uZmlnUGF0aClcclxuXHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNCZWQnLCB7XHJcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxyXG4gICAgICAgICAgY3VycmVudDogJ3NtbXMnXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNnb1BsdWdpbnMnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkIChmbHVzaD86IGJvb2xlYW4pOiBJSlNPTiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYi5yZWFkKGZsdXNoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IChrZXk6IHN0cmluZyA9ICcnKTogYW55IHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcclxuICB9XHJcblxyXG4gIHNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBoYXMgKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmhhcyhrZXkpXHJcbiAgfVxyXG5cclxuICB1bnNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIudW5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogUGFydGlhbDxJQ29uZmlnPik6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnVuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEQlxyXG5cclxuLy8gY29uc3QgaW5pdENvbmZpZyA9IChjb25maWdQYXRoOiBzdHJpbmcpOiBsb3dkYi5Mb3dkYlN5bmM8YW55PiA9PiB7XHJcbi8vIH1cclxuXHJcbi8vIGNvbnN0IHNhdmVDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nLCBjb25maWc6IGFueSk6IHZvaWQgPT4ge1xyXG4vLyAgIGNvbnN0IGRiID0gaW5pdENvbmZpZyhjb25maWdQYXRoKVxyXG4vLyAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbi8vICAgICBkYi5yZWFkKCkuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSkud3JpdGUoKVxyXG4vLyAgIH0pXHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCB7XHJcbi8vIGluaXRDb25maWcsXHJcbi8vIHNhdmVDb25maWdcclxuLy8gfVxyXG4iLCJpbXBvcnQgc3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nXHJcbmltcG9ydCB7XHJcbiAgSVJlc3VsdCxcclxuICBJUHJvY2Vzc0VudixcclxuICBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCxcclxuICBJUGx1Z2luSGFuZGxlcixcclxuICBJUGx1Z2luSGFuZGxlck9wdGlvbnMsXHJcbiAgVW5kZWZpbmFibGUsXHJcbiAgSVBpY0dvLFxyXG4gIElQbHVnaW5IYW5kbGVyUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBnZXRQcm9jZXNzUGx1Z2luTmFtZSwgZ2V0Tm9ybWFsUGx1Z2luTmFtZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi9pMThuL3poLUNOJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFBsdWdpbkhhbmRsZXIgaW1wbGVtZW50cyBJUGx1Z2luSGFuZGxlciB7XHJcbiAgLy8gVGhhbmtzIHRvIGZlZmxvdyAtPiBodHRwczovL2dpdGh1Yi5jb20vZmVmbG93L2ZlZmxvdy9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvaW5zdGFsbC9wbHVnaW4uanNcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xyXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIC8vIGRldGVjdCBpZiBoYXMgYWxyZWFkeSBpbnN0YWxsZWRcclxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LnBsdWdpbkxvYWRlci5oYXNQbHVnaW4oaXRlbS5wa2dOYW1lKSkge1xyXG4gICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKGl0ZW0ucGtnTmFtZSlcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNHbyBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcclxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcclxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXHJcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVuaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZSAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kIChjbWQ6IHN0cmluZywgbW9kdWxlczogc3RyaW5nW10sIHdoZXJlOiBzdHJpbmcsIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY6IElQcm9jZXNzRW52ID0ge30pOiBQcm9taXNlPElSZXN1bHQ+IHtcclxuICAgIC8vIG9wdGlvbnMgZmlyc3RcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcclxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXHJcbiAgICAgIGlmIChyZWdpc3RyeSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3h5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7IGN3ZDogd2hlcmUsIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudikgfSlcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXHJcbiAgICAgICAgbnBtLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRvdXQpXHJcblxyXG4gICAgICAgIG5wbS5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3RkZXJyKVxyXG5cclxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xyXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IHtcclxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgZnVsbE5hbWU6ICcnLFxyXG4gICAgcGtnTmFtZTogJydcclxuICB9XHJcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcclxuICBpZiAoIXJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXHJcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxyXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcclxuICBpZiAoIXBrZ05hbWUpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxyXG4gICAgcGtnTmFtZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgeyBaSF9DTiwgSUxvY2FsZXNLZXksIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXHJcblxyXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXHJcbmltcG9ydCB7IElTdHJpbmdLZXlNYXAsIElJMThuTWFuYWdlciB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xyXG5pbXBvcnQgeyBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcclxuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xyXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXHJcblxyXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcclxuICAnemgtQ04nOiBaSF9DTixcclxuICAnemgtVFcnOiBaSF9UVyxcclxuICBlbjogRU5cclxufVxyXG5cclxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcclxuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XHJcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcclxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4biAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xyXG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcclxuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcclxuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIgKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XHJcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcclxuICAgIH1cclxuICAgIHJldHVybiBpMThuRm9sZGVyXHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXHJcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGUgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFkZExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcclxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFuZ3VhZ2VMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBJMThuTWFuYWdlclxyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXHJcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrppLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWumktleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6K6+5a6a5LuT5bqT5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6K6+5a6a5YiG5pSv5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+iuvuWumkFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICforr7lrprorr/pl67nvZHlnYAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6K6+5a6aQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ+iuvuWummFjY2Vzc1Rva2VuJyxcclxuICBQSUNCRURfSU1HVVJfQUxCVU06ICforr7lrprnm7jlhozlkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+iuvuWumuS7o+eQhicsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrkvKDml7bloavlhpknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6K6+5a6a5pON5L2c5ZGYJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICforr7lrprmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAn6K6+5a6a5Yqg6YCf5Z+f5ZCNJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2cGxpc3RcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6K6+5a6a5o6l5Y+j572R5Z2AJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+WQr+eUqFNTTCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R5Z2A6Lev5b6EJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aXtuWQr+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICforr7lrprmsLTljbDnsbvlnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+ivt+mAieaLqeawtOWNsOexu+WeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6K6+5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+iuvuWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6K+36L6T5YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICforr7lrprmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfor7fovpPlhaXmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iuvuWumuawtOWNsOebuOWvueS6juWbvueJh+eahOavlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfor7fovpPlhaUwLTHnmoTlsI/mlbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iuvuWumuawtOWNsOWtl+S9k+minOiJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfor7fovpPlhaVyZ2LpopzoibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iuvuWumuawtOWNsOWbvueJh+i3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfor7fovpPlhaXmsLTljbDlm77niYfot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K6+5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K+36YCJ5oup5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAn6K6+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/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+iuvuWumue8qeaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/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+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElMb2NhbGVzS2V5ID0ga2V5b2YgdHlwZW9mIFpIX0NOXHJcbmV4cG9ydCB0eXBlIElMb2NhbGVzID0gdHlwZW9mIFpIX0NOXHJcbiIsImltcG9ydCB7IElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfVFc6IElMb2NhbGVzID0ge1xyXG4gIFVQTE9BRF9GQUlMRUQ6ICfkuIrlgrPlpLHmlZcnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5piv5ZCm5q2j56K6JyxcclxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+iri+aqouafpeS9oOeahOioreWumuWPiue2sui3rycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICfpjK/oqqTnorzvvJoke2NvZGV977yM6KuL5omT6ZaL54CP6Ka95Zmo6LK85LiK5Zyw5Z2A5p+l55yL55u46Zec5Y6f5ZugJyxcclxuICBTRVJWRVJfRVJST1I6ICfkvLrmnI3lmajlh7rpjK/vvIzoq4vph43oqaYnLFxyXG4gIEFVVEhfRkFJTEVEOiAn6KqN6K2J5aSx5pWXJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICflgpnnlKjkuIrlgrPntrLlnYAnLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIEFsaS1jbG91ZFxyXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6Kit5a6aS2V5SWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICfoqK3lrppLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJpvc3MtY24tYmVpamluZycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gVGVuY2VudC1jbG91ZFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfpqLDoqIrkupFDT1MnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ+ioreWumlNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+ioreWumkFwcElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ+S+i+Wmgu+8mjEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaYXAtYmVpamluZycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlTW9ncjInLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+ioreWumuWAieW6q+WQjeeosScsXHJcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+ioreWumuWIhuaUr+WQjeeosScsXHJcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAn5qC85byP77yadXNlcm5hbWUvcmVwbycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gcWluaXVcclxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvkupEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICfoqK3lrppBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICfoqK3lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAn6Kit5a6a6Kiq5ZWP57ay5Z2AJyxcclxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mnowJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+ioreWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6Kit5a6a55u457C/5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICfoqK3lrppQUk9YWScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6Kit5a6a5pON5L2c5ZOhJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICfoqK3lrprmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAn6Kit5a6a5Yqg6YCf57ay5Z2AJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2XHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+ioreWumkFQSeS4u+apnycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aZguWVn+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aZguWVn+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXnlKjmiLblr4bnorwnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICfoqK3lrprmsLTljbDpoZ7lnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+iri+mBuOaTh+awtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6Kit5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+ioreWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6KuL6Ly45YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICfoqK3lrprmsLTljbDlrZfpq5QnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfoq4vovLjlhaXmsLTljbDlrZfpq5Tmlofku7bot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ioreWumuawtOWNsOWclueJh+avlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfoq4vovLjlhaUwLTHnmoTmlbjlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ioreWumuawtOWNsOWtl+mrlOmhj+iJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfoq4vovLjlhaVyZ2LpoY/oibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ioreWumuawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfoq4vovLjlhaXmsLTljbDlnJbniYfot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6Kit5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6KuL6YG45pOH5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAn6Kit5a6a5ZyW54mH6LOq6YePJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+iri+i8uOWFpTAtMTAw55qE5pW05pW4JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpumAsuihjOagvOW8j+i9ieaPmycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ+mcgOimgei9ieaPm+aZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6Kit5a6a6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+iri+mBuOaTh+i9ieaPm+agvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ+aYr+WQpumAsuihjOWclueJh+e4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57iu5pS+5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6Kit5a6a57iu5pS+5a+s5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6Kit5a6a57iu5pS+6auY5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAn5piv5ZCm5oyJ55m+5YiG5q+U6YCy6KGM57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+ioreWumue4ruaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfoq4vovLjlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbpgLLooYzlnJbniYfml4vovYknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9ieaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfoq4vovLjlhaXmlbjlrZfvvIzlj6/ngrrosqDmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuizh+ioiicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxyXG5cclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijneWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijneWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovInmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246LyJ5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnXHJcbn1cclxuIiwiaW1wb3J0IHsgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBFTjogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ1VwbG9hZCBmYWlsZWQnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MnLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MgYW5kIG5ldHdvcmsnLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAnRXJyb3IgY29kZTogJHtjb2RlfSwgcGxlYXNlIG9wZW4gdGhlIGJyb3dzZXIgYW5kIHBhc3RlIHRoZSBhZGRyZXNzIHRvIHNlZSB0aGUgcmVhc29uJyxcclxuICBTRVJWRVJfRVJST1I6ICdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLFxyXG4gIEFVVEhfRkFJTEVEOiAnQXV0aGVudGljYXRpb24gZmFpbGVkJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAnU2V0IEJhY2t1cCBVcGxvYWQgRG9tYWluJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICdFeC4gc21tcy5hcHAnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ1NldCBLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAnU2V0IFNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAnRXguIDEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHA6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICdTZXQgUmVwbyBOYW1lJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ1NldCBDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAnU2V0IEFjY2VzcyBUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAnU2V0IEFsYnVtIE5hbWUnLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ1NldCBQcm94eScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIGFzIGFub255bW91cycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAnVXB5dW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICdTZXQgT3BlcmF0b3InLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ1NldCBPcGVyYXRvciBQYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ1NldCBVUkwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAnRXguIG1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBvcGVyYXRvciBwYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAnRXguIGh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICdFeC4gIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG5cclxuICAvLyB3ZWJkYXZcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiBodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICdFeC4gbWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIHBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAnU2V0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdXaGV0aGVyIHRvIHVzZSBmdWxsLXNjcmVlbiB3YXRlcm1hcmsnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gZnVsbC1zY3JlZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ1NldCB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICdTZXQgd2F0ZXJtYXJrIGZvbnQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBmb250IGZpbGUgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICdQbGVhc2UgZW50ZXIgYSBudW1iZXIgYmV0d2VlbiAwLTEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1NldCB3YXRlcm1hcmsgZm9udCBjb2xvcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAnU2V0IHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ1BsZWFzZSBzZWxlY3Qgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAnU2V0IGltYWdlIHF1YWxpdHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAwLTEwMCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICdXaGV0aGVyIHRvIHBlcmZvcm0gZm9ybWF0IGNvbnZlcnNpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICdFbmFibGUgd2hlbiBmb3JtYXQgY29udmVyc2lvbiBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ1BsZWFzZSBzZWxlY3QgY29udmVyc2lvbiBmb3JtYXQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAnU2V0IHJlc2l6aW5nIHdpZHRoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZSBieSBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICdTZXQgcmVzaXppbmcgcGVyY2VudGFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICdXaGV0aGVyIHRvIHJvdGF0ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ0VuYWJsZSB3aGVuIGltYWdlIHJvdGF0aW9uIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ1NldCByb3RhdGlvbiBhbmdsZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlciwgY2FuIGJlIG5lZ2F0aXZlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ1doZXRoZXIgdG8gcmVtb3ZlIEVYSUYgaW5mb3JtYXRpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICdFbmFibGUgd2hlbiByZW1vdmluZyBFWElGIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkJyxcclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lIG9yIHZhbGlkIGluc3RhbGxhdGlvbiBwYXRoJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gdW5pbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICdQbHVnaW4gdXBkYXRlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnXHJcbn1cclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcydcclxuaW1wb3J0IENvbW1hbmRlciBmcm9tICcuLi9saWIvQ29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9saWIvTG9nZ2VyJ1xyXG5pbXBvcnQgTGlmZWN5Y2xlIGZyb20gJy4vTGlmZWN5Y2xlJ1xyXG5pbXBvcnQgTGlmZWN5Y2xlUGx1Z2lucywgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4uL2xpYi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5pbXBvcnQgdXBsb2FkZXJzIGZyb20gJy4uL3BsdWdpbnMvdXBsb2FkZXInXHJcbmltcG9ydCB0cmFuc2Zvcm1lcnMgZnJvbSAnLi4vcGx1Z2lucy90cmFuc2Zvcm1lcidcclxuaW1wb3J0IFBsdWdpbkxvYWRlciBmcm9tICcuLi9saWIvUGx1Z2luTG9hZGVyJ1xyXG5pbXBvcnQgeyBnZXQsIHNldCwgdW5zZXQgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IElIZWxwZXIsIElJbWdJbmZvLCBJQ29uZmlnLCBJUGljR28sIElTdHJpbmdLZXlNYXAsIElQbHVnaW5Mb2FkZXIsIElJMThuTWFuYWdlciwgSVBpY0dvUGx1Z2luLCBJUGljR29QbHVnaW5JbnRlcmZhY2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBnZXRDbGlwYm9hcmRJbWFnZSBmcm9tICcuLi91dGlscy9nZXRDbGlwYm9hcmRJbWFnZSdcclxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vbGliL1JlcXVlc3QnXHJcbmltcG9ydCBEQiBmcm9tICcuLi91dGlscy9kYidcclxuaW1wb3J0IFBsdWdpbkhhbmRsZXIgZnJvbSAnLi4vbGliL1BsdWdpbkhhbmRsZXInXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQsIElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcbmltcG9ydCB7IGlzQ29uZmlnS2V5SW5CbGFja0xpc3QsIGlzSW5wdXRDb25maWdWYWxpZCB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSTE4bk1hbmFnZXIgfSBmcm9tICcuLi9pMThuJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFBpY0dvIGV4dGVuZHMgRXZlbnRFbWl0dGVyIGltcGxlbWVudHMgSVBpY0dvIHtcclxuICBwcml2YXRlIF9jb25maWchOiBJQ29uZmlnXHJcbiAgcHJpdmF0ZSBsaWZlY3ljbGUhOiBMaWZlY3ljbGVcclxuICBwcml2YXRlIGRiITogREJcclxuICBwcml2YXRlIF9wbHVnaW5Mb2FkZXIhOiBQbHVnaW5Mb2FkZXJcclxuICBjb25maWdQYXRoOiBzdHJpbmdcclxuICBiYXNlRGlyITogc3RyaW5nXHJcbiAgaGVscGVyITogSUhlbHBlclxyXG4gIGxvZzogTG9nZ2VyXHJcbiAgY21kOiBDb21tYW5kZXJcclxuICBvdXRwdXQ6IElJbWdJbmZvW11cclxuICBpbnB1dDogYW55W11cclxuICByYXdJbnB1dDogYW55W11cclxuICBwbHVnaW5IYW5kbGVyOiBQbHVnaW5IYW5kbGVyXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIHYxLjUuMCtcclxuICAgKlxyXG4gICAqIHVzZSByZXF1ZXN0IGluc3RlYWRcclxuICAgKi9cclxuICBSZXF1ZXN0ITogUmVxdWVzdFxyXG4gIGkxOG4hOiBJSTE4bk1hbmFnZXJcclxuICBWRVJTSU9OOiBzdHJpbmcgPSBwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OXHJcbiAgR1VJX1ZFUlNJT04/OiBzdHJpbmdcclxuXHJcbiAgZ2V0IHBsdWdpbkxvYWRlciAoKTogSVBsdWdpbkxvYWRlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGx1Z2luTG9hZGVyXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvciAoY29uZmlnUGF0aDogc3RyaW5nID0gJycpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhcclxuICAgIHRoaXMub3V0cHV0ID0gW11cclxuICAgIHRoaXMuaW5wdXQgPSBbXVxyXG4gICAgdGhpcy5yYXdJbnB1dCA9IFtdXHJcbiAgICB0aGlzLmhlbHBlciA9IHtcclxuICAgICAgdHJhbnNmb3JtZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd0cmFuc2Zvcm1lcicpLFxyXG4gICAgICB1cGxvYWRlcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3VwbG9hZGVyJyksXHJcbiAgICAgIGJlZm9yZVRyYW5zZm9ybVBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zJyksXHJcbiAgICAgIGJlZm9yZVVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdiZWZvcmVVcGxvYWRQbHVnaW5zJyksXHJcbiAgICAgIGFmdGVyVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2FmdGVyVXBsb2FkUGx1Z2lucycpXHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRDb25maWdQYXRoKClcclxuICAgIHRoaXMubG9nID0gbmV3IExvZ2dlcih0aGlzKVxyXG4gICAgdGhpcy5jbWQgPSBuZXcgQ29tbWFuZGVyKHRoaXMpXHJcbiAgICB0aGlzLnBsdWdpbkhhbmRsZXIgPSBuZXcgUGx1Z2luSGFuZGxlcih0aGlzKVxyXG4gICAgdGhpcy5pbml0Q29uZmlnKClcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDb25maWdQYXRoICgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnUGF0aCA9IGhvbWVkaXIoKSArICcvLnBpY2xpc3QvY29uZmlnLmpzb24nXHJcbiAgICB9XHJcbiAgICBpZiAocGF0aC5leHRuYW1lKHRoaXMuY29uZmlnUGF0aCkudG9VcHBlckNhc2UoKSAhPT0gJy5KU09OJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSAnJ1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IHN1cHBvcnRzIEpTT04gZm9ybWF0LicpXHJcbiAgICB9XHJcbiAgICB0aGlzLmJhc2VEaXIgPSBwYXRoLmRpcm5hbWUodGhpcy5jb25maWdQYXRoKVxyXG4gICAgY29uc3QgZXhpc3QgPSBmcy5wYXRoRXhpc3RzU3luYyh0aGlzLmNvbmZpZ1BhdGgpXHJcbiAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgIGZzLmVuc3VyZUZpbGVTeW5jKGAke3RoaXMuY29uZmlnUGF0aH1gKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGIgPSBuZXcgREIodGhpcylcclxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaW5pdCAxOG4gYXQgZmlyc3RcclxuICAgICAgdGhpcy5pMThuID0gbmV3IEkxOG5NYW5hZ2VyKHRoaXMpXHJcbiAgICAgIHRoaXMuUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHRoaXMpXHJcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlciA9IG5ldyBQbHVnaW5Mb2FkZXIodGhpcylcclxuICAgICAgLy8gbG9hZCBzZWxmIHBsdWdpbnNcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJ3BpY2dvJylcclxuICAgICAgdXBsb2FkZXJzKHRoaXMpLnJlZ2lzdGVyKHRoaXMpXHJcbiAgICAgIHRyYW5zZm9ybWVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgnJylcclxuICAgICAgLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgdGhpcy5saWZlY3ljbGUgPSBuZXcgTGlmZWN5Y2xlKHRoaXMpXHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoZSlcclxuICAgICAgdGhyb3cgZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZWFzaWx5IG1hbm51YWxseSBsb2FkIGEgcGx1Z2luXHJcbiAgICogaWYgcHJvdmlkZSBwbHVnaW4gbmFtZSwgd2lsbCByZWdpc3RlciBwbHVnaW4gYnkgbmFtZVxyXG4gICAqIG9yIGp1c3QgaW5zdGFudGlhdGUgYSBwbHVnaW5cclxuICAgKi9cclxuICB1c2UgKHBsdWdpbjogSVBpY0dvUGx1Z2luLCBuYW1lPzogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHtcclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIHRoaXMucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKG5hbWUsIHBsdWdpbilcclxuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSFcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gcGx1Z2luKHRoaXMpXHJcbiAgICAgIHJldHVybiBwbHVnaW5JbnN0YW5jZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJDb21tYW5kcyAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoICE9PSAnJykge1xyXG4gICAgICB0aGlzLmNtZC5pbml0KClcclxuICAgICAgdGhpcy5jbWQubG9hZENvbW1hbmRzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZzxUPiAobmFtZT86IHN0cmluZyk6IFQge1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgdW5rbm93biBhcyBUXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZ2V0KHRoaXMuX2NvbmZpZywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnKVxyXG4gICAgdGhpcy5kYi5zYXZlQ29uZmlnKGNvbmZpZylcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXHJcbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHJlbW92ZWRgKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudW5zZXRDb25maWcoa2V5LCBwcm9wTmFtZSlcclxuICAgIHRoaXMuZGIudW5zZXQoa2V5LCBwcm9wTmFtZSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyAoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcclxuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcclxuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChuYW1lKSkge1xyXG4gICAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtuYW1lfSBjYW4ndCBiZSBtb2RpZmllZGApXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxyXG4gICAgICAgIGRlbGV0ZSBjb25maWdbbmFtZV1cclxuICAgICAgfVxyXG4gICAgICBzZXQodGhpcy5fY29uZmlnLCBuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICAgIGV2ZW50QnVzLmVtaXQoSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIHtcclxuICAgICAgICBjb25maWdOYW1lOiBuYW1lLFxyXG4gICAgICAgIHZhbHVlOiBjb25maWdbbmFtZV1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1bnNldENvbmZpZyAoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXHJcbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHVuc2V0YClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB1bnNldCh0aGlzLmdldENvbmZpZyhrZXkpLCBwcm9wTmFtZSlcclxuICB9XHJcblxyXG4gIGdldCByZXF1ZXN0ICgpOiBJUmVxdWVzdFsncmVxdWVzdCddIHtcclxuICAgIHJldHVybiB0aGlzLlJlcXVlc3QucmVxdWVzdC5iaW5kKHRoaXMuUmVxdWVzdClcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZCAoaW5wdXQ/OiBhbnlbXSk6IFByb21pc2U8SUltZ0luZm9bXSB8IEVycm9yPiB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmxvZy5lcnJvcignVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IHN1cHBvcnRzIEpTT04gZm9ybWF0LicpXHJcbiAgICAgIHJldHVybiBbXVxyXG4gICAgfVxyXG4gICAgLy8gdXBsb2FkIGZyb20gY2xpcGJvYXJkXHJcbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCB7IGltZ1BhdGgsIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyB9ID0gYXdhaXQgZ2V0Q2xpcGJvYXJkSW1hZ2UodGhpcylcclxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBub3QgZm91bmQgaW4gY2xpcGJvYXJkJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgLy8g5Yig6ZmkIHBpY2dvIOeUn+aIkOeahOWbvueJh+aWh+S7tu+8jOS+i+WmgiBgfi8ucGljZ28vMjAyMDA2MjEyMDU3MjAucG5nYFxyXG4gICAgICAgICAgICAgIGZzLnJlbW92ZShpbWdQYXRoKS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5vbmNlKCdmaW5pc2hlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICBmcy5yZW1vdmUoaW1nUGF0aCkuY2F0Y2goKGUpID0+IHsgdGhpcy5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0pXHJcbiAgICAgICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdXBsb2FkIGZyb20gcGF0aFxyXG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQpXHJcbiAgICAgIHJldHVybiBvdXRwdXRcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IEltZ0Zyb21QYXRoIGZyb20gJy4vcGF0aCdcclxuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXHJcblxyXG5jb25zdCBidWlsZEluVHJhbnNmb3JtZXJzOiBJUGljR29QbHVnaW4gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlZ2lzdGVyIChjdHg6IElQaWNHbykge1xyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXHJcbiJdLCJuYW1lcyI6WyJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwiY21kIiwicHJvZ3JhbSIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsaWFzIiwib3B0aW9uIiwiYWN0aW9uIiwicGx1Z2lucyIsInByb3h5IiwicmVnaXN0cnkiLCJvcHRpb25zIiwiaW5zdGFsbCIsImNhdGNoIiwiZSIsImxvZyIsImVycm9yIiwidW5pbnN0YWxsIiwidXBkYXRlIiwiY29uZmlnIiwiaXNVcmwiLCJ1cmwiLCJ0ZXN0IiwiaXNVcmxFbmNvZGUiLCJkZWNvZGVVUkkiLCJoYW5kbGVVcmxFbmNvZGUiLCJlbmNvZGVVUkkiLCJnZXRJbWFnZVNpemUiLCJmaWxlIiwid2lkdGgiLCJoZWlnaHQiLCJpbWFnZVNpemUiLCJyZWFsIiwiZ2V0RlNGaWxlIiwiYXN5bmMiLCJmaWxlUGF0aCIsImV4dG5hbWUiLCJwYXRoIiwiZmlsZU5hbWUiLCJiYXNlbmFtZSIsImJ1ZmZlciIsImZzIiwicmVhZEZpbGUiLCJzdWNjZXNzIiwicmVhc29uIiwiZ2V0VVJMRmlsZSIsInRpbWVvdXRJZCIsInJlcXVlc3RGbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzIiwicmVxdWVzdCIsIm1ldGhvZCIsInJlc29sdmVXaXRoRnVsbFJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwidGhlbiIsInJlc3AiLCJkYXRhIiwiY2xlYXJUaW1lb3V0IiwidXJsUGF0aCIsIlVSTCIsInBhdGhuYW1lIiwibWVzc2FnZSIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJnZXRQbHVnaW5OYW1lVHlwZSIsIm5hbWUiLCJzdGFydHNXaXRoIiwiaXNTaW1wbGVOYW1lIiwibmFtZU9yUGF0aCIsImlzQWJzb2x1dGUiLCJwbHVnaW5QYXRoIiwiam9pbiIsInByb2Nlc3MiLCJjd2QiLCJleGlzdHNTeW5jIiwiaW5jbHVkZXMiLCJoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUiLCJzY29wZSIsImdldFByb2Nlc3NQbHVnaW5OYW1lIiwibG9nZ2VyIiwiY29uc29sZSIsImhhbmRsZVVuaXhTdHlsZVBhdGgiLCJ3YXJuIiwiZ2V0Tm9ybWFsUGx1Z2luTmFtZSIsInJlbW92ZVBsdWdpblZlcnNpb24iLCJwYWNrYWdlSlNPTlBhdGgiLCJwb3NpeCIsInBrZyIsInJlYWRKU09OU3luYyIsInBhdGhTdHIiLCJzcGxpdCIsInNlcCIsInJlZyIsIm1hdGNoQXJyIiwibWF0Y2giLCJjb25maWdCbGFja0xpc3QiLCJpc0NvbmZpZ0tleUluQmxhY2tMaXN0Iiwia2V5Iiwic29tZSIsImJsYWNrSXRlbSIsImlzSW5wdXRDb25maWdWYWxpZCIsIkFycmF5IiwiaXNBcnJheSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJzYWZlUGFyc2UiLCJzdHIiLCJKU09OIiwicGFyc2UiLCJmb3JjZU51bWJlciIsIm51bSIsImlzTmFOIiwiTnVtYmVyIiwiaXNEZXYiLCJlbnYiLCJOT0RFX0VOViIsImRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGgiLCJfX2Rpcm5hbWUiLCJBZGRXYXRlcm1hcmsiLCJpbWciLCJ3YXRlcm1hcmtUeXBlIiwiZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIiwiaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIiwid2F0ZXJtYXJrRGVncmVlIiwidGV4dCIsIndhdGVybWFya0ZvbnRQYXRoIiwid2F0ZXJtYXJrU2NhbGVSYXRpbyIsIndhdGVybWFya0NvbG9yIiwid2F0ZXJtYXJrSW1hZ2VQYXRoIiwicG9zaXRpb24iLCJpbWFnZSIsInNoYXJwIiwiaW1nV2lkdGgiLCJtZXRhZGF0YSIsIndhdGVybWFyayIsInRvQnVmZmVyIiwiY29sb3IiLCJmb250RmFtaWx5IiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImZpbGwiLCJ0ZXh0U1ZHIiwiVGV4dFRvU1ZHIiwibG9hZFN5bmMiLCJnZXRTVkciLCJCdWZmZXIiLCJmcm9tIiwidGV4dDJTVkciLCJ3YXRlcm1hcmtXaWR0aCIsIndhdGVybWFya0hlaWdodCIsImdldFNpemUiLCJ3YXRlcm1hcmtSZXNpemVXaWR0aCIsIk1hdGgiLCJmbG9vciIsIndhdGVybWFya1Jlc2l6ZUhlaWdodCIsInJlc2l6ZSIsImZpdCIsInJvdGF0ZSIsImJhY2tncm91bmQiLCJyIiwiZyIsImIiLCJhbHBoYSIsImNyZWF0ZVdhdGVybWFyayIsImNvbXBvc2l0ZSIsImlucHV0IiwiZ3Jhdml0eSIsInRpbGUiLCJ2YWxpZFBhcmFtIiwicGFyYW1zIiwiZXZlcnkiLCJwYXJhbSIsImF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0IiwiaW1hZ2VFeHRMaXN0IiwiaW1hZ2VBZGRXYXRlck1hcmsiLCJ3YXRlcm1hcmtUZXh0Iiwid2F0ZXJtYXJrUG9zaXRpb24iLCJmb3JtYXRPcHRpb25zIiwicXVhbGl0eSIsImlzQ29udmVydCIsImNvbnZlcnRGb3JtYXQiLCJpc1JlU2l6ZSIsInJlU2l6ZUhlaWdodCIsInJlU2l6ZVdpZHRoIiwiaXNSZVNpemVCeVBlcmNlbnQiLCJyZVNpemVQZXJjZW50IiwiaXNSb3RhdGUiLCJyb3RhdGVEZWdyZWUiLCJpbWFnZVByb2Nlc3MiLCJyYXdGb3JtYXQiLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJyb3VuZCIsIm5ld0Zvcm1hdCIsInRvRm9ybWF0IiwiZm9ybWF0IiwiaW1hZ2VGb3JtYXRMaXN0IiwibmVlZEFkZFdhdGVybWFyayIsIndhdGVybWFya09wdGlvbnMiLCJmaWxlRXh0IiwiaXNBZGRXYXRlcm1hcmsiLCJuZWVkQ29tcHJlc3MiLCJjb21wcmVzc09wdGlvbnMiLCJyZW1vdmVFeGlmIiwidXBsb2FkIiwiYXJndW1lbnRzIiwiaW5wdXRMaXN0IiwibWFwIiwiaXRlbSIsImZpbHRlciIsImV4aXN0IiwidXNlckNvbmZpZyIsImdldENvbmZpZyIsInR5cGUiLCJpMThuIiwidHJhbnNsYXRlIiwicmVxdWlyZWQiLCJkZWZhdWx0IiwiY2hvaWNlcyIsImlzUmVtb3ZlRXhpZiIsImhhbmRsZUNvbmZpZyIsInByb21wdHMiLCJtb2R1bGUiLCJhbnN3ZXIiLCJpbnF1aXJlciIsInByb21wdCIsImNvbmZpZ05hbWUiLCJzYXZlQ29uZmlnIiwic2V0dGluZyIsImNvbXByZXNzIiwiYnVpbGRpbiIsImhlbHBlciIsImdldCIsImdldElkTGlzdCIsInBsdWdpbkxvYWRlciIsImdldFBsdWdpbiIsImdldEZ1bGxMaXN0IiwicGx1Z2luIiwiaW5mbyIsImFyZ3YiLCJ1c2UiLCJ1cGxvYWRlciIsInRyYW5zZm9ybWVyIiwicHVzaCIsInBpY2dvUGx1Z2lucyIsInNldENvbmZpZyIsImdlbmVyYXRlIiwib3B0cyIsImdldE9wdGlvbnMiLCJ0bXAiLCJzb3VyY2UiLCJhbnN3ZXJzIiwiX2ZpbGVzIiwiZ2xvYmJ5IiwiZG90IiwiZ2xvYiIsImZpbHRlcnMiLCJmb3JFYWNoIiwiZmlsZXMiLCJyZW5kZXIiLCJ3cml0ZUZpbGVUcmVlIiwiZGVzdCIsImNvbXBsZXRlIiwiY29tcGxldGVNZXNzYWdlIiwiZXhwIiwiZm4iLCJGdW5jdGlvbiIsInN0cmluZ2lmeSIsInRlbXBsYXRlUGF0aCIsIm9wdGlvbnNQYXRoIiwicmVxdWlyZSIsImZpbGVUcmVlIiwicmVhZEZpbGVTeW5jIiwiY29udGVudCIsImVqcyIsImlzQnVmZmVyIiwiZGlyIiwiZW5zdXJlRGlyU3luYyIsImRpcm5hbWUiLCJ3cml0ZUZpbGVTeW5jIiwicnVuIiwib2ZmbGluZSIsInRlbXBsYXRlIiwiaGFzU2xhc2giLCJkb3dubG9hZEFuZEdlbmVyYXRlIiwicm0iLCJzeW5jIiwiZG93bmxvYWQiLCJjbG9uZSIsImVyciIsImluaXQiLCJwcm9qZWN0IiwiaW5QbGFjZSIsImhvbWVkaXIiLCJvayIsIm9uIiwiY2hhbGsiLCJncmF5IiwibGFuZyIsImxpc3QiLCJnZXRMYW5ndWFnZUxpc3QiLCJzZXRMYW5ndWFnZSIsIkxpZmVjeWNsZVBsdWdpbnMiLCJjb25zdHJ1Y3RvciIsInRoaXMiLCJNYXAiLCJwbHVnaW5JZE1hcCIsInJlZ2lzdGVyIiwiaWQiLCJUeXBlRXJyb3IiLCJoYXMiLCJzZXQiLCJjdXJyZW50UGx1Z2luIiwidW5yZWdpc3RlciIsInBsdWdpbk5hbWUiLCJwbHVnaW5MaXN0IiwiZGVsZXRlIiwiZ2V0TmFtZSIsImdldExpc3QiLCJ2YWx1ZXMiLCJzZXRDdXJyZW50UGx1Z2luTmFtZSIsIkNvbW1hbmRlciIsIkNvbW1hbmQiLCJ2ZXJzaW9uIiwiZGVidWciLCJzaWxlbnQiLCJhcmdzIiwiZXhpdCIsImN1cnJlbnRQbHVnaW5OYW1lIiwibG9hZENvbW1hbmRzIiwiSUxvZ1R5cGUiLCJJQnVpbGRJbkV2ZW50IiwiSUJ1c0V2ZW50IiwiTG9nZ2VyIiwiaGFuZGxlTG9nIiwibXNnIiwibG9nSGVhZGVyIiwibGV2ZWwiLCJ0b1VwcGVyQ2FzZSIsImxvZ0xldmVsIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJ5ZWxsb3ciLCJyZWNyZWF0ZUxvZ0ZpbGUiLCJ1bnNoaWZ0IiwiaGFuZGxlV3JpdGVMb2ciLCJsb2dGaWxlU2l6ZSIsInN0YXRTeW5jIiwic2l6ZSIsImxvZ0ZpbGVTaXplTGltaXQiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJjaGVja0xvZ0xldmVsIiwiZGF5anMiLCJFcnJvciIsInV0aWwiLCJzdGFjayIsImFwcGVuZEZpbGVTeW5jIiwidW5kZWZpbmVkIiwiTGlmZWN5Y2xlIiwiRXZlbnRFbWl0dGVyIiwic3VwZXIiLCJ0ZW1wRmlsZVBhdGgiLCJlbXB0eURpclN5bmMiLCJ0dGZQYXRoIiwib3V0cHV0RGlyIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwiYXhpb3MiLCJ0dGZMaW5rIiwiY29uZmlnUGF0aCIsIm91dHB1dCIsInJhd0lucHV0IiwiUmVxdWVzdCIsIlZFUlNJT04iLCJHVUlfVkVSU0lPTiIsImJpbmQiLCJyZW1vdmVDb25maWciLCJ1bnNldENvbmZpZyIsImFkZExpc3RlbmVyIiwib25jZSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwibGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwiZW1pdCIsImxpc3RlbmVyQ291bnQiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiZXZlbnROYW1lcyIsImNyZWF0ZUNvbnRleHQiLCJjbG9uZURlZXAiLCJ3YXRlcm1hcmtNc2ciLCJjb21wcmVzc01zZyIsImFsbFNldHRsZWQiLCJpbmRleCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiZG93bmxvYWRUVEYiLCJuZXdFeHQiLCJ0ZW1wRmlsZSIsIkRhdGUiLCJnZXRUaW1lIiwiaGVpY0J1ZmZlciIsImhlaWNSZXN1bHQiLCJoZWljQ29udmVydCIsInRlbXBIZWljQ29udmVydEZpbGUiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsImJlZm9yZVVwbG9hZCIsImRvVXBsb2FkIiwiYWZ0ZXJVcGxvYWQiLCJGQUlMRUQiLCJVUExPQURfUFJPR1JFU1MiLCJCRUZPUkVfVFJBTlNGT1JNIiwiaGFuZGxlUGx1Z2lucyIsImJlZm9yZVRyYW5zZm9ybVBsdWdpbnMiLCJjdXJyZW50VHJhbnNmb3JtZXIiLCJCRUZPUkVfVVBMT0FEIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsIm91dHB1dEltZyIsIkFGVEVSX1VQTE9BRCIsImFmdGVyVXBsb2FkUGx1Z2lucyIsImlzRW5jb2RlT3V0cHV0VVJMIiwiaSIsImltZ1VybCIsImJhc2U2NEltYWdlIiwiRklOSVNIRUQiLCJsaWZlQ3ljbGVQbHVnaW5zIiwicGx1Z2luTmFtZXMiLCJsaWZlQ3ljbGVOYW1lIiwiYWxsIiwicG9zdE9wdGlvbnMiLCJhcGlUb2tlbiIsImJhY2t1cERvbWFpbiIsImhlYWRlcnMiLCJjb250ZW50VHlwZSIsIkF1dGhvcml6YXRpb24iLCJmb3JtRGF0YSIsInNtZmlsZSIsInZhbHVlIiwiZmlsZW5hbWUiLCJzc2wiLCJzbW1zQ29uZmlnIiwiaW1nTGlzdCIsInBvc3RDb25maWciLCJ0b2tlbiIsImJvZHkiLCJjb2RlIiwiaGFzaCIsImltYWdlcyIsIk5PVElGSUNBVElPTiIsInRpdGxlIiwicHJlZml4IiwiZ2VuZXJhdGVTaWduYXR1cmUiLCJzZWNyZXRJZCIsInNlY3JldEtleSIsImFwcElkIiwiYnVja2V0Iiwic2lnbmF0dXJlIiwic2lnblRpbWUiLCJ0b2RheSIsInNpZ25LZXkiLCJjcnlwdG8iLCJjcmVhdGVIbWFjIiwiZGlnZXN0IiwiaHR0cFN0cmluZyIsImFyZWEiLCJzdHJpbmdUb1NpZ24iLCJjcmVhdGVIYXNoIiwicmFuZG9tIiwiY3VycmVudCIsIm11bHRpU2lnbmF0dXJlIiwic2lnbkhleEtleSIsInRlbXBTdHJpbmciLCJjb25jYXQiLCJ0b1N0cmluZyIsImVuY29kZVVSSUNvbXBvbmVudCIsIkhvc3QiLCJtaW1lIiwibG9va3VwIiwib3AiLCJmaWxlY29udGVudCIsInRjWXVuT3B0aW9ucyIsImN1c3RvbVVybCIsInVzZVY0Iiwic3RhdHVzQ29kZSIsIm9wdGlvblVybCIsInNvdXJjZV91cmwiLCJyZXBvIiwianNvbiIsImJyYW5jaCIsImdpdGh1Yk9wdGlvbnMiLCJkb3dubG9hZF91cmwiLCJzaGEiLCJpbWdCYXNlNjQiLCJzZWxlY3RBcmVhIiwiZ2V0VG9rZW4iLCJxaW5pdU9wdGlvbnMiLCJhY2Nlc3NLZXkiLCJtYWMiLCJxaW5pdSIsImF1dGgiLCJNYWMiLCJycyIsIlB1dFBvbGljeSIsInVwbG9hZFRva2VuIiwiYmFzZVVybCIsInJlc3BvbnNlIiwiY2xpZW50SWQiLCJ1c2VybmFtZSIsImFjY2Vzc1Rva2VuIiwiZm9ybWF0QWNjZXNzVG9rZW4iLCJhbGJ1bSIsImF1dGhvcml6YXRpb24iLCJyZXF1ZXN0T3B0aW9ucyIsImluaXRQYWdlcyIsImFsYnVtSGFzaCIsImdldEFsYnVtSGFzaE9wdGlvbnMiLCJ0aW1lb3V0IiwiYWxidW1MaXN0IiwiaW1ndXJPcHRpb25zIiwibGluayIsImRlbGV0ZWhhc2giLCJkYXRlIiwidG9VVENTdHJpbmciLCJtaW1lVHlwZSIsInNpZ25TdHJpbmciLCJhY2Nlc3NLZXlTZWNyZXQiLCJhY2Nlc3NLZXlJZCIsImFsaVl1bk9wdGlvbnMiLCJvcGVyYXRvciIsInBhc3N3b3JkIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJ1cHl1bk9wdGlvbnMiLCJob3N0Iiwid2ViZGF2cGxpc3RPcHRpb25zIiwic3NsRW5hYmxlZCIsIndlYnBhdGgiLCJidWlsZEluVXBsb2FkZXJzIiwiYWxpWXVuVXBsb2FkZXIiLCJ0Y1l1blVwbG9hZGVyIiwiU01NU1VwbG9hZGVyIiwiZ2l0aHViVXBsb2FkZXIiLCJxaW5pdVVwbG9hZGVyIiwiaW1ndXJVcGxvYWRlciIsInVwWXVuVXBsb2FkZXIiLCJ3ZWJkYXZwbGlzdFVwbG9hZGVyIiwiZ2V0SW1nU2l6ZSIsInJlc3VsdHMiLCJpbWdTaXplIiwiUGx1Z2luTG9hZGVyIiwiU2V0IiwicGFja2FnZVBhdGgiLCJyZXBvc2l0b3J5IiwibGljZW5zZSIsInJlc29sdmVQbHVnaW4iLCJiYXNlZGlyIiwibG9hZCIsInBsdWdpbkRpciIsImRlcHMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBzIiwiZGV2RGVwZW5kZW5jaWVzIiwibW9kdWxlcyIsInJlZ2lzdGVyUGx1Z2luIiwiZnVsbExpc3QiLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJwbHVnaW5NYXAiLCJ1bnJlZ2lzdGVyUGx1Z2luIiwiaGFzUGx1Z2luIiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwic3Bhd24iLCJzdGRvdXQiLCJ0cmltIiwiaW1nUGF0aCIsInNob3VsZEtlZXBBZnRlclVwbG9hZGluZyIsImV2ZW50QnVzIiwiaHR0cHNBZ2VudCIsImh0dHBzIiwiQWdlbnQiLCJtYXhWZXJzaW9uIiwibWluVmVyc2lvbiIsImFwcGVuZEZvcm1EYXRhIiwiZm9ybSIsImFwcGVuZCIsInJlc3BvbnNlSW50ZXJjZXB0b3IiLCJzdGF0dXMiLCJyZXNwb25zZUVycm9ySGFuZGxlciIsImVycm9yT2JqIiwiQ09ORklHX0NIQU5HRSIsImhhbmRsZVByb3h5IiwicHJveHlPcHRpb25zIiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwcm90b2NvbCIsIm1heEJvZHlMZW5ndGgiLCJJbmZpbml0eSIsIm1heENvbnRlbnRMZW5ndGgiLCJ0dW5uZWwiLCJodHRwc092ZXJIdHRwIiwiaW5zdGFuY2UiLCJjcmVhdGUiLCJpbnRlcmNlcHRvcnMiLCJvcHQiLCJfX2lzT2xkT3B0aW9ucyIsIkZvcm1EYXRhIiwiYXNzaWduIiwiZ2V0SGVhZGVycyIsInFzIiwicmVxdWVzdEludGVyY2VwdG9yIiwib2JqIiwiQ29udGVudFR5cGUiLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwicmVhZCIsImZsdXNoIiwidW5zZXQiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwiZnVsbE5hbWUiLCJwa2dOYW1lTGlzdCIsImV4ZWNDb21tYW5kIiwid2hlcmUiLCJucG0iLCJwaXBlIiwic3RkZXJyIiwibGFuZ3VhZ2VMaXN0IiwiVVBMT0FEX0ZBSUxFRCIsIkNIRUNLX1NFVFRJTkdTIiwiQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksiLCJVUExPQURfRkFJTEVEX1JFQVNPTiIsIlNFUlZFUl9FUlJPUiIsIkFVVEhfRkFJTEVEIiwiUElDQkVEX1NNTVMiLCJQSUNCRURfU01NU19UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfQUxJQ0xPVUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUIiwiUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9BTElDTE9VRF9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfQUxCVU0iLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIkJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEIiwiZW4iLCJJMThuTWFuYWdlciIsIm9iamVjdEFkYXB0ZXIiLCJPYmplY3RBZGFwdGVyIiwibGFuZ3VhZ2UiLCJJMThuIiwiYWRhcHRlciIsImRlZmF1bHRMYW5ndWFnZSIsImxvYWRPdXR0ZXJJMThuIiwiaTE4bkZvbGRlciIsImdldE91dHRlckkxOG5Gb2xkZXIiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJpc0ZpbGUiLCJlbmRzV2l0aCIsImkxOG5GaWxlUGF0aCIsImkxOG5GaWxlIiwiaTE4bkZpbGVPYmoiLCJ5YW1sIiwicGF0aEV4aXN0c1N5bmMiLCJhZGRMb2NhbGUiLCJsb2NhbGVzIiwib3JpZ2luTG9jYWxlcyIsImdldExvY2FsZSIsIm5ld0xvY2FsZXMiLCJtZXJnZSIsInNldExvY2FsZSIsImFkZExhbmd1YWdlIiwiUGljR28iLCJpbml0Q29uZmlnUGF0aCIsImluaXRDb25maWciLCJfcGx1Z2luTG9hZGVyIiwiZW5zdXJlRmlsZVN5bmMiLCJfY29uZmlnIiwidXBsb2FkZXJzIiwiSW1nRnJvbVBhdGgiLCJJbWdGcm9tQmFzZTY0IiwibGlmZWN5Y2xlIiwicmVnaXN0ZXJDb21tYW5kcyIsInByb3BOYW1lIiwic3RhcnQiLCJyZW1vdmUiXSwibWFwcGluZ3MiOiJta0NBRUEsTUFBTUEsR0FBeUIsQ0FDN0JDLE9BQVNDLElBRVAsTUFBTUMsRUFBTUQsRUFBSUMsSUFDaEJBLEVBQUlDLFFBQ0RDLFFBQVEsd0JBQ1JDLFlBQVksd0JBQ1pDLE1BQU0sT0FDTkMsT0FBTyxzQkFBdUIsNEJBQzlCQSxPQUFPLDRCQUE2QixvQ0FDcENDLFFBQU8sQ0FBQ0MsRUFBbUJOLEtBQzFCLE1BQU1PLE1BQUVBLEVBQUtDLFNBQUVBLEdBQWFSLEVBQ3RCUyxFQUFVLENBQ2RGLE1BQUFBLEVBQ0FDLFNBQUFBLEdBRUZWLEVBQUlGLGNBQWNjLFFBQVFKLEVBQVNHLEdBQVNFLE9BQU9DLElBQVFkLEVBQUllLElBQUlDLE1BQU1GLFNBRTdFYixFQUFJQyxRQUNEQyxRQUFRLDBCQUNSRSxNQUFNLE1BQ05ELFlBQVksMEJBQ1pHLFFBQVFDLElBQ1BSLEVBQUlGLGNBQWNtQixVQUFVVCxHQUFTSyxPQUFPQyxJQUFRZCxFQUFJZSxJQUFJQyxNQUFNRixTQUV0RWIsRUFBSUMsUUFDREMsUUFBUSx1QkFDUkMsWUFBWSx1QkFDWkUsT0FBTyxzQkFBdUIsNEJBQzlCQSxPQUFPLDRCQUE2QixvQ0FDcENDLFFBQU8sQ0FBQ0MsRUFBbUJOLEtBQzFCLE1BQU1PLE1BQUVBLEVBQUtDLFNBQUVBLEdBQWFSLEVBQ3RCUyxFQUFVLENBQ2RGLE1BQUFBLEVBQ0FDLFNBQUFBLEdBRUZWLEVBQUlGLGNBQWNvQixPQUFPVixFQUFTRyxHQUFTRSxPQUFPQyxJQUFlZCxFQUFJZSxJQUFJQyxNQUFNRixXQ3BDakZLLEdBQWtCLENBQ3RCcEIsT0FBU0MsSUFDS0EsRUFBSUMsSUFDWkMsUUFDREksT0FBTyxzQkFBdUIscUJDVXhCYyxHQUFTQyxHQUF5Qixl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