piclist 1.7.14 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),r=require("events"),n=require("os"),a=require("commander"),i=require("inquirer"),s=require("image-size"),o=require("url"),E=require("text-to-svg"),l=require("sharp"),I=require("crypto"),S=require("uuid"),_=require("chalk"),u=require("minimatch"),c=require("globby"),P=require("ejs"),d=require("download-git-repo"),p=require("rimraf"),C=require("dayjs"),g=require("util"),A=require("axios"),T=require("lodash"),f=require("heic-convert"),D=require("mime-types"),m=require("qiniu"),L=require("webdav"),h=require("node-ssh-no-cpu-features"),B=require("https"),U=require("@aws-sdk/client-s3"),N=require("@aws-sdk/s3-request-presigner"),R=require("@smithy/node-http-handler"),O=require("file-type"),M=require("mime"),y=require("hpagent"),x=require("resolve"),G=require("child_process"),b=require("is-wsl"),w=require("form-data"),W=require("tunnel"),F=require("@picgo/store"),K=require("cross-spawn"),H=require("js-yaml"),v=require("@picgo/i18n");function $(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var k=$(e),Y=$(t),q=$(n),j=$(i),V=$(o),z=$(E),X=$(l),Q=$(I),Z=$(_),J=$(u),ee=$(c),te=$(P),re=$(d),ne=$(p),ae=$(C),ie=$(g),se=$(A),oe=$(f),Ee=$(D),le=$(m),Ie=$(B),Se=$(O),_e=$(M),ue=$(x),ce=$(b),Pe=$(w),de=$(W),pe=$(K),Ce=$(H);const ge={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing plugins").option("-r, --registry <registry>","Choose a registry for installing plugins").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}))}},Ae={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function Te(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function fe(e,t,r){const n={"{Y}":()=>(new Date).getFullYear().toString(),"{y}":()=>(new Date).getFullYear().toString().slice(2),"{m}":()=>1===((new Date).getMonth()+1).toString().length?`0${(new Date).getMonth()+1}`:((new Date).getMonth()+1).toString(),"{d}":()=>1===(new Date).getDate().toString().length?`0${(new Date).getDate()}`:(new Date).getDate().toString(),"{h}":()=>1===(new Date).getHours().toString().length?`0${(new Date).getHours()}`:(new Date).getHours().toString(),"{i}":()=>1===(new Date).getMinutes().toString().length?`0${(new Date).getMinutes()}`:(new Date).getMinutes().toString(),"{s}":()=>1===(new Date).getSeconds().toString().length?`0${(new Date).getSeconds()}`:(new Date).getSeconds().toString(),"{md5}":()=>Q.default.createHash("md5").update(Y.default.basename(e,Y.default.extname(e))).digest("hex"),"{md5-16}":()=>Q.default.createHash("md5").update(Y.default.basename(e,Y.default.extname(e))).digest("hex").slice(0,16),"{str-10}":()=>Te(10),"{str-20}":()=>Te(20),"{filename}":()=>r?Y.default.basename(r,Y.default.extname(r)):Y.default.basename(e,Y.default.extname(e)),"{uuid}":()=>S.v4().replace(/-/g,""),"{timestamp}":()=>Math.floor(Date.now()/1e3).toString()};if(void 0===t||!Object.keys(n).some((e=>t.includes(e)))&&!t.includes("localFolder"))return e;const a=Y.default.extname(e);let i=Object.keys(n).reduce(((e,t)=>e.replace(new RegExp(t,"g"),n[t]())),t)+a;return i=i.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return Y.default.dirname(e).split(Y.default.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),i}const De=e=>/^https?:\/\//.test(e),me=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},Le=e=>(me(e)||(e=encodeURI(e)),e),he=e=>{try{const{width:t=0,height:r=0,type:n}=s.imageSize(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},Be=async e=>{try{return{extname:Y.default.extname(e),fileName:Y.default.basename(e),buffer:await k.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},Ue=async(e,t)=>{let r;e=Le(e);const n=new Promise(((n,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const i=new o.URL(e).pathname;let s="";try{s=new o.URL(e).searchParams.get("wx_fmt")||Y.default.extname(i)||""}catch(e){s=Y.default.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:Y.default.basename(i),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,a])},Ne=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Re(e)?"simple":"unknown",Re=e=>{if(Y.default.isAbsolute(e))return!1;const t=Y.default.join(process.cwd(),e);return!k.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Oe=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,Me=(e,t=console)=>{switch(Ne(e)){case"normal":case"scope":return e;case"simple":return Oe(e);default:{let r=e;return Y.default.isAbsolute(e)&&k.default.existsSync(e)?xe(r):(r=Y.default.join(process.cwd(),e),k.default.existsSync(r)?xe(r):(t.warn(`Can't find plugin ${e}`),""))}}},ye=(e,t=console)=>{var r;switch(Ne(e)){case"normal":return Ge(e);case"scope":return Ge(e,!0);case"simple":return Ge(Oe(e));default:{if(!k.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=Y.default.posix.join(e,"package.json");if(k.default.existsSync(n)){const e=k.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}`),""}}},xe=e=>e.split(Y.default.sep).join("/"),Ge=(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},be=[],we=e=>be.some((t=>e.startsWith(t))),We=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function Fe(e){try{return JSON.parse(e)}catch(t){return e}}const Ke=(e=0)=>isNaN(Number(e))?0:Number(e),He=()=>"development"===process.env.NODE_ENV;const ve=Y.default.join(__dirname,"assets","piclist.png");async function $e(e,t,r,n,a,i,s,o,E,l,I){o=!o||o<0||o>1?.15:o;const S=X.default(e,{animated:!0}),{width:_=200}=await S.metadata(),u=await async function(e,t,r,n,a,i,s,o=200,E=0){let l;"image"===e?(s=s||ve,l=await X.default(s).toBuffer()):l=await async function(e,t,r,n){t=t||"测试",n=n||e;const a={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},i=z.default.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:I,height:S}=await async function(e){const{width:t,height:r}=await X.default(e).metadata();return{width:t||200,height:r||200}}(l),_=Math.floor(o*Ke(a)),u=Math.floor(_*S/I);return await X.default(l).resize(_,u,{fit:"inside"}).rotate(E,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,o,E,l,_,a);return await S.composite([{input:u,gravity:I||"southeast",tile:n}]).toBuffer()}const ke=(...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"],qe=e=>Ye.includes(e),je=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function Ve(e,t,r,n){try{let n=X.default(e,{animated:!0});return ke(t.watermarkText)&&(n=X.default(await $e(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Ke(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Ke(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0})),await n.toBuffer()}catch(t){return n.error(`Image add watermark error: ${t}`),e}}function ze(e){const t="string"==typeof e.formatConvertObj?Fe(e.formatConvertObj):e.formatConvertObj;return{quality:Ke(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Ke(e.reSizeHeight),reSizeWidth:Ke(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Ke(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Ke(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function Xe(e,t,r,n){t=ze(t);try{if(r=r.toLowerCase().replace(".",""),!je.includes(r))return e;let n=X.default(e,{animated:!0}),a=100;if(ke(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(ke(t.reSizePercent)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));e&&r&&(n=n.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)n=n.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const a=t.reSizeHeight/r;n=n.resize(Math.round(e*a),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const a=t.reSizeWidth/e;n=n.resize(t.reSizeWidth,Math.round(r*a),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(n=n.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(n=n.flip()),t.isFlop&&(n=n.flop()),t.isConvert){const e=Qe(t,r);e!==r&&(n=n.toFormat(e,{quality:a,mozjpeg:!0}))}else n=r&&qe(r)?n.toFormat(r,{quality:a,mozjpeg:!0}):n.toFormat("jpg",{quality:a,mozjpeg:!0});return await n.toBuffer()}catch(t){return n.error(`Image process error: ${t}`),e}}function Qe(e,t){e=ze(e||{}),t=t.toLowerCase().replace(".","");let r=(null==e?void 0:e.convertFormat)||"jpg";if((null==e?void 0:e.formatConvertObj)&&Object.keys(e.formatConvertObj).length>0){const n=e.formatConvertObj;Object.keys(n).includes(t)&&(r=n[t],qe(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const Ze=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],Je=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&Ze.includes(t)),et=(e,t)=>{const r=t.toLowerCase().replace(".","");if(!Ze.includes(r)||!e)return!1;const{quality:n,isReSizeByPercent:a,reSizePercent:i,isReSize:s,reSizeHeight:o,reSizeWidth:E,isRotate:l,rotateDegree:I,isConvert:S,convertFormat:_,isFlip:u,isFlop:c}=ze(e);if(ke(n)&&n<100)return!0;if(a&&ke(i))return!0;if(s&&("number"==typeof o&&o>0||"number"==typeof E&&E>0))return!0;if(l&&I)return!0;if(u||c)return!0;if(S){return t!==(_||"jpg")}return!1},tt=async(e,t)=>(t=t.toLowerCase().replace(".",""),Ze.includes(t)&&"svg"!==t?await X.default(e,{animated:!0}).toBuffer():e);var rt=Object.freeze({__proto__:null,randomStringGenerator:Te,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${Te(5)}${Y.default.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${Te(t)}${Y.default.extname(e)}`},renameFileNameWithCustomString:fe,isUrl:De,isUrlEncode:me,handleUrlEncode:Le,getImageSize:he,getFSFile:Be,getURLFile:Ue,getPluginNameType:Ne,isSimpleName:Re,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Oe,getProcessPluginName:Me,getNormalPluginName:ye,handleUnixStylePath:xe,removePluginVersion:Ge,configBlackList:be,isConfigKeyInBlackList:we,isInputConfigValid:We,safeParse:Fe,forceNumber:Ke,isDev:He,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:$e,imageAddWaterMark:Ve,imageProcess:Xe,getConvertedFormat:Qe,needAddWatermark:Je,needCompress:et,removeExif:tt});const nt={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>De(e)?e:Y.default.resolve(e))).filter((t=>{const r=k.default.existsSync(t)||De(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var at=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},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 prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var it=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},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 prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var st=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get prefix(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const ot=async(e,t,r,n)=>{const a=await e.cmd.inquirer.prompt(t),i="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[i]:a}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},Et={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,a;try{switch(t){case"buildin":if("compress"===r)await ot(e,at(e),t,r);else if("watermark"===r)await ot(e,it(e),t,r);else if("rename"===r)await ot(e,st(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await ot(e,at(e),t,n.buildin):"watermark"===n.buildin?await ot(e,it(e),t,n.buildin):"rename"===n.buildin&&await ot(e,st(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await ot(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),a=e.helper[t].get(n[t]);(null==a?void 0:a.config)&&await ot(e,a.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await ot(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(a=e.pluginLoader.getPlugin(r.plugin))||void 0===a?void 0:a.config)&&await ot(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},lt={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const a={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!a[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(a[r])}else n=Object.keys(a).map((e=>a[e]));const i=await t.inquirer.prompt(n);if(i.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{i.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":i.uploader||e.getConfig("picBed.current"),"picBed.uploader":i.uploader||e.getConfig("picBed.current"),"picBed.transformer":i.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},It={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},St=async(e,t)=>{try{const r=ut(t.tmp),n=Y.default.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await ee.default(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{J.default(t,e,{dot:!0})&&(n=t)})),!n||_t(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=ct(i,n,a);Pt(t.dest,s),"function"==typeof r.complete&&r.complete({answers:a,options:t,files:i,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},_t=(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}},ut=e=>{const t=Y.default.join(e,"index.js");if(k.default.existsSync(t)){return require(t)}return{}},ct=(e,t,r)=>{const n={};return e.forEach((e=>{const a=k.default.readFileSync(Y.default.join(t,e),"utf8"),i=te.default.render(a,r);(Buffer.isBuffer(i)||/[^\s]/.test(i))&&(n[e]=i)})),n},Pt=(e,t)=>{Object.keys(t).forEach((r=>{const n=Y.default.join(e,r);k.default.ensureDirSync(Y.default.dirname(n)),k.default.writeFileSync(n,t[r])}))},dt=(e,t)=>{t.offline?k.default.existsSync(t.template)?St(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,pt(e,t))},pt=(e,t)=>{k.default.existsSync(t.tmp)&&ne.default.sync(t.tmp),e.log.info("Template files are downloading..."),re.default(t.template,t.tmp,{clone:t.clone},(r=>{r?e.log.error(r):(e.log.success("Template files are downloaded!"),St(e,t).catch((t=>{e.log.error(t)})))}))},Ct={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,r,a)=>{(async()=>{try{const i=t.includes("/"),s=!r||"."===r,o=Y.default.resolve(r||"."),E=a.clone||!1,l=a.offline||!1,I=Y.default.join(n.homedir(),".piclist/templates",t.replace(/[/:]/g,"-"));a.offline&&(t=I);const S={template:t,project:r,hasSlash:i,inPlace:s,dest:o,clone:E,tmp:I,offline:l};s||k.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&&dt(e,S)})):dt(e,S)}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(Z.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(Z.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},gt={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change language, zh-CN, zh-TW, en").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const n=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}];t=(await e.cmd.inquirer.prompt(n)).i18n}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};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 Tt=(e=null)=>{At.currentPlugin=e};class ft{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new a.Command,this.inquirer=j.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.7.14","-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",ge),e.cmd.register("config",Ae),e.cmd.register("setting",Et),e.cmd.register("upload",nt),e.cmd.register("use",lt),e.cmd.register("proxy",It),e.cmd.register("init",Ct),e.cmd.register("i18n",gt)}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 Dt,mt,Lt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(Dt||(Dt={})),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"}(mt||(mt={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(Lt||(Lt={}));class ht{constructor(e){this.level={[Dt.success]:"green",[Dt.info]:"blue",[Dt.warn]:"yellow",[Dt.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=Z.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||Y.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(Z.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(k.default.existsSync(e)){const t=k.default.statSync(e).size,r=1024*Ke(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){k.default.existsSync(e)&&(k.default.unlinkSync(e),k.default.createFileSync(e))}handleWriteLog(e,t,...r){try{let n=`${ae.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${ie.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",k.default.appendFileSync(e,n)}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(Dt.success,...e)}info(...e){this.handleLog(Dt.info,...e)}error(...e){this.handleLog(Dt.error,...e)}warn(...e){this.handleLog(Dt.warn,...e)}debug(...e){He()&&this.handleLog(Dt.info,...e)}}class Bt extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=Y.default.join(e.baseDir,"piclistTemp"),r=Y.default.join(e.baseDir,"imgTemp");k.default.ensureDirSync(r),k.default.emptyDirSync(t),this.ttfPath=Y.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=Y.default.dirname(this.ttfPath);if(k.default.existsSync(e)||k.default.mkdirSync(e,{recursive:!0}),k.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await se.default.get(this.ttfLink,{responseType:"arraybuffer"});return k.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");t.input=e,t.rawInputPath=[],t.rawInput=T.cloneDeep(e),t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("picBed.uploader")||t.getConfig("picBed.current")||"smms";!t.helper.uploader.get(n)&&r?r.picBed="smms":r&&(r.picBed=n);const a=t.getConfig("buildIn.watermark");if(r||a){const e=Y.default.join(t.baseDir,"piclistTemp");k.default.existsSync(e)||k.default.mkdirSync(e);const n="Add watermark to image",i="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var E,l,I,S,_,u;let c;if(De(s)){if(t.rawInputPath[o]=s,c=await Ue(s,t),!c.success||!c.buffer)throw new Error(c.reason);{let P,d=!1;if(Je(a,null!==(E=c.extname)&&void 0!==E?E:"")){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),d=!0)}d||(t.log.info(n),P=await Ve(c.buffer,a,this.ttfPath,t.log))}if(et(r,null!==(l=c.extname)&&void 0!==l?l:"")&&(t.log.info(i),P=await Xe(null!=P?P:c.buffer,r,null!==(I=c.extname)&&void 0!==I?I:"",t.log)),!P&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),P=await tt(c.buffer,null!==(S=c.extname)&&void 0!==S?S:"")),P){let n;n=(null==r?void 0:r.isConvert)?Qe(r,null!==(_=c.extname)&&void 0!==_?_:""):null!==(u=c.extname)&&void 0!==u?u:"",n=n.startsWith(".")?n:`.${n}`;const a=Y.default.join(e,`${c.fileName?`${Y.default.basename(c.fileName,Y.default.extname(c.fileName))}${n}`:(new Date).getTime()}${n}`);t.rawInputPath[o]=Y.default.join(Y.default.dirname(s),Y.default.basename(a)),k.default.writeFileSync(a,P),t.input[o]=a}}}else{let E;t.rawInputPath[o]=s;let l=!1;if(Je(a,Y.default.extname(s))){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),l=!0)}l||(t.log.info(n),E=await Ve(k.default.readFileSync(s),a,this.ttfPath,t.log))}if(et(r,Y.default.extname(s)))if(t.log.info(i),".heic"===Y.default.extname(s)||".heif"===Y.default.extname(s)){const n=k.default.readFileSync(s),a=await oe.default({buffer:n,format:"JPEG",quality:1}),i=Y.default.join(e,`${Y.default.basename(s,Y.default.extname(s))}.jpg`);k.default.writeFileSync(i,Buffer.from(a)),E=await Xe(k.default.readFileSync(i),r,".jpg",t.log)}else E=await Xe(null!=E?E:k.default.readFileSync(s),r,Y.default.extname(s),t.log);if(!E&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),E=await tt(k.default.readFileSync(s),Y.default.extname(s))),E){let n;n=(null==r?void 0:r.isConvert)?Qe(r,Y.default.extname(s)):Y.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const a=Y.default.join(e,`${Y.default.basename(s,Y.default.extname(s))}${n}`);t.rawInputPath[o]=Y.default.join(Y.default.dirname(s),`${Y.default.basename(s,Y.default.extname(s))}${n}`),k.default.writeFileSync(a,E),t.input[o]=a}}})))}else for(const e of t.input)t.rawInputPath.push(e);await this.beforeTransform(t),await this.doTransform(t);const i=t.getConfig("buildIn.rename")||{};if(i.enable){const e=i.format||"{filename}";t.output=t.output.map(((r,n)=>{let a=r.fileName;return e&&(a=fe(t.rawInputPath[n],e),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),r.fileName=a,r}))}return await this.beforeUpload(t),await this.doUpload(t),t.input=t.rawInput,await this.afterUpload(t),t}catch(e){if(t.log.warn(mt.FAILED),t.emit(mt.UPLOAD_PROGRESS,-1),t.emit(mt.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(mt.UPLOAD_PROGRESS,0),e.emit(mt.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(mt.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(mt.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(mt.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||(e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`),t="smms",n="smms",r=e.helper.uploader.get("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(mt.AFTER_UPLOAD,e),e.emit(mt.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let a=0;a<r;a++)void 0!==e.output[a].imgUrl&&(t+=n?Le(e.output[a].imgUrl):e.output[a].imgUrl,a!==r-1&&(t+="\n")),delete e.output[a].base64Image,delete e.output[a].buffer;return e.emit(mt.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),a=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${a}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${a}: ${n[r]} error`),e}}))),t}}const Ut=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),Nt=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Ut(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(a),r=JSON.parse(t);if("success"===r.code)delete n.base64Image,delete n.buffer,n.imgUrl=r.data.url,n.hash=r.data.hash;else{if("image_repeated"!==r.code||"string"!=typeof r.images)throw e.emit(mt.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},Rt=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},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 Ot=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const a=Q.default.createHmac("sha1",n).update(o).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,E=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,l=`sha1\n${o}\n${Q.default.createHash("sha1").update(E).digest("hex")}\n`;s=Q.default.createHmac("sha1",a).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,E=Q.default.createHmac("sha1",n).update(o).digest(),l=Buffer.concat([E,Buffer.from(o)]);s=Buffer.from(l).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:o}},Mt=(e,t,r,n,a)=>{const i=e.area,s=e.path;if(e.version&&"v4"!==e.version){const i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${i}/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${i}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:Ee.default.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${a};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${i}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${i}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${a};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},yt=async e=>{var t,r,n,a;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const s=e.output,o=i.customUrl,E=null!==(t=i.path)&&void 0!==t?t:"",l=!i.version||"v4"===i.version;for(const t of s)if(t.fileName&&t.buffer){const s=Ot(i,t.fileName);if(!s)return!1;let I=t.buffer;!I&&t.base64Image&&(I=Buffer.from(t.base64Image,"base64"));const S=Mt(i,t.fileName,s,I,e.GUI_VERSION||e.VERSION),_=await e.request(S).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let u;if(u=l&&"string"==typeof _?JSON.parse(_):_,400===u.statusCode)throw(null===(r=null==u?void 0:u.body)||void 0===r?void 0:r.err)?u.body.err:new Error((null===(n=null==u?void 0:u.body)||void 0===n?void 0:n.msg)||(null===(a=null==u?void 0:u.body)||void 0===a?void 0:a.message));const c=i.options||"",P=void 0!==i.slim&&!!i.slim;if(l&&"SUCCESS"===u.message)delete t.base64Image,delete t.buffer,t.imgUrl=o?`${o}/${E}${t.fileName}`:`${u.data.source_url}${c}`;else{if(l||!u||200!==u.statusCode)throw new Error(_.body.msg);if(delete t.base64Image,delete t.buffer,o)t.imgUrl=`${o}/${encodeURIComponent(E)}${encodeURIComponent(t.fileName)}${c}`.replace(/%2F/g,"/");else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;t.imgUrl=`https://${i.bucket}.${e}/${encodeURIComponent(E)}${encodeURIComponent(t.fileName)}${c}`.replace(/%2F/g,"/")}}P&&(t.imgUrl+=c?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(mt.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}},xt=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_VERSION")},alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};function Gt(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${encodeURIComponent(t)}${encodeURIComponent(r)}${n}`.replace(/%2F/g,"/")}const bt=(e,t,r)=>{const{token:n,repo:a}=t,i=Ee.default.lookup(e)||"application/octet-stream";return{method:"PUT",url:Gt(a,t.path||"",e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":i},body:r,json:!0}},wt=(e,t)=>{const{token:r,repo:n,branch:a}=t;return{method:"GET",url:Gt(n,t.path||"",e,`?ref=${a}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},Wt=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){const r=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:r,path:n+encodeURI(a.fileName)},s=bt(a.fileName,t,i);try{const r=await e.request(s);if(!r)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=t.customUrl?`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):r.content.download_url,a.hash=r.content.sha}catch(r){if(422!==r.statusCode)throw r;{delete a.base64Image,delete a.buffer;const r=await e.request(wt(a.fileName,t));if(!Object.keys(r).length)throw new Error("Get Contents error, please try again");a.hash=r.sha,a.imgUrl=t.customUrl?`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):r.download_url}}}return e}catch(t){throw e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Ft=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},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 Kt(e,t,r,n){const a=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),i=e.path||"";return{method:"POST",url:`http://upload${a}.qiniup.com/putb64/-1/key/${Buffer.from(i+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":Ee.default.lookup(t)||"application/octet-stream"},body:n}}function Ht(e){const t=e.accessKey,r=e.secretKey,n=new le.default.auth.digest.Mac(t,r),a={scope:e.bucket};return new le.default.rs.PutPolicy(a).uploadToken(n)}const vt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=Kt(t,n.fileName,Ht(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(mt.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(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},$t=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_BUCKET")},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 kt=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let E;if(i&&s)E=s;else{if(!a)throw new Error("clientId or accessToken is required");E=`Client-ID ${a}`}const l={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:E,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(i&&s&&o){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:E},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 l=r.body.data;for(const e of l)if(e.title===o){a=e.id;break}n++}while(r.body.data.length>0);a&&l.formData&&(l.formData.album=a)}return t.proxy&&(l.proxy=t.proxy),l},Yt=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=await kt(e,r,n.fileName,t),i=await e.request(a),s="string"==typeof i?JSON.parse(i):i;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(mt.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}},qt=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 jt=()=>(new Date).toUTCString(),Vt=(e,t)=>{const r=jt(),n=`PUT\n\n${Ee.default.lookup(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=Q.default.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},zt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURIComponent(e.path)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:jt(),"Content-Type":Ee.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),Xt=async e=>{var t;const r=e.getConfig("picBed.aliyun");if(!r)throw new Error("Can't find aliYun OSS config");r.path=r.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/","/"===r.path&&(r.path="");try{const n=e.output,a=r.customUrl,i=null!==(t=r.path)&&void 0!==t?t:"";for(const t of n)if(t.fileName&&t.buffer){const n=Vt(r,t.fileName);let s=t.buffer;!s&&t.base64Image&&(s=Buffer.from(t.base64Image,"base64"));const o=zt(r,t.fileName,n,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete t.base64Image,delete t.buffer;const e=r.options||"";t.imgUrl=a?`${a}/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/"):`https://${r.bucket}.${r.area}.aliyuncs.com/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/")}}return e}catch(t){throw e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Qt=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},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 Zt=(e,t)=>{const r=e.path||"",n=e.operator,a=er(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${encodeURIComponent(r)}${encodeURIComponent(t)}`.replace(/%2F/g,"/")}&${i}`;return`UPYUN ${n}:${Q.default.createHmac("sha1",a).update(s).digest("base64")}`},Jt=(e,t,r,n)=>{const a=e.bucket,i=e.path||"";let s=e.endpoint||"https://v0.api.upyun.com";return s.endsWith("/")&&(s=s.slice(0,-1)),s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${a}/${encodeURIComponent(i)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":Ee.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function er(e){return Q.default.createHash("md5").update(e).digest("hex")}const tr=(e,t,r,n)=>{const a=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${er(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},rr=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=Zt(t,a.fileName),s=Jt(t,a.fileName,i,r),o=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete a.base64Image,delete a.buffer,a.imgUrl=`${t.url}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}${o}`.replace(/%2F/g,"/"),t.antiLeechToken){const e=tr(t.antiLeechToken,t.expireTime,t,a.fileName);a.imgUrl=a.imgUrl.includes("?")?`${a.imgUrl}&${e}`:`${a.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=Fe(t.error);e.emit(mt.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}},nr=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_URL")},get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_ENDPOINT")},default:t.endpoint||"https://v0.api.upyun.com",required:!1}]};const ar=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");t.host=t.host.replace(/^https?:\/\/|\/+$/g,""),t.host=(t.sslEnabled?"https://":"http://")+t.host,t.path=(t.path||"").replace(/^\/+|\/+$/g,"")+"/";const r=t.authType||"basic",n=(t.webpath||"").replace(/^\/+|\/+$/g,"")+"/",a=t.options||"";try{const i=e.output,s=t.customUrl,o=t.path;for(const E of i)if(E.fileName&&E.buffer){let i=E.buffer;!i&&E.base64Image&&(i=Buffer.from(E.base64Image,"base64"));const l={username:t.username,password:t.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===r&&(l.authType=L.AuthType.Digest);const I=L.createClient(t.host,l),S="/"===o?"":o;S&&await I.createDirectory(S,{recursive:!0});if(!await I.putFileContents(`${o}${E.fileName}`.replace(/^\/+|\/+$/g,""),i,{overwrite:!0}))throw new Error("Upload failed");{const r=Y.default.join(e.baseDir,"imgTemp","webdavplist"),l=Y.default.join(r,E.fileName);k.default.ensureDirSync(Y.default.dirname(l)),k.default.writeFileSync(l,i),delete E.base64Image,delete E.buffer;const I=s||t.host;t.webpath?E.imgUrl=`${I}/${"/"===n?"":encodeURIComponent(n)}${encodeURIComponent(E.fileName)}${a}`.replace(/%2F/g,"/"):E.imgUrl=`${I}/${"/"===o?"":encodeURIComponent(o)}${encodeURIComponent(E.fileName)}${a}`.replace(/%2F/g,"/"),E.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(E.fileName)}`}}return e}catch(t){throw e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},ir=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_OPTIONS")},default:r.options||"",required:!1}]};const sr=async e=>{const t=e.getConfig("picBed.local");if(!t)throw new Error("Can not find local config!");const r=t.path||"";let n=t.customUrl||"";n&&(n=n.replace(/\/$/,""));let a=t.webPath||"";a&&(a=a.replace(/\\/g,"/").replace(/^\//,"").replace(/\/$/,""));const i=e.output;for(const t of i)if(t.fileName&&t.buffer){let i=t.buffer;!i&&t.base64Image&&(i=Buffer.from(t.base64Image,"base64"));try{try{const s=Y.default.join(e.baseDir,"imgTemp","local");k.default.ensureDirSync(Y.default.dirname(Y.default.join(r,t.fileName))),k.default.ensureDirSync(Y.default.dirname(Y.default.join(s,t.fileName))),k.default.writeFileSync(Y.default.join(r,t.fileName),i),k.default.copyFileSync(Y.default.join(r,t.fileName),Y.default.join(s,t.fileName)),delete t.base64Image,delete t.buffer,t.imgUrl=n?a?`${n}/${encodeURIComponent(a)}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):`${n}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):Y.default.join(r,t.fileName),t.hash=Y.default.join(r,t.fileName),t.galleryPath=`http://localhost:36699/local/${encodeURIComponent(t.fileName)}`}catch(t){throw e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},or=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class Er{constructor(){this._isConnected=!1}static get instance(){return this._instance||(this._instance=new this)}static get client(){return this._client||(this._client=new h.NodeSSH)}changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{username:t,password:r,privateKey:n,passphrase:a}=e,i=n?{username:t,privateKeyPath:n,passphrase:a||void 0}:{username:t,password:r};try{return await Er.client.connect(Object.assign({host:e.host,port:Number(e.port)||22},i)),this._isConnected=!0,!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this._isConnected)throw new Error("SSH 未连接");try{t=this.changeWinStylePathToUnix(t),await this.mkdir(Y.default.dirname(t).replace(/^\/+|\/+$/g,""),r),await Er.client.putFile(e,t);const n=r.fileMode||"0644";if("0644"!==n){const e=`chmod ${n} "${t}"`;return await this.exec(e)}return!0}catch(e){throw new Error(e)}}async mkdir(e,t){if(!Er.client.isConnected())throw new Error("SSH 未连接");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=this.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t],i=`chown ${n}:${a} "${e}"`;return this.exec(i)}async exec(e){return 0===(await Er.client.execCommand(e)).code}close(){Er.client.dispose(),this._isConnected=!1}}const lr=async e=>{const t=e.getConfig("picBed.sftpplist");if(!t)throw new Error("Can not find sftpplist config!");t.port=Number(t.port)||22,t.uploadPath=(t.uploadPath||"").replace(/^\/+|\/+$/g,"")+"/";const r=(t.webPath||"").replace(/^\/+|\/+$/g,"")+"/";try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=Y.default.join(e.baseDir,"uploadTemp"),s=Y.default.join(e.baseDir,"imgTemp","sftpplist");k.default.ensureDirSync(s);const o=Y.default.join(i,a.fileName);k.default.ensureDirSync(Y.default.dirname(o)),k.default.writeFileSync(o,n);const E=Er.instance;await E.connect(t);const l=Y.default.join(`/${t.uploadPath}`.replace(/\/\/+/g,"/"),a.fileName);await E.upload(o,l,t),t.fileUser&&await E.chown(l,t.fileUser),delete a.base64Image,delete a.buffer;const I=t.customUrl||t.host;t.webPath?a.imgUrl=`${I}/${"/"===r?"":encodeURIComponent(r)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=`${I}/${"/"===t.uploadPath?"":encodeURIComponent(t.uploadPath)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/");const S=Y.default.join(s,a.fileName);k.default.ensureDirSync(Y.default.dirname(S)),k.default.removeSync(S),k.default.moveSync(o,Y.default.join(s,a.fileName)),a.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(a.fileName)}`,E.close()}return e}catch(t){throw e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ir=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},default:t.dirMode||"",required:!1}]};const Sr=async(e,t)=>{const r={method:"POST",url:"https://telegra.ph/upload",headers:{"content-type":"multipart/form-data"},formData:{file:t}};return e.proxy&&(r.proxy=e.proxy),r},_r=async e=>{var t,r;let n=e.getConfig("picBed.telegraphplist");n||(n={});try{const r=e.output;for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=Y.default.join(e.baseDir,"uploadTemp");k.default.ensureDirSync(i);const s=Y.default.join(i,a.fileName);k.default.writeFileSync(s,r);const o=await Sr(n,k.default.createReadStream(s)),E=await e.request(o),l="string"==typeof E?JSON.parse(E):E;if(k.default.remove(s),!(null===(t=null==l?void 0:l[0])||void 0===t?void 0:t.src))throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=`https://telegra.ph${l[0].src}`}return e}catch(t){throw e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(r=null==t?void 0:t.response)||void 0===r?void 0:r.data)||t}},ur=e=>[{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:(e.getConfig("picBed.telegraphplist")||{}).proxy||"",required:!1}];const cr=(e,t,r)=>{const n=e.host||"127.0.0.1",a=e.port||36677,i=e.picbed||"",s=e.configName||"Default",o=e.serverKey||"";let E=`http://${n}:${a}/upload?configName=${s}`;return i&&(E+=`&picbed=${i}`),o&&(E+=`&key=${o}`),{method:"POST",url:E,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:Ee.default.lookup(t)}}},resolveWithFullResponse:!0}},Pr=async e=>{var t;const r=e.getConfig("picBed.piclist");if(!r)throw new Error("Can't find PicList config");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=cr(r,a.fileName,n),s=await e.request(i).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));if(200!==s.statusCode||!(null===(t=s.body)||void 0===t?void 0:t.success))throw new Error(s.body.message);delete a.base64Image,delete a.buffer,a.imgUrl=s.body.result[0],a.fullResult=s.body.fullResult[0]}return e}catch(t){throw e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},dr=e=>{const t=e.getConfig("picBed.piclist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_HOST")},get alias(){return e.i18n.translate("PICBED_PICLIST_HOST")},default:t.host||"127.0.0.1",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PORT")},get alias(){return e.i18n.translate("PICBED_PICLIST_PORT")},default:t.port||36677,required:!1},{name:"picbed",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PICBED")},get alias(){return e.i18n.translate("PICBED_PICLIST_PICBED")},default:t.picbed||"",required:!1},{name:"configName",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},get alias(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},default:t.configName||"",required:!1},{name:"serverKey",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_KEY")},get alias(){return e.i18n.translate("PICBED_PICLIST_KEY")},default:t.serverKey||"",required:!1}]};const pr=(e,t,r)=>{let n=e.host;n=n.replace(/\/$/,"");const a="V2"===e.version,i=e.token,s={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",token:i||void 0},o={image:{value:r,options:{filename:t}},ssl:"true"},E={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",Accept:"application/json",Authorization:i||void 0},l=e.strategyId,I=e.albumId;let S=e.permission.value;void 0===S&&(S=e.permission);const _={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:l,album_id:I,permission:S};l||delete _.strategy_id,I||delete _.album_id,0!==S&&1!==S&&delete _.permission;return{method:"POST",url:a?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new Ie.default.Agent({rejectUnauthorized:!1}),headers:a?E:s,formData:a?_:o}},Cr=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");try{const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=pr(t,n.fileName,r);let i=await e.Request.request(a);i="string"==typeof i?JSON.parse(i):i;let s="V2"===t.version;if(!(s?!0===i.status:200===i.code))throw e.emit("notification",{title:"upload failed",body:i.message}),new Error(i.message);delete n.base64Image,delete n.buffer,n.imgUrl=s?i.data.links.url:i.data.url,s&&(n.hash=i.data.key)}return e}catch(t){throw e.emit(mt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},gr=e=>{let t=e.getConfig("picBed.lskyplist")||{};return[{name:"version",type:"list",default:t.version||"V1",get prefix(){return e.i18n.translate("PICBED_LSKY_VERSION")},get alias(){return e.i18n.translate("PICBED_LSKY_VERSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_VERSION")},choices:["V1","V2"],required:!0},{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_HOST")},get alias(){return e.i18n.translate("PICBED_LSKY_HOST")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get alias(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_TOKEN")},default:t.token,required:!0},{name:"strategyId",type:"input",default:t.strategyId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_STRATEGY_ID")}},{name:"albumId",type:"input",default:t.albumId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_ALBUM_ID")}},{name:"permission",type:"list",default:t.permission||"private(default)",choices:[{name:"private(default)",value:0},{name:"public",value:1}],required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get alias(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_PERMISSION")}}]};class Ar{constructor(e){this.date=new Date,this.info=e}year(){return`${this.date.getFullYear()}`}month(){return(this.date.getMonth()+1).toString().padStart(2,"0")}day(){return this.date.getDate().toString().padStart(2,"0")}fullName(){return this.info.fileName}fileName(){var e,t;return(null!==(e=this.info.fileName)&&void 0!==e?e:"").replace(null!==(t=this.info.extname)&&void 0!==t?t:"","")}extName(){var e;return(null!==(e=this.info.extname)&&void 0!==e?e:"").replace(".","")}md5(){return Q.default.createHash("md5").update(this.imgBuffer()).digest("hex")}md5B64(){return Q.default.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}md5B64Short(){return Q.default.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").slice(0,7)}sha1(){return Q.default.createHash("sha1").update(this.imgBuffer()).digest("hex")}sha256(){return Q.default.createHash("sha256").update(this.imgBuffer()).digest("hex")}timestamp(){return Math.floor(Date.now()/1e3).toString()}timestampMS(){return Date.now().toString()}imgBuffer(){return this.info.base64Image?this.info.base64Image:this.info.buffer}}function Tr(e,t){if(!t)return e.fileName;const r=new Ar(e);let n=t;for(const e of Ar.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function fr(e,t,r){const n=function(e=""){if(!e)return"";if(!/^https?:\/\//.test(e)){const[t,r]=e.split(":");return`http://${t.replace("127.0.0.1","localhost")}:${r}`}try{const{protocol:t,hostname:r,port:n}=new o.URL(e);return`${t}//${r.replace("127.0.0.1","localhost")}:${n}`}catch(e){return""}}(e);if(!n)return;return new(t?y.HttpsProxyAgent:y.HttpProxyAgent)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}async function Dr(e,t,r){try{const n=await N.getSignedUrl(e.client,new U.GetObjectCommand({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),a=new V.default.URL(n);return a.search="",a.href}catch(e){return Promise.reject(e)}}Ar.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var mr={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new V.default.URL(e.endpoint).protocol}catch(e){}const a={};n?a.httpsAgent=fr(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):a.httpAgent=fr(e.proxy,!1,null!==(r=e.rejectUnauthorized)&&void 0!==r&&r);const i={region:e.region||"auto",endpoint:e.endpoint||void 0,credentials:{accessKeyId:e.accessKeyID,secretAccessKey:e.secretAccessKey},tls:n,forcePathStyle:e.pathStyleAccess,requestHandler:new R.NodeHttpHandler(a)};return new U.S3Client(i)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)return Promise.reject(new Error("undefined image"));let t,r,n;try{({body:t,contentType:r,contentEncoding:n}=await async function(e){var t;const r={};if(e.base64Image){const n=e.base64Image.replace(/^data:[/\w]+;base64,/,"");r.contentType=null===(t=e.base64Image.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/))||void 0===t?void 0:t[0],r.body=Buffer.from(n,"base64"),r.contentEncoding="base64"}else e.extname&&(r.contentType=_e.default.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await Se.default.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item))}catch(e){return Promise.reject(e)}const a=new U.PutObjectCommand({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n});let i,s;try{i=await e.client.send(a)}catch(e){return Promise.reject(e)}if(e.urlPrefix)s=`${e.urlPrefix}/${e.path}`;else try{s=await Dr(e,i.ETag,i.VersionId)}catch(e){return Promise.reject(e)}return{index:e.index,key:e.path,url:s,imgURL:s,versionId:i.VersionId,eTag:i.ETag}},getFileURL:Dr};const Lr=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find amazon s3 uploader config");void 0===t.disableBucketPrefixToURL&&(t.disableBucketPrefixToURL=!1),"string"==typeof t.disableBucketPrefixToURL&&("true"===t.disableBucketPrefixToURL.toLowerCase()?t.disableBucketPrefixToURL=!0:"false"===t.disableBucketPrefixToURL.toLowerCase()&&(t.disableBucketPrefixToURL=!1)),t.urlPrefix&&(t.urlPrefix=t.urlPrefix.replace(/\/?$/,""),t.pathStyleAccess&&!t.disableBucketPrefixToURL&&(t.urlPrefix+="/"+t.bucketName));const r=mr.createS3Client(t),n=e.output,a=n.map(((e,n)=>mr.createUploadTask({client:r,index:n,bucketName:t.bucketName,path:Tr(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:t.urlPrefix})));let i;try{i=await Promise.all(a)}catch(t){throw e.log.error("上传到 S3 存储发生错误,请检查网络连接和配置是否正确"),e.log.error(t),e.emit("notification",{title:"S3 存储上传错误",body:"请检查配置是否正确",text:""}),t}for(const e of i){const{index:t,url:r,imgURL:a}=e;delete n[t].buffer,delete n[t].base64Image,n[t].imgUrl=a,n[t].url=r}return e},hr=e=>{let t=e.getConfig("picBed.aws-s3-plist")||{};t=Object.assign(Object.assign({},{accessKeyID:"",secretAccessKey:"",bucketName:"",uploadPath:"{year}/{month}/{md5}.{extName}",pathStyleAccess:!1,rejectUnauthorized:!0,acl:"public-read"}),t);return[{name:"accessKeyID",type:"input",default:t.accessKeyID,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID")}},{name:"secretAccessKey",type:"input",default:t.secretAccessKey,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY")}},{name:"bucketName",type:"input",default:t.bucketName,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_BUCKET")}},{name:"uploadPath",type:"input",default:t.uploadPath,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH")}},{name:"region",type:"input",default:t.region,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REGION")}},{name:"endpoint",type:"input",default:t.endpoint,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ENDPOINT")}},{name:"proxy",type:"input",default:t.proxy,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PROXY")}},{name:"urlPrefix",type:"input",default:t.urlPrefix,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_URLPREFIX")}},{name:"pathStyleAccess",type:"confirm",default:t.pathStyleAccess||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS")}},{name:"rejectUnauthorized",type:"confirm",default:t.rejectUnauthorized||!0,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED")}},{name:"acl",type:"input",default:t.acl||"public-read",required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACL")}},{name:"disableBucketPrefixToURL",type:"input",default:t.disableBucketPrefixToURL||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL")}}]};const Br=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:Xt,config:Qt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:yt,config:xt})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:Nt,config:Rt})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:Wt,config:Ft})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:vt,config:$t})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:Yt,config:qt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:rr,config:nr})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:ar,config:ir})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:sr,config:or})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:lr,config:Ir})}(e),function(e){e.helper.uploader.register("telegraphplist",{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:_r,config:ur})}(e),function(e){e.helper.uploader.register("piclist",{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:Pr,config:dr})}(e),function(e){e.helper.uploader.register("lskyplist",{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:Cr,config:gr})}(e),function(e){e.helper.uploader.register("aws-s3-plist",{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:Lr,config:hr})}(e)}}),Ur=(e,t,r)=>{const n=he(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var Nr={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let a;if(a=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:De(r)?await Ue(r,e):await Be(r),a.success&&a.buffer){const i=Ur(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${ae.default().format("YYYYMMDDHHmmss")}${s}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var Rr={handle:async e=>(e.output.push(...e.input),e)};class Or{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=Y.default.join(this.ctx.baseDir,"package.json");if(!k.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/Kuingsmile/PicList-Core",license:"MIT"};k.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return ue.default.sync(t,{basedir:e.baseDir})}catch(r){return Y.default.join(e.baseDir,"node_modules",t)}}load(){const e=Y.default.join(this.ctx.baseDir,"package.json"),t=Y.default.join(this.ctx.baseDir,"node_modules/");if(!k.default.existsSync(t))return!1;const r=k.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),a=Object.keys(r.devDependencies||{}),i=n.concat(a).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return k.default.existsSync(t)}));for(const e of i)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),Tt(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),Tt(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(mt.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),Tt(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=Y.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 Mr={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'},yr={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const xr=async e=>{!function(e){const t=Y.default.join(e.baseDir,"piclist-clipboard-images");k.default.existsSync(t)||k.default.mkdirSync(t)}(e);const t=Y.default.join(e.baseDir,"piclist-clipboard-images",`${ae.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const a=(()=>{const e=process.platform;if(ce.default)return"wsl";if("win32"===e)return"10"===q.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),i=Y.default.join(e.baseDir,yr[a]);let s;k.default.existsSync(i)||k.default.writeFileSync(i,Mr[a],"utf8"),s="darwin"===a?G.spawn("osascript",[i,t]):"win32"===a||"win10"===a?G.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",i,t]):G.spawn("sh",[i,t]),s.stdout.on("data",(i=>{if("linux"===a&&"no xclip or wl-clipboard"===i.toString().trim())return e.emit(mt.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),n(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const s=i.toString().trim();let o=!1;if(Y.default.basename(s)!==Y.default.basename(t)&&k.default.existsSync(s)&&(o=!0),"no image"!==s&&!k.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},Gr=new r.EventEmitter,br=new Ie.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function wr(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Wr(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Fr(e){var t,r,n,a,i,s,o;const E={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(E)}class Kr{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Gr.on(Lt.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=de.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=br;const r=se.default.create(this.options);r.interceptors.response.use(Wr,Fr);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let a=e.proxy;if("string"==typeof a){try{a=new o.URL(e.proxy)}catch(e){a=!1,n.proxy=!1,console.error(e)}r=!0}a&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=de.default.httpsOverHttp({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new Pe.default;for(const r in e.formData)wr(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let a="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(a=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(a=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(a=e.headers["content-type"],delete e.headers["content-type"]),""!==a&&e.headers&&(e.headers["Content-Type"]=a),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class Hr{constructor(e){if(this.ctx=e,this.db=new F.JSONStore(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms"})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}class vr{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>$r(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicList has already installed ${e.pkgName}`),!1):!!e.success)),i=a.map((e=>e.fullName)),s=a.map((e=>e.pkgName));if(i.length>0){const e=await this.execCommand("install",i,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>$r(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=>$r(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},a={}){const i=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,E;let l=[e].concat(t).concat("--color=always").concat("--save");i&&(l=l.concat(`--registry=${i}`)),s&&(l=l.concat(`--proxy=${s}`));try{const e=pe.default("npm",l,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(E=e.stderr)||void 0===E||E.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(mt.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(mt.FAILED,e)}}))}}const $r=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=Me(t,e.log);if(!n)return r;const a=ye(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r},kr={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定accessKeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ENDPOINT:"设定自定义API接入点",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_OPTIONS:"设定网址后缀",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=123456",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"设定主机",PICBED_PICLIST_PORT:"设定端口",PICBED_PICLIST_PICBED:"设定图床",PICBED_PICLIST_CONFIGNAME:"设定配置名",PICBED_PICLIST_KEY:"设定鉴权Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"设定版本",PICBED_LSKY_MESSAGE_VERSION:"例如V1",PICBED_LSKY_HOST:"设定主机",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"设定Token",PICBED_LSKY_MESSAGE_TOKEN:"例如:1234567890",PICBED_LSKY_STRATEGY_ID:"设定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如:1",PICBED_LSKY_ALBUM_ID:"设定相册ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"选填,V2版本限定",PICBED_LSKY_PERMISSION:"设定权限",PICBED_LSKY_MESSAGE_PERMISSION:"例如:public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"设定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"设定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"设定Bucket",PICBED_AWSS3PLIST_REGION:"设定Region",PICBED_AWSS3PLIST_UPLOADPATH:"设定上传路径",PICBED_AWSS3PLIST_ENDPOINT:"设定自定义节点",PICBED_AWSS3PLIST_PROXY:"设定代理",PICBED_AWSS3PLIST_URLPREFIX:"设定自定义域名",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"启用s3ForcePathStyle",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"拒绝无效TLS证书连接",PICBED_AWSS3PLIST_ACL:"设定上传资源的访问策略",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要时启用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定accessKeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_ENDPOINT:"設定接入點",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_OPTIONS:"設定網址後綴",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=value",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"設定主機",PICBED_PICLIST_PORT:"設定端口",PICBED_PICLIST_PICBED:"設定圖床",PICBED_PICLIST_CONFIGNAME:"設定配置名",PICBED_PICLIST_KEY:"設定鑒權Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"設定版本",PICBED_LSKY_MESSAGE_VERSION:"請選擇版本",PICBED_LSKY_HOST:"設定主機",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"設定Token",PICBED_LSKY_MESSAGE_TOKEN:"請輸入Token",PICBED_LSKY_STRATEGY_ID:"設定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如1",PICBED_LSKY_ALBUM_ID:"設定相冊ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"例如1",PICBED_LSKY_PERMISSION:"設定上傳權限",PICBED_LSKY_MESSAGE_PERMISSION:"請選擇上傳權限",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"設定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"設定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"設定Bucket",PICBED_AWSS3PLIST_REGION:"設定Region",PICBED_AWSS3PLIST_UPLOADPATH:"設定上傳路徑",PICBED_AWSS3PLIST_ENDPOINT:"設定自定義節點",PICBED_AWSS3PLIST_PROXY:"設定代理",PICBED_AWSS3PLIST_URLPREFIX:"設定自定義網址",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"開啟 `pathStyleAccess`",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"開啟 `rejectUnauthorized`",PICBED_AWSS3PLIST_ACL:"設定ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"開啟 `pathStyleAccess` 時,是否要禁用最終生成URL中添加 bucket 前綴",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要時啟用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set accessKeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"Ex. test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_ENDPOINT:"Set Endpoint",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"Ex. https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_OPTIONS:"Set URL Suffix",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"Ex. ?key=value",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"Set Host",PICBED_PICLIST_PORT:"Set Port",PICBED_PICLIST_PICBED:"Set PicBed",PICBED_PICLIST_CONFIGNAME:"Set Config Name",PICBED_PICLIST_KEY:"Set Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"Set Version",PICBED_LSKY_MESSAGE_VERSION:"Ex. v1",PICBED_LSKY_HOST:"Set Host",PICBED_LSKY_MESSAGE_HOST:"Ex. https://lsky.co",PICBED_LSKY_TOKEN:"Set Token",PICBED_LSKY_MESSAGE_TOKEN:"Ex. xxx",PICBED_LSKY_STRATEGY_ID:"Set Strategy ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"Ex. 1",PICBED_LSKY_ALBUM_ID:"Set Album ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"Optional, only for V2",PICBED_LSKY_PERMISSION:"Set Permisson",PICBED_LSKY_MESSAGE_PERMISSION:"Ex. public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"Set AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"Set SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"Set Bucket",PICBED_AWSS3PLIST_REGION:"Set Region",PICBED_AWSS3PLIST_UPLOADPATH:"Set Upload Path",PICBED_AWSS3PLIST_ENDPOINT:"Set Endpoint",PICBED_AWSS3PLIST_PROXY:"Set Proxy",PICBED_AWSS3PLIST_URLPREFIX:"Set Custom URL",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"Set PathStyleAccess",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"Set RejectUnauthorized",PICBED_AWSS3PLIST_ACL:"Set ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"when `pathStyleAccess` is enabled, whether to disable adding bucket prefix to url",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"Ex. test",PICBED_AWSS3PLIST_MESSAGE_REGION:"Ex. us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"Ex. test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"Ex. https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"Ex. https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"Enable when `pathStyleAccess` is required",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"Enable when rejecting invalid TLS certificate connection is required",PICBED_AWSS3PLIST_MESSAGE_ACL:"Ex. public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"Enable when `pathStyleAccess` is enabled",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class Yr{constructor(e){this.ctx=e,this.objectAdapter=new v.ObjectAdapter(kr);let t=this.ctx.getConfig("settings.language")||"zh-CN";kr[t]||(t="zh-CN"),this.i18n=new v.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();k.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=Y.default.join(e,t.name),n=k.default.readFileSync(r,"utf8");try{const e=Ce.default.load(n);kr[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=Y.default.join(this.ctx.baseDir,"i18n-cli");return k.default.pathExistsSync(e)||k.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=T.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),kr[e]=t,!0)}getLanguageList(){return Object.keys(kr)}}class qr extends r.EventEmitter{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.7.14",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 ht(this),this.cmd=new ft(this),this.pluginHandler=new vr(this),this.initConfig(),this.init()}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==Y.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=Y.default.dirname(this.configPath);k.default.pathExistsSync(this.configPath)||k.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new Hr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new Yr(this),this.Request=new Kr(this),this._pluginLoader=new Or(this),Tt("picgo"),Br().register(this),{register(e){e.helper.transformer.register("path",Nr),e.helper.transformer.register("base64",Rr)}}.register(this),Tt(""),this._pluginLoader.load(),this.lifecycle=new Bt(this)}catch(e){throw this.emit(mt.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?T.get(this._config,e):this._config}saveConfig(e){We(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&&(we(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){We(e)?Object.keys(e).forEach((t=>{we(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),T.set(this._config,t,e[t]),Gr.emit(Lt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(we(e)?this.log.warn(`the config.${e} can't be unset`):T.unset(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await xr(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(mt.FAILED,(()=>{t||k.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||k.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(mt.FAILED,e),e}}}exports.Commander=ft,exports.Lifecycle=Bt,exports.LifecyclePlugins=At,exports.Logger=ht,exports.PicGo=qr,exports.PicGoUtils=rt,exports.PluginHandler=vr,exports.PluginLoader=Or,exports.Request=Kr;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9jb3JlL0xpZmVjeWNsZS50cyIsIi4uL3NyYy91dGlscy9jcmVhdGVDb250ZXh0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc21tcy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RjeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbWd1ci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbG9jYWwudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RlbGVncmFwaC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3BpY2xpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9sc2t5LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zMy91cGxvYWRlci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2F3c3MzcGxpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbmRleC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL3BhdGgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9iYXNlNjQudHMiLCIuLi9zcmMvbGliL1BsdWdpbkxvYWRlci50cyIsIi4uL3NyYy91dGlscy9zdGF0aWMudHMiLCIuLi9zcmMvdXRpbHMvZ2V0Q2xpcGJvYXJkSW1hZ2UudHMiLCIuLi9zcmMvdXRpbHMvZXZlbnRCdXMudHMiLCIuLi9zcmMvbGliL1JlcXVlc3QudHMiLCIuLi9zcmMvdXRpbHMvZGIudHMiLCIuLi9zcmMvbGliL1BsdWdpbkhhbmRsZXIudHMiLCIuLi9zcmMvaTE4bi9pbmRleC50cyIsIi4uL3NyYy9pMThuL3poLUNOLnRzIiwiLi4vc3JjL2kxOG4vemgtVFcudHMiLCIuLi9zcmMvaTE4bi9lbi50cyIsIi4uL3NyYy9jb3JlL1BpY0dvLnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgcGx1Z2luSGFuZGxlcjogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgLy8gY29uc3QgcGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKGN0eClcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbnN0YWxsIDxwbHVnaW5zLi4uPicpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignaW5zdGFsbCBwaWNnbyBwbHVnaW4nKVxyXG4gICAgICAuYWxpYXMoJ2FkZCcpXHJcbiAgICAgIC5vcHRpb24oJy1wLCAtLXByb3h5IDxwcm94eT4nLCAnQWRkIHByb3h5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmFsaWFzKCdybScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudW5pbnN0YWxsKHBsdWdpbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGRhdGUgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGRhdGUgcGljZ28gcGx1Z2luJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHByb3h5LFxyXG4gICAgICAgICAgcmVnaXN0cnlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGNvbmZpZzogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxwYXRoPicsICdzZXQgY29uZmlnIHBhdGgnKVxyXG4gICAgICAvLyB3aWxsIGhhbmRsZSBpbiBgYmluL3BpY2dvYFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY29uZmlnXHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgaW1hZ2VTaXplIH0gZnJvbSAnaW1hZ2Utc2l6ZSdcclxuaW1wb3J0IHtcclxuICB0eXBlIElJbWdTaXplLFxyXG4gIHR5cGUgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sXHJcbiAgdHlwZSBJUGx1Z2luTmFtZVR5cGUsXHJcbiAgdHlwZSBJTG9nZ2VyLFxyXG4gIHR5cGUgSVBpY0dvLFxyXG4gIHR5cGUgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXHJcbiAgdHlwZSBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgVGV4dFRvU1ZHIGZyb20gJ3RleHQtdG8tc3ZnJ1xyXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZ0dlbmVyYXRvciAobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xyXG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0pLm1hcCgoKSA9PiBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSkpLmpvaW4oJycpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhUaW1lc3RhbXAgKG9sZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGAke01hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApfSR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKDUpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFJhbmRvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciA9IDUpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtyYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcgKG9sZE5hbWU6IHN0cmluZywgY3VzdG9tRm9ybWF0OiBzdHJpbmcsIGFmZml4RmlsZU5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGNvbnZlcnNpb25NYXA6IFJlY29yZDxzdHJpbmcsICgpID0+IHN0cmluZz4gPSB7XHJcbiAgICAne1l9JzogKCkgPT4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXHJcbiAgICAne3l9JzogKCkgPT4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc2xpY2UoMiksXHJcbiAgICAne219JzogKCkgPT4gKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke25ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDF9YCA6IChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLFxyXG4gICAgJ3tkfSc6ICgpID0+IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke25ldyBEYXRlKCkuZ2V0RGF0ZSgpfWAgOiBuZXcgRGF0ZSgpLmdldERhdGUoKS50b1N0cmluZygpLFxyXG4gICAgJ3tofSc6ICgpID0+IG5ldyBEYXRlKCkuZ2V0SG91cnMoKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldEhvdXJzKCl9YCA6IG5ldyBEYXRlKCkuZ2V0SG91cnMoKS50b1N0cmluZygpLFxyXG4gICAgJ3tpfSc6ICgpID0+IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke25ldyBEYXRlKCkuZ2V0TWludXRlcygpfWAgOiBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLFxyXG4gICAgJ3tzfSc6ICgpID0+IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke25ldyBEYXRlKCkuZ2V0U2Vjb25kcygpfWAgOiBuZXcgRGF0ZSgpLmdldFNlY29uZHMoKS50b1N0cmluZygpLFxyXG4gICAgJ3ttZDV9JzogKCkgPT4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSkpLmRpZ2VzdCgnaGV4JyksXHJcbiAgICAne21kNS0xNn0nOiAoKSA9PiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHBhdGguYmFzZW5hbWUob2xkTmFtZSwgcGF0aC5leHRuYW1lKG9sZE5hbWUpKSkuZGlnZXN0KCdoZXgnKS5zbGljZSgwLCAxNiksXHJcbiAgICAne3N0ci0xMH0nOiAoKSA9PiByYW5kb21TdHJpbmdHZW5lcmF0b3IoMTApLFxyXG4gICAgJ3tzdHItMjB9JzogKCkgPT4gcmFuZG9tU3RyaW5nR2VuZXJhdG9yKDIwKSxcclxuICAgICd7ZmlsZW5hbWV9JzogKCkgPT4gYWZmaXhGaWxlTmFtZSA/IHBhdGguYmFzZW5hbWUoYWZmaXhGaWxlTmFtZSwgcGF0aC5leHRuYW1lKGFmZml4RmlsZU5hbWUpKSA6IHBhdGguYmFzZW5hbWUob2xkTmFtZSwgcGF0aC5leHRuYW1lKG9sZE5hbWUpKSxcclxuICAgICd7dXVpZH0nOiAoKSA9PiB1dWlkdjQoKS5yZXBsYWNlKC8tL2csICcnKSxcclxuICAgICd7dGltZXN0YW1wfSc6ICgpID0+IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLnRvU3RyaW5nKClcclxuICB9XHJcbiAgaWYgKGN1c3RvbUZvcm1hdCA9PT0gdW5kZWZpbmVkIHx8ICghT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkuc29tZShpdGVtID0+IGN1c3RvbUZvcm1hdC5pbmNsdWRlcyhpdGVtKSkgJiYgIWN1c3RvbUZvcm1hdC5pbmNsdWRlcygnbG9jYWxGb2xkZXInKSkpIHtcclxuICAgIHJldHVybiBvbGROYW1lXHJcbiAgfVxyXG4gIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShvbGROYW1lKVxyXG4gIGxldCBuZXdOYW1lID0gT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkucmVkdWNlKChhY2MsIGN1cikgPT4ge1xyXG4gICAgcmV0dXJuIGFjYy5yZXBsYWNlKG5ldyBSZWdFeHAoY3VyLCAnZycpLCBjb252ZXJzaW9uTWFwW2N1cl0oKSlcclxuICB9LCBjdXN0b21Gb3JtYXQpICsgZXh0XHJcbiAgbmV3TmFtZSA9IG5ld05hbWUucmVwbGFjZSgveyhsb2NhbEZvbGRlcjo/KFxcZCspPyl9L2dpLCAoX3Jlc3VsdCwga2V5LCBjb3VudCkgPT4ge1xyXG4gICAgY291bnQgPSBNYXRoLm1heCgxLCBjb3VudCB8fCAwKVxyXG4gICAgY29uc3QgcGF0aHMgPSBwYXRoLmRpcm5hbWUob2xkTmFtZSkuc3BsaXQocGF0aC5zZXApXHJcbiAgICBrZXkgPSBwYXRocy5zbGljZSgwIC0gY291bnQpLnJlZHVjZSgoYSwgYikgPT4gYCR7YX0vJHtifWApXHJcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoLzovZywgJycpXHJcbiAgfSlcclxuICByZXR1cm4gbmV3TmFtZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+ICgvXmh0dHBzPzpcXC9cXC8vKS50ZXN0KHVybClcclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHVybCA9IHVybCB8fCAnJ1xyXG4gIHRyeSB7XHJcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XHJcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcclxuICAgIHVybCA9IGVuY29kZVVSSSh1cmwpXHJcbiAgfVxyXG4gIHJldHVybiB1cmxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCB0eXBlIH0gPSBpbWFnZVNpemUoZmlsZSlcclxuICAgIGNvbnN0IGV4dG5hbWUgPSB0eXBlID8gYC4ke3R5cGV9YCA6ICcucG5nJ1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhbDogdHJ1ZSxcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgZXh0bmFtZVxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGZhbGxiYWNrIHRvIDIwMCAqIDIwMFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhbDogZmFsc2UsXHJcbiAgICAgIHdpZHRoOiAyMDAsXHJcbiAgICAgIGhlaWdodDogMjAwLFxyXG4gICAgICBleHRuYW1lOiAnLnBuZydcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGU0ZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKGZpbGVQYXRoKSxcclxuICAgICAgZmlsZU5hbWU6IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBidWZmZXI6IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoKSxcclxuICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgfVxyXG4gIH0gY2F0Y2gge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhc29uOiBgcmVhZCBmaWxlICR7ZmlsZVBhdGh9IGVycm9yYCxcclxuICAgICAgc3VjY2VzczogZmFsc2VcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRVUkxGaWxlID0gYXN5bmMgKHVybDogc3RyaW5nLCBjdHg6IElQaWNHbyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcclxuICB1cmwgPSBoYW5kbGVVcmxFbmNvZGUodXJsKVxyXG4gIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0XHJcbiAgY29uc3QgcmVxdWVzdEZuID0gbmV3IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qoe1xyXG4gICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcclxuICAgICAgICAgIHVybCxcclxuICAgICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxyXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEgYXMgQnVmZmVyXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXHJcbiAgICAgICAgY29uc3QgdXJsUGF0aCA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxyXG4gICAgICAgIGxldCBleHRuYW1lID0gJydcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTCh1cmwpLnNlYXJjaFBhcmFtc1xyXG4gICAgICAgICAgZXh0bmFtZSA9IHVybFBhcmFtcy5nZXQoJ3d4X2ZtdCcpIHx8IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBleHRuYW1lID0gcGF0aC5leHRuYW1lKHVybFBhdGgpIHx8ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZXh0bmFtZS5zdGFydHNXaXRoKCcuJykgJiYgZXh0bmFtZSkge1xyXG4gICAgICAgICAgZXh0bmFtZSA9IGAuJHtleHRuYW1lfWBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBidWZmZXI6IHJlcyxcclxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgZXh0bmFtZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xyXG4gICAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gZXJyb3IsICR7ZXJyb3I/Lm1lc3NhZ2UgPz8gJyd9YFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pKCkuY2F0Y2gocmVqZWN0KVxyXG4gIH0pXHJcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUpOiB2b2lkID0+IHtcclxuICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICByZXNvbHZlKHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSB0aW1lb3V0YFxyXG4gICAgICB9KVxyXG4gICAgfSwgMzAwMDApXHJcbiAgfSlcclxuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtyZXF1ZXN0Rm4sIHRpbWVvdXRQcm9taXNlXSlcclxufVxyXG5cclxuLyoqXHJcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nJ3MgdHlwZVxyXG4gKiBmb3IgZXhhbXBsZVxyXG4gKiAxLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gc2NvcGVcclxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBub3JtYWxcclxuICogMy4geHh4IC0+IHNpbXBsZVxyXG4gKiA0LiBub3QgZXhpc3RzIG9yIGlzIGEgcGF0aCAtPiB1bmtub3duXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luTmFtZVR5cGUgPSAobmFtZTogc3RyaW5nKTogSVBsdWdpbk5hbWVUeXBlID0+IHtcclxuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XHJcbiAgICByZXR1cm4gJ3Njb3BlJ1xyXG4gIH0gZWxzZSBpZiAobmFtZS5zdGFydHNXaXRoKCdwaWNnby1wbHVnaW4tJykpIHtcclxuICAgIHJldHVybiAnbm9ybWFsJ1xyXG4gIH0gZWxzZSBpZiAoaXNTaW1wbGVOYW1lKG5hbWUpKSB7XHJcbiAgICByZXR1cm4gJ3NpbXBsZSdcclxuICB9XHJcbiAgcmV0dXJuICd1bmtub3duJ1xyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcgaXMgYSBzaW1wbGUgcGx1Z2luIG5hbWUgb3Igbm90XHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHh4eCAtPiB0cnVlXHJcbiAqIDIuIC9Vc3IveHgveHh4eC9waWNnby1wbHVnaW4teHh4IC0+IGZhbHNlXHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbk5hbWVPclBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc1NpbXBsZU5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIGNvbnN0IHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIGlmIChuYW1lT3JQYXRoLmluY2x1ZGVzKCcvJykgfHwgbmFtZU9yUGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgcmV0dXJuIHRydWVcclxufVxyXG5cclxuLyoqXHJcbiAqIHN0cmVhbWxpbmUgdGhlIGZ1bGwgcGx1Z2luIG5hbWUgdG8gYSBzaW1wbGUgb25lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi15eXkgLT4geXl5XHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbkZ1bGxOYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlU3RyZWFtbGluZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XHJcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sICcnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogY29tcGxldGUgcGx1Z2luIG5hbWUgdG8gZnVsbCBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luU2ltcGxlTmFtZVxyXG4gKiBAcGFyYW0gc2NvcGUgcGx1Z2luU2NvcGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nLCBzY29wZSA9ICcnKTogc3RyaW5nID0+IHtcclxuICBpZiAoc2NvcGUpIHtcclxuICAgIHJldHVybiBgQCR7c2NvcGV9L3BpY2dvLXBsdWdpbi0ke25hbWV9YFxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYHBpY2dvLXBsdWdpbi0ke25hbWV9YFxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGhhbmRsZSBpbnN0YWxsL3VuaW5zdGFsbC91cGRhdGUgcGx1Z2luIG5hbWUgb3IgcGF0aFxyXG4gKiBmb3IgZXhhbXBsZVxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAzLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA0LiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiAvYWJzb2x1dGVQYXRoLy4uLi94eHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogNS4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoIHBsdWdpbk5hbWUgb3IgcGx1Z2luUGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldFByb2Nlc3NQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcclxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XHJcbiAgICBjYXNlICdub3JtYWwnOlxyXG4gICAgY2FzZSAnc2NvcGUnOlxyXG4gICAgICByZXR1cm4gbmFtZU9yUGF0aFxyXG4gICAgY2FzZSAnc2ltcGxlJzpcclxuICAgICAgcmV0dXJuIGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKVxyXG4gICAgZGVmYXVsdDoge1xyXG4gICAgICAvLyBub3csIHRoZSBwbHVnaW5OYW1lVHlwZSBpcyB1bmtub3cgaGVyZVxyXG4gICAgICAvLyAxLiBjaGVjayBpZiBpcyBhbiBhYnNvbHV0ZSBwYXRoXHJcbiAgICAgIGxldCBwbHVnaW5QYXRoID0gbmFtZU9yUGF0aFxyXG4gICAgICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpICYmIGZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIDIuIGNoZWNrIGlmIGlzIGEgcmVsYXRpdmUgcGF0aFxyXG4gICAgICBwbHVnaW5QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIG5hbWVPclBhdGgpXHJcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZVVuaXhTdHlsZVBhdGgocGx1Z2luUGF0aClcclxuICAgICAgfVxyXG4gICAgICAvLyAzLiBpbnZhbGlkIG5hbWVPclBhdGhcclxuICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luICR7bmFtZU9yUGF0aH1gKVxyXG4gICAgICByZXR1cm4gJydcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBnZXQgdGhlIG5vcm1hbCBwbHVnaW4gbmFtZVxyXG4gKiBmb3IgZXhhbXBsZTpcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogMy4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiA0LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNS4gYW4gZXhjZXB0aW9uOiBbcGFja2FnZS5qc29uJ3MgbmFtZV0gIT09IFtmb2xkZXIgbmFtZV1cclxuICogdGhlbiB1c2UgW3BhY2thZ2UuanNvbidzIG5hbWVdLCB1c3VhbGx5IG1hdGNoIHRoZSBzY29wZSBwYWNrYWdlLlxyXG4gKiA2LiBpZiBwbHVnaW4gbmFtZSBoYXMgdmVyc2lvbjogcGljZ28tcGx1Z2luLXh4eEB4LngueCB0aGVuIHJlbW92ZSB0aGUgdmVyc2lvblxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldE5vcm1hbFBsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxyXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcclxuICAgIGNhc2UgJ25vcm1hbCc6XHJcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKG5hbWVPclBhdGgpXHJcbiAgICBjYXNlICdzY29wZSc6XHJcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKG5hbWVPclBhdGgsIHRydWUpXHJcbiAgICBjYXNlICdzaW1wbGUnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aCkpXHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIC8vIG5vdywgdGhlIG5hbWVPclBhdGggbXVzdCBiZSBwYXRoXHJcbiAgICAgIC8vIHRoZSBuYW1lT3JQYXRoIGhlcmUgd2lsbCBiZSBlbnN1cmVkIHdpdGggdW5peCBzdHlsZVxyXG4gICAgICAvLyB3ZSBuZWVkIHRvIGZpbmQgdGhlIHBhY2thZ2UuanNvbidzIG5hbWUgY2F1c2UgbnBtIHVzaW5nIHRoZSBuYW1lIGluIHBhY2thZ2UuanNvbidzIG5hbWUgZmlsZWRcclxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XHJcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luOiAke25hbWVPclBhdGh9YClcclxuICAgICAgICByZXR1cm4gJydcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYWNrYWdlSlNPTlBhdGggPSBwYXRoLnBvc2l4LmpvaW4obmFtZU9yUGF0aCwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlSlNPTlBhdGgpKSB7XHJcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luOiAke25hbWVPclBhdGh9YClcclxuICAgICAgICByZXR1cm4gJydcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBwa2cgPSBmcy5yZWFkSlNPTlN5bmMocGFja2FnZUpTT05QYXRoKSB8fCB7fVxyXG4gICAgICAgIGlmICghcGtnLm5hbWU/LmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcclxuICAgICAgICAgIGxvZ2dlci53YXJuKGBUaGUgcGx1Z2luIHBhY2thZ2UuanNvbidzIG5hbWUgZmlsZWQgaXMgJHtwa2cubmFtZSBhcyBzdHJpbmcgfHwgJ2VtcHR5J30sIG5lZWQgdG8gaW5jbHVkZSB0aGUgcHJlZml4OiBwaWNnby1wbHVnaW4tYClcclxuICAgICAgICAgIHJldHVybiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGtnLm5hbWVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGhhbmRsZSB0cmFuc2Zvcm0gdGhlIHBhdGggdG8gdW5peCBzdHlsZVxyXG4gKiBmb3IgZXhhbXBsZVxyXG4gKiAxLiBDOlxcXFx4eHhcXFxceHh4IC0+IEM6L3h4eC94eHhcclxuICogMi4gL3h4eC94eHggLT4gL3h4eC94eHhcclxuICogQHBhcmFtIHBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVVbml4U3R5bGVQYXRoID0gKHBhdGhTdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGF0aEFyciA9IHBhdGhTdHIuc3BsaXQocGF0aC5zZXApXHJcbiAgcmV0dXJuIHBhdGhBcnIuam9pbignLycpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiByZW1vdmUgcGx1Z2luIHZlcnNpb24gd2hlbiByZWdpc3RlciBwbHVnaW4gbmFtZVxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4QDEuMC4wIC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4QDEuMC4wIC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxyXG4gKiBAcGFyYW0gc2NvcGVcclxuICovXHJcbmV4cG9ydCBjb25zdCByZW1vdmVQbHVnaW5WZXJzaW9uID0gKG5hbWVPclBhdGg6IHN0cmluZywgc2NvcGU6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKCFuYW1lT3JQYXRoLmluY2x1ZGVzKCdAJykpIHtcclxuICAgIHJldHVybiBuYW1lT3JQYXRoXHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCByZWcgPSAvKC4rXFwvKT8ocGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xyXG4gICAgLy8gaWYgaXMgYSBzY29wZSBwa2dcclxuICAgIGlmIChzY29wZSkge1xyXG4gICAgICByZWcgPSAvKC4rXFwvKT8oXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi1cXHcrKShALispKi9cclxuICAgIH1cclxuICAgIGNvbnN0IG1hdGNoQXJyID0gbmFtZU9yUGF0aC5tYXRjaChyZWcpXHJcbiAgICBpZiAoIW1hdGNoQXJyKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignY2FuIG5vdCByZW1vdmUgcGx1Z2luIHZlcnNpb24nKVxyXG4gICAgICByZXR1cm4gbmFtZU9yUGF0aFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG1hdGNoQXJyWzJdXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogdGhlIGNvbmZpZyBibGFjayBpdGVtIGxpc3Qgd2hpY2ggd29uJ3QgYmUgc2V0dGVkXHJcbiAqIG9ubHkgY2FuIGJlIGdvdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNvbmZpZ0JsYWNrTGlzdCA9IFtdXHJcblxyXG4vKipcclxuICogY2hlY2sgc29tZSBjb25maWcga2V5IGlzIGluIGJsYWNrTGlzdFxyXG4gKiBAcGFyYW0ga2V5XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNDb25maWdLZXlJbkJsYWNrTGlzdCA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBjb25maWdCbGFja0xpc3Quc29tZShibGFja0l0ZW0gPT4ga2V5LnN0YXJ0c1dpdGgoYmxhY2tJdGVtKSlcclxufVxyXG5cclxuLyoqXHJcbiAqIGNoZWNrIHRoZSBpbnB1dCBjb25maWcgaXMgdmFsaWRcclxuICogY29uZmlnIG11c3QgYmUgb2JqZWN0IHN1Y2ggYXMgeyB4eHg6ICd4eHgnIH1cclxuICogJiYgY2FuJ3QgYmUgYXJyYXlcclxuICogQHBhcmFtIGNvbmZpZ1xyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzSW5wdXRDb25maWdWYWxpZCA9IChjb25maWc6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gIGlmIChcclxuICAgIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmXHJcbiAgICAhQXJyYXkuaXNBcnJheShjb25maWcpICYmXHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA+IDBcclxuICApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2FmZVBhcnNlPFQ+IChzdHI6IHN0cmluZyk6IFQgfCBzdHJpbmcge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpXHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIHJldHVybiBzdHJcclxuICB9XHJcbn1cclxuXHJcbi8vIGhvbGQuLi5cclxuLy8gZXhwb3J0IGNvbnN0IGNvbmZpZ1doaXRlTGlzdDogUmVnRXhwW10gPSBbXHJcbi8vICAgL15waWNCZWQvLFxyXG4vLyAgIC9ecGljZ29QbHVnaW5zLyxcclxuLy8gICAvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLFxyXG4vLyAgIC9kZWJ1Zy8sXHJcbi8vICAgL3NpbGVudC8sXHJcbi8vICAgL2NvbmZpZ1BhdGgvLFxyXG4vLyAgIC9ec2V0dGluZ3MvLFxyXG4vLyBdXHJcblxyXG4vLyBleHBvcnQgY29uc3QgaXNDb25maWdLZXlJbldoaXRlTGlzdCA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4vLyAgIHJldHVybiBjb25maWdXaGl0ZUxpc3Quc29tZSh3aGl0ZUl0ZW0gPT4gd2hpdGVJdGVtLnRlc3Qoa2V5KSlcclxuLy8gfVxyXG5cclxuZXhwb3J0IGNvbnN0IGZvcmNlTnVtYmVyID0gKG51bTogc3RyaW5nIHwgbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XHJcbiAgcmV0dXJuIGlzTmFOKE51bWJlcihudW0pKSA/IDAgOiBOdW1iZXIobnVtKVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNEZXYgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc1Byb2QgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gdGV4dDJTVkcgKFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgY29sb3I/OiBzdHJpbmcsXHJcbiAgZm9udEZhbWlseT86IHN0cmluZ1xyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHRleHQgPSAhdGV4dCA/ICfmtYvor5UnIDogdGV4dFxyXG4gIGZvbnRGYW1pbHkgPSAhZm9udEZhbWlseSA/IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCA6IGZvbnRGYW1pbHlcclxuICBjb2xvciA9ICFjb2xvciA/ICdyZ2JhKDIwNCwgMjA0LCAyMDQsIDAuNDUpJyA6IGNvbG9yXHJcbiAgY29uc3QgdGV4dDJTVkcgPSBUZXh0VG9TVkcubG9hZFN5bmMoZm9udEZhbWlseSlcclxuICBjb25zdCBvcHRpb25zOiBUZXh0VG9TVkcuR2VuZXJhdGlvbk9wdGlvbnMgPSB7XHJcbiAgICBhbmNob3I6ICd0b3AnLFxyXG4gICAgYXR0cmlidXRlczoge1xyXG4gICAgICBmaWxsOiBjb2xvclxyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCB0ZXh0U1ZHID0gdGV4dDJTVkcuZ2V0U1ZHKHRleHQsIG9wdGlvbnMpXHJcbiAgY29uc3Qgc3ZnID0gQnVmZmVyLmZyb20odGV4dFNWRylcclxuICByZXR1cm4gc3ZnXHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnYXNzZXRzJywgJ3BpY2xpc3QucG5nJylcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBBZGRXYXRlcm1hcmsgKFxyXG4gIGltZzogQnVmZmVyLFxyXG4gIHdhdGVybWFya1R5cGU6ICd0ZXh0JyB8ICdpbWFnZScsXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgaXNGdWxsU2NyZWVuV2F0ZXJtYXJrPzogYm9vbGVhbixcclxuICB3YXRlcm1hcmtEZWdyZWU/OiBudW1iZXIsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtTY2FsZVJhdGlvPzogbnVtYmVyLFxyXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcclxuICBwb3NpdGlvbj86IHNoYXJwLkdyYXZpdHlcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB3YXRlcm1hcmtTY2FsZVJhdGlvID0gIXdhdGVybWFya1NjYWxlUmF0aW8gfHwgd2F0ZXJtYXJrU2NhbGVSYXRpbyA8IDAgfHwgd2F0ZXJtYXJrU2NhbGVSYXRpbyA+IDEgPyAwLjE1IDogd2F0ZXJtYXJrU2NhbGVSYXRpb1xyXG4gIGNvbnN0IGltYWdlID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXHJcbiAgY29uc3QgeyB3aWR0aDogaW1nV2lkdGggPSAyMDAgfSA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKClcclxuICBjb25zdCB3YXRlcm1hcmsgPSBhd2FpdCBjcmVhdGVXYXRlcm1hcmsoXHJcbiAgICB3YXRlcm1hcmtUeXBlLFxyXG4gICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgdGV4dCxcclxuICAgIHdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgd2F0ZXJtYXJrU2NhbGVSYXRpbyxcclxuICAgIHdhdGVybWFya0NvbG9yLFxyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoLFxyXG4gICAgaW1nV2lkdGgsXHJcbiAgICB3YXRlcm1hcmtEZWdyZWVcclxuICApXHJcbiAgY29uc3QgY29tcG9zaXRlZCA9IGF3YWl0IGltYWdlXHJcbiAgICAuY29tcG9zaXRlKFtcclxuICAgICAge1xyXG4gICAgICAgIGlucHV0OiB3YXRlcm1hcmssXHJcbiAgICAgICAgZ3Jhdml0eTogcG9zaXRpb24gfHwgJ3NvdXRoZWFzdCcsXHJcbiAgICAgICAgdGlsZTogaXNGdWxsU2NyZWVuV2F0ZXJtYXJrXHJcbiAgICAgIH1cclxuICAgIF0pXHJcbiAgICAudG9CdWZmZXIoKVxyXG4gIHJldHVybiBjb21wb3NpdGVkXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdhdGVybWFyayAoXHJcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ZvbnRQYXRoPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXHJcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrSW1hZ2VQYXRoPzogc3RyaW5nLFxyXG4gIGltZ1dpZHRoOiBudW1iZXIgPSAyMDAsXHJcbiAgd2F0ZXJtYXJrRGVncmVlOiBudW1iZXIgPSAwXHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgbGV0IHdhdGVybWFyazogYW55XHJcbiAgaWYgKHdhdGVybWFya1R5cGUgPT09ICdpbWFnZScpIHtcclxuICAgIHdhdGVybWFya0ltYWdlUGF0aCA9IHdhdGVybWFya0ltYWdlUGF0aCB8fCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoXHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCBzaGFycCh3YXRlcm1hcmtJbWFnZVBhdGgpLnRvQnVmZmVyKClcclxuICB9IGVsc2Uge1xyXG4gICAgd2F0ZXJtYXJrID0gYXdhaXQgdGV4dDJTVkcoXHJcbiAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgdGV4dCxcclxuICAgICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgIHdhdGVybWFya0ZvbnRQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aFxyXG4gICAgKVxyXG4gIH1cclxuICBjb25zdCB7IHdpZHRoOiB3YXRlcm1hcmtXaWR0aCwgaGVpZ2h0OiB3YXRlcm1hcmtIZWlnaHQgfSA9IGF3YWl0IGdldFNpemUoXHJcbiAgICB3YXRlcm1hcmtcclxuICApXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplV2lkdGggPSBNYXRoLmZsb29yKGltZ1dpZHRoICogZm9yY2VOdW1iZXIod2F0ZXJtYXJrU2NhbGVSYXRpbykpXHJcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0ID0gTWF0aC5mbG9vcihcclxuICAgICh3YXRlcm1hcmtSZXNpemVXaWR0aCAqIHdhdGVybWFya0hlaWdodCkgLyB3YXRlcm1hcmtXaWR0aFxyXG4gIClcclxuICByZXR1cm4gYXdhaXQgc2hhcnAod2F0ZXJtYXJrKVxyXG4gICAgLnJlc2l6ZSh3YXRlcm1hcmtSZXNpemVXaWR0aCwgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0LCB7XHJcbiAgICAgIGZpdDogJ2luc2lkZSdcclxuICAgIH0pXHJcbiAgICAucm90YXRlKHdhdGVybWFya0RlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIC50b0J1ZmZlcigpXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFNpemUgKGltYWdlOiBCdWZmZXIpOiBQcm9taXNlPHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfT4ge1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgc2hhcnAoaW1hZ2UpLm1ldGFkYXRhKClcclxuICByZXR1cm4geyB3aWR0aDogd2lkdGggfHwgMjAwLCBoZWlnaHQ6IGhlaWdodCB8fCAyMDAgfVxyXG59XHJcblxyXG5jb25zdCB2YWxpZFBhcmFtID0gKC4uLnBhcmFtczogYW55W10pOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gcGFyYW1zLmV2ZXJ5KHBhcmFtID0+IHtcclxuICAgIGlmIChwYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtICE9PSAnJ1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHBhcmFtID4gMFxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0ID0gW1xyXG4gICdhdmlmJyxcclxuICAnZHonLFxyXG4gICdmaXRzJyxcclxuICAnZ2lmJyxcclxuICAnaGVpZicsXHJcbiAgJ2lucHV0JyxcclxuICAnanBlZycsXHJcbiAgJ2pwZycsXHJcbiAgJ2pwMicsXHJcbiAgJ2p4bCcsXHJcbiAgJ21hZ2ljaycsXHJcbiAgJ29wZW5zbGlkZScsXHJcbiAgJ3BkZicsXHJcbiAgJ3BuZycsXHJcbiAgJ3BwbScsXHJcbiAgJ3JhdycsXHJcbiAgJ3N2ZycsXHJcbiAgJ3RpZmYnLFxyXG4gICd0aWYnLFxyXG4gICd2JyxcclxuICAnd2VicCdcclxuXVxyXG5cclxuY29uc3QgdmFsaWRPdXRwdXRGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QuaW5jbHVkZXMoZm9ybWF0KVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUV4dExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICd3ZWJwJywgJ2JtcCcsICd0aWZmJywgJ3RpZicsICdzdmcnLCAnaWNvJywgJ2F2aWYnLCAnaGVpZicsICdoZWljJ11cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbWFnZUFkZFdhdGVyTWFyayAoaW1nOiBCdWZmZXIsIG9wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlcik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdHJ5IHtcclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMud2F0ZXJtYXJrVGV4dCkpIHtcclxuICAgICAgaW1hZ2UgPSBzaGFycChhd2FpdCBBZGRXYXRlcm1hcmsoXHJcbiAgICAgICAgaW1nLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXHJcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxyXG4gICAgICApLCB7IGFuaW1hdGVkOiB0cnVlIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxyXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgIGxvZ2dlci5lcnJvcihgSW1hZ2UgYWRkIHdhdGVybWFyayBlcnJvcjogJHtlcnJvcn1gKVxyXG4gICAgcmV0dXJuIGltZ1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm9ybWF0T3B0aW9ucyAob3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMpOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB7XHJcbiAgY29uc3QgZm9ybWF0Q29udmVydE9iaiA9IHR5cGVvZiBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmogPT09ICdzdHJpbmcnID8gc2FmZVBhcnNlKG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaikgOiBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmpcclxuICByZXR1cm4ge1xyXG4gICAgcXVhbGl0eTogZm9yY2VOdW1iZXIob3B0aW9ucy5xdWFsaXR5KSxcclxuICAgIGlzQ29udmVydDogb3B0aW9ucy5pc0NvbnZlcnQgfHwgZmFsc2UsXHJcbiAgICBjb252ZXJ0Rm9ybWF0OiBvcHRpb25zLmNvbnZlcnRGb3JtYXQgfHwgJ2pwZycsXHJcbiAgICBpc1JlU2l6ZTogb3B0aW9ucy5pc1JlU2l6ZSB8fCBmYWxzZSxcclxuICAgIHJlU2l6ZUhlaWdodDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVIZWlnaHQpLFxyXG4gICAgcmVTaXplV2lkdGg6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplV2lkdGgpLFxyXG4gICAgc2tpcFJlU2l6ZU9mU21hbGxJbWc6IG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgZmFsc2UsXHJcbiAgICBpc1JlU2l6ZUJ5UGVyY2VudDogb3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZSxcclxuICAgIHJlU2l6ZVBlcmNlbnQ6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplUGVyY2VudCksXHJcbiAgICBpc1JvdGF0ZTogb3B0aW9ucy5pc1JvdGF0ZSB8fCBmYWxzZSxcclxuICAgIGlzRmxpcDogb3B0aW9ucy5pc0ZsaXAgfHwgZmFsc2UsXHJcbiAgICBpc0Zsb3A6IG9wdGlvbnMuaXNGbG9wIHx8IGZhbHNlLFxyXG4gICAgcm90YXRlRGVncmVlOiBmb3JjZU51bWJlcihvcHRpb25zLnJvdGF0ZURlZ3JlZSksXHJcbiAgICBwaWNCZWQ6IG9wdGlvbnMucGljQmVkIHx8ICdzbW1zJyxcclxuICAgIGZvcm1hdENvbnZlcnRPYmo6IGZvcm1hdENvbnZlcnRPYmogfHwge31cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbWFnZVByb2Nlc3MgKGltZzogQnVmZmVyLCBvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucywgcmF3Rm9ybWF0OiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlcik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucylcclxuICB0cnkge1xyXG4gICAgcmF3Rm9ybWF0ID0gcmF3Rm9ybWF0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gICAgaWYgKCFpbWFnZUV4dExpc3QuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xyXG4gICAgICByZXR1cm4gaW1nXHJcbiAgICB9XHJcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXHJcbiAgICBsZXQgcXVhbGl0eSA9IDEwMFxyXG4gICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5xdWFsaXR5KSAmJiBvcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICAgIHF1YWxpdHkgPSBvcHRpb25zLnF1YWxpdHkhXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCkge1xyXG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcclxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXHJcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcclxuICAgICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhIC8gMTAwKSxcclxuICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZUhlaWdodCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEgLyAxMDApLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmlzUmVTaXplKSB7XHJcbiAgICAgIGlmICgodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDApICYmICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDApKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoLFxyXG4gICAgICAgICAgb3B0aW9ucy5yZVNpemVIZWlnaHQsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpdDogJ2ZpbGwnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCkgJiYgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAwKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPCBpbWFnZUhlaWdodCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NhbGVSYXRpbyA9IG9wdGlvbnMucmVTaXplSGVpZ2h0IC8gaW1hZ2VIZWlnaHRcclxuICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZVdpZHRoICogc2NhbGVSYXRpbyksXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZVNpemVIZWlnaHQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICgodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplV2lkdGggPiAwKSAmJiAodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gMCkpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxyXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcclxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xyXG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IChvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nICYmIG9wdGlvbnMucmVTaXplV2lkdGggPCBpbWFnZVdpZHRoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVXaWR0aCAvIGltYWdlV2lkdGhcclxuICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZVNpemVXaWR0aCxcclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogc2NhbGVSYXRpbyksXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0ZsaXApIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5mbGlwKClcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzRmxvcCkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLmZsb3AoKVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNDb252ZXJ0KSB7XHJcbiAgICAgIGNvbnN0IG5ld0Zvcm1hdCA9IGdldENvbnZlcnRlZEZvcm1hdChvcHRpb25zLCByYXdGb3JtYXQpIGFzIGFueVxyXG4gICAgICBpZiAobmV3Rm9ybWF0ICE9PSByYXdGb3JtYXQpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KG5ld0Zvcm1hdCwge1xyXG4gICAgICAgICAgcXVhbGl0eSxcclxuICAgICAgICAgIG1vempwZWc6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocmF3Rm9ybWF0ICYmIHZhbGlkT3V0cHV0Rm9ybWF0KHJhd0Zvcm1hdCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KHJhd0Zvcm1hdCBhcyBhbnksIHtcclxuICAgICAgICAgIHF1YWxpdHksXHJcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XHJcbiAgICAgICAgICBxdWFsaXR5LFxyXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXHJcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBwcm9jZXNzIGVycm9yOiAke2Vycm9yfWApXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udmVydGVkRm9ybWF0IChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgcmF3Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIG9wdGlvbnMgPSBmb3JtYXRPcHRpb25zKG9wdGlvbnMgfHwge30pXHJcbiAgcmF3Rm9ybWF0ID0gcmF3Rm9ybWF0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGxldCBuZXdGb3JtYXQgPSBvcHRpb25zPy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgaWYgKG9wdGlvbnM/LmZvcm1hdENvbnZlcnRPYmogJiYgT2JqZWN0LmtleXMob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKS5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqID0gb3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqXHJcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqS2V5cyA9IE9iamVjdC5rZXlzKGZvcm1hdENvbnZlcnRPYmopXHJcbiAgICBpZiAoZm9ybWF0Q29udmVydE9iaktleXMuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xyXG4gICAgICBuZXdGb3JtYXQgPSBmb3JtYXRDb252ZXJ0T2JqW3Jhd0Zvcm1hdF1cclxuICAgICAgaWYgKCF2YWxpZE91dHB1dEZvcm1hdChuZXdGb3JtYXQpKSB7XHJcbiAgICAgICAgbmV3Rm9ybWF0ID0gJ2pwZydcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAob3B0aW9ucz8ucGljQmVkID09PSAnaW1ndXInICYmIG5ld0Zvcm1hdCA9PT0gJ3dlYnAnKSB7XHJcbiAgICBuZXdGb3JtYXQgPSAnanBnJ1xyXG4gIH1cclxuICByZXR1cm4gbmV3Rm9ybWF0XHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRm9ybWF0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnLCAnZ2lmJ11cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQWRkV2F0ZXJtYXJrID0gKHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgcmV0dXJuICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQ29tcHJlc3MgPSAoY29tcHJlc3NPcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgY29uc3Qgbm9ybWFsaXplZEV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcblxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKG5vcm1hbGl6ZWRFeHQpIHx8ICFjb21wcmVzc09wdGlvbnMpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgY29uc3Qge1xyXG4gICAgcXVhbGl0eSxcclxuICAgIGlzUmVTaXplQnlQZXJjZW50LFxyXG4gICAgcmVTaXplUGVyY2VudCxcclxuICAgIGlzUmVTaXplLFxyXG4gICAgcmVTaXplSGVpZ2h0LFxyXG4gICAgcmVTaXplV2lkdGgsXHJcbiAgICBpc1JvdGF0ZSxcclxuICAgIHJvdGF0ZURlZ3JlZSxcclxuICAgIGlzQ29udmVydCxcclxuICAgIGNvbnZlcnRGb3JtYXQsXHJcbiAgICBpc0ZsaXAsXHJcbiAgICBpc0Zsb3BcclxuICB9ID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXHJcblxyXG4gIGlmICh2YWxpZFBhcmFtKHF1YWxpdHkpICYmIHF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNSZVNpemVCeVBlcmNlbnQgJiYgdmFsaWRQYXJhbShyZVNpemVQZXJjZW50KSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzUmVTaXplICYmICgodHlwZW9mIHJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgcmVTaXplSGVpZ2h0ID4gMCkgfHwgKHR5cGVvZiByZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgcmVTaXplV2lkdGggPiAwKSkpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc1JvdGF0ZSAmJiByb3RhdGVEZWdyZWUpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc0ZsaXAgfHwgaXNGbG9wKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNDb252ZXJ0KSB7XHJcbiAgICBjb25zdCBuZXdGb3JtYXQgPSBjb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgICByZXR1cm4gZmlsZUV4dCAhPT0gbmV3Rm9ybWF0XHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcmVtb3ZlRXhpZiA9IGFzeW5jIChpbWc6IEJ1ZmZlciwgZmlsZUV4dDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+ID0+IHtcclxuICBmaWxlRXh0ID0gZmlsZUV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcclxuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KSB8fCBmaWxlRXh0ID09PSAnc3ZnJykge1xyXG4gICAgcmV0dXJuIGltZ1xyXG4gIH1cclxuICByZXR1cm4gYXdhaXQgc2hhcnAoaW1nLCB7XHJcbiAgICBhbmltYXRlZDogdHJ1ZVxyXG4gIH0pLnRvQnVmZmVyKClcclxufVxyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCB1cGxvYWQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwbG9hZCwgZ28gZ28gZ28nKVxyXG4gICAgICAuYXJndW1lbnRzKCdbaW5wdXQuLi5dJylcclxuICAgICAgLmFsaWFzKCd1JylcclxuICAgICAgLmFjdGlvbigoaW5wdXQ6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGlucHV0XHJcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXHJcbiAgICAgICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGAke2l0ZW19IGRvZXMgbm90IGV4aXN0LmApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBleGlzdFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3F1YWxpdHknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFknKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucXVhbGl0eSB8fCAxMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0NvbnZlcnQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNDb252ZXJ0IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY29udmVydEZvcm1hdCcsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBjaG9pY2VzOiBbJ2F2aWYnLCAnZHonLCAnZml0cycsICdnaWYnLCAnaGVpZicsICdpbnB1dCcsICdqcGVnJywgJ2pwZycsICdqcDInLCAnanhsJywgJ21hZ2ljaycsICdvcGVuc2xpZGUnLCAncGRmJywgJ3BuZycsICdwcG0nLCAncmF3JywgJ3N2ZycsICd0aWZmJywgJ3RpZicsICd2JywgJ3dlYnAnXSxcclxuICAgICAgZGVmYXVsdDogJ2pwZydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVXaWR0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVdpZHRoIHx8IDUwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZUhlaWdodCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplSGVpZ2h0IHx8IDUwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NraXBSZVNpemVPZlNtYWxsSW1nJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUcnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplQnlQZXJjZW50JyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplUGVyY2VudCB8fCA1MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzRmxpcCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0ZsaXAgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0Zsb3AnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0ZMT1AnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0ZMT1AnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNGbG9wIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSb3RhdGUnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JPVEFURScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUm90YXRlIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncm90YXRlRGVncmVlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yb3RhdGVEZWdyZWUgfHwgOTBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JlbW92ZUV4aWYnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZW1vdmVFeGlmIHx8IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0FkZFdhdGVybWFyaycsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0FkZFdhdGVybWFyayB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1R5cGUnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBjaG9pY2VzOiBbJ3RleHQnLCAnaW1hZ2UnXSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUeXBlIHx8ICd0ZXh0J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzRnVsbFNjcmVlbldhdGVybWFyaycsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRnVsbFNjcmVlbldhdGVybWFyayB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0RlZ3JlZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtEZWdyZWUgfHwgMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1RleHQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUZXh0IHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRm9udFBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRm9udFBhdGggfHwgJydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtTY2FsZVJhdGlvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0NvbG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1InKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0NvbG9yIHx8ICdyZ2JhKDIwNCwgMjA0LCAyMDQsIDAuNDUpJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ltYWdlUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtJbWFnZVBhdGggfHwgJydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtQb3NpdGlvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWydub3J0aCcsICdub3J0aGVhc3QnLCAnc291dGhlYXN0JywgJ3NvdXRoJywgJ3NvdXRod2VzdCcsICdub3J0aHdlc3QnLCAnd2VzdCcsICdlYXN0JywgJ2NlbnRlcicsICdjZW50cmUnXSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtQb3NpdGlvbiB8fCAnc291dGhlYXN0J1xyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxhbnk+KCdidWlsZEluLnJlbmFtZScpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmb3JtYXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9GT1JNQVQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZm9ybWF0IHx8ICd7ZmlsZW5hbWV9J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2VuYWJsZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9FTkFCTEUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRU5BQkxFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuYWJsZSB8fCBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNvbXByZXNzIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzJ1xyXG5pbXBvcnQgd2F0ZXJtYXJrIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL3dhdGVybWFyaydcclxuaW1wb3J0IHJlbmFtZSBmcm9tICcuLi9iZWZvcmV1cGxvYWQvYnVpbGRJblJlbmFtZSdcclxuXHJcbi8vIGhhbmRsZSBtb2R1bGVzIGNvbmZpZyAtPiBzYXZlIHRvIHBpY2dvIGNvbmZpZyBmaWxlXHJcbmNvbnN0IGhhbmRsZUNvbmZpZyA9IGFzeW5jIChjdHg6IElQaWNHbywgcHJvbXB0czogSVBsdWdpbkNvbmZpZ1tdLCBtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQocHJvbXB0cylcclxuICBjb25zdCBjb25maWdOYW1lID0gbW9kdWxlID09PSAndXBsb2FkZXInXHJcbiAgICA/IGBwaWNCZWQuJHtuYW1lfWBcclxuICAgIDogbW9kdWxlID09PSAndHJhbnNmb3JtZXInXHJcbiAgICAgID8gYHRyYW5zZm9ybWVyLiR7bmFtZX1gXHJcbiAgICAgIDogbW9kdWxlID09PSAnYnVpbGRpbidcclxuICAgICAgICA/IGBidWlsZEluLiR7bmFtZX1gXHJcbiAgICAgICAgOiBuYW1lXHJcbiAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgW2NvbmZpZ05hbWVdOiBhbnN3ZXJcclxuICB9KVxyXG4gIGlmIChtb2R1bGUgPT09ICd1cGxvYWRlcicpIHtcclxuICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3BpY0JlZC5jdXJyZW50JzogbmFtZSxcclxuICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IG5hbWVcclxuICAgIH0pXHJcbiAgfSBlbHNlIGlmIChtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcicpIHtcclxuICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IG5hbWVcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBzZXR0aW5nID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnc2V0JylcclxuICAgICAgLmFsaWFzKCdjb25maWcnKVxyXG4gICAgICAuYXJndW1lbnRzKCc8bW9kdWxlPiBbbmFtZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NvbmZpZ3VyZSBjb25maWcgb2YgcGljZ28gbW9kdWxlcywgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxyXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICAvLyBpZiBhIG1vZHVsZSBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcclxuICAgICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdidWlsZGluJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHdhdGVybWFyay5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAncmVuYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydjb21wcmVzcycsICd3YXRlcm1hcmsnLCAncmVuYW1lJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgYnVpbGRpbiBtb2R1bGUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5idWlsZGluID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAncmVuYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHJlbmFtZS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICd1cGxvYWRlcic6XHJcbiAgICAgICAgICAgICAgY2FzZSAndHJhbnNmb3JtZXInOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQobmFtZSlcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihgTm8gJHttb2R1bGV9IG5hbWVkICR7bmFtZX1gKTsgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke21vZHVsZX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlclttb2R1bGVdLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYENob29zZSBhKG4pICR7bW9kdWxlfWBcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAncGx1Z2luJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghbmFtZS5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHgubG9nLmVycm9yKGBObyBwbHVnaW4gbmFtZWQgJHtuYW1lfWApOyByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2luJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBwbHVnaW4nXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgYW5zd2VyLnBsdWdpbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJyk7IHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcclxuICAgICAgICAgICAgaWYgKG1vZHVsZSA9PT0gJ3BsdWdpbicpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oJ0lmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGNvbmZpZywgcGxlYXNlIHJ1biBcXCdwaWNnbyB1c2UgcGx1Z2luc1xcJycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgc2V0dGluZ1xyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luLCB0eXBlIFVuZGVmaW5hYmxlLCB0eXBlIElDTElDb25maWdzLCB0eXBlIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVzZTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VzZScpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1c2UgbW9kdWxlcyBvZiBwaWNnbycpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICBsZXQgcHJvbXB0czogYW55W10gPSBbXVxyXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xyXG4gICAgICAgICAgICAgIHVwbG9hZGVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhbiB1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnVwbG9hZGVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHBsdWdpbnM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIHBsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBjdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtpdGVtfWApKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcclxuICAgICAgICAgICAgICAgIHByb21wdHMucHVzaChjb25maWdbbW9kdWxlXSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnMnKTsgcmV0dXJuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHByb21wdHMgPSBPYmplY3Qua2V5cyhjb25maWcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBjb25maWdbaXRlbV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgZm9yIHBsdWdpbnMgb3B0aW9uIGZyb20gQXJyYXkgdG8gb2JqZWN0XHJcbiAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSBjdHguZ2V0Q29uZmlnPElTdHJpbmdLZXlNYXA8Ym9vbGVhbj4+KCdwaWNnb1BsdWdpbnMnKVxyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBsdWdpbnMpLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciBwbHVnaW5zXHJcbiAgICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICAgcGljZ29QbHVnaW5zOiBwbHVnaW5zXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgdXBsb2FkZXIgJiB0cmFuc2Zvcm1lclxyXG4gICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC5jdXJyZW50JzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcclxuICAgICAgICAgICAgICAncGljQmVkLnVwbG9hZGVyJzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcclxuICAgICAgICAgICAgICAncGljQmVkLnRyYW5zZm9ybWVyJzogYW5zd2VyLnRyYW5zZm9ybWVyIHx8ICdwYXRoJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwcm94eTogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgJ3BpY0JlZC5wcm94eSc6IHByb3h5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByb3h5XHJcbiIsImltcG9ydCBtYXRjaCBmcm9tICdtaW5pbWF0Y2gnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElPcHRpb25zLCB0eXBlIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xyXG5pbXBvcnQgZWpzIGZyb20gJ2VqcydcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0ZW1wbGF0ZSBmaWxlcyB0byBkZXN0aW5hdGlvbiBmaWxlcy5cclxuICogQHBhcmFtIHtQaWNHb30gY3R4XHJcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRpb25zKG9wdGlvbnMudG1wKVxyXG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKG9wdGlvbnMudG1wLCAndGVtcGxhdGUnKVxyXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxyXG4gICAgaWYgKG9wdHMucHJvbXB0cyAmJiBvcHRzLnByb21wdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhbnN3ZXJzID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQob3B0cy5wcm9tcHRzKVxyXG4gICAgfVxyXG4gICAgbGV0IF9maWxlczogc3RyaW5nW10gPSBhd2FpdCBnbG9iYnkoWycqKi8qJ10sIHsgY3dkOiBzb3VyY2UsIGRvdDogdHJ1ZSB9KSAvLyBnZXQgZmlsZXMnIG5hbWUgYXJyYXlcclxuICAgIF9maWxlcyA9IF9maWxlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICBsZXQgZ2xvYiA9ICcnXHJcbiAgICAgIE9iamVjdC5rZXlzKG9wdHMuZmlsdGVycykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAobWF0Y2goaXRlbSwga2V5LCB7IGRvdDogdHJ1ZSB9KSkge1xyXG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChnbG9iKSB7IC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzKGN0eCwgb3B0cy5maWx0ZXJzW2dsb2JdLCBhbnN3ZXJzKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjdHgubG9nLndhcm4oJ1RlbXBsYXRlIGZpbGVzIG5vdCBmb3VuZCEnKTsgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWxlcyA9IHJlbmRlcihfZmlsZXMsIHNvdXJjZSwgYW5zd2VycylcclxuICAgIHdyaXRlRmlsZVRyZWUob3B0aW9ucy5kZXN0LCBmaWxlcylcclxuICAgIGlmICh0eXBlb2Ygb3B0cy5jb21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBvcHRzLmNvbXBsZXRlKHsgYW5zd2Vycywgb3B0aW9ucywgZmlsZXM6IF9maWxlcywgY3R4IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0cy5jb21wbGV0ZU1lc3NhZ2UpIHtcclxuICAgICAgY3R4LmxvZy5zdWNjZXNzKG9wdHMuY29tcGxldGVNZXNzYWdlKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKCdEb25lIScpXHJcbiAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcclxuICogQHBhcmFtIGN0eCBQaWNHb1xyXG4gKiBAcGFyYW0gZXhwIGNvbmRpdGlvbiBleHByZXNzaW9uXHJcbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxyXG4gKi9cclxuY29uc3QgZmlsdGVycyA9IChjdHg6IElQaWNHbywgZXhwOiBhbnksIGRhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcclxuICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbignZGF0YScsICd3aXRoIChkYXRhKSB7IHJldHVybiAnICsgZXhwICsgJ30nKVxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gZm4oZGF0YSlcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBjdHgubG9nLmVycm9yKGBFcnJvciB3aGVuIGV2YWx1YXRpbmcgZmlsdGVyIGNvbmRpdGlvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgb3B0aW9uc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXHJcbiAqL1xyXG5jb25zdCBnZXRPcHRpb25zID0gKHRlbXBsYXRlUGF0aDogc3RyaW5nKTogYW55ID0+IHtcclxuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9uc1BhdGgpKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXHJcbiAgICByZXR1cm4gb3B0aW9uc1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4ge31cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXIgZmlsZXMgdG8gYSB2aXJ0dWFsIHRyZWUgb2JqZWN0XHJcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCByZW5kZXIgPSAoZmlsZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55ID0+IHtcclxuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cclxuICBmaWxlcy5mb3JFYWNoKChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihzb3VyY2UsIGZpbGVQYXRoKSwgJ3V0ZjgnKVxyXG4gICAgY29uc3QgY29udGVudCA9IGVqcy5yZW5kZXIoZmlsZSwgb3B0aW9ucylcclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xyXG4gICAgICBmaWxlVHJlZVtmaWxlUGF0aF0gPSBjb250ZW50XHJcbiAgICB9XHJcbiAgfSlcclxuICByZXR1cm4gZmlsZVRyZWVcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyaXRlIHJlbmRlcmVkIGZpbGVzJyBjb250ZW50IHRvIHJlYWwgZmlsZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWxlc1xyXG4gKi9cclxuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xyXG4gIE9iamVjdC5rZXlzKGZpbGVzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSlcclxuICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcclxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGZpbGVzW25hbWVdKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgZmlsdGVycyxcclxuICBnZW5lcmF0ZSxcclxuICByZW5kZXIsXHJcbiAgd3JpdGVGaWxlVHJlZVxyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luaXRVdGlscydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXHJcbmltcG9ydCB7IHR5cGUgSU9wdGlvbnMsIHR5cGUgSVBsdWdpbiwgdHlwZSBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHJtIGZyb20gJ3JpbXJhZidcclxuXHJcbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcclxuICAvLyBjb25zdCBuYW1lID0gb3B0aW9ucy5pblBsYWNlID8gcGF0aC5yZWxhdGl2ZSgnLi4vJywgcHJvY2Vzcy5jd2QoKSkgOiBvcHRpb25zLnByb2plY3RcclxuICBpZiAob3B0aW9ucy5vZmZsaW5lKSB7IC8vIG9mZmxpbmUgbW9kZVxyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50ZW1wbGF0ZSkpIHtcclxuICAgICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXHJcbiAgICB9XHJcbiAgfSBlbHNlIHsgLy8gb25saW5lIG1vZGVcclxuICAgIG9wdGlvbnMudGVtcGxhdGUgPSAhb3B0aW9ucy5oYXNTbGFzaFxyXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxyXG4gICAgICA6IG9wdGlvbnMudGVtcGxhdGVcclxuICAgIGRvd25sb2FkQW5kR2VuZXJhdGUoY3R4LCBvcHRpb25zKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGRvd25sb2FkIHRlbXBsYXRlICYgZ2VuZXJhdGVcclxuICogQHBhcmFtIHsgUGljR28gfSBjdHhcclxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXHJcbiAqL1xyXG5jb25zdCBkb3dubG9hZEFuZEdlbmVyYXRlID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xyXG4gICAgcm0uc3luYyhvcHRpb25zLnRtcClcclxuICB9XHJcbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxyXG4gIGRvd25sb2FkKG9wdGlvbnMudGVtcGxhdGUsIG9wdGlvbnMudG1wLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIH0sIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICBpZiAoZXJyKSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoZXJyKTsgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGVkIScpXHJcbiAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBpbml0OiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5pdCcpXHJcbiAgICAgIC5hcmd1bWVudHMoJzx0ZW1wbGF0ZT4gW3Byb2plY3RdJylcclxuICAgICAgLm9wdGlvbignLS1jbG9uZScsICd1c2UgZ2l0IGNsb25lJylcclxuICAgICAgLm9wdGlvbignLS1vZmZsaW5lJywgJ3VzZSBjYWNoZWQgdGVtcGxhdGUnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NyZWF0ZSBwaWNnbyBwbHVnaW5cXCdzIGRldmVsb3BtZW50IHRlbXBsYXRlcycpXHJcbiAgICAgIC5hY3Rpb24oKHRlbXBsYXRlOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIC8vIFRoYW5rcyB0byB2dWUtY2xpIGluaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtY2xpL2Jsb2IvbWFzdGVyL2Jpbi92dWUtaW5pdFxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzU2xhc2ggPSB0ZW1wbGF0ZS5pbmNsdWRlcygnLycpXHJcbiAgICAgICAgICAgIGNvbnN0IGluUGxhY2UgPSAhcHJvamVjdCB8fCBwcm9qZWN0ID09PSAnLidcclxuICAgICAgICAgICAgY29uc3QgZGVzdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0IHx8ICcuJylcclxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBwcm9ncmFtLmNsb25lIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIGNvbnN0IG9mZmxpbmUgPSBwcm9ncmFtLm9mZmxpbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3QgdG1wID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNsaXN0L3RlbXBsYXRlcycsIHRlbXBsYXRlLnJlcGxhY2UoL1svOl0vZywgJy0nKSkgLy8gZm9yIGNhY2hpbmcgdGVtcGxhdGVcclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtLm9mZmxpbmUpIHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgIHByb2plY3QsXHJcbiAgICAgICAgICAgICAgaGFzU2xhc2gsXHJcbiAgICAgICAgICAgICAgaW5QbGFjZSxcclxuICAgICAgICAgICAgICBkZXN0LFxyXG4gICAgICAgICAgICAgIGNsb25lLFxyXG4gICAgICAgICAgICAgIHRtcCxcclxuICAgICAgICAgICAgICBvZmZsaW5lXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHByb2plY3QgaXMgZW1wdHkgb3IgZXhpc3RcclxuICAgICAgICAgICAgaWYgKGluUGxhY2UgfHwgZnMuZXhpc3RzU3luYyhkZXN0KSkge1xyXG4gICAgICAgICAgICAgIGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBpblBsYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnR2VuZXJhdGUgcHJvamVjdCBpbiBjdXJyZW50IGRpcmVjdG9yeT8nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnVGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIENvbnRpbnVlPycsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdvaydcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdKS50aGVuKChhbnN3ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5vaykge1xyXG4gICAgICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHByb2plY3QgaXMgZ2l2ZW5cclxuICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCctLWhlbHAnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFeGFtcGxlczonKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBhbiBvZmZpY2lhbCB0ZW1wbGF0ZScpKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCBwbHVnaW4gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCBzdHJhaWdodCBmcm9tIGEgZ2l0aHViIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHVzZXJuYW1lL3JlcG8gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaW5pdFxyXG4iLCJpbXBvcnQgeyB0eXBlIElQbHVnaW4sIHR5cGUgSVBpY0dvLCB0eXBlIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGkxOG46IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpMThuJylcclxuICAgICAgLmFyZ3VtZW50cygnW2xhbmddJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjaGFuZ2UgbGFuZ3VhZ2UsIHpoLUNOLCB6aC1UVywgZW4nKVxyXG4gICAgICAuYWN0aW9uKGFzeW5jIChsYW5nOiBzdHJpbmcgPSAnJykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBjdHguaTE4bi5nZXRMYW5ndWFnZUxpc3QoKVxyXG4gICAgICAgIGlmICghbGFuZykge1xyXG4gICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICBuYW1lOiAnaTE4bicsXHJcbiAgICAgICAgICAgICAgY2hvaWNlczogbGlzdCxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgbGFuZ3VhZ2UnLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXHJcbiAgICAgICAgICBsYW5nID0gYW5zd2VyLmkxOG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFsaXN0LmluY2x1ZGVzKGxhbmcpKSB7XHJcbiAgICAgICAgICBjdHgubG9nLndhcm4oJ05vIHN1Y2ggbGFuZ3VhZ2UnKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShsYW5nKVxyXG4gICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKGBMYW5ndWFnZSBzZXQgdG8gJHtsYW5nfWApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaTE4blxyXG4iLCJpbXBvcnQgeyB0eXBlIElQbHVnaW4sIHR5cGUgSUxpZmVjeWNsZVBsdWdpbnMgfSBmcm9tICcuLi90eXBlcydcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGVQbHVnaW5zIGltcGxlbWVudHMgSUxpZmVjeWNsZVBsdWdpbnMge1xyXG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0OiBNYXA8c3RyaW5nLCBJUGx1Z2luPlxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWRNYXA6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPlxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nXHJcblxyXG4gIGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubmFtZSA9IG5hbWVcclxuICAgIHRoaXMubGlzdCA9IG5ldyBNYXAoKVxyXG4gICAgdGhpcy5wbHVnaW5JZE1hcCA9IG5ldyBNYXAoKVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIgKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignaWQgaXMgcmVxdWlyZWQhJylcclxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcclxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcclxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcclxuICAgIGlmIChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pIHtcclxuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pPy5wdXNoKGlkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbiwgW2lkXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlciAocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcclxuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXHJcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXROYW1lICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZVxyXG4gIH1cclxuXHJcbiAgZ2V0IChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcclxuICB9XHJcblxyXG4gIGdldExpc3QgKCk6IElQbHVnaW5bXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cclxuICB9XHJcblxyXG4gIGdldElkTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEN1cnJlbnRQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKTogdm9pZCA9PiB7XHJcbiAgTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luID0gbmFtZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBsdWdpbk5hbWUgPSAoKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgcmV0dXJuIExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpblxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVQbHVnaW5zXHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXByb21pc2VzICovXHJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInXHJcbmltcG9ydCBpbnF1aXJlciwgeyB0eXBlIElucXVpcmVyIH0gZnJvbSAnaW5xdWlyZXInXHJcbmltcG9ydCB7IHR5cGUgSVBsdWdpbiwgdHlwZSBJQ29tbWFuZGVyLCB0eXBlIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgY29tbWFuZGVycyBmcm9tICcuLi9wbHVnaW5zL2NvbW1hbmRlcidcclxuaW1wb3J0IHsgZ2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIGltcGxlbWVudHMgSUNvbW1hbmRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lID0gJ2NvbW1hbmRlcidcclxuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdCA9IG5ldyBNYXA8c3RyaW5nLCBJUGx1Z2luPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuXHJcbiAgcHJvZ3JhbTogQ29tbWFuZFxyXG4gIGlucXVpcmVyOiBJbnF1aXJlclxyXG5cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcclxuICAgIHRoaXMuaW5xdWlyZXIgPSBpbnF1aXJlclxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvZ3JhbVxyXG4gICAgICAudmVyc2lvbihwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicpXHJcbiAgICAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ2RlYnVnIG1vZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgIGRlYnVnOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9wdGlvbignLXMsIC0tc2lsZW50JywgJ3NpbGVudCBtb2RlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub24oJ2NvbW1hbmQ6KicsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoYEludmFsaWQgY29tbWFuZDogJHt0aGlzLnByb2dyYW0uYXJncy5qb2luKCcgJyl9XFxuU2VlIC0taGVscCBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy5gKVxyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxyXG4gICAgICB9KVxyXG5cclxuICAgIC8vIGJ1aWx0LWluIGNvbW1hbmRzXHJcbiAgICBjb21tYW5kZXJzKHRoaXMuY3R4KVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIgKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignbmFtZSBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gcGx1Z2luIGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcclxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcclxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5OYW1lID0gZ2V0Q3VycmVudFBsdWdpbk5hbWUoKVxyXG4gICAgaWYgKGN1cnJlbnRQbHVnaW5OYW1lICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhjdXJyZW50UGx1Z2luTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChjdXJyZW50UGx1Z2luTmFtZSk/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoY3VycmVudFBsdWdpbk5hbWUsIFtpZF0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXIgKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxyXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZENvbW1hbmRzICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0TGlzdCgpLmZvckVhY2goKGl0ZW06IElQbHVnaW4pID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpdGVtLmhhbmRsZSh0aGlzLmN0eClcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kZXJcclxuIiwiaW1wb3J0IHBsdWdpbkhhbmRsZXIgZnJvbSAnLi9wbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJ1xyXG5pbXBvcnQgdXBsb2FkIGZyb20gJy4vdXBsb2FkJ1xyXG5pbXBvcnQgc2V0dGluZyBmcm9tICcuL3NldHRpbmcnXHJcbmltcG9ydCB1c2UgZnJvbSAnLi91c2UnXHJcbmltcG9ydCBwcm94eSBmcm9tICcuL3Byb3h5J1xyXG5pbXBvcnQgaW5pdCBmcm9tICcuL2luaXQnXHJcbmltcG9ydCBpMThuIGZyb20gJy4vaTE4bidcclxuaW1wb3J0IHsgdHlwZSBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IChjdHg6IElQaWNHbyk6IHZvaWQgPT4ge1xyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3BsdWdpbkhhbmRsZXInLCBwbHVnaW5IYW5kbGVyKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2NvbmZpZycsIGNvbmZpZylcclxuICBjdHguY21kLnJlZ2lzdGVyKCdzZXR0aW5nJywgc2V0dGluZylcclxuICBjdHguY21kLnJlZ2lzdGVyKCd1cGxvYWQnLCB1cGxvYWQpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigndXNlJywgdXNlKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3Byb3h5JywgcHJveHkpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignaW5pdCcsIGluaXQpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignaTE4bicsIGkxOG4pXHJcbn1cclxuIiwiZXhwb3J0IGVudW0gSUxvZ1R5cGUge1xyXG4gIHN1Y2Nlc3MgPSAnc3VjY2VzcycsXHJcbiAgaW5mbyA9ICdpbmZvJyxcclxuICB3YXJuID0gJ3dhcm4nLFxyXG4gIGVycm9yID0gJ2Vycm9yJ1xyXG59XHJcblxyXG4vKipcclxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBieSB1c2Vyc1xyXG4gKi9cclxuZXhwb3J0IGVudW0gSUJ1aWxkSW5FdmVudCB7XHJcbiAgVVBMT0FEX1BST0dSRVNTID0gJ3VwbG9hZFByb2dyZXNzJyxcclxuICBGQUlMRUQgPSAnZmFpbGVkJyxcclxuICBCRUZPUkVfVFJBTlNGT1JNID0gJ2JlZm9yZVRyYW5zZm9ybScsXHJcbiAgQkVGT1JFX1VQTE9BRCA9ICdiZWZvcmVVcGxvYWQnLFxyXG4gIEFGVEVSX1VQTE9BRCA9ICdhZnRlclVwbG9hZCcsXHJcbiAgRklOSVNIRUQgPSAnZmluaXNoZWQnLFxyXG4gIElOU1RBTEwgPSAnaW5zdGFsbCcsXHJcbiAgVU5JTlNUQUxMID0gJ3VuaW5zdGFsbCcsXHJcbiAgVVBEQVRFID0gJ3VwZGF0ZScsXHJcbiAgTk9USUZJQ0FUSU9OID0gJ25vdGlmaWNhdGlvbidcclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgb25seSBieSBwaWNnb1xyXG4gKi9cclxuZXhwb3J0IGVudW0gSUJ1c0V2ZW50IHtcclxuICBDT05GSUdfQ0hBTkdFID0gJ0NPTkZJR19DSEFOR0UnXHJcbn1cclxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHV0aWwgZnJvbSAndXRpbCdcclxuaW1wb3J0IHsgSUxvZ1R5cGUgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgSUxvZ0FyZ3ZUeXBlLFxyXG4gIHR5cGUgSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yLFxyXG4gIHR5cGUgVW5kZWZpbmFibGUsXHJcbiAgdHlwZSBJTG9nQ29sb3IsXHJcbiAgdHlwZSBJTG9nZ2VyLFxyXG4gIHR5cGUgSVBpY0dvXHJcbn0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IGZvcmNlTnVtYmVyLCBpc0RldiB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxldmVsID0ge1xyXG4gICAgW0lMb2dUeXBlLnN1Y2Nlc3NdOiAnZ3JlZW4nLFxyXG4gICAgW0lMb2dUeXBlLmluZm9dOiAnYmx1ZScsXHJcbiAgICBbSUxvZ1R5cGUud2Fybl06ICd5ZWxsb3cnLFxyXG4gICAgW0lMb2dUeXBlLmVycm9yXTogJ3JlZCdcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIGxvZ0xldmVsITogc3RyaW5nIHwgc3RyaW5nW11cclxuICBwcml2YXRlIGxvZ1BhdGghOiBzdHJpbmdcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxvZyAodHlwZTogSUxvZ1R5cGUsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIC8vIGNoZWNrIGNvbmZpZy5zaWxlbnRcclxuICAgIHRoaXMubG9nTGV2ZWwgPSB0aGlzLmN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxvZ0xldmVsJylcclxuICAgIGlmICghdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzaWxlbnQnKSAmJiB0aGlzLmNoZWNrTG9nTGV2ZWwodHlwZSwgdGhpcy5sb2dMZXZlbCkpIHtcclxuICAgICAgY29uc3QgbG9nSGVhZGVyID0gY2hhbGtbdGhpcy5sZXZlbFt0eXBlXSBhcyBJTG9nQ29sb3JdKGBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dOmApXHJcbiAgICAgIGNvbnNvbGUubG9nKGxvZ0hlYWRlciwgLi4ubXNnKVxyXG4gICAgICB0aGlzLmxvZ1BhdGggPSB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLmxvZ1BhdGgnKSB8fCBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJy4vcGljbGlzdC5sb2cnKVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBmaXggbG9nIGZpbGUgaXMgdG9vIGxhcmdlLCBub3cgdGhlIGxvZyBmaWxlJ3MgZGVmYXVsdCBzaXplIGlzIDEwIE1CXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2hlY2tMb2dGaWxlSXNMYXJnZSh0aGlzLmxvZ1BhdGgpXHJcbiAgICAgICAgICBpZiAocmVzdWx0LmlzTGFyZ2UpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2FybmluZ01zZyA9IGBMb2cgZmlsZSBpcyB0b28gbGFyZ2UgKD4gJHsocmVzdWx0LmxvZ0ZpbGVTaXplTGltaXQhKSAvIDEwMjQgLyAxMDI0IHx8ICcxMCd9IE1CKSwgcmVjcmVhdGUgbG9nIGZpbGVgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnW1BpY0xpc3QgV0FSTl06JyksIHdhcm5pbmdNc2cpXHJcbiAgICAgICAgICAgIHRoaXMucmVjcmVhdGVMb2dGaWxlKHRoaXMubG9nUGF0aClcclxuICAgICAgICAgICAgbXNnLnVuc2hpZnQod2FybmluZ01zZylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaGFuZGxlV3JpdGVMb2codGhpcy5sb2dQYXRoLCB0eXBlLCAuLi5tc2cpXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gd2h5Pz8/XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gY2hlY2tpbmcgbG9nIGZpbGUgc2l6ZScsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0xvZ0ZpbGVJc0xhcmdlIChsb2dQYXRoOiBzdHJpbmcpOiB7XHJcbiAgICBpc0xhcmdlOiBib29sZWFuXHJcbiAgICBsb2dGaWxlU2l6ZT86IG51bWJlclxyXG4gICAgbG9nRmlsZVNpemVMaW1pdD86IG51bWJlclxyXG4gIH0ge1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcclxuICAgICAgY29uc3QgbG9nRmlsZVNpemUgPSBmcy5zdGF0U3luYyhsb2dQYXRoKS5zaXplXHJcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplTGltaXQgPSBmb3JjZU51bWJlcih0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8bnVtYmVyPj4oJ3NldHRpbmdzLmxvZ0ZpbGVTaXplTGltaXQnKSB8fCAxMCkgKiAxMDI0ICogMTAyNCAvLyAxMCBNQiBkZWZhdWx0XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNMYXJnZTogbG9nRmlsZVNpemUgPiBsb2dGaWxlU2l6ZUxpbWl0LFxyXG4gICAgICAgIGxvZ0ZpbGVTaXplLFxyXG4gICAgICAgIGxvZ0ZpbGVTaXplTGltaXRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNMYXJnZTogZmFsc2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjcmVhdGVMb2dGaWxlIChsb2dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XHJcbiAgICAgIGZzLnVubGlua1N5bmMobG9nUGF0aClcclxuICAgICAgZnMuY3JlYXRlRmlsZVN5bmMobG9nUGF0aClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlV3JpdGVMb2cgKGxvZ1BhdGg6IHN0cmluZywgdHlwZTogc3RyaW5nLCAuLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgbG9nID0gYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKX0gW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XSBgXHJcbiAgICAgIG1zZy5mb3JFYWNoKChpdGVtOiBJTG9nQXJndlR5cGVXaXRoRXJyb3IpID0+IHtcclxuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yICYmIHR5cGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgIGxvZyArPSBgXFxuLS0tLS0tRXJyb3IgU3RhY2sgQmVnaW4tLS0tLS1cXG4ke3V0aWwuZm9ybWF0KGl0ZW0/LnN0YWNrKX1cXG4tLS0tLS0tRXJyb3IgU3RhY2sgRW5kLS0tLS0tLSBgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0sIG51bGwsIDIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsb2cgKz0gYCR7aXRlbSBhcyBzdHJpbmd9IGBcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGxvZyArPSAnXFxuJ1xyXG4gICAgICAvLyBBIHN5bmNocm9uaXplZCBhcHByb2FjaCB0byBhdm9pZCBsb2cgbXNnIHNlcXVlbmNlIGVycm9yc1xyXG4gICAgICBmcy5hcHBlbmRGaWxlU3luYyhsb2dQYXRoLCBsb2cpXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiB3cml0aW5nIGxvZyBmaWxlJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dMZXZlbCAodHlwZTogc3RyaW5nLCBsZXZlbDogdW5kZWZpbmVkIHwgc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkIHx8IGxldmVsID09PSAnYWxsJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGV2ZWwpKSB7XHJcbiAgICAgIHJldHVybiBsZXZlbC5zb21lKChpdGVtOiBzdHJpbmcpID0+IChpdGVtID09PSB0eXBlIHx8IGl0ZW0gPT09ICdhbGwnKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0eXBlID09PSBsZXZlbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3VjY2VzcyAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuc3VjY2VzcywgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgaW5mbyAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuaW5mbywgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgZXJyb3IgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmVycm9yLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICB3YXJuICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS53YXJuLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBkZWJ1ZyAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2KCkpIHtcclxuICAgICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuaW5mbywgLi4ubXNnKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTG9nZ2VyXHJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IHsgdHlwZSBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIHR5cGUgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIHR5cGUgSUxpZmVjeWNsZVBsdWdpbnMsIHR5cGUgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sIHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4sIHR5cGUgVW5kZWZpbmFibGUsIHR5cGUgSUltZ0luZm8gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZ2V0VVJMRmlsZSwgaGFuZGxlVXJsRW5jb2RlLCBpbWFnZVByb2Nlc3MsIGlzVXJsLCBuZWVkQ29tcHJlc3MsIG5lZWRBZGRXYXRlcm1hcmssIGltYWdlQWRkV2F0ZXJNYXJrLCByZW1vdmVFeGlmLCByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcsIGdldENvbnZlcnRlZEZvcm1hdCB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHRmTGluazogc3RyaW5nID0gJ2h0dHBzOi8vcmVsZWFzZS5waWNsaXN0LmNuL3NpbWhlaS50dGYnXHJcbiAgdHRmUGF0aDogc3RyaW5nXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuICAgIGNvbnN0IGltZ0ZpbGVQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcpXHJcbiAgICBmcy5lbnN1cmVEaXJTeW5jKGltZ0ZpbGVQYXRoKVxyXG4gICAgZnMuZW1wdHlEaXJTeW5jKHRlbXBGaWxlUGF0aClcclxuICAgIHRoaXMudHRmUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2Fzc2V0cycsICdzaW1oZWkudHRmJylcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvd25sb2FkVFRGICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGguZGlybmFtZSh0aGlzLnR0ZlBhdGgpXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3V0cHV0RGlyKSkge1xyXG4gICAgICBmcy5ta2RpclN5bmMob3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxyXG4gICAgfVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMudHRmUGF0aCkpIHtcclxuICAgICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlLicpXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHRoaXMudHRmTGluaywgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMudHRmUGF0aCwgcmVzLmRhdGEpXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlIHN1Y2Nlc3MuJylcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZC4nKVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnQgKGlucHV0OiBhbnlbXSk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICAvLyBlbnN1cmUgZXZlcnkgdXBsb2FkIHByb2Nlc3MgaGFzIGFuIHVuaXF1ZSBjb250ZXh0XHJcbiAgICBjb25zdCBjdHggPSBjcmVhdGVDb250ZXh0KHRoaXMuY3R4KVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaW1hZ2VzIGlucHV0XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgYW4gYXJyYXkuJylcclxuICAgICAgfVxyXG4gICAgICBjdHguaW5wdXQgPSBpbnB1dFxyXG4gICAgICBjdHgucmF3SW5wdXRQYXRoID0gW10gYXMgc3RyaW5nW11cclxuICAgICAgY3R4LnJhd0lucHV0ID0gY2xvbmVEZWVwKGlucHV0KVxyXG4gICAgICBjdHgub3V0cHV0ID0gW10gYXMgSUltZ0luZm9bXVxyXG4gICAgICBjb25zdCBjb21wcmVzc09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPignYnVpbGRJbi5jb21wcmVzcycpXHJcbiAgICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgICBjb25zdCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXHJcbiAgICAgIGlmICghdXBsb2FkZXIgJiYgY29tcHJlc3NPcHRpb25zKSB7XHJcbiAgICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9ICdzbW1zJ1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSB0eXBlXHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKVxyXG4gICAgICBpZiAoY29tcHJlc3NPcHRpb25zIHx8IHdhdGVybWFya09wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRlbXBGaWxlUGF0aCkpIHtcclxuICAgICAgICAgIGZzLm1rZGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdhdGVybWFya01zZyA9ICdBZGQgd2F0ZXJtYXJrIHRvIGltYWdlJ1xyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzTXNnID0gJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvXHJcbiAgICAgICAgICBpZiAoaXNVcmwoaXRlbSkpIHtcclxuICAgICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdID0gaXRlbVxyXG4gICAgICAgICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXHJcbiAgICAgICAgICAgIGlmIChpbmZvLnN1Y2Nlc3MgJiYgaW5mby5idWZmZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgdHJhbnNmb3JtZWRCdWZmZXJcclxuICAgICAgICAgICAgICBsZXQgaXNTa2lwID0gZmFsc2VcclxuICAgICAgICAgICAgICBpZiAobmVlZEFkZFdhdGVybWFyayh3YXRlcm1hcmtPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISh3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtGb250UGF0aCB8fCB3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFRURlJldCA9IGF3YWl0IHRoaXMuZG93bmxvYWRUVEYoKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoIWRvd25sb2FkVFRGUmV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTa2lwID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzU2tpcCkge1xyXG4gICAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGluZm8uYnVmZmVyLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgsIGN0eC5sb2cpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBpbmZvLmJ1ZmZlciwgY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycsIGN0eC5sb2cpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGluZm8uYnVmZmVyLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGdldENvbnZlcnRlZEZvcm1hdChjb21wcmVzc09wdGlvbnMsIGluZm8uZXh0bmFtZSA/PyAnJylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGluZm8uZXh0bmFtZSA/PyAnJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtpbmZvLmZpbGVOYW1lXHJcbiAgICAgICAgICAgICAgICAgID8gYCR7cGF0aC5iYXNlbmFtZShpbmZvLmZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoaW5mby5maWxlTmFtZSkpfSR7bmV3RXh0fWBcclxuICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpdGVtKSwgcGF0aC5iYXNlbmFtZSh0ZW1wRmlsZSkpXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcclxuICAgICAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlclxyXG4gICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBpdGVtXHJcbiAgICAgICAgICAgIGxldCBpc1NraXAgPSBmYWxzZVxyXG4gICAgICAgICAgICBpZiAobmVlZEFkZFdhdGVybWFyayh3YXRlcm1hcmtPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEod2F0ZXJtYXJrT3B0aW9ucz8ud2F0ZXJtYXJrRm9udFBhdGggfHwgd2F0ZXJtYXJrT3B0aW9ucz8ud2F0ZXJtYXJrVHlwZSA9PT0gJ2ltYWdlJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXHJcbiAgICAgICAgICAgICAgICBpZiAoIWRvd25sb2FkVFRGUmV0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQsIHNraXAgYWRkIHdhdGVybWFyay4nKVxyXG4gICAgICAgICAgICAgICAgICBpc1NraXAgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghaXNTa2lwKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUFkZFdhdGVyTWFyayhmcy5yZWFkRmlsZVN5bmMoaXRlbSksIHdhdGVybWFya09wdGlvbnMsIHRoaXMudHRmUGF0aCwgY3R4LmxvZylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5lZWRDb21wcmVzcyhjb21wcmVzc09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSkpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgaWYgKHBhdGguZXh0bmFtZShpdGVtKSA9PT0gJy5oZWljJyB8fCBwYXRoLmV4dG5hbWUoaXRlbSkgPT09ICcuaGVpZicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhlaWNCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoaXRlbSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhlaWNSZXN1bHQgPSBhd2FpdCBoZWljQ29udmVydCh7XHJcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogaGVpY0J1ZmZlcixcclxuICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnSlBFRycsXHJcbiAgICAgICAgICAgICAgICAgIHF1YWxpdHk6IDFcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wSGVpY0NvbnZlcnRGaWxlID0gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBwYXRoLmV4dG5hbWUoaXRlbSkpfS5qcGdgKVxyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlLCBCdWZmZXIuZnJvbShoZWljUmVzdWx0KSlcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKGZzLnJlYWRGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlKSwgY29tcHJlc3NPcHRpb25zLCAnLmpwZycsIGN0eC5sb2cpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKHRyYW5zZm9ybWVkQnVmZmVyID8/IGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgY29tcHJlc3NPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSksIGN0eC5sb2cpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oJ1JlbW92ZSBleGlmIGluZm8uJylcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IHJlbW92ZUV4aWYoZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCBwYXRoLmV4dG5hbWUoaXRlbSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVkQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgIGlmIChjb21wcmVzc09wdGlvbnM/LmlzQ29udmVydCkge1xyXG4gICAgICAgICAgICAgICAgbmV3RXh0ID0gZ2V0Q29udmVydGVkRm9ybWF0KGNvbXByZXNzT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBwYXRoLmV4dG5hbWUoaXRlbSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBGaWxlID0gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBwYXRoLmV4dG5hbWUoaXRlbSkpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpdGVtKSwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBwYXRoLmV4dG5hbWUoaXRlbSkpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZSwgdHJhbnNmb3JtZWRCdWZmZXIpXHJcbiAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY3R4LmlucHV0KSB7XHJcbiAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoLnB1c2goaXRlbSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gbGlmZWN5Y2xlIG1haW5cclxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVUcmFuc2Zvcm0oY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmRvVHJhbnNmb3JtKGN0eClcclxuICAgICAgY29uc3QgcmVuYW1lQ29uZmlnID0gY3R4LmdldENvbmZpZzxhbnk+KCdidWlsZEluLnJlbmFtZScpIHx8IHt9XHJcbiAgICAgIGlmIChyZW5hbWVDb25maWcuZW5hYmxlKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gcmVuYW1lQ29uZmlnLmZvcm1hdCB8fCAne2ZpbGVuYW1lfSdcclxuICAgICAgICBjdHgub3V0cHV0ID0gY3R4Lm91dHB1dC5tYXAoKGl0ZW06IElJbWdJbmZvLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZmlsZU5hbWUgPSBpdGVtLmZpbGVOYW1lXHJcbiAgICAgICAgICBpZiAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lID0gcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nKGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSwgZm9ybWF0KVxyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoL1xcLysvZywgJy8nKVxyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUuc2xpY2UoLTEpID09PSAnLycpIHtcclxuICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lICsgaW5kZXgudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpdGVtLmZpbGVOYW1lID0gZmlsZU5hbWVcclxuICAgICAgICAgIHJldHVybiBpdGVtXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVVwbG9hZChjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9VcGxvYWQoY3R4KVxyXG4gICAgICBjdHguaW5wdXQgPSBjdHgucmF3SW5wdXRcclxuICAgICAgYXdhaXQgdGhpcy5hZnRlclVwbG9hZChjdHgpXHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICBjdHgubG9nLndhcm4oSUJ1aWxkSW5FdmVudC5GQUlMRUQpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgaWYgKGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ2RlYnVnJykpIHtcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGN0eFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVUcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAwKVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVFJBTlNGT1JNLCBjdHgpXHJcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB0cmFuc2Zvcm0nKVxyXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucywgY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBkb1RyYW5zZm9ybSAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDMwKVxyXG4gICAgY29uc3QgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xyXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcclxuICAgIGxldCB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KHR5cGUpXHJcbiAgICBpZiAoIXRyYW5zZm9ybWVyKSB7XHJcbiAgICAgIHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQoJ3BhdGgnKVxyXG4gICAgICBjdXJyZW50VHJhbnNmb3JtZXIgPSAncGF0aCdcclxuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHRyYW5zZm9ybWVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdHJhbnNmb3JtZXIgLSBwYXRoYClcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVHJhbnNmb3JtaW5nLi4uIEN1cnJlbnQgdHJhbnNmb3JtZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdHJhbnNmb3JtZXI/LmhhbmRsZShjdHgpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDYwKVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdXBsb2FkJylcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1VQTE9BRCwgY3R4KVxyXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucywgY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBkb1VwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgbGV0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgbGV0IHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQodHlwZSlcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBpZiAoIXVwbG9hZGVyKSB7XHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB1cGxvYWRlciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHVwbG9hZGVyIC0gc21tc2ApXHJcbiAgICAgIHR5cGUgPSAnc21tcydcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3NtbXMnXHJcbiAgICAgIHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQoJ3NtbXMnKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5pbmZvKGBVcGxvYWRpbmcuLi4gQ3VycmVudCB1cGxvYWRlciBpcyBbJHtjdXJyZW50VHJhbnNmb3JtZXJ9XWApXHJcbiAgICBhd2FpdCB1cGxvYWRlcj8uaGFuZGxlKGN0eClcclxuICAgIGZvciAoY29uc3Qgb3V0cHV0SW1nIG9mIGN0eC5vdXRwdXQpIHtcclxuICAgICAgb3V0cHV0SW1nLnR5cGUgPSB0eXBlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGFmdGVyVXBsb2FkIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkFGVEVSX1VQTE9BRCwgY3R4KVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDEwMClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucywgY3R4KVxyXG4gICAgbGV0IG1zZyA9ICcnXHJcbiAgICBjb25zdCBsZW5ndGggPSBjdHgub3V0cHV0Lmxlbmd0aFxyXG4gICAgY29uc3QgaXNFbmNvZGVPdXRwdXRVUkwgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPGJvb2xlYW4+Pignc2V0dGluZ3MuZW5jb2RlT3V0cHV0VVJMJykgPT09IHRydWVcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHR5cGVvZiBjdHgub3V0cHV0W2ldLmltZ1VybCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBtc2cgKz0gaXNFbmNvZGVPdXRwdXRVUkwgPyBoYW5kbGVVcmxFbmNvZGUoY3R4Lm91dHB1dFtpXS5pbWdVcmwhKSA6IGN0eC5vdXRwdXRbaV0uaW1nVXJsIVxyXG4gICAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICBtc2cgKz0gJ1xcbidcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYmFzZTY0SW1hZ2VcclxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYnVmZmVyXHJcbiAgICB9XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjdHgpXHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoYFxcbiR7bXNnfWApXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVBsdWdpbnMgKGxpZmVDeWNsZVBsdWdpbnM6IElMaWZlY3ljbGVQbHVnaW5zLCBjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRMaXN0KClcclxuICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRJZExpc3QoKVxyXG4gICAgY29uc3QgbGlmZUN5Y2xlTmFtZSA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TmFtZSgpXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChwbHVnaW5zLm1hcChhc3luYyAocGx1Z2luOiBJUGx1Z2luLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY3R4LmxvZy5pbmZvKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gcnVubmluZ2ApXHJcbiAgICAgICAgYXdhaXQgcGx1Z2luLmhhbmRsZShjdHgpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gZXJyb3JgKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfSkpXHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuXHJcbi8qKlxyXG4gKiBjcmVhdGUgYW4gdW5pcXVlIGNvbnRleHQgZm9yIGVhY2ggdXBsb2FkIHByb2Nlc3NcclxuICogQHBhcmFtIGN0eFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRleHQgPSAoY3R4OiBJUGljR28pOiBJUGljR28gPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBjb25maWdQYXRoOiBjdHguY29uZmlnUGF0aCxcclxuICAgIGJhc2VEaXI6IGN0eC5iYXNlRGlyLFxyXG4gICAgbG9nOiBjdHgubG9nLFxyXG4gICAgY21kOiBjdHguY21kLFxyXG4gICAgb3V0cHV0OiBbXSxcclxuICAgIGlucHV0OiBbXSxcclxuICAgIHJhd0lucHV0OiBbXSxcclxuICAgIHBsdWdpbkxvYWRlcjogY3R4LnBsdWdpbkxvYWRlcixcclxuICAgIHBsdWdpbkhhbmRsZXI6IGN0eC5wbHVnaW5IYW5kbGVyLFxyXG4gICAgUmVxdWVzdDogY3R4LlJlcXVlc3QsXHJcbiAgICBoZWxwZXI6IGN0eC5oZWxwZXIsXHJcbiAgICBWRVJTSU9OOiBjdHguVkVSU0lPTixcclxuICAgIEdVSV9WRVJTSU9OOiBjdHguR1VJX1ZFUlNJT04sXHJcbiAgICByZXF1ZXN0OiBjdHgucmVxdWVzdCxcclxuICAgIGkxOG46IGN0eC5pMThuLFxyXG4gICAgZ2V0Q29uZmlnOiBjdHguZ2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHNhdmVDb25maWc6IGN0eC5zYXZlQ29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHJlbW92ZUNvbmZpZzogY3R4LnJlbW92ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzZXRDb25maWc6IGN0eC5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdW5zZXRDb25maWc6IGN0eC51bnNldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICB1cGxvYWQ6IGN0eC51cGxvYWQuYmluZChjdHgpLFxyXG4gICAgYWRkTGlzdGVuZXI6IGN0eC5hZGRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBvbjogY3R4Lm9uLmJpbmQoY3R4KSxcclxuICAgIG9uY2U6IGN0eC5vbmNlLmJpbmQoY3R4KSxcclxuICAgIHJlbW92ZUxpc3RlbmVyOiBjdHgucmVtb3ZlTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb2ZmOiBjdHgub2ZmLmJpbmQoY3R4KSxcclxuICAgIHJlbW92ZUFsbExpc3RlbmVyczogY3R4LnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBzZXRNYXhMaXN0ZW5lcnM6IGN0eC5zZXRNYXhMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgZ2V0TWF4TGlzdGVuZXJzOiBjdHguZ2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyczogY3R4Lmxpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICByYXdMaXN0ZW5lcnM6IGN0eC5yYXdMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgZW1pdDogY3R4LmVtaXQuYmluZChjdHgpLFxyXG4gICAgbGlzdGVuZXJDb3VudDogY3R4Lmxpc3RlbmVyQ291bnQuYmluZChjdHgpLFxyXG4gICAgcHJlcGVuZExpc3RlbmVyOiBjdHgucHJlcGVuZExpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRPbmNlTGlzdGVuZXI6IGN0eC5wcmVwZW5kT25jZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIGV2ZW50TmFtZXM6IGN0eC5ldmVudE5hbWVzLmJpbmQoY3R4KVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElTbW1zQ29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xyXG4gIGNvbnN0IGRvbWFpbiA9IGJhY2t1cERvbWFpbiB8fCAnc20ubXMnXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly8ke2RvbWFpbn0vYXBpL3YyL3VwbG9hZGAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxyXG4gICAgICBBdXRob3JpemF0aW9uOiBhcGlUb2tlblxyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIHNtZmlsZToge1xyXG4gICAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHNzbDogJ3RydWUnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxyXG4gIGlmICghc21tc0NvbmZpZykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc21tcyBjb25maWchJylcclxuICB9XHJcbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBpbWFnZSwgc21tc0NvbmZpZz8udG9rZW4sIHNtbXNDb25maWc/LmJhY2t1cERvbWFpbilcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5LmNvZGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEudXJsXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5oYXNoXHJcbiAgICAgICAgfSBlbHNlIGlmIChib2R5LmNvZGUgPT09ICdpbWFnZV9yZXBlYXRlZCcgJiYgdHlwZW9mIGJvZHkuaW1hZ2VzID09PSAnc3RyaW5nJykgeyAvLyBkbyBleHRyYSBjaGVjayBzaW5jZSB0aGlzIGVycm9yIHJldHVybiBpcyBub3QgZG9jdW1lbnRlZCBhdCBodHRwczovL2RvYy5zbS5tcy8jYXBpLUltYWdlLVVwbG9hZFxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmltYWdlc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5Lm1lc3NhZ2VcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNtbXNDb25maWc+KCdwaWNCZWQuc21tcycpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIG1lc3NhZ2U6ICdhcGkgdG9rZW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdiYWNrdXBEb21haW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5iYWNrdXBEb21haW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NtbXMnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElUY3l1bkNvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgQ09TIHNpZ25hdHVyZSBzdHJpbmdcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNpZ25hdHVyZSB7XHJcbiAgc2lnbmF0dXJlOiBzdHJpbmdcclxuICBhcHBJZDogc3RyaW5nXHJcbiAgYnVja2V0OiBzdHJpbmdcclxuICBzaWduVGltZTogc3RyaW5nXHJcbn1cclxuXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IElTaWduYXR1cmUgPT4ge1xyXG4gIGNvbnN0IHNlY3JldElkID0gb3B0aW9ucy5zZWNyZXRJZFxyXG4gIGNvbnN0IHNlY3JldEtleSA9IG9wdGlvbnMuc2VjcmV0S2V5XHJcbiAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkXHJcbiAgY29uc3QgYnVja2V0ID0gb3B0aW9ucy5idWNrZXRcclxuICBsZXQgc2lnbmF0dXJlXHJcbiAgbGV0IHNpZ25UaW1lOiBzdHJpbmcgPSAnJ1xyXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApXHJcbiAgICBjb25zdCBjdXJyZW50ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApIC0gMVxyXG4gICAgY29uc3QgZXhwaXJlZCA9IGN1cnJlbnQgKyAzNjAwXHJcblxyXG4gICAgY29uc3QgbXVsdGlTaWduYXR1cmUgPSBgYT0ke2FwcElkfSZiPSR7YnVja2V0fSZrPSR7c2VjcmV0SWR9JmU9JHtleHBpcmVkfSZ0PSR7Y3VycmVudH0mcj0ke3JhbmRvbX0mZj1gXHJcblxyXG4gICAgY29uc3Qgc2lnbkhleEtleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUobXVsdGlTaWduYXR1cmUpLmRpZ2VzdCgpXHJcbiAgICBjb25zdCB0ZW1wU3RyaW5nID0gQnVmZmVyLmNvbmNhdChbc2lnbkhleEtleSwgQnVmZmVyLmZyb20obXVsdGlTaWduYXR1cmUpXSlcclxuICAgIHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlbXBTdHJpbmcpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzc3Nzgjc2lnbmF0dXJlXHJcbiAgICBjb25zdCB0b2RheSA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0b2RheSArIDg2NDAwXHJcbiAgICBzaWduVGltZSA9IGAke3RvZGF5fTske3RvbW9ycm93fWBcclxuICAgIGNvbnN0IHNpZ25LZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKHNpZ25UaW1lKS5kaWdlc3QoJ2hleCcpXHJcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxyXG4gICAgY29uc3QgaHR0cFN0cmluZyA9IGBwdXRcXG4vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1cXG5cXG5ob3N0PSR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9XFxuYFxyXG4gICAgY29uc3Qgc2hhMWVkSHR0cFN0cmluZyA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGh0dHBTdHJpbmcpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGBzaGExXFxuJHtzaWduVGltZX1cXG4ke3NoYTFlZEh0dHBTdHJpbmd9XFxuYFxyXG4gICAgc2lnbmF0dXJlID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzaWduS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpXHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBzaWduYXR1cmUsXHJcbiAgICBhcHBJZCxcclxuICAgIGJ1Y2tldCxcclxuICAgIHNpZ25UaW1lXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogSVNpZ25hdHVyZSwgaW1hZ2U6IEJ1ZmZlciwgdmVyc2lvbjogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBhcmVhID0gb3B0aW9ucy5hcmVhXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aFxyXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIHVybDogYGh0dHA6Ly8ke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tL2ZpbGVzL3YyLyR7c2lnbmF0dXJlLmFwcElkfS8ke3NpZ25hdHVyZS5idWNrZXR9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZmlsZU5hbWV9YCxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIEhvc3Q6IGAke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tYCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUuc2lnbmF0dXJlLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgICAgb3A6ICd1cGxvYWQnLFxyXG4gICAgICAgIGZpbGVjb250ZW50OiBpbWFnZVxyXG4gICAgICB9LFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9YCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IGltYWdlLFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxyXG4gIGlmICghdGNZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHRjWXVuT3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHBhdGggPSB0Y1l1bk9wdGlvbnMucGF0aCA/PyAnJ1xyXG4gICAgY29uc3QgdXNlVjQgPSAhdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCdcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlLCBjdHguR1VJX1ZFUlNJT04gfHwgY3R4LlZFUlNJT04pXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzKVxyXG4gICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxyXG4gICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgICAgIGVyclxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICBsZXQgYm9keVxyXG4gICAgICAgIGlmICh1c2VWNCAmJiB0eXBlb2YgcmVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBib2R5ID0gcmVzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgaWYgKGJvZHk/LmJvZHk/LmVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBib2R5LmJvZHkuZXJyXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keT8uYm9keT8ubXNnIHx8IGJvZHk/LmJvZHk/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvblVybCA9IHRjWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgY29uc3Qgc2xpbSA9IHRjWXVuT3B0aW9ucy5zbGltID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICEhdGNZdW5PcHRpb25zLnNsaW1cclxuICAgICAgICBpZiAodXNlVjQgJiYgYm9keS5tZXNzYWdlID09PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7cGF0aH0ke2ltZy5maWxlTmFtZX1gXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Ym9keS5kYXRhLnNvdXJjZV91cmwgYXMgc3RyaW5nfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VWNCAmJiBib2R5ICYmIGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGNZdW5PcHRpb25zLmVuZHBvaW50ID8gdGNZdW5PcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke3RjWXVuT3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke3RjWXVuT3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2xpbSkge1xyXG4gICAgICAgICAgaWYgKG9wdGlvblVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsICs9ICcmaW1hZ2VTbGltJ1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnP2ltYWdlU2xpbSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKCF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGVyci5lcnJvcilcclxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgICBjb2RlOiBib2R5LmNvZGUgYXMgc3RyaW5nXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRleHQ6ICdodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg0MzInXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndmVyc2lvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKSB9LFxyXG4gICAgICBhbGlhczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJyksXHJcbiAgICAgIGNob2ljZXM6IFsndjQnLCAndjUnXSxcclxuICAgICAgZGVmYXVsdDogJ3Y1JyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcHBJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcHBJZCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzbGltJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF1c2VyQ29uZmlnLnNsaW0sXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IGNvbmZpcm1UZXh0ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNJykgfSxcclxuICAgICAgZ2V0IGNhbmNlbFRleHQgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTCcpIH0sXHJcbiAgICAgIGdldCB0aXBzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndGN5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJR2l0aHViQ29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zV2l0aEpTT04gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuZnVuY3Rpb24gYnVpbGRHaXRodWJBcGlVcmwgKHJlcG86IHN0cmluZywgcGF0aDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBleHRyYTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGVuY29kZWRQYXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpXHJcbiAgY29uc3QgZW5jb2RlZEZpbGVOYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKVxyXG4gIHJldHVybiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlZFBhdGh9JHtlbmNvZGVkRmlsZU5hbWV9JHtleHRyYX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcsIGRhdGE6IGFueSk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xyXG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8gfSA9IG9wdGlvbnNcclxuICBjb25zdCBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBidWlsZEdpdGh1YkFwaVVybChyZXBvLCBvcHRpb25zLnBhdGggfHwgJycsIGZpbGVOYW1lKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZVxyXG4gICAgfSxcclxuICAgIGJvZHk6IGRhdGEsXHJcbiAgICBqc29uOiB0cnVlXHJcbiAgfSBhcyBjb25zdFxyXG59XHJcblxyXG5jb25zdCBnZXRPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCB7IHRva2VuLCByZXBvLCBicmFuY2ggfSA9IG9wdGlvbnNcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogYnVpbGRHaXRodWJBcGlVcmwocmVwbywgb3B0aW9ucy5wYXRoIHx8ICcnLCBmaWxlTmFtZSwgYD9yZWY9JHticmFuY2h9YCksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnXHJcbiAgICB9LFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBnaXRodWJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpXHJcbiAgaWYgKCFnaXRodWJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBnaXRodWIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gZ2l0aHViT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0xpc3QnLFxyXG4gICAgICAgICAgYnJhbmNoOiBnaXRodWJPcHRpb25zLmJyYW5jaCxcclxuICAgICAgICAgIGNvbnRlbnQ6IGJhc2U2NEltYWdlLFxyXG4gICAgICAgICAgcGF0aDogdXBsb2FkUGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMsIGRhdGEpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IHtcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXHJcbiAgICAgICAgICAgICAgc2hhOiBzdHJpbmdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgICBpZiAoYm9keSkge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBnaXRodWJPcHRpb25zLmN1c3RvbVVybCA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudCh1cGxvYWRQYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJykgOiBib2R5LmNvbnRlbnQuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1c0NvZGUgPT09IDQyMikge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KGdldE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zKSkgYXMgYW55XHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXMpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGltZy5oYXNoID0gcmVzLnNoYVxyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBnaXRodWJPcHRpb25zLmN1c3RvbVVybCA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudCh1cGxvYWRQYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJykgOiByZXMuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHZXQgQ29udGVudHMgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVwbycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZXBvIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2JyYW5jaCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9CUkFOQ0gnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9CUkFOQ0gnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5icmFuY2ggfHwgJ21hc3RlcicsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndG9rZW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdnaXRodWInLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHFpbml1IGZyb20gJ3Fpbml1J1xyXG5pbXBvcnQgeyB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVFpbml1Q29uZmlnLCB0eXBlIElQaWNHbywgdHlwZSBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG5mdW5jdGlvbiBwb3N0T3B0aW9ucyAob3B0aW9uczogSVFpbml1Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBpbWdCYXNlNjQ6IHN0cmluZyk6IElPbGRSZXFPcHRpb25zIHtcclxuICBjb25zdCBhcmVhID0gc2VsZWN0QXJlYShvcHRpb25zLmFyZWEgfHwgJ3owJylcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgYmFzZTY0RmlsZU5hbWUgPSBCdWZmZXIuZnJvbShwYXRoICsgZmlsZU5hbWUsICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKVxyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogYGh0dHA6Ly91cGxvYWQke2FyZWF9LnFpbml1cC5jb20vcHV0YjY0Ly0xL2tleS8ke2Jhc2U2NEZpbGVOYW1lfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGBVcFRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGltZ0Jhc2U2NFxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2VsZWN0QXJlYSAoYXJlYTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gYXJlYSA9PT0gJ3owJyA/ICcnIDogJy0nICsgYXJlYVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUb2tlbiAocWluaXVPcHRpb25zOiBhbnkpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGFjY2Vzc0tleSA9IHFpbml1T3B0aW9ucy5hY2Nlc3NLZXlcclxuICBjb25zdCBzZWNyZXRLZXkgPSBxaW5pdU9wdGlvbnMuc2VjcmV0S2V5XHJcbiAgY29uc3QgbWFjID0gbmV3IHFpbml1LmF1dGguZGlnZXN0Lk1hYyhhY2Nlc3NLZXksIHNlY3JldEtleSlcclxuICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgc2NvcGU6IHFpbml1T3B0aW9ucy5idWNrZXRcclxuICB9XHJcbiAgY29uc3QgcHV0UG9saWN5ID0gbmV3IHFpbml1LnJzLlB1dFBvbGljeShvcHRpb25zKVxyXG4gIHJldHVybiBwdXRQb2xpY3kudXBsb2FkVG9rZW4obWFjKVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHFpbml1T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JylcclxuICBpZiAoIXFpbml1T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgcWluaXUgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhxaW5pdU9wdGlvbnMsIGltZy5maWxlTmFtZSwgZ2V0VG9rZW4ocWluaXVPcHRpb25zKSwgYmFzZTY0SW1hZ2UpXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgICAgaWYgKGJvZHk/LmtleSkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBxaW5pdU9wdGlvbnMudXJsXHJcbiAgICAgICAgICBjb25zdCB1cmxPcHRpb25zID0gcWluaXVPcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2JvZHkua2V5IGFzIHN0cmluZ30ke3VybE9wdGlvbnN9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5Lm1zZ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoJ3Fpbml1IGVycm9yJywgYm9keSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGlmIChlcnIubWVzc2FnZSAhPT0gJ1VwbG9hZCBmYWlsZWQnKSB7XHJcbiAgICAgIC8vIGVyci5yZXNwb25zZSBtYXliZSB1bmRlZmluZWRcclxuICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlLmJvZHlcclxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVycm9yLmVycm9yXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FDQ0VTU0tFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldEtleScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfU0VDUkVUS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1cmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BUkVBJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigncWluaXUnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVUnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElJbWd1ckNvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9ucywgdHlwZSBJRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGZvcm1hdEFjY2Vzc1Rva2VuID0gKGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBzdHJpbmcgPT4gYWNjZXNzVG9rZW4gPyBhY2Nlc3NUb2tlbi5zdGFydHNXaXRoKCdCZWFyZXInKSA/IGFjY2Vzc1Rva2VuIDogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAgOiAnJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElJbWd1ckNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBQcm9taXNlPElPbGRSZXFPcHRpb25zPiA9PiB7XHJcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkIHx8ICcnXHJcbiAgY29uc3QgdXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lIHx8ICcnXHJcbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBmb3JtYXRBY2Nlc3NUb2tlbihvcHRpb25zLmFjY2Vzc1Rva2VuIHx8ICcnKVxyXG4gIGNvbnN0IGFsYnVtID0gb3B0aW9ucy5hbGJ1bSB8fCAnJ1xyXG4gIGxldCBhdXRob3JpemF0aW9uXHJcbiAgaWYgKHVzZXJuYW1lICYmIGFjY2Vzc1Rva2VuKSB7XHJcbiAgICBhdXRob3JpemF0aW9uID0gYWNjZXNzVG9rZW5cclxuICB9IGVsc2UgaWYgKGNsaWVudElkKSB7XHJcbiAgICBhdXRob3JpemF0aW9uID0gYENsaWVudC1JRCAke2NsaWVudElkfWBcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGllbnRJZCBvciBhY2Nlc3NUb2tlbiBpcyByZXF1aXJlZCcpXHJcbiAgfVxyXG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnaHR0cHM6Ly9hcGkuaW1ndXIuY29tLzMvaW1hZ2UnLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uLFxyXG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICBIb3N0OiAnYXBpLmltZ3VyLmNvbScsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgaW1hZ2U6IGltZ0Jhc2U2NCxcclxuICAgICAgdHlwZTogJ2Jhc2U2NCcsXHJcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJ1VwbG9hZGVkIHdpdGggUGljTGlzdCdcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKHVzZXJuYW1lICYmIGFjY2Vzc1Rva2VuICYmIGFsYnVtKSB7XHJcbiAgICBsZXQgaW5pdFBhZ2VzID0gMFxyXG4gICAgbGV0IHJlc1xyXG4gICAgbGV0IGFsYnVtSGFzaCA9ICcnXHJcbiAgICBkbyB7XHJcbiAgICAgIGNvbnN0IGdldEFsYnVtSGFzaE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xyXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuaW1ndXIuY29tLzMvYWNjb3VudC8ke3VzZXJuYW1lfS9hbGJ1bXMvJHtpbml0UGFnZXN9YCxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uXHJcbiAgICAgICAgfSxcclxuICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxyXG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwXHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgICAgICBnZXRBbGJ1bUhhc2hPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxyXG4gICAgICB9XHJcbiAgICAgIHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KGdldEFsYnVtSGFzaE9wdGlvbnMpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxyXG4gICAgICBpZiAoIShyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5LnN1Y2Nlc3MpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFsYnVtTGlzdCA9IHJlcy5ib2R5LmRhdGFcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFsYnVtTGlzdCkge1xyXG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBhbGJ1bSkge1xyXG4gICAgICAgICAgYWxidW1IYXNoID0gaXRlbS5pZFxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaW5pdFBhZ2VzKytcclxuICAgIH0gd2hpbGUgKHJlcy5ib2R5LmRhdGEubGVuZ3RoID4gMClcclxuICAgIGlmIChhbGJ1bUhhc2ggJiYgcmVxdWVzdE9wdGlvbnMuZm9ybURhdGEpIHtcclxuICAgICAgcmVxdWVzdE9wdGlvbnMuZm9ybURhdGEuYWxidW0gPSBhbGJ1bUhhc2hcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxyXG4gIH1cclxuICByZXR1cm4gcmVxdWVzdE9wdGlvbnNcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXHJcbiAgaWYgKCFpbWd1ck9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGltZ3VyIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnMoY3R4LCBpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzKSA6IHJlc1xyXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcclxuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmRlbGV0ZWhhc2hcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcclxuICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLmltZ3VyLmNvbS9hcGkvZXJybm8vJ1xyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc3RyaW5nIHwgSUVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY2xpZW50SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY2xpZW50SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW0nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW0gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdpbWd1cicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSUFsaXl1bkNvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGdldEN1cnJlbnRVVENEYXRlID0gKCk6IHN0cmluZyA9PiBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcclxuXHJcbi8vIGdlbmVyYXRlIE9TUyBzaWduYXR1cmVcclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSUFsaXl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgZGF0ZSA9IGdldEN1cnJlbnRVVENEYXRlKClcclxuICBjb25zdCBtaW1lVHlwZSA9IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gIGNvbnN0IHNpZ25TdHJpbmcgPSBgUFVUXFxuXFxuJHttaW1lVHlwZX1cXG4ke2RhdGV9XFxuLyR7b3B0aW9ucy5idWNrZXR9LyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9YFxyXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBPU1MgJHtvcHRpb25zLmFjY2Vzc0tleUlkfToke3NpZ25hdHVyZX1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbWAsXHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogZ2V0Q3VycmVudFVUQ0RhdGUoKSxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGltYWdlLFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgYWxpWXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKVxyXG4gIGlmICghYWxpWXVuT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgYWxpWXVuIE9TUyBjb25maWcnKVxyXG4gIH1cclxuICBhbGlZdW5PcHRpb25zLnBhdGggPSBhbGlZdW5PcHRpb25zLnBhdGgucmVwbGFjZSgvXFwvKiQvLCAnJykucmVwbGFjZSgvXlxcLyovLCAnJykgKyAnLydcclxuICBpZiAoYWxpWXVuT3B0aW9ucy5wYXRoID09PSAnLycpIHtcclxuICAgIGFsaVl1bk9wdGlvbnMucGF0aCA9ICcnXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgY3VzdG9tVXJsID0gYWxpWXVuT3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHBhdGggPSBhbGlZdW5PcHRpb25zLnBhdGggPz8gJydcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IG9wdGlvblVybCA9IGFsaVl1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke2FsaVl1bk9wdGlvbnMuYnVja2V0fS4ke2FsaVl1bk9wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5U2VjcmV0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYWxpeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEJylcclxuICAgIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVVweXVuQ29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcclxuICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcclxuICBjb25zdCBtZDVQYXNzd29yZCA9IE1ENShwYXNzd29yZClcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMuYnVja2V0fS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcclxuICBjb25zdCBzaWduID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBtZDVQYXNzd29yZCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBVUFlVTiAke29wZXJhdG9yfToke3NpZ259YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBsZXQgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nXHJcbiAgaWYgKGVuZHBvaW50LmVuZHNXaXRoKCcvJykpIHtcclxuICAgIGVuZHBvaW50ID0gZW5kcG9pbnQuc2xpY2UoMCwgLTEpXHJcbiAgfVxyXG4gIGlmICghZW5kcG9pbnQuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XHJcbiAgICBlbmRwb2ludCA9IGBodHRwczovLyR7ZW5kcG9pbnR9YFxyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYCR7ZW5kcG9pbnR9LyR7YnVja2V0fS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxyXG4gICAgICBEYXRlOiBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWFnZSxcclxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBNRDUgKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoY29udGVudCkuZGlnZXN0KCdoZXgnKVxyXG59XHJcblxyXG5jb25zdCBnZXRBbnRpTGVlY2hQYXJhbSA9IChhbnRpTGVlY2hUb2tlbjogc3RyaW5nLCBleHBpcmVUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsIG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMucGF0aCB8fCAnJ30ke2ZpbGVOYW1lfWAucmVwbGFjZSgvJTJGL2csICcvJykucmVwbGFjZSgvXlxcLysvZywgJy8nKVxyXG4gIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxyXG4gIGNvbnN0IGV4cGlyZSA9IGV4cGlyZVRpbWUgPyBub3cgKyBwYXJzZUludChleHBpcmVUaW1lLnRvU3RyaW5nKCksIDEwKSA6IG5vdyArIDE4MDBcclxuICBjb25zdCBzaWduID0gTUQ1KGAke2FudGlMZWVjaFRva2VufSYke2V4cGlyZX0mJHt1cml9YClcclxuICBjb25zdCB1cHQgPSBgJHtzaWduLnN1YnN0cmluZygxMiwgMjApfSR7ZXhwaXJlfWBcclxuICByZXR1cm4gYF91cHQ9JHt1cHR9YFxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHVweXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJylcclxuICBpZiAoIXVweXVuT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgdXBZdW4gY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBwYXRoID0gdXB5dW5PcHRpb25zLnBhdGggfHwgJydcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBzdWZmaXggPSB1cHl1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHt1cHl1bk9wdGlvbnMudXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7c3VmZml4fWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIGlmICh1cHl1bk9wdGlvbnMuYW50aUxlZWNoVG9rZW4pIHtcclxuICAgICAgICAgICAgY29uc3QgdXB0ID0gZ2V0QW50aUxlZWNoUGFyYW0odXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuLCB1cHl1bk9wdGlvbnMuZXhwaXJlVGltZSwgdXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBpbWcuaW1nVXJsLmluY2x1ZGVzKCc/JykgPyBgJHtpbWcuaW1nVXJsfSYke3VwdH1gIDogYCR7aW1nLmltZ1VybH0/JHt1cHR9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYm9keSA9IHNhZmVQYXJzZTx7IGNvZGU6IHN0cmluZyB9PihlcnIuZXJyb3IpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkuY29kZSA6IGJvZHlcclxuICAgICAgICB9KSxcclxuICAgICAgICB0ZXh0OiAnaHR0cDovL2RvY3MudXB5dW4uY29tL2FwaS9lcnJuby8nXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3BlcmF0b3InLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcGVyYXRvciB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FudGlMZWVjaFRva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbnRpTGVlY2hUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZXhwaXJlVGltZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZXhwaXJlVGltZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJ2h0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3VweXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJV2ViZGF2UGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB0eXBlIHsgV2ViREFWQ2xpZW50LCBXZWJEQVZDbGllbnRPcHRpb25zIH0gZnJvbSAnd2ViZGF2J1xyXG5pbXBvcnQgeyBBdXRoVHlwZSwgY3JlYXRlQ2xpZW50IH0gZnJvbSAnd2ViZGF2J1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3Qgd2ViZGF2cGxpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJV2ViZGF2UGxpc3RDb25maWc+KCdwaWNCZWQud2ViZGF2cGxpc3QnKVxyXG4gIGlmICghd2ViZGF2cGxpc3RPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB3ZWJkYXZwbGlzdCBjb25maWcnKVxyXG4gIH1cclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0LnJlcGxhY2UoL15odHRwcz86XFwvXFwvfFxcLyskL2csICcnKVxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5zc2xFbmFibGVkID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxyXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoIHx8ICcnKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLydcclxuICBjb25zdCBhdXRoVHlwZSA9IHdlYmRhdnBsaXN0T3B0aW9ucy5hdXRoVHlwZSB8fCAnYmFzaWMnXHJcbiAgY29uc3Qgd2VicGF0aCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgY29uc3Qgc3VmZml4ID0gd2ViZGF2cGxpc3RPcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHVwbG9hZFBhdGggPSB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xpZW50T3B0aW9uczogV2ViREFWQ2xpZW50T3B0aW9ucyA9IHtcclxuICAgICAgICAgIHVzZXJuYW1lOiB3ZWJkYXZwbGlzdE9wdGlvbnMudXNlcm5hbWUsXHJcbiAgICAgICAgICBwYXNzd29yZDogd2ViZGF2cGxpc3RPcHRpb25zLnBhc3N3b3JkLFxyXG4gICAgICAgICAgbWF4Qm9keUxlbmd0aDogNCAqIDEwMjQgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF1dGhUeXBlID09PSAnZGlnZXN0Jykge1xyXG4gICAgICAgICAgY2xpZW50T3B0aW9ucy5hdXRoVHlwZSA9IEF1dGhUeXBlLkRpZ2VzdFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGllbnQ6IFdlYkRBVkNsaWVudCA9IGNyZWF0ZUNsaWVudCh3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCwgY2xpZW50T3B0aW9ucylcclxuICAgICAgICBjb25zdCBwYXRoVG9DcmVhdGUgPSB1cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IHVwbG9hZFBhdGhcclxuICAgICAgICBpZiAocGF0aFRvQ3JlYXRlKSB7XHJcbiAgICAgICAgICBhd2FpdCBjbGllbnQuY3JlYXRlRGlyZWN0b3J5KHBhdGhUb0NyZWF0ZSwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnB1dEZpbGVDb250ZW50cyhgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBpbWFnZSwge1xyXG4gICAgICAgICAgb3ZlcndyaXRlOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnd2ViZGF2cGxpc3QnKVxyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShpbWdUZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhpbWdUZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjdXN0b21VcmwgfHwgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICAgICAgICAgIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt3ZWJwYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudCh3ZWJwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7c3VmZml4fWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3VwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtzdWZmaXh9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvd2ViZGF2cGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc3NsRW5hYmxlZCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zc2xFbmFibGVkID8/IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2VicGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhdXRoVHlwZScsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFJykgfSxcclxuICAgICAgY2hvaWNlczogWydiYXNpYycsICdkaWdlc3QnXSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hdXRoVHlwZSB8fCAnYmFzaWMnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3dlYmRhdnBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJTG9jYWxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGxvY2FsQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKVxyXG4gIGlmICghbG9jYWxDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIGxvY2FsIGNvbmZpZyEnKVxyXG4gIH1cclxuICBjb25zdCB1cGxvYWRQYXRoID0gbG9jYWxDb25maWcucGF0aCB8fCAnJ1xyXG4gIGxldCBjdXN0b21VcmwgPSBsb2NhbENvbmZpZy5jdXN0b21VcmwgfHwgJydcclxuICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICBjdXN0b21VcmwgPSBjdXN0b21VcmwucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gIH1cclxuICBsZXQgd2ViUGF0aCA9IGxvY2FsQ29uZmlnLndlYlBhdGggfHwgJydcclxuICBpZiAod2ViUGF0aCkge1xyXG4gICAgd2ViUGF0aCA9IHdlYlBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpLnJlcGxhY2UoL15cXC8vLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gIH1cclxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICdsb2NhbCcpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKSkpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSkpKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKSwgaW1hZ2UpXHJcbiAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMocGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSksIHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKSlcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGlmICh3ZWJQYXRoKSB7XHJcbiAgICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQod2ViUGF0aCl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGltZy5oYXNoID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L2xvY2FsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJylcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMb2NhbENvbmZpZz4oJ3BpY0JlZC5sb2NhbCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSCcpIH1cclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdsb2NhbCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IE5vZGVTU0gsIHR5cGUgQ29uZmlnIH0gZnJvbSAnbm9kZS1zc2gtbm8tY3B1LWZlYXR1cmVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyB0eXBlIElTZnRwUGxpc3RDb25maWcgfSBmcm9tICcuLi90eXBlcydcclxuXHJcbmNsYXNzIFNTSENsaWVudCB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBTU0hDbGllbnRcclxuICBwcml2YXRlIHN0YXRpYyBfY2xpZW50OiBOb2RlU1NIXHJcbiAgcHJpdmF0ZSBfaXNDb25uZWN0ZWQgPSBmYWxzZVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSAoKTogU1NIQ2xpZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgdGhpcygpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXQgY2xpZW50ICgpOiBOb2RlU1NIIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnQgfHwgKHRoaXMuX2NsaWVudCA9IG5ldyBOb2RlU1NIKCkpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCAocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbm5lY3QgKGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgeyB1c2VybmFtZSwgcGFzc3dvcmQsIHByaXZhdGVLZXksIHBhc3NwaHJhc2UgfSA9IGNvbmZpZ1xyXG4gICAgY29uc3QgbG9naW5JbmZvOiBDb25maWcgPSBwcml2YXRlS2V5XHJcbiAgICAgID8geyB1c2VybmFtZSwgcHJpdmF0ZUtleVBhdGg6IHByaXZhdGVLZXksIHBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfHwgdW5kZWZpbmVkIH1cclxuICAgICAgOiB7IHVzZXJuYW1lLCBwYXNzd29yZCB9XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBTU0hDbGllbnQuY2xpZW50LmNvbm5lY3Qoe1xyXG4gICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxyXG4gICAgICAgIHBvcnQ6IE51bWJlcihjb25maWcucG9ydCkgfHwgMjIsXHJcbiAgICAgICAgLi4ubG9naW5JbmZvXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGxvYWQgKGxvY2FsOiBzdHJpbmcsIHJlbW90ZTogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghdGhpcy5faXNDb25uZWN0ZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0gg5pyq6L+e5o6lJylcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgICAgYXdhaXQgdGhpcy5ta2RpcihwYXRoLmRpcm5hbWUocmVtb3RlKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyksIGNvbmZpZylcclxuICAgICAgYXdhaXQgU1NIQ2xpZW50LmNsaWVudC5wdXRGaWxlKGxvY2FsLCByZW1vdGUpXHJcbiAgICAgIGNvbnN0IGZpbGVNb2RlID0gY29uZmlnLmZpbGVNb2RlIHx8ICcwNjQ0J1xyXG4gICAgICBpZiAoZmlsZU1vZGUgIT09ICcwNjQ0Jykge1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGBjaG1vZCAke2ZpbGVNb2RlfSBcIiR7cmVtb3RlfVwiYFxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBta2RpciAoZGlyUGF0aDogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghU1NIQ2xpZW50LmNsaWVudC5pc0Nvbm5lY3RlZCgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1NIIOacqui/nuaOpScpXHJcbiAgICB9XHJcbiAgICBjb25zdCBkaXJlY3RvcnlNb2RlID0gY29uZmlnLmRpck1vZGUgfHwgJzA3NTUnXHJcbiAgICBpZiAoZGlyZWN0b3J5TW9kZSAhPT0gJzA3NTUnKSB7XHJcbiAgICAgIGNvbnN0IGRpcnMgPSBkaXJQYXRoLnNwbGl0KCcvJylcclxuICAgICAgbGV0IGN1cnJlbnRQYXRoID0gJydcclxuICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xyXG4gICAgICAgIGlmIChkaXIpIHtcclxuICAgICAgICAgIGN1cnJlbnRQYXRoICs9IGAvJHtkaXJ9YFxyXG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYG1rZGlyIFwiJHtjdXJyZW50UGF0aH1cIiAmJiBjaG1vZCAke2RpcmVjdG9yeU1vZGV9IFwiJHtjdXJyZW50UGF0aH1cImBcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzY3JpcHQgPSBgY2QgLyAmJiBta2RpciAtcCBcIiR7ZGlyUGF0aH1cImBcclxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaG93biAocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgIGNvbnN0IFtfdXNlciwgX2dyb3VwXSA9IGdyb3VwID8gW3VzZXIsIGdyb3VwXSA6IHVzZXIuaW5jbHVkZXMoJzonKSA/IHVzZXIuc3BsaXQoJzonKSA6IFt1c2VyLCB1c2VyXVxyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IGBjaG93biAke191c2VyfToke19ncm91cH0gXCIke3JlbW90ZX1cImBcclxuICAgIHJldHVybiB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjIChzY3JpcHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IFNTSENsaWVudC5jbGllbnQuZXhlY0NvbW1hbmQoc2NyaXB0KVxyXG4gICAgcmV0dXJuIGV4ZWNSZXN1bHQuY29kZSA9PT0gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlICgpOiB2b2lkIHtcclxuICAgIFNTSENsaWVudC5jbGllbnQuZGlzcG9zZSgpXHJcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTU0hDbGllbnRcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IFNTSENsaWVudCBmcm9tICcuLi8uLi91dGlscy9zc2hDbGllbnQnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3Qgc2Z0cHBsaXN0Q29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpXHJcbiAgaWYgKCFzZnRwcGxpc3RDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNmdHBwbGlzdCBjb25maWchJylcclxuICB9XHJcbiAgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPSBOdW1iZXIoc2Z0cHBsaXN0Q29uZmlnLnBvcnQpIHx8IDIyXHJcbiAgc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPSAoc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggfHwgJycpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJ1xyXG4gIGNvbnN0IHdlYlBhdGggPSAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGggfHwgJycpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJ1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcclxuICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnc2Z0cHBsaXN0JylcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKGltZ1RlbXBQYXRoKVxyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHRlbXBGaWxlUGF0aCkpXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFNTSENsaWVudC5pbnN0YW5jZVxyXG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KHNmdHBwbGlzdENvbmZpZylcclxuICAgICAgICBjb25zdCByZW1vdGVQYXRoID0gcGF0aC5qb2luKGAvJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH1gLnJlcGxhY2UoL1xcL1xcLysvZywgJy8nKSwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGF3YWl0IGNsaWVudC51cGxvYWQodGVtcEZpbGVQYXRoLCByZW1vdGVQYXRoLCBzZnRwcGxpc3RDb25maWcpXHJcbiAgICAgICAgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyICYmIGF3YWl0IGNsaWVudC5jaG93bihyZW1vdGVQYXRoLCBzZnRwcGxpc3RDb25maWcuZmlsZVVzZXIpXHJcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IHNmdHBwbGlzdENvbmZpZy5jdXN0b21VcmwgfHwgc2Z0cHBsaXN0Q29uZmlnLmhvc3RcclxuICAgICAgICBpZiAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgpIHtcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3dlYlBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHdlYlBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbWdUZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShpbWdUZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgIGZzLnJlbW92ZVN5bmMoaW1nVGVtcEZpbGVQYXRoKVxyXG4gICAgICAgIGZzLm1vdmVTeW5jKHRlbXBGaWxlUGF0aCwgcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpKVxyXG4gICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3NmdHBwbGlzdC8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcclxuICAgICAgICBjbGllbnQuY2xvc2UoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNmdHBQbGlzdENvbmZpZz4oJ3BpY0JlZC5zZnRwcGxpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncG9ydCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcml2YXRlS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJpdmF0ZUtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3BocmFzZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmaWxlVXNlcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVInKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVVc2VyIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmaWxlTW9kZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVNb2RlIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRElSX01PREUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc2Z0cHBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVRlbGVncmFwaENvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHR5cGUgeyBSZWFkU3RyZWFtIH0gZnJvbSAnZnMnXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChvcHRpb25zOiBJVGVsZWdyYXBoQ29uZmlnLCBpbWFnZTogUmVhZFN0cmVhbSk6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcclxuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vdGVsZWdyYS5waC91cGxvYWQnLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgZmlsZTogaW1hZ2VcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxyXG4gIH1cclxuICByZXR1cm4gcmVxdWVzdE9wdGlvbnNcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBsZXQgdGdPcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGVsZWdyYXBoQ29uZmlnPigncGljQmVkLnRlbGVncmFwaHBsaXN0JylcclxuICBpZiAoIXRnT3B0aW9ucykge1xyXG4gICAgdGdPcHRpb25zID0ge31cclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cGxvYWRUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3VwbG9hZFRlbXAnKVxyXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmModXBsb2FkVGVtcFBhdGgpXHJcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKHVwbG9hZFRlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBwb3N0T3B0aW9ucyh0Z09wdGlvbnMsIGZzLmNyZWF0ZVJlYWRTdHJlYW0odGVtcEZpbGVQYXRoKSlcclxuICAgICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXHJcbiAgICAgICAgZnMucmVtb3ZlKHRlbXBGaWxlUGF0aClcclxuICAgICAgICBpZiAoYm9keT8uWzBdPy5zcmMpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vdGVsZWdyYS5waCR7Ym9keVswXS5zcmN9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpLFxyXG4gICAgICB0ZXh0OiAnJ1xyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc3RyaW5nIHwgSUVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGVsZWdyYXBoQ29uZmlnPigncGljQmVkLnRlbGVncmFwaHBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd0ZWxlZ3JhcGhwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URUxFR1JBUEgnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNMaXN0Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJUGljTGlzdENvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgY29uc3QgaG9zdCA9IG9wdGlvbnMuaG9zdCB8fCAnMTI3LjAuMC4xJ1xyXG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgMzY2NzdcclxuICBjb25zdCBwaWNiZWQgPSBvcHRpb25zLnBpY2JlZCB8fCAnJ1xyXG4gIGNvbnN0IGNvbmZpZ05hbWUgPSBvcHRpb25zLmNvbmZpZ05hbWUgfHwgJ0RlZmF1bHQnXHJcbiAgY29uc3Qgc2VydmVyS2V5ID0gb3B0aW9ucy5zZXJ2ZXJLZXkgfHwgJydcclxuICBsZXQgdXJsID0gYGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH0vdXBsb2FkP2NvbmZpZ05hbWU9JHtjb25maWdOYW1lfWBcclxuICBpZiAocGljYmVkKSB7XHJcbiAgICB1cmwgKz0gYCZwaWNiZWQ9JHtwaWNiZWR9YFxyXG4gIH1cclxuICBpZiAoc2VydmVyS2V5KSB7XHJcbiAgICB1cmwgKz0gYCZrZXk9JHtzZXJ2ZXJLZXl9YFxyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmwsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBmaWxlOiB7XHJcbiAgICAgICAgdmFsdWU6IGltYWdlLFxyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBtaW1lLmxvb2t1cChmaWxlTmFtZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgcGljbGlzdE9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKVxyXG4gIGlmICghcGljbGlzdE9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIFBpY0xpc3QgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocGljbGlzdE9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXHJcblxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcclxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcclxuICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICBtc2c6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0FVVEhfRkFJTEVEJyksXHJcbiAgICAgICAgICAgICAgICBlcnJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDAgJiYgcmVzLmJvZHk/LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gcmVzLmJvZHkucmVzdWx0WzBdXHJcbiAgICAgICAgICBpbWcuZnVsbFJlc3VsdCA9IHJlcy5ib2R5LmZ1bGxSZXN1bHRbMF1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5ib2R5Lm1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVBpY0xpc3RDb25maWc+KCdwaWNCZWQucGljbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9IT1NUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJzEyNy4wLjAuMScsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncG9ydCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QT1JUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wb3J0IHx8IDM2Njc3LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwaWNiZWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BJQ0JFRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QSUNCRUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBpY2JlZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY29uZmlnTmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9DT05GSUdOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jb25maWdOYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZXJ2ZXJLZXknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0tFWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9LRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlcnZlcktleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigncGljbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2hlbGxvZGszNC9waWNnby1wbHVnaW4tbGFua29uZ1xyXG4vLyBMSUNFTlNFOiBNSVRcclxuXHJcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcclxuaW1wb3J0IHsgSUxza3lDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTUdUWVBFIHtcclxuICBpbWdVcmw/OiBzdHJpbmdcclxuICB0eXBlPzogc3RyaW5nXHJcbiAga2V5Pzogc3RyaW5nXHJcbiAgaWQ/OiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVjJGT1JNREFUQSB7XHJcbiAgZmlsZToge1xyXG4gICAgdmFsdWU6IEJ1ZmZlclxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBmaWxlbmFtZTogc3RyaW5nXHJcbiAgICB9XHJcbiAgfVxyXG4gIHNzbDogc3RyaW5nXHJcbiAgc3RyYXRlZ3lfaWQ/OiBzdHJpbmdcclxuICBhbGJ1bV9pZD86IHN0cmluZ1xyXG4gIHBlcm1pc3Npb24/OiBudW1iZXJcclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSUxza3lDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGltYWdlOiBCdWZmZXIpOiBhbnkgPT4ge1xyXG4gIGxldCBob3N0ID0gb3B0aW9ucy5ob3N0XHJcbiAgaG9zdCA9IGhvc3QucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gIGNvbnN0IGlzVjIgPSBvcHRpb25zLnZlcnNpb24gPT09ICdWMidcclxuICBjb25zdCB0b2tlbiA9IG9wdGlvbnMudG9rZW5cclxuXHJcbiAgY29uc3QgdjFIZWFkZXJzID0ge1xyXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxyXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxyXG4gICAgdG9rZW46IHRva2VuIHx8IHVuZGVmaW5lZFxyXG4gIH1cclxuICBjb25zdCB2MUZvcm1EYXRhID0ge1xyXG4gICAgaW1hZ2U6IHtcclxuICAgICAgdmFsdWU6IGltYWdlLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lIVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc3NsOiAndHJ1ZSdcclxuICB9XHJcblxyXG4gIGNvbnN0IHYySGVhZGVycyA9IHtcclxuICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgIENvbm5lY3Rpb246ICdrZWVwLWFsaXZlJyxcclxuICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgQXV0aG9yaXphdGlvbjogdG9rZW4gfHwgdW5kZWZpbmVkXHJcbiAgfVxyXG4gIGNvbnN0IHN0cmF0ZWd5SWQgPSBvcHRpb25zLnN0cmF0ZWd5SWRcclxuICBjb25zdCBhbGJ1bUlkID0gb3B0aW9ucy5hbGJ1bUlkXHJcbiAgbGV0IHBlcm1pc3Npb246IGFueSA9IG9wdGlvbnMucGVybWlzc2lvbi52YWx1ZVxyXG4gIGlmIChwZXJtaXNzaW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgIHBlcm1pc3Npb24gPSBvcHRpb25zLnBlcm1pc3Npb25cclxuICB9XHJcbiAgY29uc3QgdjJGb3JtRGF0YTogSVYyRk9STURBVEEgPSB7XHJcbiAgICBmaWxlOiB7XHJcbiAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSFcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNzbDogJ3RydWUnLFxyXG4gICAgc3RyYXRlZ3lfaWQ6IHN0cmF0ZWd5SWQsXHJcbiAgICBhbGJ1bV9pZDogYWxidW1JZCxcclxuICAgIHBlcm1pc3Npb25cclxuICB9XHJcbiAgaWYgKCFzdHJhdGVneUlkKSB7XHJcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5zdHJhdGVneV9pZFxyXG4gIH1cclxuICBpZiAoIWFsYnVtSWQpIHtcclxuICAgIGRlbGV0ZSB2MkZvcm1EYXRhLmFsYnVtX2lkXHJcbiAgfVxyXG4gIGlmICghKHBlcm1pc3Npb24gPT09IDAgfHwgcGVybWlzc2lvbiA9PT0gMSkpIHtcclxuICAgIGRlbGV0ZSB2MkZvcm1EYXRhLnBlcm1pc3Npb25cclxuICB9XHJcblxyXG4gIGNvbnN0IHJlcXVlc3RBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XHJcbiAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXHJcbiAgfSlcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGlzVjIgPyBgJHtob3N0fS9hcGkvdjEvdXBsb2FkYCA6IGAke2hvc3R9L2FwaS91cGxvYWRgLFxyXG4gICAgYWdlbnQ6IHJlcXVlc3RBZ2VudCxcclxuICAgIGhlYWRlcnM6IGlzVjIgPyB2MkhlYWRlcnMgOiB2MUhlYWRlcnMsXHJcbiAgICBmb3JtRGF0YTogaXNWMiA/IHYyRm9ybURhdGEgOiB2MUZvcm1EYXRhXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGxza3lPcHRpb25zID0gY3R4LmdldENvbmZpZzxJTHNreUNvbmZpZz4oJ3BpY0JlZC5sc2t5cGxpc3QnKVxyXG4gIGlmICghbHNreU9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGxza3kgdXBsb2FkZXIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXIhXHJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhsc2t5T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcclxuICAgICAgbGV0IGJvZHkgPSBhd2FpdCBjdHguUmVxdWVzdC5yZXF1ZXN0KHBvc3RDb25maWcpIGFzIGFueVxyXG4gICAgICBib2R5ID0gdHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShib2R5KSA6IGJvZHlcclxuICAgICAgbGV0IGlzVjIgPSBsc2t5T3B0aW9ucy52ZXJzaW9uID09PSAnVjInXHJcbiAgICAgIGxldCBjb25kaXRpb24gPSBpc1YyID8gKGJvZHkuc3RhdHVzID09PSB0cnVlKSA6IChib2R5LmNvZGUgPT09IDIwMClcclxuICAgICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgIGltZy5pbWdVcmwgPSBpc1YyID8gYm9keS5kYXRhLmxpbmtzLnVybCA6IGJvZHkuZGF0YS51cmxcclxuICAgICAgICBpZiAoaXNWMikge1xyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEua2V5XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN0eC5lbWl0KCdub3RpZmljYXRpb24nLCB7XHJcbiAgICAgICAgICB0aXRsZTogJ3VwbG9hZCBmYWlsZWQnLFxyXG4gICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGxldCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTHNreUNvbmZpZz4oJ3BpY0JlZC5sc2t5cGxpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndmVyc2lvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy52ZXJzaW9uIHx8ICdWMScsXHJcbiAgICAgIGdldCBwcmVmaXgoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9WRVJTSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OJykgfSxcclxuICAgICAgY2hvaWNlczogWydWMScsICdWMiddLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9IT1NUJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1QnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IGFsaWFzKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzdHJhdGVneUlkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zdHJhdGVneUlkLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXgoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcygpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1NUUkFURUdZX0lEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhbGJ1bUlkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbGJ1bUlkLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXgoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9BTEJVTV9JRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcygpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwZXJtaXNzaW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBlcm1pc3Npb24gfHwgJ3ByaXZhdGUoZGVmYXVsdCknLFxyXG4gICAgICBjaG9pY2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3ByaXZhdGUoZGVmYXVsdCknLFxyXG4gICAgICAgICAgdmFsdWU6IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdwdWJsaWMnLFxyXG4gICAgICAgICAgdmFsdWU6IDFcclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1BFUk1JU1NJT04nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QRVJNSVNTSU9OJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT04nKSB9LFxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignbHNreXBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59IiwiaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcclxuaW1wb3J0IEZpbGVUeXBlIGZyb20gXCJmaWxlLXR5cGVcIlxyXG5pbXBvcnQgbWltZSBmcm9tIFwibWltZVwiXHJcbmltcG9ydCB7IEh0dHBzUHJveHlBZ2VudCwgSHR0cFByb3h5QWdlbnQgfSBmcm9tIFwiaHBhZ2VudFwiXHJcbmltcG9ydCB7IElJbWdJbmZvIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCJcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSBcInVybFwiXHJcblxyXG5jbGFzcyBGaWxlTmFtZUdlbmVyYXRvciB7XHJcbiAgZGF0ZTogRGF0ZVxyXG4gIGluZm86IElJbWdJbmZvXHJcblxyXG4gIHN0YXRpYyBmaWVsZHMgPSBbXHJcbiAgICBcInllYXJcIiwgLy8g5b2T5YmN5pel5pyfIC0g5bm0XHJcbiAgICBcIm1vbnRoXCIsIC8vIOW9k+WJjeaXpeacnyAtIOaciFxyXG4gICAgXCJkYXlcIiwgLy8g5b2T5YmN5pel5pyfIC0g5pelXHJcbiAgICBcImZ1bGxOYW1lXCIsIC8vIOaWh+S7tuWQjSwg5YyF5ZCr5omp5bGV5ZCNXHJcbiAgICBcImZpbGVOYW1lXCIsIC8vIOaWh+S7tuWQjSwg5LiN5YyF5ZCr5omp5bGV5ZCNXHJcbiAgICBcImV4dE5hbWVcIiwgLy8g5omp5bGV5ZCNXHJcbiAgICBcIm1kNVwiLCAvLyBtZDVcclxuICAgIFwibWQ1QjY0XCIsIC8vIG1kNSBiYXNlNjRcclxuICAgIFwibWQ1QjY0U2hvcnRcIiwgLy8gbWQ1IGJhc2U2NCBzaG9ydFxyXG4gICAgXCJzaGExXCIsIC8vIHNoYTFcclxuICAgIFwic2hhMjU2XCIsIC8vIHNoYTI1NlxyXG4gICAgXCJ0aW1lc3RhbXBcIiwgLy8g5b2T5YmN5pe26Ze05oizLCDnp5JcclxuICAgIFwidGltZXN0YW1wTVNcIiwgLy8g5b2T5YmN5pe26Ze05oizLCDmr6vnp5JcclxuICBdXHJcblxyXG4gIGNvbnN0cnVjdG9yKGluZm86IElJbWdJbmZvKSB7XHJcbiAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSgpXHJcbiAgICB0aGlzLmluZm8gPSBpbmZvXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgeWVhcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfWBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb250aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmdWxsTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5mby5maWxlTmFtZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKHRoaXMuaW5mby5maWxlTmFtZSA/PyAnJykucmVwbGFjZSh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJywgJycpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXh0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJykucmVwbGFjZSgnLicsICcnKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1kNSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KFwiaGV4XCIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWQ1QjY0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvXHJcbiAgICAgIC5jcmVhdGVIYXNoKFwibWQ1XCIpXHJcbiAgICAgIC51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpXHJcbiAgICAgIC5kaWdlc3QoXCJiYXNlNjRcIilcclxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCBcIi1cIilcclxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCBcIl9cIilcclxuICAgICAgLnJlcGxhY2UoLz0rJC8sIFwiXCIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWQ1QjY0U2hvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjcnlwdG9cclxuICAgICAgLmNyZWF0ZUhhc2goXCJtZDVcIilcclxuICAgICAgLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISlcclxuICAgICAgLmRpZ2VzdChcImJhc2U2NFwiKVxyXG4gICAgICAucmVwbGFjZSgvXFwrL2csIFwiLVwiKVxyXG4gICAgICAucmVwbGFjZSgvXFwvL2csIFwiX1wiKVxyXG4gICAgICAuc2xpY2UoMCwgNylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaGExKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KFwiaGV4XCIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hhMjU2KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoXCJoZXhcIilcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0aW1lc3RhbXAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZXN0YW1wTVMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBEYXRlLm5vdygpLnRvU3RyaW5nKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW1nQnVmZmVyKCk6IHN0cmluZyB8IEJ1ZmZlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmZvLmJhc2U2NEltYWdlID8gdGhpcy5pbmZvLmJhc2U2NEltYWdlIDogdGhpcy5pbmZvLmJ1ZmZlclxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGgoaW5mbzogSUltZ0luZm8sIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgaWYgKCFmb3JtYXQpIHtcclxuICAgIHJldHVybiBpbmZvLmZpbGVOYW1lIVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZmlsZU5hbWVHZW5lcmF0b3IgPSBuZXcgRmlsZU5hbWVHZW5lcmF0b3IoaW5mbylcclxuXHJcbiAgbGV0IGZvcm1hdFBhdGg6IHN0cmluZyA9IGZvcm1hdFxyXG5cclxuICBmb3IgKGNvbnN0IGtleSBvZiBGaWxlTmFtZUdlbmVyYXRvci5maWVsZHMpIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgeyR7a2V5fX1gLCBcImdcIilcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGZvcm1hdFBhdGggPSBmb3JtYXRQYXRoLnJlcGxhY2UocmUsIGZpbGVOYW1lR2VuZXJhdG9yW2tleV0oKSlcclxuICB9XHJcblxyXG4gIHJldHVybiBmb3JtYXRQYXRoXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SW5mbyhpbmZvOiBJSW1nSW5mbyk6IFByb21pc2U8e1xyXG4gIGJvZHk/OiBCdWZmZXJcclxuICBjb250ZW50VHlwZT86IHN0cmluZ1xyXG4gIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xyXG59PiB7XHJcbiAgY29uc3QgcmVzdWx0OiB7XHJcbiAgICBib2R5PzogQnVmZmVyXHJcbiAgICBjb250ZW50VHlwZT86IHN0cmluZ1xyXG4gICAgY29udGVudEVuY29kaW5nPzogc3RyaW5nXHJcbiAgfSA9IHt9XHJcblxyXG4gIGlmIChpbmZvLmJhc2U2NEltYWdlKSB7XHJcbiAgICBjb25zdCBib2R5ID0gaW5mby5iYXNlNjRJbWFnZS5yZXBsYWNlKC9eZGF0YTpbL1xcd10rO2Jhc2U2NCwvLCBcIlwiKVxyXG4gICAgcmVzdWx0LmNvbnRlbnRUeXBlID0gaW5mby5iYXNlNjRJbWFnZS5tYXRjaChcclxuICAgICAgL1teOl1cXHcrXFwvW1xcdy0rXFxkLl0rKD89O3wsKS9cclxuICAgICk/LlswXVxyXG4gICAgcmVzdWx0LmJvZHkgPSBCdWZmZXIuZnJvbShib2R5LCBcImJhc2U2NFwiKVxyXG4gICAgcmVzdWx0LmNvbnRlbnRFbmNvZGluZyA9IFwiYmFzZTY0XCJcclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKGluZm8uZXh0bmFtZSkge1xyXG4gICAgICByZXN1bHQuY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoaW5mby5leHRuYW1lKSFcclxuICAgIH1cclxuICAgIHJlc3VsdC5ib2R5ID0gaW5mby5idWZmZXJcclxuICB9XHJcblxyXG4gIC8vIGZhbGxiYWNrIHRvIGRldGVjdCBmcm9tIGJ1ZmZlclxyXG4gIGlmICghcmVzdWx0LmNvbnRlbnRUeXBlKSB7XHJcbiAgICBjb25zdCBmaWxlVHlwZSA9IGF3YWl0IEZpbGVUeXBlLmZyb21CdWZmZXIocmVzdWx0LmJvZHkhKVxyXG4gICAgcmVzdWx0LmNvbnRlbnRUeXBlID0gZmlsZVR5cGU/Lm1pbWVcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHRcclxufVxyXG5cclxuZnVuY3Rpb24gZm9ybWF0SHR0cFByb3h5VVJMKHVybCA9IFwiXCIpOiBzdHJpbmcge1xyXG4gIGlmICghdXJsKSByZXR1cm4gXCJcIlxyXG5cclxuICBpZiAoIS9eaHR0cHM/OlxcL1xcLy8udGVzdCh1cmwpKSB7XHJcbiAgICBjb25zdCBbaG9zdCwgcG9ydF0gPSB1cmwuc3BsaXQoXCI6XCIpXHJcbiAgICByZXR1cm4gYGh0dHA6Ly8ke2hvc3QucmVwbGFjZShcIjEyNy4wLjAuMVwiLCBcImxvY2FsaG9zdFwiKX06JHtwb3J0fWBcclxuICB9XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCB7IHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCB9ID0gbmV3IFVSTCh1cmwpXHJcbiAgICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lLnJlcGxhY2UoXCIxMjcuMC4wLjFcIiwgXCJsb2NhbGhvc3RcIil9OiR7cG9ydH1gXHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIFwiXCJcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm94eUFnZW50KFxyXG4gIHByb3h5OiBzdHJpbmcgfCB1bmRlZmluZWQsXHJcbiAgc3NsRW5hYmxlZDogYm9vbGVhbixcclxuICByZWplY3RVbmF1dGhvcml6ZWQ6IGJvb2xlYW5cclxuKTogSHR0cFByb3h5QWdlbnQgfCBIdHRwc1Byb3h5QWdlbnQgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IGZvcm1hdGVkUHJveHkgPSBmb3JtYXRIdHRwUHJveHlVUkwocHJveHkpXHJcbiAgaWYgKCFmb3JtYXRlZFByb3h5KSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgfVxyXG5cclxuICBjb25zdCBBZ2VudCA9IHNzbEVuYWJsZWQgPyBIdHRwc1Byb3h5QWdlbnQgOiBIdHRwUHJveHlBZ2VudFxyXG4gIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICBrZWVwQWxpdmU6IHRydWUsXHJcbiAgICBrZWVwQWxpdmVNc2VjczogMTAwMCxcclxuICAgIHNjaGVkdWxpbmc6IFwibGlmb1wiIGFzIFwibGlmb1wiIHwgXCJmaWZvXCIgfCB1bmRlZmluZWQsXHJcbiAgICByZWplY3RVbmF1dGhvcml6ZWQsXHJcbiAgICBwcm94eTogZm9ybWF0ZWRQcm94eSxcclxuICB9XHJcblxyXG4gIHJldHVybiBuZXcgQWdlbnQob3B0aW9ucylcclxufSIsImltcG9ydCB7XHJcbiAgUzNDbGllbnQsXHJcbiAgUzNDbGllbnRDb25maWcsXHJcbiAgUHV0T2JqZWN0Q29tbWFuZCxcclxuICBHZXRPYmplY3RDb21tYW5kLFxyXG4gIFB1dE9iamVjdENvbW1hbmRPdXRwdXQsXHJcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiXHJcbmltcG9ydCB7IGdldFNpZ25lZFVybCB9IGZyb20gXCJAYXdzLXNkay9zMy1yZXF1ZXN0LXByZXNpZ25lclwiXHJcbmltcG9ydCB7XHJcbiAgTm9kZUh0dHBIYW5kbGVyLFxyXG4gIE5vZGVIdHRwSGFuZGxlck9wdGlvbnMsXHJcbn0gZnJvbSBcIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXJcIlxyXG5pbXBvcnQgdXJsIGZyb20gXCJ1cmxcIlxyXG5pbXBvcnQgeyBIdHRwUHJveHlBZ2VudCwgSHR0cHNQcm94eUFnZW50IH0gZnJvbSBcImhwYWdlbnRcIlxyXG5pbXBvcnQgeyBJQXdzUzNQTGlzdFVzZXJDb25maWcsIElJbWdJbmZvIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCJcclxuaW1wb3J0IHsgZXh0cmFjdEluZm8sIGdldFByb3h5QWdlbnQgfSBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVcGxvYWRSZXN1bHQge1xyXG4gIGluZGV4OiBudW1iZXJcclxuICBrZXk6IHN0cmluZ1xyXG4gIHVybDogc3RyaW5nXHJcbiAgaW1nVVJMOiBzdHJpbmdcclxuICB2ZXJzaW9uSWQ/OiBzdHJpbmdcclxuICBlVGFnPzogc3RyaW5nXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVMzQ2xpZW50KG9wdHM6IElBd3NTM1BMaXN0VXNlckNvbmZpZyk6IFMzQ2xpZW50IHtcclxuICBsZXQgc3NsRW5hYmxlZCA9IHRydWVcclxuICB0cnkge1xyXG4gICAgY29uc3QgdSA9IG5ldyB1cmwuVVJMKG9wdHMuZW5kcG9pbnQhKVxyXG4gICAgc3NsRW5hYmxlZCA9IHUucHJvdG9jb2wgPT09IFwiaHR0cHM6XCJcclxuICB9IGNhdGNoIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxyXG4gIH1cclxuXHJcbiAgY29uc3QgaHR0cEhhbmRsZXJPcHRzOiBOb2RlSHR0cEhhbmRsZXJPcHRpb25zID0ge31cclxuICBpZiAoc3NsRW5hYmxlZCkge1xyXG4gICAgaHR0cEhhbmRsZXJPcHRzLmh0dHBzQWdlbnQgPSA8SHR0cHNQcm94eUFnZW50PihcclxuICAgICAgZ2V0UHJveHlBZ2VudChvcHRzLnByb3h5LCB0cnVlLCBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA/PyBmYWxzZSlcclxuICAgIClcclxuICB9IGVsc2Uge1xyXG4gICAgaHR0cEhhbmRsZXJPcHRzLmh0dHBBZ2VudCA9IDxIdHRwUHJveHlBZ2VudD4oXHJcbiAgICAgIGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgZmFsc2UsIG9wdHMucmVqZWN0VW5hdXRob3JpemVkID8/IGZhbHNlKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2xpZW50T3B0aW9uczogUzNDbGllbnRDb25maWcgPSB7XHJcbiAgICByZWdpb246IG9wdHMucmVnaW9uIHx8IFwiYXV0b1wiLFxyXG4gICAgZW5kcG9pbnQ6IG9wdHMuZW5kcG9pbnQgfHwgdW5kZWZpbmVkLFxyXG4gICAgY3JlZGVudGlhbHM6IHtcclxuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMuYWNjZXNzS2V5SUQsXHJcbiAgICAgIHNlY3JldEFjY2Vzc0tleTogb3B0cy5zZWNyZXRBY2Nlc3NLZXksXHJcbiAgICB9LFxyXG4gICAgdGxzOiBzc2xFbmFibGVkLFxyXG4gICAgZm9yY2VQYXRoU3R5bGU6IG9wdHMucGF0aFN0eWxlQWNjZXNzLFxyXG4gICAgcmVxdWVzdEhhbmRsZXI6IG5ldyBOb2RlSHR0cEhhbmRsZXIoaHR0cEhhbmRsZXJPcHRzKSxcclxuICB9XHJcblxyXG4gIGNvbnN0IGNsaWVudCA9IG5ldyBTM0NsaWVudChjbGllbnRPcHRpb25zKVxyXG4gIHJldHVybiBjbGllbnRcclxufVxyXG5cclxuaW50ZXJmYWNlIGNyZWF0ZVVwbG9hZFRhc2tPcHRzIHtcclxuICBjbGllbnQ6IFMzQ2xpZW50XHJcbiAgYnVja2V0TmFtZTogc3RyaW5nXHJcbiAgcGF0aDogc3RyaW5nXHJcbiAgaXRlbTogSUltZ0luZm9cclxuICBpbmRleDogbnVtYmVyXHJcbiAgYWNsOiBzdHJpbmdcclxuICB1cmxQcmVmaXg/OiBzdHJpbmdcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXBsb2FkVGFzayhcclxuICBvcHRzOiBjcmVhdGVVcGxvYWRUYXNrT3B0c1xyXG4pOiBQcm9taXNlPElVcGxvYWRSZXN1bHQ+IHtcclxuICBpZiAoIW9wdHMuaXRlbS5idWZmZXIgJiYgIW9wdHMuaXRlbS5iYXNlNjRJbWFnZSkge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInVuZGVmaW5lZCBpbWFnZVwiKSlcclxuICB9XHJcblxyXG4gIGxldCBib2R5OiBCdWZmZXIgfCB1bmRlZmluZWRcclxuICBsZXQgY29udGVudFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gIGxldCBjb250ZW50RW5jb2Rpbmc6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG5cclxuICB0cnkge1xyXG4gICAgOyh7IGJvZHksIGNvbnRlbnRUeXBlLCBjb250ZW50RW5jb2RpbmcgfSA9IGF3YWl0IGV4dHJhY3RJbmZvKG9wdHMuaXRlbSkpXHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBQdXRPYmplY3RDb21tYW5kKHtcclxuICAgIEJ1Y2tldDogb3B0cy5idWNrZXROYW1lLFxyXG4gICAgS2V5OiBvcHRzLnBhdGgsXHJcbiAgICBBQ0w6IG9wdHMuYWNsLFxyXG4gICAgQm9keTogYm9keSxcclxuICAgIENvbnRlbnRUeXBlOiBjb250ZW50VHlwZSxcclxuICAgIENvbnRlbnRFbmNvZGluZzogY29udGVudEVuY29kaW5nLFxyXG4gIH0pXHJcblxyXG4gIGxldCBvdXRwdXQ6IFB1dE9iamVjdENvbW1hbmRPdXRwdXRcclxuICB0cnkge1xyXG4gICAgb3V0cHV0ID0gYXdhaXQgb3B0cy5jbGllbnQuc2VuZChjb21tYW5kKVxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcclxuICB9XHJcblxyXG4gIGxldCB1cmw6IHN0cmluZ1xyXG4gIGlmICghb3B0cy51cmxQcmVmaXgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHVybCA9IGF3YWl0IGdldEZpbGVVUkwob3B0cywgb3V0cHV0LkVUYWchLCBvdXRwdXQuVmVyc2lvbklkISlcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICB1cmwgPSBgJHtvcHRzLnVybFByZWZpeH0vJHtvcHRzLnBhdGh9YFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGluZGV4OiBvcHRzLmluZGV4LFxyXG4gICAga2V5OiBvcHRzLnBhdGgsXHJcbiAgICB1cmw6IHVybCxcclxuICAgIGltZ1VSTDogdXJsLFxyXG4gICAgdmVyc2lvbklkOiBvdXRwdXQuVmVyc2lvbklkLFxyXG4gICAgZVRhZzogb3V0cHV0LkVUYWcsXHJcbiAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRGaWxlVVJMKFxyXG4gIG9wdHM6IGNyZWF0ZVVwbG9hZFRhc2tPcHRzLFxyXG4gIGVUYWc6IHN0cmluZyxcclxuICB2ZXJzaW9uSWQ6IHN0cmluZ1xyXG4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBzaWduZWRVcmwgPSBhd2FpdCBnZXRTaWduZWRVcmwoXHJcbiAgICAgIG9wdHMuY2xpZW50LFxyXG4gICAgICBuZXcgR2V0T2JqZWN0Q29tbWFuZCh7XHJcbiAgICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXHJcbiAgICAgICAgS2V5OiBvcHRzLnBhdGgsXHJcbiAgICAgICAgSWZNYXRjaDogZVRhZyxcclxuICAgICAgICBWZXJzaW9uSWQ6IHZlcnNpb25JZCxcclxuICAgICAgfSksXHJcbiAgICAgIHsgZXhwaXJlc0luOiAzNjAwIH1cclxuICAgIClcclxuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyB1cmwuVVJMKHNpZ25lZFVybClcclxuICAgIHVybE9iamVjdC5zZWFyY2ggPSBcIlwiXHJcbiAgICByZXR1cm4gdXJsT2JqZWN0LmhyZWZcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY3JlYXRlUzNDbGllbnQsXHJcbiAgY3JlYXRlVXBsb2FkVGFzayxcclxuICBnZXRGaWxlVVJMLFxyXG59IiwiXHJcbmltcG9ydCB1cGxvYWRlciwgeyBJVXBsb2FkUmVzdWx0IH0gZnJvbSBcIi4vczMvdXBsb2FkZXJcIlxyXG5pbXBvcnQgeyBmb3JtYXRQYXRoIH0gZnJvbSBcIi4vczMvdXRpbHNcIlxyXG5pbXBvcnQgeyBJQXdzUzNQTGlzdFVzZXJDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSBcIi4uLy4uL2kxOG4vemgtQ05cIlxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnOiBJQXdzUzNQTGlzdFVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnKFwicGljQmVkLmF3cy1zMy1wbGlzdFwiKVxyXG4gICAgaWYgKCF1c2VyQ29uZmlnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgYW1hem9uIHMzIHVwbG9hZGVyIGNvbmZpZ1wiKVxyXG4gICAgfVxyXG4gICAgaWYgKHVzZXJDb25maWcuZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAodXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcclxuICAgICAgICB1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCA9IHRydWVcclxuICAgICAgfSBlbHNlIGlmICh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTC50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIpIHtcclxuICAgICAgICB1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh1c2VyQ29uZmlnLnVybFByZWZpeCkge1xyXG4gICAgICB1c2VyQ29uZmlnLnVybFByZWZpeCA9IHVzZXJDb25maWcudXJsUHJlZml4LnJlcGxhY2UoL1xcLz8kLywgXCJcIilcclxuICAgICAgaWYgKHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzICYmICF1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkge1xyXG4gICAgICAgIHVzZXJDb25maWcudXJsUHJlZml4ICs9IFwiL1wiICsgdXNlckNvbmZpZy5idWNrZXROYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSB1cGxvYWRlci5jcmVhdGVTM0NsaWVudCh1c2VyQ29uZmlnKVxyXG4gICAgY29uc3Qgb3V0cHV0ID0gY3R4Lm91dHB1dFxyXG5cclxuICAgIGNvbnN0IHRhc2tzID0gb3V0cHV0Lm1hcCgoaXRlbSwgaWR4KSA9PlxyXG4gICAgICB1cGxvYWRlci5jcmVhdGVVcGxvYWRUYXNrKHtcclxuICAgICAgICBjbGllbnQsXHJcbiAgICAgICAgaW5kZXg6IGlkeCxcclxuICAgICAgICBidWNrZXROYW1lOiB1c2VyQ29uZmlnLmJ1Y2tldE5hbWUsXHJcbiAgICAgICAgcGF0aDogZm9ybWF0UGF0aChpdGVtLCB1c2VyQ29uZmlnLnVwbG9hZFBhdGgpLFxyXG4gICAgICAgIGl0ZW06IGl0ZW0sXHJcbiAgICAgICAgYWNsOiB1c2VyQ29uZmlnLmFjbCB8fCBcInB1YmxpYy1yZWFkXCIsXHJcbiAgICAgICAgdXJsUHJlZml4OiB1c2VyQ29uZmlnLnVybFByZWZpeCxcclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICBsZXQgcmVzdWx0czogSVVwbG9hZFJlc3VsdFtdXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHRhc2tzKVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgY3R4LmxvZy5lcnJvcihcIuS4iuS8oOWIsCBTMyDlrZjlgqjlj5HnlJ/plJnor6/vvIzor7fmo4Dmn6XnvZHnu5zov57mjqXlkozphY3nva7mmK/lkKbmraPnoa5cIilcclxuICAgICAgY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIGN0eC5lbWl0KFwibm90aWZpY2F0aW9uXCIsIHtcclxuICAgICAgICB0aXRsZTogXCJTMyDlrZjlgqjkuIrkvKDplJnor69cIixcclxuICAgICAgICBib2R5OiBcIuivt+ajgOafpemFjee9ruaYr+WQpuato+ehrlwiLFxyXG4gICAgICAgIHRleHQ6IFwiXCIsXHJcbiAgICAgIH0pXHJcbiAgICAgIHRocm93IGVyclxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgY29uc3QgeyBpbmRleCwgdXJsLCBpbWdVUkwgfSA9IHJlc3VsdFxyXG4gICAgICBkZWxldGUgb3V0cHV0W2luZGV4XS5idWZmZXJcclxuICAgICAgZGVsZXRlIG91dHB1dFtpbmRleF0uYmFzZTY0SW1hZ2VcclxuICAgICAgb3V0cHV0W2luZGV4XS5pbWdVcmwgPSBpbWdVUkxcclxuICAgICAgb3V0cHV0W2luZGV4XS51cmwgPSB1cmxcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgZGVmYXVsdENvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0ge1xyXG4gICAgYWNjZXNzS2V5SUQ6IFwiXCIsXHJcbiAgICBzZWNyZXRBY2Nlc3NLZXk6IFwiXCIsXHJcbiAgICBidWNrZXROYW1lOiBcIlwiLFxyXG4gICAgdXBsb2FkUGF0aDogXCJ7eWVhcn0ve21vbnRofS97bWQ1fS57ZXh0TmFtZX1cIixcclxuICAgIHBhdGhTdHlsZUFjY2VzczogZmFsc2UsXHJcbiAgICByZWplY3RVbmF1dGhvcml6ZWQ6IHRydWUsXHJcbiAgICBhY2w6IFwicHVibGljLXJlYWRcIixcclxuICB9XHJcbiAgbGV0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBd3NTM1BMaXN0VXNlckNvbmZpZz4oJ3BpY0JlZC5hd3MtczMtcGxpc3QnKSB8fCB7fVxyXG4gIHVzZXJDb25maWcgPSB7IC4uLmRlZmF1bHRDb25maWcsIC4uLnVzZXJDb25maWcgfVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImFjY2Vzc0tleUlEXCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlJRCxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwic2VjcmV0QWNjZXNzS2V5XCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRBY2Nlc3NLZXksXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWScpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImJ1Y2tldE5hbWVcIixcclxuICAgICAgdHlwZTogXCJpbnB1dFwiLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldE5hbWUsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCcpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInVwbG9hZFBhdGhcIixcclxuICAgICAgdHlwZTogXCJpbnB1dFwiLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVwbG9hZFBhdGgsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VQTE9BRFBBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInJlZ2lvblwiLFxyXG4gICAgICB0eXBlOiBcImlucHV0XCIsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVnaW9uLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwiZW5kcG9pbnRcIixcclxuICAgICAgdHlwZTogXCJpbnB1dFwiLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwicHJveHlcIixcclxuICAgICAgdHlwZTogXCJpbnB1dFwiLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwidXJsUHJlZml4XCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmxQcmVmaXgsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVgnKSB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJwYXRoU3R5bGVBY2Nlc3NcIixcclxuICAgICAgdHlwZTogXCJjb25maXJtXCIsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzIHx8IGZhbHNlLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwicmVqZWN0VW5hdXRob3JpemVkXCIsXHJcbiAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlamVjdFVuYXV0aG9yaXplZCB8fCB0cnVlLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwiYWNsXCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2wgfHwgXCJwdWJsaWMtcmVhZFwiLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwiZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMXCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgfHwgZmFsc2UsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKSB9LFxyXG4gICAgfSxcclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdhd3MtczMtcGxpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7XHJcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVCcpXHJcbiAgICB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IFNNTVNVcGxvYWRlciBmcm9tICcuL3NtbXMnXHJcbmltcG9ydCB0Y1l1blVwbG9hZGVyIGZyb20gJy4vdGN5dW4nXHJcbmltcG9ydCBnaXRodWJVcGxvYWRlciBmcm9tICcuL2dpdGh1YidcclxuaW1wb3J0IHFpbml1VXBsb2FkZXIgZnJvbSAnLi9xaW5pdSdcclxuaW1wb3J0IGltZ3VyVXBsb2FkZXIgZnJvbSAnLi9pbWd1cidcclxuaW1wb3J0IGFsaVl1blVwbG9hZGVyIGZyb20gJy4vYWxpeXVuJ1xyXG5pbXBvcnQgdXBZdW5VcGxvYWRlciBmcm9tICcuL3VweXVuJ1xyXG5pbXBvcnQgd2ViZGF2cGxpc3RVcGxvYWRlciBmcm9tICcuL3dlYmRhdidcclxuaW1wb3J0IGxvY2FsVXBsb2FkZXIgZnJvbSAnLi9sb2NhbCdcclxuaW1wb3J0IHNmdHBVcGxvYWRlciBmcm9tICcuL3NmdHAnXHJcbmltcG9ydCB0ZWxlZ3JhcGhVcGxvYWRlciBmcm9tICcuL3RlbGVncmFwaCdcclxuaW1wb3J0IHBpY2xpc3RVcGxvYWRlciBmcm9tICcuL3BpY2xpc3QnXHJcbmltcG9ydCBsc2t5VXBsb2FkZXIgZnJvbSAnLi9sc2t5J1xyXG5pbXBvcnQgYXdzczNwbGlzdFVwbG9hZGVyIGZyb20gJy4vYXdzczNwbGlzdCdcclxuXHJcbmNvbnN0IGJ1aWxkSW5VcGxvYWRlcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGFsaVl1blVwbG9hZGVyKGN0eClcclxuICAgICAgdGNZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIFNNTVNVcGxvYWRlcihjdHgpXHJcbiAgICAgIGdpdGh1YlVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICB1cFl1blVwbG9hZGVyKGN0eClcclxuICAgICAgd2ViZGF2cGxpc3RVcGxvYWRlcihjdHgpXHJcbiAgICAgIGxvY2FsVXBsb2FkZXIoY3R4KVxyXG4gICAgICBzZnRwVXBsb2FkZXIoY3R4KVxyXG4gICAgICB0ZWxlZ3JhcGhVcGxvYWRlcihjdHgpXHJcbiAgICAgIHBpY2xpc3RVcGxvYWRlcihjdHgpXHJcbiAgICAgIGxza3lVcGxvYWRlcihjdHgpXHJcbiAgICAgIGF3c3MzcGxpc3RVcGxvYWRlcihjdHgpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVXBsb2FkZXJzXHJcbiIsImltcG9ydCB7XHJcbiAgaXNVcmwsXHJcbiAgZ2V0SW1hZ2VTaXplLFxyXG4gIGdldEZTRmlsZSxcclxuICBnZXRVUkxGaWxlXHJcbn0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgdHlwZSBJSW1nSW5mbywgdHlwZSBJSW1nU2l6ZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdHM6IElJbWdJbmZvW10gPSBjdHgub3V0cHV0XHJcbiAgYXdhaXQgUHJvbWlzZS5hbGwoY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nIHwgQnVmZmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaXRlbSkpIHtcclxuICAgICAgaW5mbyA9IHtcclxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgIGJ1ZmZlcjogaXRlbSxcclxuICAgICAgICBmaWxlTmFtZTogJycsXHJcbiAgICAgICAgZXh0bmFtZTogJydcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1VybChpdGVtKSkge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXHJcbiAgICB9XHJcbiAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXHJcbiAgICAgIGNvbnN0IGV4dG5hbWUgPSBpbmZvLmV4dG5hbWUgfHwgaW1nU2l6ZS5leHRuYW1lIHx8ICcucG5nJ1xyXG4gICAgICByZXN1bHRzW2luZGV4XSA9IHtcclxuICAgICAgICBidWZmZXI6IGluZm8uYnVmZmVyLFxyXG4gICAgICAgIGZpbGVOYW1lOiBpbmZvLmZpbGVOYW1lIHx8IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfSR7ZXh0bmFtZX1gLFxyXG4gICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcgfCBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXHJcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xyXG4gICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjdHgubG9nLndhcm4oYGNhbid0IGdldCAke3BhdGh9J3MgaW1hZ2Ugc2l6ZWApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLndhcm4oJ2NhblxcJ3QgZ2V0IGltYWdlIHNpemUnKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxyXG4gIH1cclxuICByZXR1cm4gaW1hZ2VTaXplXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGN0eC5vdXRwdXQucHVzaCguLi5jdHguaW5wdXQpXHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgaGFuZGxlXHJcbn1cclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdyZXNvbHZlJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBpY0dvUGx1Z2luLCB0eXBlIElQbHVnaW5Mb2FkZXIsIHR5cGUgSVBpY0dvUGx1Z2luSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXgnXHJcbmltcG9ydCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5cclxuLyoqXHJcbiAqIExvY2FsIHBsdWdpbiBsb2FkZXIsIGZpbGUgc3lzdGVtIGlzIHJlcXVpcmVkXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9hZGVyIGltcGxlbWVudHMgSVBsdWdpbkxvYWRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbGlzdDogc3RyaW5nW10gPSBbXVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZnVsbExpc3QgPSBuZXcgU2V0PHN0cmluZz4oKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTWFwID0gbmV3IE1hcDxzdHJpbmcsIElQaWNHb1BsdWdpbkludGVyZmFjZT4oKVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZVBhdGgpKSB7XHJcbiAgICAgIGNvbnN0IHBrZyA9IHtcclxuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL0t1aW5nc21pbGUvUGljTGlzdC1Db3JlJyxcclxuICAgICAgICBsaWNlbnNlOiAnTUlUJ1xyXG4gICAgICB9XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGFja2FnZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBrZyksICd1dGY4JylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldCBwbHVnaW4gZW50cnlcclxuICBwcml2YXRlIHJlc29sdmVQbHVnaW4gKGN0eDogSVBpY0dvLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHJlc29sdmUuc3luYyhuYW1lLCB7IGJhc2VkaXI6IGN0eC5iYXNlRGlyIH0pXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgcmV0dXJuIHBhdGguam9pbihjdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcycsIG5hbWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBsb2FkIGFsbCB0aGlyZCBwYXJ0eSBwbHVnaW5cclxuICBsb2FkICgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgY29uc3QgcGx1Z2luRGlyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMvJylcclxuICAgIC8vIFRoYW5rcyB0byBoZXhvIC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9oZXhvanMvaGV4by9ibG9iL21hc3Rlci9saWIvaGV4by9sb2FkX3BsdWdpbnMuanNcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwbHVnaW5EaXIpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QganNvbiA9IGZzLnJlYWRKU09OU3luYyhwYWNrYWdlUGF0aClcclxuICAgIGNvbnN0IGRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRlcGVuZGVuY2llcyB8fCB7fSlcclxuICAgIGNvbnN0IGRldkRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSlcclxuICAgIGNvbnN0IG1vZHVsZXMgPSBkZXBzLmNvbmNhdChkZXZEZXBzKS5maWx0ZXIoKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoIS9ecGljZ28tcGx1Z2luLXxeQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkgcmV0dXJuIGZhbHNlXHJcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJlc29sdmVQbHVnaW4odGhpcy5jdHgsIG5hbWUpXHJcbiAgICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHBhdGgpXHJcbiAgICB9KVxyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyUGx1Z2luKG1vZHVsZSlcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICByZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nLCBwbHVnaW4/OiBJUGljR29QbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ1BsZWFzZSBwcm92aWRlIHZhbGlkIHBsdWdpbicpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5mdWxsTGlzdC5hZGQobmFtZSlcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIHJlZ2lzdGVyIGxvY2FsIHBsdWdpblxyXG4gICAgICBpZiAoIXBsdWdpbikge1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHRydWUgfHwgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgICAgdGhpcy5nZXRQbHVnaW4obmFtZSkhLnJlZ2lzdGVyKHRoaXMuY3R4KVxyXG4gICAgICAgICAgY29uc3QgcGx1Z2luID0gYHBpY2dvUGx1Z2luc1ske25hbWV9XWBcclxuICAgICAgICAgIHRoaXMuY3R4LnNhdmVDb25maWcoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBbcGx1Z2luXTogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHJlZ2lzdGVyIHByb3ZpZGVkIHBsdWdpblxyXG4gICAgICAgIC8vICYmIHdvbid0IHdyaXRlIGNvbmZpZyB0byBmaWxlc1xyXG4gICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXHJcbiAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICBjb25zdCBwbHVnaW5JbnRlcmZhY2UgPSBwbHVnaW4odGhpcy5jdHgpXHJcbiAgICAgICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbkludGVyZmFjZSlcclxuICAgICAgICBwbHVnaW5JbnRlcmZhY2UucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcclxuICAgICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogYFBsdWdpbiAke25hbWV9IExvYWQgRXJyb3JgLFxyXG4gICAgICAgIGJvZHk6IGVcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXJQbHVnaW4gKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcclxuICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxyXG4gICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci51cGxvYWRlci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIudHJhbnNmb3JtZXIudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5jbWQudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHgucmVtb3ZlQ29uZmlnKCdwaWNnb1BsdWdpbnMnLCBuYW1lKVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBieSBuYW1lXHJcbiAgZ2V0UGx1Z2luIChuYW1lOiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2UgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luTWFwLmhhcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5NYXAuZ2V0KG5hbWUpXHJcbiAgICB9XHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuICAgIGNvbnN0IHBsdWdpbiA9IHJlcXVpcmUocGx1Z2luRGlyICsgbmFtZSkodGhpcy5jdHgpXHJcbiAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luKVxyXG4gICAgcmV0dXJuIHBsdWdpblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsaXN0IG9mIGVuYWJsZWQgcGx1Z2luc1xyXG4gICAqL1xyXG4gIGdldExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3RcclxuICB9XHJcblxyXG4gIGhhc1BsdWdpbiAobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mdWxsTGlzdC5oYXMobmFtZSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZnVsbCBsaXN0IG9mIHBsdWdpbnMsIHdoZXRoZXIgaXQgaXMgZW5hYmxlZCBvciBub3RcclxuICAgKi9cclxuICBnZXRGdWxsTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmZ1bGxMaXN0XVxyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBQbHVnaW5Mb2FkZXJcclxuIiwiZXhwb3J0IGNvbnN0IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgPSAncGljbGlzdC1jbGlwYm9hcmQtaW1hZ2VzJ1xyXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IG9zIGZyb20gJ29zJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBpc1dzbCBmcm9tICdpcy13c2wnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi9lbnVtJ1xyXG5pbXBvcnQgbWFjQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL21hYy5hcHBsZXNjcmlwdCdcclxuaW1wb3J0IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93cy5wczEnXHJcbmltcG9ydCB3aW5kb3dzMTBDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93czEwLnBzMSdcclxuaW1wb3J0IGxpbnV4Q2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL2xpbnV4LnNoJ1xyXG5pbXBvcnQgd3NsQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dzbC5zaCdcclxuaW1wb3J0IHsgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiB9IGZyb20gJy4vc3RhdGljJ1xyXG5cclxuZXhwb3J0IHR5cGUgUGxhdGZvcm0gPSAnZGFyd2luJyB8ICd3aW4zMicgfCAnd2luMTAnIHwgJ2xpbnV4JyB8ICd3c2wnXHJcblxyXG5jb25zdCBnZXRDdXJyZW50UGxhdGZvcm0gPSAoKTogUGxhdGZvcm0gPT4ge1xyXG4gIGNvbnN0IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybVxyXG4gIGlmIChpc1dzbCkge1xyXG4gICAgcmV0dXJuICd3c2wnXHJcbiAgfVxyXG4gIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgY29uc3QgY3VycmVudE9TID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJylbMF1cclxuICAgIGlmIChjdXJyZW50T1MgPT09ICcxMCcpIHtcclxuICAgICAgcmV0dXJuICd3aW4xMCdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnd2luMzInXHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgIHJldHVybiAnZGFyd2luJ1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gJ2xpbnV4J1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgcGxhdGZvcm0yU2NyaXB0Q29udGVudDoge1xyXG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcclxufSA9IHtcclxuICBkYXJ3aW46IG1hY0NsaXBib2FyZFNjcmlwdCxcclxuICB3aW4zMjogd2luZG93c0NsaXBib2FyZFNjcmlwdCxcclxuICB3aW4xMDogd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIGxpbnV4OiBsaW51eENsaXBib2FyZFNjcmlwdCxcclxuICB3c2w6IHdzbENsaXBib2FyZFNjcmlwdFxyXG59XHJcbi8qKlxyXG4gKiBwb3dlcnNoZWxsIHdpbGwgcmVwb3J0IGVycm9yIGlmIGZpbGUgZG9lcyBub3QgaGF2ZSBhICcucHMxJyBleHRlbnNpb24sXHJcbiAqIHNvIHdlIHNob3VsZCBrZWVwIHRoZSBleHRlbnNpb24gbmFtZSBjb25zaXN0ZW50IHdpdGggY29ycmVzcG9uZGluZyBzaGVsbFxyXG4gKi9cclxuY29uc3QgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWU6IHtcclxuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXHJcbn0gPSB7XHJcbiAgZGFyd2luOiAnbWFjLmFwcGxlc2NyaXB0JyxcclxuICB3aW4zMjogJ3dpbmRvd3MucHMxJyxcclxuICB3aW4xMDogJ3dpbmRvd3MxMC5wczEnLFxyXG4gIGxpbnV4OiAnbGludXguc2gnLFxyXG4gIHdzbDogJ3dzbC5zaCdcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VGb2xkZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSKVxyXG4gIGlmICghZnMuZXhpc3RzU3luYyhpbWFnZVBhdGgpKSB7XHJcbiAgICBmcy5ta2RpclN5bmMoaW1hZ2VQYXRoKVxyXG4gIH1cclxufVxyXG5cclxuLy8gVGhhbmtzIHRvIHZzLXBpY2dvOiBodHRwczovL2dpdGh1Yi5jb20vU3BhZGVzLVMvdnMtcGljZ28vYmxvYi9tYXN0ZXIvc3JjL2V4dGVuc2lvbi50c1xyXG5jb25zdCBnZXRDbGlwYm9hcmRJbWFnZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SUNsaXBib2FyZEltYWdlPiA9PiB7XHJcbiAgY3JlYXRlSW1hZ2VGb2xkZXIoY3R4KVxyXG4gIC8vIGFkZCBhbiBjbGlwYm9hcmQgaW1hZ2UgZm9sZGVyIHRvIGNvbnRyb2wgdGhlIGltYWdlIGNhY2hlIGZpbGVcclxuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIENMSVBCT0FSRF9JTUFHRV9GT0xERVIsIGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfS5wbmdgKVxyXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxJQ2xpcGJvYXJkSW1hZ2U+KChyZXNvbHZlOiBhbnksIHJlamVjdDogYW55KTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRQbGF0Zm9ybSgpXHJcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZVtwbGF0Zm9ybV0pXHJcbiAgICAvLyBJZiB0aGUgc2NyaXB0IGRvZXMgbm90IGV4aXN0IHlldCwgd2UgbmVlZCB0byB3cml0ZSB0aGUgY29udGVudCB0byB0aGUgc2NyaXB0IGZpbGVcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhzY3JpcHRQYXRoKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFxyXG4gICAgICAgIHNjcmlwdFBhdGgsXHJcbiAgICAgICAgcGxhdGZvcm0yU2NyaXB0Q29udGVudFtwbGF0Zm9ybV0sXHJcbiAgICAgICAgJ3V0ZjgnXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIGxldCBleGVjdXRpb25cclxuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ29zYXNjcmlwdCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxyXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJyB8fCBwbGF0Zm9ybSA9PT0gJ3dpbjEwJykge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bigncG93ZXJzaGVsbCcsIFtcclxuICAgICAgICAnLW5vcHJvZmlsZScsXHJcbiAgICAgICAgJy1ub25pbnRlcmFjdGl2ZScsXHJcbiAgICAgICAgJy1ub2xvZ28nLFxyXG4gICAgICAgICctc3RhJyxcclxuICAgICAgICAnLWV4ZWN1dGlvbnBvbGljeScsICd1bnJlc3RyaWN0ZWQnLFxyXG4gICAgICAgIC8vIGZpeCB3aW5kb3dzIDEwIG5hdGl2ZSBjbWQgY3Jhc2ggYnVnIHdoZW4gXCJwaWNnbyB1cGxvYWRcIlxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlL2lzc3Vlcy8zMlxyXG4gICAgICAgIC8vICctd2luZG93c3R5bGUnLCdoaWRkZW4nLFxyXG4gICAgICAgIC8vICctbm9leGl0JyxcclxuICAgICAgICAnLWZpbGUnLCBzY3JpcHRQYXRoLFxyXG4gICAgICAgIGltYWdlUGF0aFxyXG4gICAgICBdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3NoJywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0aW9uLnN0ZG91dC5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcclxuICAgICAgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XHJcbiAgICAgICAgaWYgKGRhdGEudG9TdHJpbmcoKS50cmltKCkgPT09ICdubyB4Y2xpcCBvciB3bC1jbGlwYm9hcmQnKSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogJ3hjbGlwIG9yIHdsLWNsaXBib2FyZCBub3QgZm91bmQnLFxyXG4gICAgICAgICAgICBib2R5OiAnUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW1nUGF0aCA9IGRhdGEudG9TdHJpbmcoKS50cmltKClcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBmaWxlUGF0aCBpcyB0aGUgcmVhbCBmaWxlIGluIHN5c3RlbVxyXG4gICAgICAvLyB3ZSBzaG91bGQga2VlcCBpdCBpbnN0ZWFkIG9mIHJlbW92aW5nXHJcbiAgICAgIGxldCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSBmYWxzZVxyXG5cclxuICAgICAgLy8gaW4gbWFjT1MgaWYgeW91ciBjb3B5IHRoZSBmaWxlIGluIHN5c3RlbSwgaXQncyBiYXNlbmFtZSB3aWxsIG5vdCBlcXVhbCB0byBvdXIgZGVmYXVsdCBiYXNlbmFtZVxyXG4gICAgICBpZiAocGF0aC5iYXNlbmFtZShpbWdQYXRoKSAhPT0gcGF0aC5iYXNlbmFtZShpbWFnZVBhdGgpKSB7XHJcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggaXMgbm90IGdlbmVyYXRlIGJ5IHBpY2dvXHJcbiAgICAgICAgLy8gYnV0IHRoZSBwYXRoIGV4aXN0cywgd2Ugc2hvdWxkIGtlZXAgaXRcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xyXG4gICAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBpZiB0aGUgaW1nUGF0aCBpcyBpbnZhbGlkXHJcbiAgICAgIGlmIChpbWdQYXRoICE9PSAnbm8gaW1hZ2UnICYmICFmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYENhbid0IGZpbmQgJHtpbWdQYXRofWApKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXNvbHZlKHtcclxuICAgICAgICBpbWdQYXRoLFxyXG4gICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZ1xyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBnZXRDbGlwYm9hcmRJbWFnZVxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcblxyXG5jb25zdCBldmVudEJ1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5leHBvcnQge1xyXG4gIGV2ZW50QnVzXHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9wcm9taXNlLWZ1bmN0aW9uLWFzeW5jICovXHJcbmltcG9ydCBheGlvcywgeyB0eXBlIEF4aW9zUmVxdWVzdENvbmZpZywgdHlwZSBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIFVuZGVmaW5hYmxlLCB0eXBlIElDb25maWdDaGFuZ2VQYXlsb2FkLCB0eXBlIElDb25maWcsIHR5cGUgSVJlcXVlc3RDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnMsIHR5cGUgSVJlc3BvbnNlLCB0eXBlIElGdWxsUmVzcG9uc2UsIHR5cGUgSVJlcXVlc3QgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJ1xyXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXHJcbmltcG9ydCB0dW5uZWwgZnJvbSAndHVubmVsJ1xyXG5jb25zdCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcclxuICBtYXhWZXJzaW9uOiAnVExTdjEuMicsXHJcbiAgbWluVmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcclxufSlcclxuXHJcbi8vIHRoYW5rcyBmb3IgaHR0cHM6Ly9naXRodWIuZGV2L3JlcXVlc3QvcmVxdWVzdC9ibG9iL21hc3Rlci9pbmRleC5qc1xyXG5mdW5jdGlvbiBhcHBlbmRGb3JtRGF0YSAoZm9ybTogRm9ybURhdGEsIGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZGF0YSAmJiAnb3B0aW9ucycgaW4gZGF0YSkge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhLnZhbHVlLCBkYXRhLm9wdGlvbnMpXHJcbiAgfSBlbHNlIHtcclxuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcXVlc3RJbnRlcmNlcHRvciAob3B0aW9uczogSU9sZFJlcU9wdGlvbnMgfCBBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1JlcXVlc3RDb25maWcgJiB7XHJcbiAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbn0ge1xyXG4gIGxldCBfX2lzT2xkT3B0aW9ucyA9IGZhbHNlXHJcbiAgY29uc3Qgb3B0OiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiAmIHtcclxuICAgIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxyXG4gIH0gPSB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgdXJsOiAob3B0aW9ucy51cmwgYXMgc3RyaW5nKSB8fCAnJyxcclxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gIH1cclxuICAvLyB1c2VyIHJlcXVlc3QgY29uZmlnIHByb3h5XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIGxldCBwcm94eU9wdGlvbnMgPSBvcHRpb25zLnByb3h5XHJcbiAgICBpZiAodHlwZW9mIHByb3h5T3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKG9wdGlvbnMucHJveHkpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKHByb3h5T3B0aW9ucykge1xyXG4gICAgICBpZiAob3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgICAgcHJveHk6IHtcclxuICAgICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zPy5ob3N0bmFtZSxcclxuICAgICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zPy5wb3J0LCAxMClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0LCAxMCksXHJcbiAgICAgICAgICBwcm90b2NvbDogJ2h0dHAnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICgnZm9ybURhdGEnIGluIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5mb3JtRGF0YSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5mb3JtRGF0YVtrZXldXHJcbiAgICAgIGFwcGVuZEZvcm1EYXRhKGZvcm0sIGtleSwgZGF0YSlcclxuICAgIH1cclxuICAgIG9wdC5kYXRhID0gZm9ybVxyXG4gICAgb3B0LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKG9wdC5oZWFkZXJzIHx8IHt9LCBmb3JtLmdldEhlYWRlcnMoKSlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25cclxuICAgIGRlbGV0ZSBvcHQuZm9ybURhdGFcclxuICB9XHJcbiAgaWYgKCdib2R5JyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQuZGF0YSA9IG9wdGlvbnMuYm9keVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgb2xkIG9wdGlvbnNcclxuICAgIGRlbGV0ZSBvcHQuYm9keVxyXG4gIH1cclxuICBpZiAoJ3FzJyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQucGFyYW1zID0gb3B0aW9ucy5xc1xyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgfVxyXG4gIG9wdC5fX2lzT2xkT3B0aW9ucyA9IF9faXNPbGRPcHRpb25zXHJcbiAgcmV0dXJuIG9wdFxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNwb25zZUludGVyY2VwdG9yIChyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IElGdWxsUmVzcG9uc2Uge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5yZXNwb25zZSxcclxuICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcclxuICAgIGJvZHk6IHJlc3BvbnNlLmRhdGFcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlRXJyb3JIYW5kbGVyIChlcnJvcjogYW55KSB7XHJcbiAgLy8gaWYgKGVycm9yLnJlc3BvbnNlKSB7XHJcbiAgLy8gICAvLyBUaGUgcmVxdWVzdCB3YXMgbWFkZSBhbmQgdGhlIHNlcnZlciByZXNwb25kZWQgd2l0aCBhIHN0YXR1cyBjb2RlXHJcbiAgLy8gICAvLyB0aGF0IGZhbGxzIG91dCBvZiB0aGUgcmFuZ2Ugb2YgMnh4XHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJybylcclxuICAvLyB9IGVsc2UgaWYgKGVycm9yLnJlcXVlc3QpIHtcclxuICAvLyAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGJ1dCBubyByZXNwb25zZSB3YXMgcmVjZWl2ZWRcclxuICAvLyAgIC8vIGBlcnJvci5yZXF1ZXN0YCBpcyBhbiBpbnN0YW5jZSBvZiBYTUxIdHRwUmVxdWVzdCBpbiB0aGUgYnJvd3NlciBhbmQgYW4gaW5zdGFuY2Ugb2ZcclxuICAvLyAgIC8vIGh0dHAuQ2xpZW50UmVxdWVzdCBpbiBub2RlLmpzXHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IucmVxdWVzdClcclxuICAvLyB9IGVsc2Uge1xyXG4gIC8vICAgLy8gU29tZXRoaW5nIGhhcHBlbmVkIGluIHNldHRpbmcgdXAgdGhlIHJlcXVlc3QgdGhhdCB0cmlnZ2VyZWQgYW4gRXJyb3JcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5tZXNzYWdlKVxyXG4gIC8vIH1cclxuICBjb25zdCBlcnJvck9iaiA9IHtcclxuICAgIG1ldGhvZDogZXJyb3I/LmNvbmZpZz8ubWV0aG9kPy50b1VwcGVyQ2FzZSgpIHx8ICcnLFxyXG4gICAgdXJsOiBlcnJvcj8uY29uZmlnPy51cmwgfHwgJycsXHJcbiAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgfHwgJycsXHJcbiAgICBzdGFjazogZXJyb3I/LnN0YWNrIHx8IHt9LFxyXG4gICAgcmVzcG9uc2U6IHtcclxuICAgICAgc3RhdHVzOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxyXG4gICAgICBib2R5OiBlcnJvcj8ucmVzcG9uc2U/LmRhdGEgfHwgJydcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yT2JqKVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdCBpbXBsZW1lbnRzIElSZXF1ZXN0IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBwcm94eTogVW5kZWZpbmFibGU8c3RyaW5nPiA9ICcnXHJcbiAgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gPSB7fVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgICBldmVudEJ1cy5vbihJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwgKGRhdGE6IElDb25maWdDaGFuZ2VQYXlsb2FkPHN0cmluZyB8IElDb25maWdbJ3BpY0JlZCddPikgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGRhdGEuY29uZmlnTmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ3BpY0JlZCc6XHJcbiAgICAgICAgICBpZiAoKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pPy5wcm94eSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3h5ID0gKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pLnByb3h5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ3BpY0JlZC5wcm94eSc6XHJcbiAgICAgICAgICB0aGlzLnByb3h5ID0gZGF0YS52YWx1ZSBhcyBzdHJpbmdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJveHkgPSB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5wcm94eScpXHJcbiAgICBpZiAocHJveHkpIHtcclxuICAgICAgdGhpcy5wcm94eSA9IHByb3h5XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVByb3h5ICgpOiBBeGlvc1JlcXVlc3RDb25maWdbJ3Byb3h5J10gfCBmYWxzZSB7XHJcbiAgICBpZiAodGhpcy5wcm94eSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHByb3h5T3B0aW9ucyA9IG5ldyBVUkwodGhpcy5wcm94eSlcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxyXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQgfHwgJzAnLCAxMCksXHJcbiAgICAgICAgICBwcm90b2NvbDogcHJveHlPcHRpb25zLnByb3RvY29sXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLy8gIzY0IGR5bmFtaWMgZ2V0IHByb3h5IHZhbHVlXHJcbiAgcmVxdWVzdDxULCBVIGV4dGVuZHMgKFxyXG4gICAgSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBJT2xkUmVxT3B0aW9ucyA/IElPbGRSZXFPcHRpb25zIDogSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBBeGlvc1JlcXVlc3RDb25maWcgPyBBeGlvc1JlcXVlc3RDb25maWcgOiBuZXZlclxyXG4gICk+IChvcHRpb25zOiBVKTogUHJvbWlzZTxJUmVzcG9uc2U8VCwgVT4+IHtcclxuICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IHRoaXMuaGFuZGxlUHJveHkoKVxyXG4gICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cclxuICAgIHRoaXMub3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gSW5maW5pdHlcclxuICAgIHRoaXMub3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoID0gSW5maW5pdHlcclxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJveHkgJiYgb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSB0dW5uZWwuaHR0cHNPdmVySHR0cCh7XHJcbiAgICAgICAgcHJveHk6IHtcclxuICAgICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5wcm94eS5ob3N0LFxyXG4gICAgICAgICAgcG9ydDogdGhpcy5vcHRpb25zLnByb3h5LnBvcnRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IGh0dHBzQWdlbnRcclxuICAgIH1cclxuICAgIC8vICFOT1RJQ0UgdGhpcy5vcHRpb25zICE9PSBvcHRpb25zXHJcbiAgICAvLyB0aGlzLm9wdGlvbnMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uc1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBheGlvcy5jcmVhdGUodGhpcy5vcHRpb25zKVxyXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShyZXNwb25zZUludGVyY2VwdG9yLCByZXNwb25zZUVycm9ySGFuZGxlcilcclxuXHJcbiAgICAvLyBjb21wYXRpYmxlIHdpdGggb2xkIHJlcXVlc3Qgb3B0aW9ucyB0byBuZXcgb3B0aW9uc1xyXG4gICAgY29uc3Qgb3B0ID0gcmVxdWVzdEludGVyY2VwdG9yKG9wdGlvbnMpXHJcblxyXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgLy8gaGFuZGxlIENvbnRlbnQtVHlwZVxyXG4gICAgICBsZXQgY29udGVudFR5cGUgPSAnJ1xyXG4gICAgICBpZiAob2JqPy5oZWFkZXJzPy5jb250ZW50VHlwZSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnMuY29udGVudFR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlXHJcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5Db250ZW50VHlwZSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnMuQ29udGVudFR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlXHJcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5bJ2NvbnRlbnQtdHlwZSddKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ10gYXMgc3RyaW5nXHJcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gJycgJiYgb2JqLmhlYWRlcnMpIHtcclxuICAgICAgICBvYmouaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBjb250ZW50VHlwZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvYmpcclxuICAgIH0pXHJcbiAgICBpZiAoJ3Jlc29sdmVXaXRoRnVsbFJlc3BvbnNlJyBpbiBvcHRpb25zICYmIG9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcclxuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgLy8gdXNlIG9sZCByZXF1ZXN0IG9wdGlvbiBmb3JtYXRcclxuICAgICAgICBpZiAob3B0Ll9faXNPbGRPcHRpb25zKSB7XHJcbiAgICAgICAgICBpZiAoJ2pzb24nIGluIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiByZXMuZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSkgYXMgUHJvbWlzZTxJUmVzcG9uc2U8VCwgVT4+XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0XHJcbiIsImltcG9ydCB7IHR5cGUgSUNvbmZpZywgdHlwZSBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSlNPTlN0b3JlIH0gZnJvbSAnQHBpY2dvL3N0b3JlJ1xyXG5pbXBvcnQgeyB0eXBlIElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXHJcblxyXG5jbGFzcyBEQiB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGI6IEpTT05TdG9yZVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXHJcblxyXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljQmVkJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiLnNldCgncGljQmVkJywge1xyXG4gICAgICAgICAgdXBsb2FkZXI6ICdzbW1zJyxcclxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljZ29QbHVnaW5zJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiLnNldCgncGljZ29QbHVnaW5zJywge30pXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVhZCAoZmx1c2g/OiBib29sZWFuKTogSUpTT04ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGIucmVhZChmbHVzaClcclxuICB9XHJcblxyXG4gIGdldCAoa2V5OiBzdHJpbmcgPSAnJyk6IGFueSB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmdldChrZXkpXHJcbiAgfVxyXG5cclxuICBzZXQgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBoYXMgKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmhhcyhrZXkpXHJcbiAgfVxyXG5cclxuICB1bnNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIudW5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogUGFydGlhbDxJQ29uZmlnPik6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnVuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEQlxyXG5cclxuLy8gY29uc3QgaW5pdENvbmZpZyA9IChjb25maWdQYXRoOiBzdHJpbmcpOiBsb3dkYi5Mb3dkYlN5bmM8YW55PiA9PiB7XHJcbi8vIH1cclxuXHJcbi8vIGNvbnN0IHNhdmVDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nLCBjb25maWc6IGFueSk6IHZvaWQgPT4ge1xyXG4vLyAgIGNvbnN0IGRiID0gaW5pdENvbmZpZyhjb25maWdQYXRoKVxyXG4vLyAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbi8vICAgICBkYi5yZWFkKCkuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSkud3JpdGUoKVxyXG4vLyAgIH0pXHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCB7XHJcbi8vIGluaXRDb25maWcsXHJcbi8vIHNhdmVDb25maWdcclxuLy8gfVxyXG4iLCJpbXBvcnQgc3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nXHJcbmltcG9ydCB7XHJcbiAgdHlwZSBJUmVzdWx0LFxyXG4gIHR5cGUgSVByb2Nlc3NFbnYsXHJcbiAgdHlwZSBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCxcclxuICB0eXBlIElQbHVnaW5IYW5kbGVyLFxyXG4gIHR5cGUgSVBsdWdpbkhhbmRsZXJPcHRpb25zLFxyXG4gIHR5cGUgVW5kZWZpbmFibGUsXHJcbiAgdHlwZSBJUGljR28sXHJcbiAgdHlwZSBJUGx1Z2luSGFuZGxlclJlc3VsdFxyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUsIGdldE5vcm1hbFBsdWdpbk5hbWUgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi9pMThuL3poLUNOJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFBsdWdpbkhhbmRsZXIgaW1wbGVtZW50cyBJUGx1Z2luSGFuZGxlciB7XHJcbiAgLy8gVGhhbmtzIHRvIGZlZmxvdyAtPiBodHRwczovL2dpdGh1Yi5jb20vZmVmbG93L2ZlZmxvdy9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvaW5zdGFsbC9wbHVnaW4uanNcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xyXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIC8vIGRldGVjdCBpZiBoYXMgYWxyZWFkeSBpbnN0YWxsZWRcclxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LnBsdWdpbkxvYWRlci5oYXNQbHVnaW4oaXRlbS5wa2dOYW1lKSkge1xyXG4gICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKGl0ZW0ucGtnTmFtZSlcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNMaXN0IGhhcyBhbHJlYWR5IGluc3RhbGxlZCAke2l0ZW0ucGtnTmFtZX1gKVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIHNvbWV0aGluZyB3cm9uZywgZmlsdGVyIGl0IG91dFxyXG4gICAgICAgIGlmICghaXRlbS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSlcclxuICAgIGNvbnN0IGZ1bGxOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0uZnVsbE5hbWUpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChmdWxsTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBpbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgZnVsbE5hbWVMaXN0OlxyXG4gICAgICAvLyAxLiBpbnN0YWxsIHJlbW90ZSBwYWNhZ2VcclxuICAgICAgLy8gMi4gaW5zdGFsbCBsb2NhbCBwYWNhZ2VcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgnaW5zdGFsbCcsIGZ1bGxOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpciwgb3B0aW9ucywgZW52KVxyXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XHJcbiAgICAgICAgcGtnTmFtZUxpc3QuZm9yRWFjaCgocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxyXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpbnN0YWxsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfSlcclxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdW5pbnN0YWxsIChwbHVnaW5zOiBzdHJpbmdbXSk6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVuaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdW5pbnN0YWxsIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VuaW5zdGFsbCcsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyKVxyXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XHJcbiAgICAgICAgcGtnTmFtZUxpc3QuZm9yRWFjaCgocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIudW5yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxTdWNjZXNzJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxyXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfSlcclxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlIChwbHVnaW5zOiBzdHJpbmdbXSwgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sIGVudj86IElQcm9jZXNzRW52KTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xyXG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpLmZpbHRlcihpdGVtID0+IGl0ZW0uc3VjY2VzcylcclxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxyXG4gICAgaWYgKHBrZ05hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gdXBkYXRlIHBsdWdpbnMgbXVzdCB1c2UgcGtnTmFtZUxpc3Q6XHJcbiAgICAgIC8vIG5wbSB1cGRhdGUgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgndXBkYXRlJywgcGtnTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY0NvbW1hbmQgKGNtZDogc3RyaW5nLCBtb2R1bGVzOiBzdHJpbmdbXSwgd2hlcmU6IHN0cmluZywgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sIGVudjogSVByb2Nlc3NFbnYgPSB7fSk6IFByb21pc2U8SVJlc3VsdD4ge1xyXG4gICAgLy8gb3B0aW9ucyBmaXJzdFxyXG4gICAgY29uc3QgcmVnaXN0cnkgPSBvcHRpb25zLnJlZ2lzdHJ5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucmVnaXN0cnknKVxyXG4gICAgY29uc3QgcHJveHkgPSBvcHRpb25zLnByb3h5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucHJveHknKVxyXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlOiBhbnkpOiB2b2lkID0+IHtcclxuICAgICAgbGV0IGFyZ3MgPSBbY21kXS5jb25jYXQobW9kdWxlcykuY29uY2F0KCctLWNvbG9yPWFsd2F5cycpLmNvbmNhdCgnLS1zYXZlJylcclxuICAgICAgaWYgKHJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXJlZ2lzdHJ5PSR7cmVnaXN0cnl9YClcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJveHkpIHtcclxuICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoYC0tcHJveHk9JHtwcm94eX1gKVxyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbnBtID0gc3Bhd24oJ25wbScsIGFyZ3MsIHsgY3dkOiB3aGVyZSwgZW52OiBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwgZW52KSB9KVxyXG5cclxuICAgICAgICBsZXQgb3V0cHV0ID0gJydcclxuICAgICAgICBucG0uc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIG91dHB1dCArPSBkYXRhXHJcbiAgICAgICAgfSkucGlwZShwcm9jZXNzLnN0ZG91dClcclxuXHJcbiAgICAgICAgbnBtLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRlcnIpXHJcblxyXG4gICAgICAgIG5wbS5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWNvZGUpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IDAsIGRhdGE6IG91dHB1dCB9KVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGUsIGRhdGE6IG91dHB1dCB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gZm9yIHVzZXJzIHdobyBoYXZlbid0IGluc3RhbGxlZCBub2RlLmpzXHJcbiAgICAgICAgbnBtLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdOUE0gaXMgbm90IGluc3RhbGxlZCcpXHJcbiAgICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCAnTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIHRyYW5zZm9ybSB0aGUgaW5wdXQgcGx1Z2luIG5hbWUgb3IgcGF0aCBzdHJpbmcgdG8gdmFsaWQgcmVzdWx0XHJcbiAqIEBwYXJhbSBjdHhcclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICovXHJcbmNvbnN0IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzID0gKGN0eDogSVBpY0dvLCBuYW1lT3JQYXRoOiBzdHJpbmcpOiBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCA9PiB7XHJcbiAgY29uc3QgcmVzID0ge1xyXG4gICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICBmdWxsTmFtZTogJycsXHJcbiAgICBwa2dOYW1lOiAnJ1xyXG4gIH1cclxuICBjb25zdCByZXN1bHQgPSBnZXRQcm9jZXNzUGx1Z2luTmFtZShuYW1lT3JQYXRoLCBjdHgubG9nKVxyXG4gIGlmICghcmVzdWx0KSB7XHJcbiAgICByZXR1cm4gcmVzXHJcbiAgfVxyXG4gIC8vIGZpcnN0IGdldCByZXN1bHQgdGhlbiBkbyB0aGlzIHByb2Nlc3NcclxuICAvLyBvciBzb21lIGVycm9yIHdpbGwgbG9nIHR3aWNlXHJcbiAgY29uc3QgcGtnTmFtZSA9IGdldE5vcm1hbFBsdWdpbk5hbWUocmVzdWx0LCBjdHgubG9nKVxyXG4gIGlmICghcGtnTmFtZSkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgc3VjY2VzczogdHJ1ZSxcclxuICAgIGZ1bGxOYW1lOiByZXN1bHQsXHJcbiAgICBwa2dOYW1lXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IFpIX0NOLCB0eXBlIElMb2NhbGVzS2V5LCB0eXBlIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHlhbWwgZnJvbSAnanMteWFtbCdcclxuXHJcbmltcG9ydCB7IE9iamVjdEFkYXB0ZXIsIEkxOG4gfSBmcm9tICdAcGljZ28vaTE4bidcclxuaW1wb3J0IHsgdHlwZSBJU3RyaW5nS2V5TWFwLCB0eXBlIElJMThuTWFuYWdlciB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGUgfSBmcm9tICdAcGljZ28vaTE4bi9kaXN0L3R5cGVzJ1xyXG5pbXBvcnQgeyBFTiB9IGZyb20gJy4vZW4nXHJcbmltcG9ydCB7IFpIX1RXIH0gZnJvbSAnLi96aC1UVydcclxuXHJcbmNvbnN0IGxhbmd1YWdlTGlzdDogSVN0cmluZ0tleU1hcDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+ID0ge1xyXG4gICd6aC1DTic6IFpIX0NOLFxyXG4gICd6aC1UVyc6IFpIX1RXLFxyXG4gIGVuOiBFTlxyXG59XHJcblxyXG5jbGFzcyBJMThuTWFuYWdlciBpbXBsZW1lbnRzIElJMThuTWFuYWdlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpMThuOiBJMThuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RBZGFwdGVyOiBPYmplY3RBZGFwdGVyXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMub2JqZWN0QWRhcHRlciA9IG5ldyBPYmplY3RBZGFwdGVyKGxhbmd1YWdlTGlzdClcclxuICAgIGxldCBsYW5ndWFnZSA9IHRoaXMuY3R4LmdldENvbmZpZzxzdHJpbmc+KCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcclxuICAgIGlmICghbGFuZ3VhZ2VMaXN0W2xhbmd1YWdlXSkge1xyXG4gICAgICBsYW5ndWFnZSA9ICd6aC1DTicgLy8gdXNlIGRlZmF1bHRcclxuICAgIH1cclxuICAgIHRoaXMuaTE4biA9IG5ldyBJMThuKHtcclxuICAgICAgYWRhcHRlcjogdGhpcy5vYmplY3RBZGFwdGVyLFxyXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2U6IGxhbmd1YWdlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5sb2FkT3V0dGVySTE4bigpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRPdXR0ZXJJMThuICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSB0aGlzLmdldE91dHRlckkxOG5Gb2xkZXIoKVxyXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhpMThuRm9sZGVyLCB7XHJcbiAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWVcclxuICAgIH0pXHJcbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICBpZiAoZmlsZS5pc0ZpbGUoKSAmJiBmaWxlLm5hbWUuZW5kc1dpdGgoJy55bWwnKSkge1xyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlUGF0aCA9IHBhdGguam9pbihpMThuRm9sZGVyLCBmaWxlLm5hbWUpXHJcbiAgICAgICAgY29uc3QgaTE4bkZpbGUgPSBmcy5yZWFkRmlsZVN5bmMoaTE4bkZpbGVQYXRoLCAndXRmOCcpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGkxOG5GaWxlT2JqID0geWFtbC5sb2FkKGkxOG5GaWxlKSBhcyBJTG9jYWxlc1xyXG4gICAgICAgICAgbGFuZ3VhZ2VMaXN0W2ZpbGUubmFtZS5yZXBsYWNlKC9cXC55bWwkLywgJycpXSA9IGkxOG5GaWxlT2JqXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0T3V0dGVySTE4bkZvbGRlciAoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ2kxOG4tY2xpJylcclxuICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMoaTE4bkZvbGRlcikpIHtcclxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhpMThuRm9sZGVyKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGkxOG5Gb2xkZXJcclxuICB9XHJcblxyXG4gIHRyYW5zbGF0ZTxUIGV4dGVuZHMgc3RyaW5nPihrZXk6IElMb2NhbGVzS2V5IHwgVCwgYXJncz86IElTdHJpbmdLZXlNYXA8c3RyaW5nPik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pMThuLnRyYW5zbGF0ZShrZXksIGFyZ3MpIHx8IGtleVxyXG4gIH1cclxuXHJcbiAgc2V0TGFuZ3VhZ2UgKGxhbmd1YWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaTE4bi5zZXRMYW5ndWFnZShsYW5ndWFnZSlcclxuICAgIHRoaXMuY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAnc2V0dGluZ3MubGFuZ3VhZ2UnOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFkZExvY2FsZSAobGFuZ3VhZ2U6IHN0cmluZywgbG9jYWxlczogSUxvY2FsZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3JpZ2luTG9jYWxlcyA9IHRoaXMub2JqZWN0QWRhcHRlci5nZXRMb2NhbGUobGFuZ3VhZ2UpXHJcbiAgICBpZiAoIW9yaWdpbkxvY2FsZXMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdMb2NhbGVzID0gbWVyZ2Uob3JpZ2luTG9jYWxlcywgbG9jYWxlcylcclxuICAgIHRoaXMub2JqZWN0QWRhcHRlci5zZXRMb2NhbGUobGFuZ3VhZ2UsIG5ld0xvY2FsZXMpXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgYWRkTGFuZ3VhZ2UgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKG9yaWdpbkxvY2FsZXMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBsb2NhbGVzKVxyXG4gICAgbGFuZ3VhZ2VMaXN0W2xhbmd1YWdlXSA9IGxvY2FsZXNcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBnZXRMYW5ndWFnZUxpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYW5ndWFnZUxpc3QpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIEkxOG5NYW5hZ2VyXHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBaSF9DTiA9IHtcclxuICBVUExPQURfRkFJTEVEOiAn5LiK5Lyg5aSx6LSlJyxcclxuICBDSEVDS19TRVRUSU5HUzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueaYr+WQpuato+ehricsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnku6Xlj4rnvZHnu5wnLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6ZSZ6K+v56CB77yaJHtjb2Rlfe+8jOivt+aJk+W8gOa1j+iniOWZqOeymOi0tOWcsOWdgOafpeeci+ebuOWFs+WOn+WboCcsXHJcbiAgU0VSVkVSX0VSUk9SOiAn5pyN5Yqh56uv5Ye66ZSZ77yM6K+36YeN6K+VJyxcclxuICBBVVRIX0ZBSUxFRDogJ+iupOivgeWksei0pScsXHJcblxyXG4gIC8vIHNtbXNcclxuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcclxuICBQSUNCRURfU01NU19UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAn5aSH55So5LiK5Lyg5Z+f5ZCNJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxyXG5cclxuICAvLyBsb2NhbFxyXG4gIFBJQ0JFRF9MT0NBTDogJ+acrOWcsOS4iuS8oCcsXHJcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICforr7lrprot6/lvoQnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICfkvovlpoIgL3Vzci9sb2NhbC9pbWFnZXMvJyxcclxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICfnlKjkuo7mi7zmjqXnvZHlnYDot6/lvoQnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICfpmL/ph4zkupFPU1MnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+iuvuWummFjY2Vzc0tleUlkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6K6+5a6aYWNjZXNzS2V5U2VjcmV0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yab3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAn6IW+6K6v5LqRQ09TJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICforr7lrppTZWNyZXRJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICforr7lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICforr7lrppBcHBJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ+iuvuWumuaOpeWFpeeCuScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mmFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZU1vZ3IyJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmnoHmmbrljovnvKknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6ICflm77niYfmnoHmmbrljovnvKnvvIzor6bmg4Xor7flj4LogINb5paH5qGj6K+05piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg2NDM4KScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICflvIDlkK8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICflhbPpl60nLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+iuvuWumuS7k+W6k+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+iuvuWumuWIhuaUr+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAn5qC85byP77yadXNlcm5hbWUvcmVwbycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gcWluaXVcclxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvkupEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICforr7lrppBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICforr7lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAn6K6+5a6a6K6/6Zeu572R5Z2AJyxcclxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mnowJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcbiAgUElDQkVEX1RFTEVHUkFQSDogJ1RlbGVncmFwaCcsXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6K6+5a6aQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ+iuvuWummFjY2Vzc1Rva2VuJyxcclxuICBQSUNCRURfSU1HVVJfQUxCVU06ICforr7lrprnm7jlhozlkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+iuvuWumuS7o+eQhicsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrkvKDml7bloavlhpknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6K6+5a6a5pON5L2c5ZGYJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICforr7lrprmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAn6K6+5a6a5Yqg6YCf5Z+f5ZCNJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6K6+5a6a6Ieq5a6a5LmJQVBJ5o6l5YWl54K5JyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+iuvuWumumYsuebl+mTvlRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICforr7lrprov4fmnJ/ml7bpl7Qo56eSKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcblxyXG4gIC8vIHdlYmRhdnBsaXN0XHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+iuvuWumuaOpeWPo+e9keWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICflkK/nlKhTU0wnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ+iuvuWumue9keWdgOi3r+W+hCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAn6K6+5a6a6K6k6K+B5pa55byPJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPml7blkK/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5a+G56CBJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee9keWdgOaXtuS9v+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9MTIzNDU2JyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ+WGhee9rlNGVFAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAn6K6+5a6a56uv5Y+jJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICforr7lrprnp4HpkqUnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6K6+5a6a56eB6ZKl5a+G56CBJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICforr7lrprkuIrkvKDot6/lvoQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICforr7lrprmlofku7bnlKjmiLc657uEJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ+iuvuWumuaWh+S7tuadg+mZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ+iuvuWumuaWh+S7tuWkueadg+mZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiupDIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ+S+i+Wmgu+8mi9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovpPlhaXnp4HpkqXlr4bnoIEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaC77yad3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICfkvovlpoLvvJowNjY0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcclxuXHJcbiAgLy8gUGljTGlzdFxyXG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXHJcbiAgUElDQkVEX1BJQ0xJU1RfUE9SVDogJ+iuvuWumuerr+WPoycsXHJcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAn6K6+5a6a5Zu+5bqKJyxcclxuICBQSUNCRURfUElDTElTVF9DT05GSUdOQU1FOiAn6K6+5a6a6YWN572u5ZCNJyxcclxuICBQSUNCRURfUElDTElTVF9LRVk6ICforr7lrprpibTmnYNLZXknLFxyXG5cclxuICAvLyBMc2t5IFByb1xyXG4gIFBJQ0JFRF9MU0tZX1BMSVNUOiAnTHNreScsXHJcbiAgUElDQkVEX0xTS1lfVkVSU0lPTjogJ+iuvuWumueJiOacrCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAn5L6L5aaCVjEnLFxyXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICforr7lrprkuLvmnLonLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20nLFxyXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcclxuICBQSUNCRURfTFNLWV9TVFJBVEVHWV9JRDogJ+iuvuWumuetlueVpUlEJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAn5L6L5aaC77yaMScsXHJcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICforr7lrprnm7jlhoxJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRDogJ+mAieWhq++8jFYy54mI5pys6ZmQ5a6aJyxcclxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAn6K6+5a6a5p2D6ZmQJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfkvovlpoLvvJpwdWJsaWMnLFxyXG5cclxuICAvLyBBd3NTM1BsaXN0XHJcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6K6+5a6aQWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICforr7lrppTZWNyZXRBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6K6+5a6aUmVnaW9uJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ+iuvuWumuiHquWumuS5ieiKgueCuScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICforr7lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAn5ZCv55SoczNGb3JjZVBhdGhTdHlsZScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEOiAn5ouS57ud5peg5pWIVExT6K+B5Lmm6L+e5o6lJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICforr7lrprkuIrkvKDotYTmupDnmoTorr/pl67nrZbnlaUnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+W8gOWQryBgcGF0aFN0eWxlQWNjZXNzYCDml7bvvIzmmK/lkKbopoHnpoHnlKjmnIDnu4jnlJ/miJBVUkzkuK3mt7vliqAgYnVja2V0IOWJjee8gCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRDogJ+S+i+Wmgu+8mkFLSUF4eHh4eHh4eHh4eHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICfkvovlpoLvvJp4eHh4eHh4eHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OOiAn5L6L5aaC77yadXMtZWFzdC0xJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0L3tmdWxsTmFtZX0nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3MzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pe25ZCv55SoJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaXtuWQr+eUqCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICfkvovlpoLvvJpwdWJsaWMtcmVhZCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfpnIDopoHml7blkK/nlKgnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+iuvuWumuawtOWNsOexu+WeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6K+36YCJ5oup5rC05Y2w57G75Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pe25ZCv55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICforr7lrprmsLTljbDop5LluqYnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6K6+5a6a5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfor7fovpPlhaXmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+iuvuWumuawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6K6+5a6a5rC05Y2w55u45a+55LqO5Zu+54mH55qE5q+U5L6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ivt+i+k+WFpTAtMeeahOWwj+aVsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6K6+5a6a5rC05Y2w5a2X5L2T6aKc6ImyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ivt+i+k+WFpXJnYuminOiJsuWAvCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K6+5a6a5rC05Y2w5Zu+54mH6Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWbvueJh+i3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICforr7lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfor7fpgInmi6nmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICforr7lrprph43lkb3lkI3moLzlvI8nLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWQr+eUqOmHjeWRveWQjScsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+iuvuWumuWbvueJh+i0qOmHjycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfor7fovpPlhaUwLTEwMOeahOaVtOaVsCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbov5vooYzmoLzlvI/ovazmjaInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovazmjaLml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+iuvuWumui9rOaNouagvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfor7fpgInmi6novazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbov5vooYzlm77niYfnvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+iuvuWumue8qeaUvuWuveW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+iuvuWumue8qeaUvumrmOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOi/m+ihjOe8qeaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57yp5pS+5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9rOWbvueJhycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovazlm77niYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+iuvuWumue8qeaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7Pov4flsI/lm77nvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbov5vooYzlm77niYfml4vovawnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9rOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICforr7lrprml4vovazop5LluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfor7fovpPlhaXmlbDlrZfvvIzlj6/kuLrotJ/mlbAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuS/oeaBrycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbkv6Hmga/ml7blkK/nlKgnLFxyXG5cclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo4XmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijheWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijheWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCN5oiW5ZCI5rOV5a6J6KOF6Lev5b6EJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovb3miJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246L295aSx6LSlJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovb3lpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi9veWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElMb2NhbGVzS2V5ID0ga2V5b2YgdHlwZW9mIFpIX0NOXHJcbmV4cG9ydCB0eXBlIElMb2NhbGVzID0gdHlwZW9mIFpIX0NOXHJcbiIsImltcG9ydCB7IHR5cGUgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBaSF9UVzogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprmmK/lkKbmraPnoronLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5Y+K57ay6LevJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivO+8miR7Y29kZX3vvIzoq4vmiZPplovngI/opr3lmajosrzkuIrlnLDlnYDmn6XnnIvnm7jpl5zljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXHJcbiAgQVVUSF9GQUlMRUQ6ICfoqo3orYnlpLHmlZcnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+WCmeeUqOS4iuWCs+e2suWdgCcsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO57ay6aCB6aGv56S655qE6Lev5b6RJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICfoqK3lrpphY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWummFjY2Vzc0tleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6Kit5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6Kit5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICfoqK3lrprmjqXlhaXpu54nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5qW15pm65aOT57iuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn6Zec6ZaJJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+mWi+WVkycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDogJ+WclueJh+alteaZuuWjk+e4ru+8jOips+aDheiri+WPg+iAg1vmlofmqpToqqrmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICfoqK3lrprliIbmlK/lkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6Kit5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+ioreWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6Kit5a6a55u457C/5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICfoqK3lrppQUk9YWScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICfoqK3lrprmk43kvZzlk6EnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+ioreWumuaTjeS9nOWToeWvhueivCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICfoqK3lrprliqDpgJ/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICfoqK3lrprpgY7mnJ/mmYLplpMo56eSKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICfoqK3lrppBUEnkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAn6Kit5a6a6KqN6K2J5pa55byPJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee2suWdgOaZguS9v+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9dmFsdWUnLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YWn572uU0ZUUCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAn6Kit5a6a5Li75qmfJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICfoqK3lrprnq6/lj6MnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ+ioreWumuengemRsCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfoqK3lrprnp4HpkbDlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ+ioreWumuaWh+S7tueUqOaItjrntYQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAn6Kit5a6a5paH5Lu25qyK6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6Kit5a6a5paH5Lu25aS+5qyK6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mjEuMS4xLjMnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAn6buY6KqNMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i8uOWFpeengemRsOWvhueivCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICfkvovlpoLvvJp3d3c6ZGF0YScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ+S+i+Wmgu+8mjA3NzUnLFxyXG5cclxuICAvLyBQaWNMaXN0XHJcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcclxuICBQSUNCRURfUElDTElTVF9IT1NUOiAn6Kit5a6a5Li75qmfJyxcclxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcclxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICfoqK3lrprlnJbluoonLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUU6ICfoqK3lrprphY3nva7lkI0nLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+ioreWumumRkuasiktleScsXHJcblxyXG4gIC8vIExza3kgUHJvXHJcbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcclxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6Kit5a6a54mI5pysJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICfoq4vpgbjmk4fniYjmnKwnLFxyXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20nLFxyXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICfoq4vovLjlhaVUb2tlbicsXHJcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICfoqK3lrprnrZbnlaVJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ+S+i+WmgjEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6Kit5a6a55u45YaKSUQnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfkvovlpoIxJyxcclxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAn6Kit5a6a5LiK5YKz5qyK6ZmQJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfoq4vpgbjmk4fkuIrlgrPmrIrpmZAnLFxyXG5cclxuICAvLyBBd3NTM1BsaXN0XHJcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6Kit5a6aQWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICfoqK3lrppTZWNyZXRBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6Kit5a6aUmVnaW9uJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAn6Kit5a6a5LiK5YKz6Lev5b6RJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ+ioreWumuiHquWumue+qeevgOm7nicsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICfoqK3lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ+ioreWumuiHquWumue+qee2suWdgCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfplovllZ8gYHJlamVjdFVuYXV0aG9yaXplZGAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDTDogJ+ioreWumkFDTCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgIOaZgu+8jOaYr+WQpuimgeemgeeUqOacgOe1gueUn+aIkFVSTOS4rea3u+WKoCBidWNrZXQg5YmN57a0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAn5L6L5aaC77yaQUtJQXh4eHh4eHh4eHh4eHgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ+S+i+Wmgu+8mnh4eHh4eHh4eHgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3MzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pmC5ZWf55SoJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaZguWVn+eUqCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICfkvovlpoLvvJpwdWJsaWMtcmVhZCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfpnIDopoHmmYLllZ/nlKgnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+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+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICfoqK3lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfoq4vpgbjmk4fmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICfoqK3lrprph43lkb3lkI3moLzlvI8nLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWVn+eUqOmHjeWRveWQjScsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+ioreWumuWclueJh+izqumHjycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfoq4vovLjlhaUwLTEwMOeahOaVtOaVuCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbpgLLooYzmoLzlvI/ovYnmj5snLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovYnmj5vmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+ioreWumui9ieaPm+agvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfoq4vpgbjmk4fovYnmj5vmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbpgLLooYzlnJbniYfnuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee4ruaUvuaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+ioreWumue4ruaUvuWvrOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+ioreWumue4ruaUvumrmOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOmAsuihjOe4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57iu5pS+5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9ieWclueJhycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovYnlnJbniYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+ioreWumue4ruaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfoq4vovLjlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7PpgY7lsI/lnJbnuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/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+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IEVOOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncycsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncyBhbmQgbmV0d29yaycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxyXG4gIFNFUlZFUl9FUlJPUjogJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsXHJcbiAgQVVUSF9GQUlMRUQ6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ0V4LiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIGxvY2FsXHJcbiAgUElDQkVEX0xPQ0FMOiAnTG9jYWwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICdFeC4gL1VzZXJzL25hbWUvUGljdHVyZXMvJyxcclxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdXJsIHBhdGgnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ1NldCBhY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBhY2Nlc3NLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAnU2V0IFNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAnRXguIDEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHA6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICdTZXQgSW1hZ2VTbGltJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAnSW1hZ2UgZXh0cmVtZWx5IGludGVsbGlnZW50IGNvbXByZXNzaW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlIFtkb2N1bWVudCBkZXNjcmlwdGlvbl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NjQzOCknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAnT1BFTicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ0NMT1NFJyxcclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICdTZXQgUmVwbyBOYW1lJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIHRlbGVncmFwaFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG5cclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICdTZXQgQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ1NldCBBY2Nlc3MgVG9rZW4nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ1NldCBBbGJ1bSBOYW1lJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICdTZXQgUHJveHknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCBhcyBhbm9ueW1vdXMnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICdFeC4gdGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICdVcHl1bicsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAnU2V0IE9wZXJhdG9yJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICdTZXQgT3BlcmF0b3IgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICdTZXQgVVJMJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ1NldCBBbnRpLUxlZWNoIFRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICdTZXQgRXhwaXJlIFRpbWUoc2Vjb25kcyknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAnRXguIG1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBvcGVyYXRvciBwYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAnRXguIGh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICdFeC4gIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICdTZXQgQXV0aCBUeXBlJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TOiAnRXguID9rZXk9dmFsdWUnLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAnU0ZUUCBCdWlsZGluJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ1NldCBQcml2YXRlIEtleScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdTZXQgUHJpdmF0ZSBLZXkgUGFzc3BocmFzZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAnU2V0IEZpbGUgVXNlcjpHcm91cCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICdTZXQgRmlsZSBNb2RlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAnU2V0IERpcmVjdG9yeSBNb2RlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiAxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ0RlZmF1bHQgMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAnRXguIC9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdQbGVhc2UgdHlwZSB0aGUgcHJpdmF0ZSBrZXkgcGFzc3BocmFzZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICdFeC4gd3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICdFeC4gMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAnRXguIDA3NzUnLFxyXG5cclxuICAvLyBQaWNMaXN0XHJcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcclxuICBQSUNCRURfUElDTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICdTZXQgUG9ydCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAnU2V0IFBpY0JlZCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ1NldCBDb25maWcgTmFtZScsXHJcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAnU2V0IEtleScsXHJcblxyXG4gIC8vIExza3kgUHJvXHJcbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcclxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAnU2V0IFZlcnNpb24nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ0V4LiB2MScsXHJcbiAgUElDQkVEX0xTS1lfSE9TVDogJ1NldCBIb3N0JyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICdFeC4gaHR0cHM6Ly9sc2t5LmNvJyxcclxuICBQSUNCRURfTFNLWV9UT0tFTjogJ1NldCBUb2tlbicsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ0V4LiB4eHgnLFxyXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAnU2V0IFN0cmF0ZWd5IElEJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAnRXguIDEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAnU2V0IEFsYnVtIElEJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAnT3B0aW9uYWwsIG9ubHkgZm9yIFYyJyxcclxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAnU2V0IFBlcm1pc3NvbicsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAnRXguIHB1YmxpYycsXHJcblxyXG4gIC8vIEF3c1MzUGxpc3RcclxuICBQSUNCRURfQVdTUzNQTElTVDogJ0FXUyBTMycsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQ6ICdTZXQgQWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICdTZXQgU2VjcmV0QWNjZXNzS2V5JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUdJT046ICdTZXQgUmVnaW9uJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICdTZXQgUHJveHknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1M6ICdTZXQgUGF0aFN0eWxlQWNjZXNzJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICdTZXQgUmVqZWN0VW5hdXRob3JpemVkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICdTZXQgQUNMJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICd3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQsIHdoZXRoZXIgdG8gZGlzYWJsZSBhZGRpbmcgYnVja2V0IHByZWZpeCB0byB1cmwnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICdFeC4geHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICdFeC4geHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ0V4LiB0ZXN0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ0V4LiB1cy1lYXN0LTEnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ0V4LiB0ZXN0L3tmdWxsTmFtZX0nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ0V4LiBodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAnRW5hYmxlIHdoZW4gYHBhdGhTdHlsZUFjY2Vzc2AgaXMgcmVxdWlyZWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEOiAnRW5hYmxlIHdoZW4gcmVqZWN0aW5nIGludmFsaWQgVExTIGNlcnRpZmljYXRlIGNvbm5lY3Rpb24gaXMgcmVxdWlyZWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAnRXguIHB1YmxpYy1yZWFkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQnLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICdTZXQgcmVuYW1lIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAnRW5hYmxlIHJlbmFtZScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAnU2V0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdXaGV0aGVyIHRvIHVzZSBmdWxsLXNjcmVlbiB3YXRlcm1hcmsnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gZnVsbC1zY3JlZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ1NldCB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICdTZXQgd2F0ZXJtYXJrIGZvbnQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBmb250IGZpbGUgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICdQbGVhc2UgZW50ZXIgYSBudW1iZXIgYmV0d2VlbiAwLTEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1NldCB3YXRlcm1hcmsgZm9udCBjb2xvcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAnU2V0IHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ1BsZWFzZSBzZWxlY3Qgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAnU2V0IGltYWdlIHF1YWxpdHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAwLTEwMCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICdXaGV0aGVyIHRvIHBlcmZvcm0gZm9ybWF0IGNvbnZlcnNpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICdFbmFibGUgd2hlbiBmb3JtYXQgY29udmVyc2lvbiBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ1BsZWFzZSBzZWxlY3QgY29udmVyc2lvbiBmb3JtYXQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAnU2V0IHJlc2l6aW5nIHdpZHRoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZSBieSBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ1doZXRoZXIgdG8gZmxpcCB0aGUgaW1hZ2UgdmVydGljYWxseScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIGhvcml6b250YWxseScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAnV2hldGhlciB0byBza2lwIHJlc2l6aW5nIG9mIHNtYWxsIGltYWdlcycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAnRW5hYmxlIHdoZW4gaW1hZ2Ugcm90YXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAnV2hldGhlciB0byByZW1vdmUgRVhJRiBpbmZvcm1hdGlvbicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ0VuYWJsZSB3aGVuIHJlbW92aW5nIEVYSUYgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcclxufVxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgQ29tbWFuZGVyIGZyb20gJy4uL2xpYi9Db21tYW5kZXInXHJcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXHJcbmltcG9ydCBMaWZlY3ljbGUgZnJvbSAnLi9MaWZlY3ljbGUnXHJcbmltcG9ydCBMaWZlY3ljbGVQbHVnaW5zLCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXHJcbmltcG9ydCB1cGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcclxuaW1wb3J0IHRyYW5zZm9ybWVycyBmcm9tICcuLi9wbHVnaW5zL3RyYW5zZm9ybWVyJ1xyXG5pbXBvcnQgUGx1Z2luTG9hZGVyIGZyb20gJy4uL2xpYi9QbHVnaW5Mb2FkZXInXHJcbmltcG9ydCB7IGdldCwgc2V0LCB1bnNldCB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgdHlwZSBJSGVscGVyLCB0eXBlIElJbWdJbmZvLCB0eXBlIElDb25maWcsIHR5cGUgSVBpY0dvLCB0eXBlIElTdHJpbmdLZXlNYXAsIHR5cGUgSVBsdWdpbkxvYWRlciwgdHlwZSBJSTE4bk1hbmFnZXIsIHR5cGUgSVBpY0dvUGx1Z2luLCB0eXBlIElQaWNHb1BsdWdpbkludGVyZmFjZSwgdHlwZSBJUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZ2V0Q2xpcGJvYXJkSW1hZ2UgZnJvbSAnLi4vdXRpbHMvZ2V0Q2xpcGJvYXJkSW1hZ2UnXHJcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xyXG5pbXBvcnQgREIgZnJvbSAnLi4vdXRpbHMvZGInXHJcbmltcG9ydCBQbHVnaW5IYW5kbGVyIGZyb20gJy4uL2xpYi9QbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50LCBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBldmVudEJ1cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50QnVzJ1xyXG5pbXBvcnQgeyBpc0NvbmZpZ0tleUluQmxhY2tMaXN0LCBpc0lucHV0Q29uZmlnVmFsaWQgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IEkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vaTE4bidcclxuXHJcbmV4cG9ydCBjbGFzcyBQaWNHbyBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElQaWNHbyB7XHJcbiAgcHJpdmF0ZSBfY29uZmlnITogSUNvbmZpZ1xyXG4gIHByaXZhdGUgbGlmZWN5Y2xlITogTGlmZWN5Y2xlXHJcbiAgcHJpdmF0ZSBkYiE6IERCXHJcbiAgcHJpdmF0ZSBfcGx1Z2luTG9hZGVyITogUGx1Z2luTG9hZGVyXHJcbiAgY29uZmlnUGF0aDogc3RyaW5nXHJcbiAgYmFzZURpciE6IHN0cmluZ1xyXG4gIGhlbHBlciE6IElIZWxwZXJcclxuICBsb2c6IExvZ2dlclxyXG4gIGNtZDogQ29tbWFuZGVyXHJcbiAgb3V0cHV0OiBJSW1nSW5mb1tdXHJcbiAgaW5wdXQ6IGFueVtdXHJcbiAgcmF3SW5wdXQ6IGFueVtdXHJcbiAgcGx1Z2luSGFuZGxlcjogUGx1Z2luSGFuZGxlclxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MS41LjArXHJcbiAgICpcclxuICAgKiB1c2UgcmVxdWVzdCBpbnN0ZWFkXHJcbiAgICovXHJcbiAgUmVxdWVzdCE6IFJlcXVlc3RcclxuICBpMThuITogSUkxOG5NYW5hZ2VyXHJcbiAgVkVSU0lPTjogc3RyaW5nID0gcHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTlxyXG4gIEdVSV9WRVJTSU9OPzogc3RyaW5nXHJcblxyXG4gIGdldCBwbHVnaW5Mb2FkZXIgKCk6IElQbHVnaW5Mb2FkZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsdWdpbkxvYWRlclxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IgKGNvbmZpZ1BhdGg6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBjb25maWdQYXRoXHJcbiAgICB0aGlzLm91dHB1dCA9IFtdXHJcbiAgICB0aGlzLmlucHV0ID0gW11cclxuICAgIHRoaXMucmF3SW5wdXQgPSBbXVxyXG4gICAgdGhpcy5oZWxwZXIgPSB7XHJcbiAgICAgIHRyYW5zZm9ybWVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndHJhbnNmb3JtZXInKSxcclxuICAgICAgdXBsb2FkZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd1cGxvYWRlcicpLFxyXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxyXG4gICAgICBiZWZvcmVVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVXBsb2FkUGx1Z2lucycpLFxyXG4gICAgICBhZnRlclVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdhZnRlclVwbG9hZFBsdWdpbnMnKVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Q29uZmlnUGF0aCgpXHJcbiAgICB0aGlzLmxvZyA9IG5ldyBMb2dnZXIodGhpcylcclxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxyXG4gICAgdGhpcy5wbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIodGhpcylcclxuICAgIHRoaXMuaW5pdENvbmZpZygpXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSBob21lZGlyKCkgKyAnLy5waWNsaXN0L2NvbmZpZy5qc29uJ1xyXG4gICAgfVxyXG4gICAgaWYgKHBhdGguZXh0bmFtZSh0aGlzLmNvbmZpZ1BhdGgpLnRvVXBwZXJDYXNlKCkgIT09ICcuSlNPTicpIHtcclxuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgfVxyXG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcclxuICAgIGNvbnN0IGV4aXN0ID0gZnMucGF0aEV4aXN0c1N5bmModGhpcy5jb25maWdQYXRoKVxyXG4gICAgaWYgKCFleGlzdCkge1xyXG4gICAgICBmcy5lbnN1cmVGaWxlU3luYyhgJHt0aGlzLmNvbmZpZ1BhdGh9YClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXHJcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRiLnJlYWQodHJ1ZSkgYXMgSUNvbmZpZ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGluaXQgMThuIGF0IGZpcnN0XHJcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxyXG4gICAgICB0aGlzLlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzKVxyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIgPSBuZXcgUGx1Z2luTG9hZGVyKHRoaXMpXHJcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXHJcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCdwaWNnbycpXHJcbiAgICAgIHVwbG9hZGVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICB0cmFuc2Zvcm1lcnModGhpcykucmVnaXN0ZXIodGhpcylcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJycpXHJcbiAgICAgIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgIHRoaXMubGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSh0aGlzKVxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIHRoaXMubG9nLmVycm9yKGUpXHJcbiAgICAgIHRocm93IGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGVhc2lseSBtYW5udWFsbHkgbG9hZCBhIHBsdWdpblxyXG4gICAqIGlmIHByb3ZpZGUgcGx1Z2luIG5hbWUsIHdpbGwgcmVnaXN0ZXIgcGx1Z2luIGJ5IG5hbWVcclxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXHJcbiAgICovXHJcbiAgdXNlIChwbHVnaW46IElQaWNHb1BsdWdpbiwgbmFtZT86IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHBsdWdpbih0aGlzKVxyXG4gICAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5jbWQuaW5pdCgpXHJcbiAgICAgIHRoaXMuY21kLmxvYWRDb21tYW5kcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWc8VD4gKG5hbWU/OiBzdHJpbmcpOiBUIHtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIHVua25vd24gYXMgVFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGdldCh0aGlzLl9jb25maWcsIG5hbWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlnIChjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcclxuICAgIHRoaXMuZGIuc2F2ZUNvbmZpZyhjb25maWcpXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXHJcbiAgICB0aGlzLmRiLnVuc2V0KGtleSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcclxuICAgICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7bmFtZX0gY2FuJ3QgYmUgbW9kaWZpZWRgKVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcclxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXHJcbiAgICAgIH1cclxuICAgICAgc2V0KHRoaXMuX2NvbmZpZywgbmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XHJcbiAgICAgICAgY29uZmlnTmFtZTogbmFtZSxcclxuICAgICAgICB2YWx1ZTogY29uZmlnW25hbWVdXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdW5zZXRDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBnZXQgcmVxdWVzdCAoKTogSVJlcXVlc3RbJ3JlcXVlc3QnXSB7XHJcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWQgKGlucHV0PzogYW55W10pOiBQcm9taXNlPElJbWdJbmZvW10gfCBFcnJvcj4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoJ05vIGNvbmZpZyBmaWxlIGZvdW5kLCBwbGVhc2UgY2hlY2sgeW91ciBjb25maWcgZmlsZSBwYXRoJylcclxuICAgICAgcmV0dXJuIFtdXHJcbiAgICB9XHJcbiAgICAvLyB1cGxvYWQgZnJvbSBjbGlwYm9hcmRcclxuICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxyXG4gICAgICAgIGlmIChpbWdQYXRoID09PSAnbm8gaW1hZ2UnKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIG5vdCBmb3VuZCBpbiBjbGlwYm9hcmQnKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9uY2UoSUJ1aWxkSW5FdmVudC5GQUlMRUQsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAvLyDliKDpmaQgcGljZ28g55Sf5oiQ55qE5Zu+54mH5paH5Lu277yM5L6L5aaCIGB+Ly5waWNnby8yMDIwMDYyMTIwNTcyMC5wbmdgXHJcbiAgICAgICAgICAgICAgZnMucmVtb3ZlKGltZ1BhdGgpLmNhdGNoKChlKSA9PiB7IHRoaXMubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLm9uY2UoJ2ZpbmlzaGVkJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xyXG4gICAgICAgICAgICAgIGZzLnJlbW92ZShpbWdQYXRoKS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KFtpbWdQYXRoXSlcclxuICAgICAgICAgIHJldHVybiBvdXRwdXRcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB1cGxvYWQgZnJvbSBwYXRoXHJcbiAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChpbnB1dClcclxuICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IEltZ0Zyb21QYXRoIGZyb20gJy4vcGF0aCdcclxuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXHJcblxyXG5jb25zdCBidWlsZEluVHJhbnNmb3JtZXJzOiBJUGljR29QbHVnaW4gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlZ2lzdGVyIChjdHg6IElQaWNHbykge1xyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXHJcbiJdLCJuYW1lcyI6WyJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwiY21kIiwicHJvZ3JhbSIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsaWFzIiwib3B0aW9uIiwiYWN0aW9uIiwicGx1Z2lucyIsInByb3h5IiwicmVnaXN0cnkiLCJvcHRpb25zIiwiaW5zdGFsbCIsImNhdGNoIiwiZSIsImxvZyIsImVycm9yIiwidW5pbnN0YWxsIiwidXBkYXRlIiwiY29uZmlnIiwicmFuZG9tU3RyaW5nR2VuZXJhdG9yIiwibGVuZ3RoIiwiY2hhcnMiLCJBcnJheSIsImZyb20iLCJtYXAiLCJjaGFyQXQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJqb2luIiwicmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIiwib2xkTmFtZSIsImN1c3RvbUZvcm1hdCIsImFmZml4RmlsZU5hbWUiLCJjb252ZXJzaW9uTWFwIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwidG9TdHJpbmciLCJzbGljZSIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicGF0aCIsImJhc2VuYW1lIiwiZXh0bmFtZSIsImRpZ2VzdCIsInV1aWR2NCIsInY0IiwicmVwbGFjZSIsIm5vdyIsInVuZGVmaW5lZCIsIk9iamVjdCIsImtleXMiLCJzb21lIiwiaXRlbSIsImluY2x1ZGVzIiwiZXh0IiwibmV3TmFtZSIsInJlZHVjZSIsImFjYyIsImN1ciIsIlJlZ0V4cCIsIl9yZXN1bHQiLCJrZXkiLCJjb3VudCIsIm1heCIsImRpcm5hbWUiLCJzcGxpdCIsInNlcCIsImEiLCJiIiwiaXNVcmwiLCJ1cmwiLCJ0ZXN0IiwiaXNVcmxFbmNvZGUiLCJkZWNvZGVVUkkiLCJoYW5kbGVVcmxFbmNvZGUiLCJlbmNvZGVVUkkiLCJnZXRJbWFnZVNpemUiLCJmaWxlIiwid2lkdGgiLCJoZWlnaHQiLCJ0eXBlIiwiaW1hZ2VTaXplIiwicmVhbCIsImdldEZTRmlsZSIsImFzeW5jIiwiZmlsZVBhdGgiLCJmaWxlTmFtZSIsImJ1ZmZlciIsImZzIiwicmVhZEZpbGUiLCJzdWNjZXNzIiwiX2EiLCJyZWFzb24iLCJnZXRVUkxGaWxlIiwidGltZW91dElkIiwicmVxdWVzdEZuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXMiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcCIsImRhdGEiLCJjbGVhclRpbWVvdXQiLCJ1cmxQYXRoIiwiVVJMIiwicGF0aG5hbWUiLCJzZWFyY2hQYXJhbXMiLCJnZXQiLCJzdGFydHNXaXRoIiwibWVzc2FnZSIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJnZXRQbHVnaW5OYW1lVHlwZSIsIm5hbWUiLCJpc1NpbXBsZU5hbWUiLCJuYW1lT3JQYXRoIiwiaXNBYnNvbHV0ZSIsInBsdWdpblBhdGgiLCJwcm9jZXNzIiwiY3dkIiwiZXhpc3RzU3luYyIsImhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSIsInNjb3BlIiwiZ2V0UHJvY2Vzc1BsdWdpbk5hbWUiLCJsb2dnZXIiLCJjb25zb2xlIiwiaGFuZGxlVW5peFN0eWxlUGF0aCIsIndhcm4iLCJnZXROb3JtYWxQbHVnaW5OYW1lIiwicmVtb3ZlUGx1Z2luVmVyc2lvbiIsInBhY2thZ2VKU09OUGF0aCIsInBvc2l4IiwicGtnIiwicmVhZEpTT05TeW5jIiwicGF0aFN0ciIsInJlZyIsIm1hdGNoQXJyIiwibWF0Y2giLCJjb25maWdCbGFja0xpc3QiLCJpc0NvbmZpZ0tleUluQmxhY2tMaXN0IiwiYmxhY2tJdGVtIiwiaXNJbnB1dENvbmZpZ1ZhbGlkIiwiaXNBcnJheSIsInNhZmVQYXJzZSIsInN0ciIsIkpTT04iLCJwYXJzZSIsImZvcmNlTnVtYmVyIiwibnVtIiwiaXNOYU4iLCJOdW1iZXIiLCJpc0RldiIsImVudiIsIk5PREVfRU5WIiwiZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCIsIl9fZGlybmFtZSIsIkFkZFdhdGVybWFyayIsImltZyIsIndhdGVybWFya1R5cGUiLCJkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgiLCJpc0Z1bGxTY3JlZW5XYXRlcm1hcmsiLCJ3YXRlcm1hcmtEZWdyZWUiLCJ0ZXh0Iiwid2F0ZXJtYXJrRm9udFBhdGgiLCJ3YXRlcm1hcmtTY2FsZVJhdGlvIiwid2F0ZXJtYXJrQ29sb3IiLCJ3YXRlcm1hcmtJbWFnZVBhdGgiLCJwb3NpdGlvbiIsImltYWdlIiwic2hhcnAiLCJhbmltYXRlZCIsImltZ1dpZHRoIiwibWV0YWRhdGEiLCJ3YXRlcm1hcmsiLCJ0b0J1ZmZlciIsImNvbG9yIiwiZm9udEZhbWlseSIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJmaWxsIiwidGV4dFNWRyIsIlRleHRUb1NWRyIsImxvYWRTeW5jIiwiZ2V0U1ZHIiwiQnVmZmVyIiwidGV4dDJTVkciLCJ3YXRlcm1hcmtXaWR0aCIsIndhdGVybWFya0hlaWdodCIsImdldFNpemUiLCJ3YXRlcm1hcmtSZXNpemVXaWR0aCIsIndhdGVybWFya1Jlc2l6ZUhlaWdodCIsInJlc2l6ZSIsImZpdCIsInJvdGF0ZSIsImJhY2tncm91bmQiLCJyIiwiZyIsImFscGhhIiwiY3JlYXRlV2F0ZXJtYXJrIiwiY29tcG9zaXRlIiwiaW5wdXQiLCJncmF2aXR5IiwidGlsZSIsInZhbGlkUGFyYW0iLCJwYXJhbXMiLCJldmVyeSIsInBhcmFtIiwiYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QiLCJ2YWxpZE91dHB1dEZvcm1hdCIsImZvcm1hdCIsImltYWdlRXh0TGlzdCIsImltYWdlQWRkV2F0ZXJNYXJrIiwid2F0ZXJtYXJrVGV4dCIsIndhdGVybWFya1Bvc2l0aW9uIiwiZm9ybWF0T3B0aW9ucyIsImZvcm1hdENvbnZlcnRPYmoiLCJxdWFsaXR5IiwiaXNDb252ZXJ0IiwiY29udmVydEZvcm1hdCIsImlzUmVTaXplIiwicmVTaXplSGVpZ2h0IiwicmVTaXplV2lkdGgiLCJza2lwUmVTaXplT2ZTbWFsbEltZyIsImlzUmVTaXplQnlQZXJjZW50IiwicmVTaXplUGVyY2VudCIsImlzUm90YXRlIiwiaXNGbGlwIiwiaXNGbG9wIiwicm90YXRlRGVncmVlIiwicGljQmVkIiwiaW1hZ2VQcm9jZXNzIiwicmF3Rm9ybWF0IiwidG9Mb3dlckNhc2UiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJyb3VuZCIsInNjYWxlUmF0aW8iLCJmbGlwIiwiZmxvcCIsIm5ld0Zvcm1hdCIsImdldENvbnZlcnRlZEZvcm1hdCIsInRvRm9ybWF0IiwibW96anBlZyIsImltYWdlRm9ybWF0TGlzdCIsIm5lZWRBZGRXYXRlcm1hcmsiLCJ3YXRlcm1hcmtPcHRpb25zIiwiZmlsZUV4dCIsImlzQWRkV2F0ZXJtYXJrIiwibmVlZENvbXByZXNzIiwiY29tcHJlc3NPcHRpb25zIiwibm9ybWFsaXplZEV4dCIsInJlbW92ZUV4aWYiLCJ1cGxvYWQiLCJhcmd1bWVudHMiLCJpbnB1dExpc3QiLCJmaWx0ZXIiLCJleGlzdCIsImNvbXByZXNzIiwidXNlckNvbmZpZyIsImdldENvbmZpZyIsInByZWZpeCIsImkxOG4iLCJ0cmFuc2xhdGUiLCJyZXF1aXJlZCIsImRlZmF1bHQiLCJjaG9pY2VzIiwiaXNSZW1vdmVFeGlmIiwicmVuYW1lIiwiZW5hYmxlIiwiaGFuZGxlQ29uZmlnIiwicHJvbXB0cyIsIm1vZHVsZSIsImFuc3dlciIsImlucXVpcmVyIiwicHJvbXB0IiwiY29uZmlnTmFtZSIsInNhdmVDb25maWciLCJzZXR0aW5nIiwiYnVpbGRpbiIsImhlbHBlciIsImdldElkTGlzdCIsInBsdWdpbkxvYWRlciIsImdldFBsdWdpbiIsImdldEZ1bGxMaXN0IiwiX2IiLCJwbHVnaW4iLCJpbmZvIiwiYXJndiIsInVzZSIsInVwbG9hZGVyIiwidHJhbnNmb3JtZXIiLCJwdXNoIiwiZm9yRWFjaCIsInBpY2dvUGx1Z2lucyIsInNldENvbmZpZyIsImdlbmVyYXRlIiwib3B0cyIsImdldE9wdGlvbnMiLCJ0bXAiLCJzb3VyY2UiLCJhbnN3ZXJzIiwiX2ZpbGVzIiwiZ2xvYmJ5IiwiZG90IiwiZ2xvYiIsImZpbHRlcnMiLCJmaWxlcyIsInJlbmRlciIsIndyaXRlRmlsZVRyZWUiLCJkZXN0IiwiY29tcGxldGUiLCJjb21wbGV0ZU1lc3NhZ2UiLCJleHAiLCJmbiIsIkZ1bmN0aW9uIiwic3RyaW5naWZ5IiwidGVtcGxhdGVQYXRoIiwib3B0aW9uc1BhdGgiLCJyZXF1aXJlIiwiZmlsZVRyZWUiLCJyZWFkRmlsZVN5bmMiLCJjb250ZW50IiwiZWpzIiwiaXNCdWZmZXIiLCJkaXIiLCJlbnN1cmVEaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsInJ1biIsIm9mZmxpbmUiLCJ0ZW1wbGF0ZSIsImhhc1NsYXNoIiwiZG93bmxvYWRBbmRHZW5lcmF0ZSIsInJtIiwic3luYyIsImRvd25sb2FkIiwiY2xvbmUiLCJlcnIiLCJpbml0IiwicHJvamVjdCIsImluUGxhY2UiLCJob21lZGlyIiwib2siLCJvbiIsImNoYWxrIiwiZ3JheSIsImxhbmciLCJsaXN0IiwiZ2V0TGFuZ3VhZ2VMaXN0Iiwic2V0TGFuZ3VhZ2UiLCJMaWZlY3ljbGVQbHVnaW5zIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiTWFwIiwicGx1Z2luSWRNYXAiLCJyZWdpc3RlciIsImlkIiwiVHlwZUVycm9yIiwiaGFzIiwic2V0IiwiY3VycmVudFBsdWdpbiIsInVucmVnaXN0ZXIiLCJwbHVnaW5OYW1lIiwicGx1Z2luTGlzdCIsImRlbGV0ZSIsImdldE5hbWUiLCJnZXRMaXN0IiwidmFsdWVzIiwic2V0Q3VycmVudFBsdWdpbk5hbWUiLCJDb21tYW5kZXIiLCJDb21tYW5kIiwidmVyc2lvbiIsImRlYnVnIiwic2lsZW50IiwiYXJncyIsImV4aXQiLCJjdXJyZW50UGx1Z2luTmFtZSIsImxvYWRDb21tYW5kcyIsIklMb2dUeXBlIiwiSUJ1aWxkSW5FdmVudCIsIklCdXNFdmVudCIsIkxvZ2dlciIsImxldmVsIiwiaGFuZGxlTG9nIiwibXNnIiwibG9nTGV2ZWwiLCJjaGVja0xvZ0xldmVsIiwibG9nSGVhZGVyIiwidG9VcHBlckNhc2UiLCJsb2dQYXRoIiwiYmFzZURpciIsInJlc3VsdCIsImNoZWNrTG9nRmlsZUlzTGFyZ2UiLCJpc0xhcmdlIiwid2FybmluZ01zZyIsInllbGxvdyIsInJlY3JlYXRlTG9nRmlsZSIsInVuc2hpZnQiLCJoYW5kbGVXcml0ZUxvZyIsImxvZ0ZpbGVTaXplIiwic3RhdFN5bmMiLCJzaXplIiwibG9nRmlsZVNpemVMaW1pdCIsInVubGlua1N5bmMiLCJjcmVhdGVGaWxlU3luYyIsImRheWpzIiwiRXJyb3IiLCJ1dGlsIiwic3RhY2siLCJhcHBlbmRGaWxlU3luYyIsIkxpZmVjeWNsZSIsIkV2ZW50RW1pdHRlciIsInN1cGVyIiwidHRmTGluayIsInRlbXBGaWxlUGF0aCIsImltZ0ZpbGVQYXRoIiwiZW1wdHlEaXJTeW5jIiwidHRmUGF0aCIsIm91dHB1dERpciIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsImF4aW9zIiwiY29uZmlnUGF0aCIsIm91dHB1dCIsInJhd0lucHV0IiwiUmVxdWVzdCIsIlZFUlNJT04iLCJHVUlfVkVSU0lPTiIsImJpbmQiLCJyZW1vdmVDb25maWciLCJ1bnNldENvbmZpZyIsImFkZExpc3RlbmVyIiwib25jZSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwibGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwiZW1pdCIsImxpc3RlbmVyQ291bnQiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiZXZlbnROYW1lcyIsImNyZWF0ZUNvbnRleHQiLCJyYXdJbnB1dFBhdGgiLCJjbG9uZURlZXAiLCJ3YXRlcm1hcmtNc2ciLCJjb21wcmVzc01zZyIsImFsbFNldHRsZWQiLCJpbmRleCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiaXNTa2lwIiwiZG93bmxvYWRUVEYiLCJfYyIsIl9kIiwibmV3RXh0IiwiX2UiLCJfZiIsInRlbXBGaWxlIiwiZ2V0VGltZSIsImhlaWNCdWZmZXIiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwiYmVmb3JlVHJhbnNmb3JtIiwiZG9UcmFuc2Zvcm0iLCJyZW5hbWVDb25maWciLCJiZWZvcmVVcGxvYWQiLCJkb1VwbG9hZCIsImFmdGVyVXBsb2FkIiwiRkFJTEVEIiwiVVBMT0FEX1BST0dSRVNTIiwiQkVGT1JFX1RSQU5TRk9STSIsImhhbmRsZVBsdWdpbnMiLCJiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zIiwiY3VycmVudFRyYW5zZm9ybWVyIiwiQkVGT1JFX1VQTE9BRCIsImJlZm9yZVVwbG9hZFBsdWdpbnMiLCJvdXRwdXRJbWciLCJBRlRFUl9VUExPQUQiLCJhZnRlclVwbG9hZFBsdWdpbnMiLCJpc0VuY29kZU91dHB1dFVSTCIsImkiLCJpbWdVcmwiLCJiYXNlNjRJbWFnZSIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJBdXRob3JpemF0aW9uIiwiZm9ybURhdGEiLCJzbWZpbGUiLCJ2YWx1ZSIsImZpbGVuYW1lIiwic3NsIiwic21tc0NvbmZpZyIsImltZ0xpc3QiLCJwb3N0Q29uZmlnIiwidG9rZW4iLCJib2R5IiwiY29kZSIsImhhc2giLCJpbWFnZXMiLCJOT1RJRklDQVRJT04iLCJ0aXRsZSIsImdlbmVyYXRlU2lnbmF0dXJlIiwic2VjcmV0SWQiLCJzZWNyZXRLZXkiLCJhcHBJZCIsImJ1Y2tldCIsInNpZ25hdHVyZSIsInNpZ25UaW1lIiwidG9kYXkiLCJzaWduS2V5IiwiY3JlYXRlSG1hYyIsImVuZHBvaW50IiwiYXJlYSIsImh0dHBTdHJpbmciLCJzdHJpbmdUb1NpZ24iLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsImNvbmNhdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIkhvc3QiLCJtaW1lIiwibG9va3VwIiwib3AiLCJmaWxlY29udGVudCIsInRjWXVuT3B0aW9ucyIsImN1c3RvbVVybCIsInVzZVY0Iiwic3RhdHVzQ29kZSIsIm9wdGlvblVybCIsInNsaW0iLCJzb3VyY2VfdXJsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwidGlwcyIsImJ1aWxkR2l0aHViQXBpVXJsIiwicmVwbyIsImV4dHJhIiwianNvbiIsImJyYW5jaCIsImdpdGh1Yk9wdGlvbnMiLCJ1cGxvYWRQYXRoIiwiZG93bmxvYWRfdXJsIiwic2hhIiwiaW1nQmFzZTY0Iiwic2VsZWN0QXJlYSIsImdldFRva2VuIiwicWluaXVPcHRpb25zIiwiYWNjZXNzS2V5IiwibWFjIiwicWluaXUiLCJhdXRoIiwiTWFjIiwicnMiLCJQdXRQb2xpY3kiLCJ1cGxvYWRUb2tlbiIsImJhc2VVcmwiLCJ1cmxPcHRpb25zIiwicmVzcG9uc2UiLCJjbGllbnRJZCIsInVzZXJuYW1lIiwiYWNjZXNzVG9rZW4iLCJmb3JtYXRBY2Nlc3NUb2tlbiIsImFsYnVtIiwiYXV0aG9yaXphdGlvbiIsInJlcXVlc3RPcHRpb25zIiwiaW5pdFBhZ2VzIiwiYWxidW1IYXNoIiwiZ2V0QWxidW1IYXNoT3B0aW9ucyIsInRpbWVvdXQiLCJhbGJ1bUxpc3QiLCJpbWd1ck9wdGlvbnMiLCJsaW5rIiwiZGVsZXRlaGFzaCIsImdldEN1cnJlbnRVVENEYXRlIiwidG9VVENTdHJpbmciLCJkYXRlIiwic2lnblN0cmluZyIsImFjY2Vzc0tleVNlY3JldCIsImFjY2Vzc0tleUlkIiwiYWxpWXVuT3B0aW9ucyIsIm9wZXJhdG9yIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJwYXNzd29yZCIsImVuZHNXaXRoIiwiZ2V0QW50aUxlZWNoUGFyYW0iLCJhbnRpTGVlY2hUb2tlbiIsImV4cGlyZVRpbWUiLCJ1cmkiLCJleHBpcmUiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInVweXVuT3B0aW9ucyIsInN1ZmZpeCIsInVwdCIsIndlYmRhdnBsaXN0T3B0aW9ucyIsImhvc3QiLCJzc2xFbmFibGVkIiwiYXV0aFR5cGUiLCJ3ZWJwYXRoIiwiY2xpZW50T3B0aW9ucyIsIm1heEJvZHlMZW5ndGgiLCJtYXhDb250ZW50TGVuZ3RoIiwiQXV0aFR5cGUiLCJEaWdlc3QiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJwYXRoVG9DcmVhdGUiLCJjcmVhdGVEaXJlY3RvcnkiLCJwdXRGaWxlQ29udGVudHMiLCJvdmVyd3JpdGUiLCJpbWdUZW1wUGF0aCIsImltZ1RlbXBGaWxlUGF0aCIsImdhbGxlcnlQYXRoIiwibG9jYWxDb25maWciLCJ3ZWJQYXRoIiwiY29weUZpbGVTeW5jIiwiU1NIQ2xpZW50IiwiX2lzQ29ubmVjdGVkIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJfY2xpZW50IiwiTm9kZVNTSCIsImNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCIsInByaXZhdGVLZXkiLCJwYXNzcGhyYXNlIiwibG9naW5JbmZvIiwicHJpdmF0ZUtleVBhdGgiLCJjb25uZWN0IiwicG9ydCIsImxvY2FsIiwicmVtb3RlIiwibWtkaXIiLCJwdXRGaWxlIiwiZmlsZU1vZGUiLCJzY3JpcHQiLCJleGVjIiwiZGlyUGF0aCIsImlzQ29ubmVjdGVkIiwiZGlyZWN0b3J5TW9kZSIsImRpck1vZGUiLCJkaXJzIiwiY3VycmVudFBhdGgiLCJ1c2VyIiwiZ3JvdXAiLCJfdXNlciIsIl9ncm91cCIsImV4ZWNDb21tYW5kIiwiY2xvc2UiLCJkaXNwb3NlIiwic2Z0cHBsaXN0Q29uZmlnIiwidXBsb2FkVGVtcFBhdGgiLCJyZW1vdGVQYXRoIiwiZmlsZVVzZXIiLCJjaG93biIsInJlbW92ZVN5bmMiLCJtb3ZlU3luYyIsInRnT3B0aW9ucyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZW1vdmUiLCJzcmMiLCJwaWNiZWQiLCJzZXJ2ZXJLZXkiLCJwaWNsaXN0T3B0aW9ucyIsImZ1bGxSZXN1bHQiLCJpc1YyIiwidjFIZWFkZXJzIiwiQ29ubmVjdGlvbiIsInYxRm9ybURhdGEiLCJ2MkhlYWRlcnMiLCJBY2NlcHQiLCJzdHJhdGVneUlkIiwiYWxidW1JZCIsInBlcm1pc3Npb24iLCJ2MkZvcm1EYXRhIiwic3RyYXRlZ3lfaWQiLCJhbGJ1bV9pZCIsImFnZW50IiwiaHR0cHMiLCJBZ2VudCIsInJlamVjdFVuYXV0aG9yaXplZCIsImxza3lPcHRpb25zIiwic3RhdHVzIiwibGlua3MiLCJGaWxlTmFtZUdlbmVyYXRvciIsInllYXIiLCJtb250aCIsInBhZFN0YXJ0IiwiZGF5IiwiZnVsbE5hbWUiLCJleHROYW1lIiwibWQ1IiwiaW1nQnVmZmVyIiwibWQ1QjY0IiwibWQ1QjY0U2hvcnQiLCJzaGExIiwic2hhMjU2IiwidGltZXN0YW1wIiwidGltZXN0YW1wTVMiLCJmb3JtYXRQYXRoIiwiZmlsZU5hbWVHZW5lcmF0b3IiLCJmaWVsZHMiLCJyZSIsImdldFByb3h5QWdlbnQiLCJmb3JtYXRlZFByb3h5IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsImZvcm1hdEh0dHBQcm94eVVSTCIsIkh0dHBzUHJveHlBZ2VudCIsIkh0dHBQcm94eUFnZW50Iiwia2VlcEFsaXZlIiwia2VlcEFsaXZlTXNlY3MiLCJzY2hlZHVsaW5nIiwiZ2V0RmlsZVVSTCIsImVUYWciLCJ2ZXJzaW9uSWQiLCJzaWduZWRVcmwiLCJnZXRTaWduZWRVcmwiLCJHZXRPYmplY3RDb21tYW5kIiwiQnVja2V0IiwiYnVja2V0TmFtZSIsIktleSIsIklmTWF0Y2giLCJWZXJzaW9uSWQiLCJleHBpcmVzSW4iLCJ1cmxPYmplY3QiLCJzZWFyY2giLCJocmVmIiwiY3JlYXRlUzNDbGllbnQiLCJodHRwSGFuZGxlck9wdHMiLCJodHRwc0FnZW50IiwiaHR0cEFnZW50IiwicmVnaW9uIiwiY3JlZGVudGlhbHMiLCJhY2Nlc3NLZXlJRCIsInNlY3JldEFjY2Vzc0tleSIsInRscyIsImZvcmNlUGF0aFN0eWxlIiwicGF0aFN0eWxlQWNjZXNzIiwicmVxdWVzdEhhbmRsZXIiLCJOb2RlSHR0cEhhbmRsZXIiLCJTM0NsaWVudCIsImNyZWF0ZVVwbG9hZFRhc2siLCJjb250ZW50RW5jb2RpbmciLCJnZXRUeXBlIiwiZmlsZVR5cGUiLCJGaWxlVHlwZSIsImZyb21CdWZmZXIiLCJleHRyYWN0SW5mbyIsIlB1dE9iamVjdENvbW1hbmQiLCJBQ0wiLCJhY2wiLCJCb2R5IiwiQ29udGVudFR5cGUiLCJDb250ZW50RW5jb2RpbmciLCJzZW5kIiwidXJsUHJlZml4IiwiRVRhZyIsImltZ1VSTCIsImRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCIsInRhc2tzIiwiaWR4IiwicmVzdWx0cyIsImFzc2lnbiIsImJ1aWxkSW5VcGxvYWRlcnMiLCJhbGlZdW5VcGxvYWRlciIsInRjWXVuVXBsb2FkZXIiLCJTTU1TVXBsb2FkZXIiLCJnaXRodWJVcGxvYWRlciIsInFpbml1VXBsb2FkZXIiLCJpbWd1clVwbG9hZGVyIiwidXBZdW5VcGxvYWRlciIsIndlYmRhdnBsaXN0VXBsb2FkZXIiLCJsb2NhbFVwbG9hZGVyIiwic2Z0cFVwbG9hZGVyIiwidGVsZWdyYXBoVXBsb2FkZXIiLCJwaWNsaXN0VXBsb2FkZXIiLCJsc2t5VXBsb2FkZXIiLCJhd3NzM3BsaXN0VXBsb2FkZXIiLCJnZXRJbWdTaXplIiwiSW1nRnJvbVBhdGgiLCJpbWdTaXplIiwiSW1nRnJvbUJhc2U2NCIsIlBsdWdpbkxvYWRlciIsImZ1bGxMaXN0IiwiU2V0IiwicGx1Z2luTWFwIiwicGFja2FnZVBhdGgiLCJyZXBvc2l0b3J5IiwibGljZW5zZSIsInJlc29sdmVQbHVnaW4iLCJiYXNlZGlyIiwibG9hZCIsInBsdWdpbkRpciIsImRlcHMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBzIiwiZGV2RGVwZW5kZW5jaWVzIiwibW9kdWxlcyIsInJlZ2lzdGVyUGx1Z2luIiwiYWRkIiwicGx1Z2luSW50ZXJmYWNlIiwidW5yZWdpc3RlclBsdWdpbiIsImhhc1BsdWdpbiIsInBsYXRmb3JtMlNjcmlwdENvbnRlbnQiLCJkYXJ3aW4iLCJ3aW4zMiIsIndpbjEwIiwibGludXgiLCJ3c2wiLCJwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZSIsImdldENsaXBib2FyZEltYWdlIiwiaW1hZ2VQYXRoIiwiY3JlYXRlSW1hZ2VGb2xkZXIiLCJwbGF0Zm9ybSIsImlzV3NsIiwib3MiLCJyZWxlYXNlIiwiZ2V0Q3VycmVudFBsYXRmb3JtIiwic2NyaXB0UGF0aCIsImV4ZWN1dGlvbiIsInNwYXduIiwic3Rkb3V0IiwidHJpbSIsImltZ1BhdGgiLCJzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmciLCJldmVudEJ1cyIsIm1heFZlcnNpb24iLCJtaW5WZXJzaW9uIiwiYXBwZW5kRm9ybURhdGEiLCJmb3JtIiwiYXBwZW5kIiwicmVzcG9uc2VJbnRlcmNlcHRvciIsInJlc3BvbnNlRXJyb3JIYW5kbGVyIiwiZXJyb3JPYmoiLCJfZyIsIkNPTkZJR19DSEFOR0UiLCJoYW5kbGVQcm94eSIsInByb3h5T3B0aW9ucyIsIkluZmluaXR5IiwidHVubmVsIiwiaHR0cHNPdmVySHR0cCIsImNyZWF0ZSIsImludGVyY2VwdG9ycyIsIm9wdCIsIl9faXNPbGRPcHRpb25zIiwiRm9ybURhdGEiLCJnZXRIZWFkZXJzIiwicXMiLCJyZXF1ZXN0SW50ZXJjZXB0b3IiLCJvYmoiLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwicmVhZCIsImZsdXNoIiwidW5zZXQiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwicGtnTmFtZUxpc3QiLCJ3aGVyZSIsIm5wbSIsInBpcGUiLCJzdGRlcnIiLCJsYW5ndWFnZUxpc3QiLCJVUExPQURfRkFJTEVEIiwiQ0hFQ0tfU0VUVElOR1MiLCJDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSyIsIlVQTE9BRF9GQUlMRURfUkVBU09OIiwiU0VSVkVSX0VSUk9SIiwiQVVUSF9GQUlMRUQiLCJQSUNCRURfU01NUyIsIlBJQ0JFRF9TTU1TX1RPS0VOIiwiUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9MT0NBTCIsIlBJQ0JFRF9MT0NBTF9QQVRIIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9MT0NBTF9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfV0VCUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgiLCJQSUNCRURfQUxJQ0xPVUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUIiwiUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9BTElDTE9VRF9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwiLCJQSUNCRURfR0lUSFVCIiwiUElDQkVEX0dJVEhVQl9UT0tFTiIsIlBJQ0JFRF9HSVRIVUJfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9DVVNUT01VUkwiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfUUlOSVUiLCJQSUNCRURfUUlOSVVfQUNDRVNTS0VZIiwiUElDQkVEX1FJTklVX1NFQ1JFVEtFWSIsIlBJQ0JFRF9RSU5JVV9CVUNLRVQiLCJQSUNCRURfUUlOSVVfUEFUSCIsIlBJQ0JFRF9RSU5JVV9VUkwiLCJQSUNCRURfUUlOSVVfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1FJTklVX01FU1NBR0VfVVJMIiwiUElDQkVEX1RFTEVHUkFQSCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfQUxCVU0iLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9FTkRQT0lOVCIsIlBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOIiwiUElDQkVEX1VQWVVOX0VYUElSRV9USU1FIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfV0VCREFWUExJU1QiLCJQSUNCRURfV0VCREFWUExJU1RfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfU0ZUUFBMSVNUIiwiUElDQkVEX1NGVFBQTElTVF9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUiLCJQSUNCRURfUElDTElTVCIsIlBJQ0JFRF9QSUNMSVNUX0hPU1QiLCJQSUNCRURfUElDTElTVF9QT1JUIiwiUElDQkVEX1BJQ0xJU1RfUElDQkVEIiwiUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRSIsIlBJQ0JFRF9QSUNMSVNUX0tFWSIsIlBJQ0JFRF9MU0tZX1BMSVNUIiwiUElDQkVEX0xTS1lfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX0hPU1QiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1QiLCJQSUNCRURfTFNLWV9UT0tFTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9BTEJVTV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9QRVJNSVNTSU9OIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OIiwiUElDQkVEX0FXU1MzUExJU1QiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9SRUdJT04iLCJQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9QUk9YWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMIiwiQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRSIsIkJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fUkVOQU1FX0ZPUk1BVCIsIkJVSUxESU5fUkVOQU1FX0VOQUJMRSIsIkJVSUxESU5fQ09NUFJFU1NfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCIsIkJVSUxESU5fQ09NUFJFU1NfSVNGTE9QIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HIiwiQlVJTERJTl9DT01QUkVTU19JU1JPVEFURSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURSIsIkJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEgiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCIsImVuIiwiSTE4bk1hbmFnZXIiLCJvYmplY3RBZGFwdGVyIiwiT2JqZWN0QWRhcHRlciIsImxhbmd1YWdlIiwiSTE4biIsImFkYXB0ZXIiLCJkZWZhdWx0TGFuZ3VhZ2UiLCJsb2FkT3V0dGVySTE4biIsImkxOG5Gb2xkZXIiLCJnZXRPdXR0ZXJJMThuRm9sZGVyIiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwiaXNGaWxlIiwiaTE4bkZpbGVQYXRoIiwiaTE4bkZpbGUiLCJpMThuRmlsZU9iaiIsInlhbWwiLCJwYXRoRXhpc3RzU3luYyIsImFkZExvY2FsZSIsImxvY2FsZXMiLCJvcmlnaW5Mb2NhbGVzIiwiZ2V0TG9jYWxlIiwibmV3TG9jYWxlcyIsIm1lcmdlIiwic2V0TG9jYWxlIiwiYWRkTGFuZ3VhZ2UiLCJQaWNHbyIsIl9wbHVnaW5Mb2FkZXIiLCJpbml0Q29uZmlnUGF0aCIsImluaXRDb25maWciLCJlbnN1cmVGaWxlU3luYyIsIl9jb25maWciLCJ1cGxvYWRlcnMiLCJsaWZlY3ljbGUiLCJyZWdpc3RlckNvbW1hbmRzIiwicHJvcE5hbWUiLCJzdGFydCJdLCJtYXBwaW5ncyI6InMwQ0FFQSxNQUFNQSxHQUF5QixDQUM3QkMsT0FBU0MsSUFFUCxNQUFNQyxFQUFNRCxFQUFJQyxJQUNoQkEsRUFBSUMsUUFDREMsUUFBUSx3QkFDUkMsWUFBWSx3QkFDWkMsTUFBTSxPQUNOQyxPQUFPLHNCQUF1QixvQ0FDOUJBLE9BQU8sNEJBQTZCLDRDQUNwQ0MsUUFBTyxDQUFDQyxFQUFtQk4sS0FDMUIsTUFBTU8sTUFBRUEsRUFBS0MsU0FBRUEsR0FBYVIsRUFDdEJTLEVBQVUsQ0FDZEYsTUFBQUEsRUFDQUMsU0FBQUEsR0FFRlYsRUFBSUYsY0FBY2MsUUFBUUosRUFBU0csR0FBU0UsT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsU0FFN0ViLEVBQUlDLFFBQ0RDLFFBQVEsMEJBQ1JFLE1BQU0sTUFDTkQsWUFBWSwwQkFDWkcsUUFBUUMsSUFDUFIsRUFBSUYsY0FBY21CLFVBQVVULEdBQVNLLE9BQU9DLElBQVFkLEVBQUllLElBQUlDLE1BQU1GLFNBRXRFYixFQUFJQyxRQUNEQyxRQUFRLHVCQUNSQyxZQUFZLHVCQUNaRSxPQUFPLHNCQUF1Qiw0QkFDOUJBLE9BQU8sNEJBQTZCLG9DQUNwQ0MsUUFBTyxDQUFDQyxFQUFtQk4sS0FDMUIsTUFBTU8sTUFBRUEsRUFBS0MsU0FBRUEsR0FBYVIsRUFDdEJTLEVBQVUsQ0FDZEYsTUFBQUEsRUFDQUMsU0FBQUEsR0FFRlYsRUFBSUYsY0FBY29CLE9BQU9WLEVBQVNHLEdBQVNFLE9BQU9DLElBQWVkLEVBQUllLElBQUlD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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"),a=require("commander"),i=require("inquirer"),s=require("image-size"),o=require("url"),E=require("text-to-svg"),l=require("sharp"),I=require("crypto"),S=require("uuid"),_=require("chalk"),u=require("minimatch"),c=require("globby"),P=require("ejs"),d=require("download-git-repo"),p=require("rimraf"),C=require("dayjs"),A=require("util"),g=require("axios"),T=require("lodash"),f=require("heic-convert"),D=require("mime-types"),m=require("qiniu"),L=require("webdav"),h=require("node-ssh-no-cpu-features"),B=require("https"),U=require("@aws-sdk/client-s3"),N=require("@aws-sdk/s3-request-presigner"),R=require("@smithy/node-http-handler"),O=require("file-type"),M=require("mime"),y=require("hpagent"),x=require("resolve"),G=require("child_process"),b=require("is-wsl"),w=require("form-data"),W=require("tunnel"),F=require("@picgo/store"),K=require("cross-spawn"),H=require("js-yaml"),v=require("@picgo/i18n");function $(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var k=$(e),Y=$(t),q=$(n),j=$(i),V=$(o),z=$(E),X=$(l),Q=$(I),Z=$(_),J=$(u),ee=$(c),te=$(P),re=$(d),ne=$(p),ae=$(C),ie=$(A),se=$(g),oe=$(f),Ee=$(D),le=$(m),Ie=$(B),Se=$(O),_e=$(M),ue=$(x),ce=$(b),Pe=$(w),de=$(W),pe=$(K),Ce=$(H);const Ae={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing plugins").option("-r, --registry <registry>","Choose a registry for installing plugins").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}))}},ge={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function Te(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function fe(e){return 1===e.toString().length?`0${e}`:e.toString()}function De(e){return Q.default.createHash("md5").update(e).digest("hex")}function me(e,t,r,n){const a=new Date,i=a.getFullYear().toString(),s=Y.default.basename(e,Y.default.extname(e)),o={"{Y}":()=>i,"{y}":()=>i.slice(2),"{m}":()=>fe(a.getMonth()+1),"{d}":()=>fe(a.getDate()),"{h}":()=>fe(a.getHours()),"{i}":()=>fe(a.getMinutes()),"{s}":()=>fe(a.getSeconds()),"{md5}":()=>De(n||s),"{md5-16}":()=>De(n||s).slice(0,16),"{str-10}":()=>Te(10),"{str-20}":()=>Te(20),"{filename}":()=>r?Y.default.basename(r,Y.default.extname(r)):s,"{uuid}":()=>S.v4().replace(/-/g,""),"{timestamp}":()=>Math.floor(Date.now()/1e3).toString()};if(void 0===t||!Object.keys(o).some((e=>t.includes(e)))&&!t.includes("localFolder"))return e;const E=Y.default.extname(e);let l=Object.keys(o).reduce(((e,t)=>e.replace(new RegExp(t,"g"),o[t]())),t)+E;return l=l.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return Y.default.dirname(e).split(Y.default.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),l}const Le=e=>/^https?:\/\//.test(e),he=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},Be=e=>(he(e)||(e=encodeURI(e)),e),Ue=e=>{try{const{width:t=0,height:r=0,type:n}=s.imageSize(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},Ne=async e=>{try{return{extname:Y.default.extname(e),fileName:Y.default.basename(e),buffer:await k.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},Re=async(e,t)=>{let r;e=Be(e);const n=new Promise(((n,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const i=new o.URL(e).pathname;let s="";try{s=new o.URL(e).searchParams.get("wx_fmt")||Y.default.extname(i)||""}catch(e){s=Y.default.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:Y.default.basename(i),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,a])},Oe=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Me(e)?"simple":"unknown",Me=e=>{if(Y.default.isAbsolute(e))return!1;const t=Y.default.join(process.cwd(),e);return!k.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},ye=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,xe=(e,t=console)=>{switch(Oe(e)){case"normal":case"scope":return e;case"simple":return ye(e);default:{let r=e;return Y.default.isAbsolute(e)&&k.default.existsSync(e)?be(r):(r=Y.default.join(process.cwd(),e),k.default.existsSync(r)?be(r):(t.warn(`Can't find plugin ${e}`),""))}}},Ge=(e,t=console)=>{var r;switch(Oe(e)){case"normal":return we(e);case"scope":return we(e,!0);case"simple":return we(ye(e));default:{if(!k.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=Y.default.posix.join(e,"package.json");if(k.default.existsSync(n)){const e=k.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}`),""}}},be=e=>e.split(Y.default.sep).join("/"),we=(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},We=[],Fe=e=>We.some((t=>e.startsWith(t))),Ke=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function He(e){try{return JSON.parse(e)}catch(t){return e}}const ve=(e=0)=>isNaN(Number(e))?0:Number(e),$e=()=>"development"===process.env.NODE_ENV;const ke=Y.default.join(__dirname,"assets","piclist.png");async function Ye(e,t,r,n,a,i,s,o,E,l,I){o=!o||o<0||o>1?.15:o;const S=X.default(e,{animated:!0}),{width:_=200}=await S.metadata(),u=await async function(e,t,r,n,a,i,s,o=200,E=0){let l;"image"===e?(s=s||ke,l=await X.default(s).toBuffer()):l=await async function(e,t,r,n){t=t||"测试",n=n||e;const a={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},i=z.default.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:I,height:S}=await async function(e){const{width:t,height:r}=await X.default(e).metadata();return{width:t||200,height:r||200}}(l),_=Math.floor(o*ve(a)),u=Math.floor(_*S/I);return await X.default(l).resize(_,u,{fit:"inside"}).rotate(E,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,o,E,l,_,a);return await S.composite([{input:u,gravity:I||"southeast",tile:n}]).toBuffer()}const qe=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),je=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Ve=e=>je.includes(e),ze=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function Xe(e,t,r,n){try{let n=X.default(e,{animated:!0});return n=X.default(await Ye(e,t.watermarkType||"text",r,t.isFullScreenWatermark,ve(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,ve(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0}),await n.toBuffer()}catch(t){return n.error(`Image add watermark error: ${t}`),e}}function Qe(e){const t="string"==typeof e.formatConvertObj?He(e.formatConvertObj):e.formatConvertObj;return{quality:ve(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:ve(e.reSizeHeight),reSizeWidth:ve(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:ve(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:ve(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function Ze(e,t,r,n){t=Qe(t);try{if(r=r.toLowerCase().replace(".",""),!ze.includes(r))return e;let n=X.default(e,{animated:!0}),a=100;if(qe(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(qe(t.reSizePercent)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));e&&r&&(n=n.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)n=n.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const a=t.reSizeHeight/r;n=n.resize(Math.round(e*a),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const a=t.reSizeWidth/e;n=n.resize(t.reSizeWidth,Math.round(r*a),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(n=n.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(n=n.flip()),t.isFlop&&(n=n.flop()),t.isConvert){const e=Je(t,r);e!==r&&(n=n.toFormat(e,{quality:a,mozjpeg:!0}))}else n=r&&Ve(r)?n.toFormat(r,{quality:a,mozjpeg:!0}):n.toFormat("jpg",{quality:a,mozjpeg:!0});return await n.toBuffer()}catch(t){return n.error(`Image process error: ${t}`),e}}function Je(e,t){e=Qe(e||{}),t=t.toLowerCase().replace(".","");let r=(null==e?void 0:e.convertFormat)||"jpg";if((null==e?void 0:e.formatConvertObj)&&Object.keys(e.formatConvertObj).length>0){const n=e.formatConvertObj;Object.keys(n).includes(t)&&(r=n[t],Ve(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const et=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],tt=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&et.includes(t)),rt=(e,t)=>{const r=t.toLowerCase().replace(".","");if(!et.includes(r)||!e)return!1;const{quality:n,isReSizeByPercent:a,reSizePercent:i,isReSize:s,reSizeHeight:o,reSizeWidth:E,isRotate:l,rotateDegree:I,isConvert:S,convertFormat:_,isFlip:u,isFlop:c}=Qe(e);if(qe(n)&&n<100)return!0;if(a&&qe(i))return!0;if(s&&("number"==typeof o&&o>0||"number"==typeof E&&E>0))return!0;if(l&&I)return!0;if(u||c)return!0;if(S){return t!==(_||"jpg")}return!1},nt=async(e,t)=>(t=t.toLowerCase().replace(".",""),et.includes(t)&&"svg"!==t?await X.default(e,{animated:!0}).toBuffer():e);var at=Object.freeze({__proto__:null,randomStringGenerator:Te,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${Te(5)}${Y.default.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${Te(t)}${Y.default.extname(e)}`},renameFileNameWithCustomString:me,isUrl:Le,isUrlEncode:he,handleUrlEncode:Be,getImageSize:Ue,getFSFile:Ne,getURLFile:Re,getPluginNameType:Oe,isSimpleName:Me,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:ye,getProcessPluginName:xe,getNormalPluginName:Ge,handleUnixStylePath:be,removePluginVersion:we,configBlackList:We,isConfigKeyInBlackList:Fe,isInputConfigValid:Ke,safeParse:He,forceNumber:ve,isDev:$e,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:Ye,imageAddWaterMark:Xe,imageProcess:Ze,getConvertedFormat:Je,needAddWatermark:tt,needCompress:rt,removeExif:nt});const it={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>Le(e)?e:Y.default.resolve(e))).filter((t=>{const r=k.default.existsSync(t)||Le(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var st=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},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 prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var ot=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},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 prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var Et=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get prefix(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const lt=async(e,t,r,n)=>{const a=await e.cmd.inquirer.prompt(t),i="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[i]:a}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},It={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,a;try{switch(t){case"buildin":if("compress"===r)await lt(e,st(e),t,r);else if("watermark"===r)await lt(e,ot(e),t,r);else if("rename"===r)await lt(e,Et(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await lt(e,st(e),t,n.buildin):"watermark"===n.buildin?await lt(e,ot(e),t,n.buildin):"rename"===n.buildin&&await lt(e,Et(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await lt(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),a=e.helper[t].get(n[t]);(null==a?void 0:a.config)&&await lt(e,a.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await lt(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(a=e.pluginLoader.getPlugin(r.plugin))||void 0===a?void 0:a.config)&&await lt(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},St={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const a={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!a[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(a[r])}else n=Object.keys(a).map((e=>a[e]));const i=await t.inquirer.prompt(n);if(i.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{i.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":i.uploader||e.getConfig("picBed.current"),"picBed.uploader":i.uploader||e.getConfig("picBed.current"),"picBed.transformer":i.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},_t={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},ut=async(e,t)=>{try{const r=Pt(t.tmp),n=Y.default.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await ee.default(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{J.default(t,e,{dot:!0})&&(n=t)})),!n||ct(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=dt(i,n,a);pt(t.dest,s),"function"==typeof r.complete&&r.complete({answers:a,options:t,files:i,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},ct=(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}},Pt=e=>{const t=Y.default.join(e,"index.js");if(k.default.existsSync(t)){return require(t)}return{}},dt=(e,t,r)=>{const n={};return e.forEach((e=>{const a=k.default.readFileSync(Y.default.join(t,e),"utf8"),i=te.default.render(a,r);(Buffer.isBuffer(i)||/[^\s]/.test(i))&&(n[e]=i)})),n},pt=(e,t)=>{Object.keys(t).forEach((r=>{const n=Y.default.join(e,r);k.default.ensureDirSync(Y.default.dirname(n)),k.default.writeFileSync(n,t[r])}))},Ct=(e,t)=>{t.offline?k.default.existsSync(t.template)?ut(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,At(e,t))},At=(e,t)=>{k.default.existsSync(t.tmp)&&ne.default.sync(t.tmp),e.log.info("Template files are downloading..."),re.default(t.template,t.tmp,{clone:t.clone},(r=>{r?e.log.error(r):(e.log.success("Template files are downloaded!"),ut(e,t).catch((t=>{e.log.error(t)})))}))},gt={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,r,a)=>{(async()=>{try{const i=t.includes("/"),s=!r||"."===r,o=Y.default.resolve(r||"."),E=a.clone||!1,l=a.offline||!1,I=Y.default.join(n.homedir(),".piclist/templates",t.replace(/[/:]/g,"-"));a.offline&&(t=I);const S={template:t,project:r,hasSlash:i,inPlace:s,dest:o,clone:E,tmp:I,offline:l};s||k.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&&Ct(e,S)})):Ct(e,S)}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(Z.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(Z.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},Tt={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change language, zh-CN, zh-TW, en").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const n=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}];t=(await e.cmd.inquirer.prompt(n)).i18n}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class ft{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),ft.currentPlugin&&(this.pluginIdMap.has(ft.currentPlugin)?null===(r=this.pluginIdMap.get(ft.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(ft.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 Dt=(e=null)=>{ft.currentPlugin=e};class mt{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new a.Command,this.inquirer=j.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.8.1","-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",Ae),e.cmd.register("config",ge),e.cmd.register("setting",It),e.cmd.register("upload",it),e.cmd.register("use",St),e.cmd.register("proxy",_t),e.cmd.register("init",gt),e.cmd.register("i18n",Tt)}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=ft.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,ht,Bt;!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"}(ht||(ht={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(Bt||(Bt={}));class Ut{constructor(e){this.level={[Lt.success]:"green",[Lt.info]:"blue",[Lt.warn]:"yellow",[Lt.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=Z.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||Y.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(Z.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(k.default.existsSync(e)){const t=k.default.statSync(e).size,r=1024*ve(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){k.default.existsSync(e)&&(k.default.unlinkSync(e),k.default.createFileSync(e))}handleWriteLog(e,t,...r){try{let n=`${ae.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${ie.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",k.default.appendFileSync(e,n)}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(Lt.success,...e)}info(...e){this.handleLog(Lt.info,...e)}error(...e){this.handleLog(Lt.error,...e)}warn(...e){this.handleLog(Lt.warn,...e)}debug(...e){$e()&&this.handleLog(Lt.info,...e)}}class Nt extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=Y.default.join(e.baseDir,"piclistTemp"),r=Y.default.join(e.baseDir,"imgTemp");k.default.ensureDirSync(r),k.default.emptyDirSync(t),this.ttfPath=Y.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=Y.default.dirname(this.ttfPath);if(k.default.existsSync(e)||k.default.mkdirSync(e,{recursive:!0}),k.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await se.default.get(this.ttfLink,{responseType:"arraybuffer"});return k.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");t.input=e,t.rawInputPath=[],t.rawInput=T.cloneDeep(e),t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("picBed.uploader")||t.getConfig("picBed.current")||"smms";!t.helper.uploader.get(n)&&r?r.picBed="smms":r&&(r.picBed=n);const a=t.getConfig("buildIn.watermark");if(r||a){const e=Y.default.join(t.baseDir,"piclistTemp");k.default.existsSync(e)||k.default.mkdirSync(e);const n="Add watermark to image",i="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var E,l,I,S,_,u;let c;if(Le(s)){if(t.rawInputPath[o]=s,c=await Re(s,t),!c.success||!c.buffer)throw new Error(c.reason);{let P,d=!1;if(tt(a,null!==(E=c.extname)&&void 0!==E?E:"")){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),d=!0)}d||(t.log.info(n),P=await Xe(c.buffer,a,this.ttfPath,t.log))}if(rt(r,null!==(l=c.extname)&&void 0!==l?l:"")&&(t.log.info(i),P=await Ze(null!=P?P:c.buffer,r,null!==(I=c.extname)&&void 0!==I?I:"",t.log)),!P&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),P=await nt(c.buffer,null!==(S=c.extname)&&void 0!==S?S:"")),P){let n;n=(null==r?void 0:r.isConvert)?Je(r,null!==(_=c.extname)&&void 0!==_?_:""):null!==(u=c.extname)&&void 0!==u?u:"",n=n.startsWith(".")?n:`.${n}`;const a=Y.default.join(e,`${c.fileName?`${Y.default.basename(c.fileName,Y.default.extname(c.fileName))}${n}`:(new Date).getTime()}${n}`);t.rawInputPath[o]=Y.default.join(Y.default.dirname(s),Y.default.basename(a)),k.default.writeFileSync(a,P),t.input[o]=a}}}else{let E;t.rawInputPath[o]=s;let l=!1;if(tt(a,Y.default.extname(s))){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),l=!0)}l||(t.log.info(n),E=await Xe(k.default.readFileSync(s),a,this.ttfPath,t.log))}if(rt(r,Y.default.extname(s)))if(t.log.info(i),".heic"===Y.default.extname(s)||".heif"===Y.default.extname(s)){const n=k.default.readFileSync(s),a=await oe.default({buffer:n,format:"JPEG",quality:1}),i=Y.default.join(e,`${Y.default.basename(s,Y.default.extname(s))}.jpg`);k.default.writeFileSync(i,Buffer.from(a)),E=await Ze(k.default.readFileSync(i),r,".jpg",t.log)}else E=await Ze(null!=E?E:k.default.readFileSync(s),r,Y.default.extname(s),t.log);if(!E&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),E=await nt(k.default.readFileSync(s),Y.default.extname(s))),E){let n;n=(null==r?void 0:r.isConvert)?Je(r,Y.default.extname(s)):Y.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const a=Y.default.join(e,`${Y.default.basename(s,Y.default.extname(s))}${n}`);t.rawInputPath[o]=Y.default.join(Y.default.dirname(s),`${Y.default.basename(s,Y.default.extname(s))}${n}`),k.default.writeFileSync(a,E),t.input[o]=a}}})))}else for(const e of t.input)t.rawInputPath.push(e);await this.beforeTransform(t),await this.doTransform(t);const i=t.getConfig("buildIn.rename")||{};if(i.enable){const e=i.format||"{filename}";t.output=t.output.map(((r,n)=>{let a=r.fileName;return e&&(a=me(t.rawInputPath[n],e,void 0,r.base64Image?r.base64Image:r.buffer),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),r.fileName=a,r}))}return await this.beforeUpload(t),await this.doUpload(t),t.input=t.rawInput,await this.afterUpload(t),t}catch(e){if(t.log.warn(ht.FAILED),t.emit(ht.UPLOAD_PROGRESS,-1),t.emit(ht.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(ht.UPLOAD_PROGRESS,0),e.emit(ht.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(ht.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(ht.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(ht.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||(e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`),t="smms",n="smms",r=e.helper.uploader.get("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(ht.AFTER_UPLOAD,e),e.emit(ht.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let a=0;a<r;a++)void 0!==e.output[a].imgUrl&&(t+=n?Be(e.output[a].imgUrl):e.output[a].imgUrl,a!==r-1&&(t+="\n")),delete e.output[a].base64Image,delete e.output[a].buffer;return e.emit(ht.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),a=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${a}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${a}: ${n[r]} error`),e}}))),t}}const Rt=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),Ot=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Rt(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(a),r=JSON.parse(t);if("success"===r.code)delete n.base64Image,delete n.buffer,n.imgUrl=r.data.url,n.hash=r.data.hash;else{if("image_repeated"!==r.code||"string"!=typeof r.images)throw e.emit(ht.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},Mt=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},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 yt=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const a=Q.default.createHmac("sha1",n).update(o).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,E=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,l=`sha1\n${o}\n${Q.default.createHash("sha1").update(E).digest("hex")}\n`;s=Q.default.createHmac("sha1",a).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,E=Q.default.createHmac("sha1",n).update(o).digest(),l=Buffer.concat([E,Buffer.from(o)]);s=Buffer.from(l).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:o}},xt=(e,t,r,n,a)=>{const i=e.area,s=e.path;if(e.version&&"v4"!==e.version){const i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${i}/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${i}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:Ee.default.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${a};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${i}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${i}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${a};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},Gt=async e=>{var t,r,n,a;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const s=e.output,o=i.customUrl,E=null!==(t=i.path)&&void 0!==t?t:"",l=!i.version||"v4"===i.version;for(const t of s)if(t.fileName&&t.buffer){const s=yt(i,t.fileName);if(!s)return!1;let I=t.buffer;!I&&t.base64Image&&(I=Buffer.from(t.base64Image,"base64"));const S=xt(i,t.fileName,s,I,e.GUI_VERSION||e.VERSION),_=await e.request(S).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let u;if(u=l&&"string"==typeof _?JSON.parse(_):_,400===u.statusCode)throw(null===(r=null==u?void 0:u.body)||void 0===r?void 0:r.err)?u.body.err:new Error((null===(n=null==u?void 0:u.body)||void 0===n?void 0:n.msg)||(null===(a=null==u?void 0:u.body)||void 0===a?void 0:a.message));const c=i.options||"",P=void 0!==i.slim&&!!i.slim;if(l&&"SUCCESS"===u.message)delete t.base64Image,delete t.buffer,t.imgUrl=o?`${o}/${E}${t.fileName}`:`${u.data.source_url}${c}`;else{if(l||!u||200!==u.statusCode)throw new Error(_.body.msg);if(delete t.base64Image,delete t.buffer,o)t.imgUrl=`${o}/${encodeURIComponent(E)}${encodeURIComponent(t.fileName)}${c}`.replace(/%2F/g,"/");else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;t.imgUrl=`https://${i.bucket}.${e}/${encodeURIComponent(E)}${encodeURIComponent(t.fileName)}${c}`.replace(/%2F/g,"/")}}P&&(t.imgUrl+=c?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(ht.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}},bt=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_VERSION")},alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};function wt(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${encodeURIComponent(t)}${encodeURIComponent(r)}${n}`.replace(/%2F/g,"/")}const Wt=(e,t,r)=>{const{token:n,repo:a}=t,i=Ee.default.lookup(e)||"application/octet-stream";return{method:"PUT",url:wt(a,t.path||"",e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":i},body:r,json:!0}},Ft=(e,t)=>{const{token:r,repo:n,branch:a}=t;return{method:"GET",url:wt(n,t.path||"",e,`?ref=${a}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},Kt=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){const r=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:r,path:n+encodeURI(a.fileName)},s=Wt(a.fileName,t,i);try{const r=await e.request(s);if(!r)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=t.customUrl?`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):r.content.download_url,a.hash=r.content.sha}catch(r){if(422!==r.statusCode)throw r;{delete a.base64Image,delete a.buffer;const r=await e.request(Ft(a.fileName,t));if(!Object.keys(r).length)throw new Error("Get Contents error, please try again");a.hash=r.sha,a.imgUrl=t.customUrl?`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):r.download_url}}}return e}catch(t){throw e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Ht=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},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 vt(e,t,r,n){const a=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),i=e.path||"";return{method:"POST",url:`http://upload${a}.qiniup.com/putb64/-1/key/${Buffer.from(i+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":Ee.default.lookup(t)||"application/octet-stream"},body:n}}function $t(e){const t=e.accessKey,r=e.secretKey,n=new le.default.auth.digest.Mac(t,r),a={scope:e.bucket};return new le.default.rs.PutPolicy(a).uploadToken(n)}const kt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=vt(t,n.fileName,$t(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(ht.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(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Yt=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_BUCKET")},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 qt=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let E;if(i&&s)E=s;else{if(!a)throw new Error("clientId or accessToken is required");E=`Client-ID ${a}`}const l={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:E,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(i&&s&&o){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:E},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 l=r.body.data;for(const e of l)if(e.title===o){a=e.id;break}n++}while(r.body.data.length>0);a&&l.formData&&(l.formData.album=a)}return t.proxy&&(l.proxy=t.proxy),l},jt=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=await qt(e,r,n.fileName,t),i=await e.request(a),s="string"==typeof i?JSON.parse(i):i;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(ht.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}},Vt=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 zt=()=>(new Date).toUTCString(),Xt=(e,t)=>{const r=zt(),n=`PUT\n\n${Ee.default.lookup(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=Q.default.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},Qt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURIComponent(e.path)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:zt(),"Content-Type":Ee.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),Zt=async e=>{var t;const r=e.getConfig("picBed.aliyun");if(!r)throw new Error("Can't find aliYun OSS config");r.path=r.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/","/"===r.path&&(r.path="");try{const n=e.output,a=r.customUrl,i=null!==(t=r.path)&&void 0!==t?t:"";for(const t of n)if(t.fileName&&t.buffer){const n=Xt(r,t.fileName);let s=t.buffer;!s&&t.base64Image&&(s=Buffer.from(t.base64Image,"base64"));const o=Qt(r,t.fileName,n,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete t.base64Image,delete t.buffer;const e=r.options||"";t.imgUrl=a?`${a}/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/"):`https://${r.bucket}.${r.area}.aliyuncs.com/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/")}}return e}catch(t){throw e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Jt=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},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 er=(e,t)=>{const r=e.path||"",n=e.operator,a=rr(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${encodeURIComponent(r)}${encodeURIComponent(t)}`.replace(/%2F/g,"/")}&${i}`;return`UPYUN ${n}:${Q.default.createHmac("sha1",a).update(s).digest("base64")}`},tr=(e,t,r,n)=>{const a=e.bucket,i=e.path||"";let s=e.endpoint||"https://v0.api.upyun.com";return s.endsWith("/")&&(s=s.slice(0,-1)),s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${a}/${encodeURIComponent(i)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":Ee.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function rr(e){return Q.default.createHash("md5").update(e).digest("hex")}const nr=(e,t,r,n)=>{const a=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${rr(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},ar=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=er(t,a.fileName),s=tr(t,a.fileName,i,r),o=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete a.base64Image,delete a.buffer,a.imgUrl=`${t.url}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}${o}`.replace(/%2F/g,"/"),t.antiLeechToken){const e=nr(t.antiLeechToken,t.expireTime,t,a.fileName);a.imgUrl=a.imgUrl.includes("?")?`${a.imgUrl}&${e}`:`${a.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=He(t.error);e.emit(ht.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}},ir=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_URL")},get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_ENDPOINT")},default:t.endpoint||"https://v0.api.upyun.com",required:!1}]};const sr=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");t.host=t.host.replace(/^https?:\/\/|\/+$/g,""),t.host=(t.sslEnabled?"https://":"http://")+t.host,t.path=(t.path||"").replace(/^\/+|\/+$/g,"")+"/";const r=t.authType||"basic",n=(t.webpath||"").replace(/^\/+|\/+$/g,"")+"/",a=t.options||"";try{const i=e.output,s=t.customUrl,o=t.path;for(const E of i)if(E.fileName&&E.buffer){let i=E.buffer;!i&&E.base64Image&&(i=Buffer.from(E.base64Image,"base64"));const l={username:t.username,password:t.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===r&&(l.authType=L.AuthType.Digest);const I=L.createClient(t.host,l),S="/"===o?"":o;S&&await I.createDirectory(S,{recursive:!0});if(!await I.putFileContents(`${o}${E.fileName}`.replace(/^\/+|\/+$/g,""),i,{overwrite:!0}))throw new Error("Upload failed");{const r=Y.default.join(e.baseDir,"imgTemp","webdavplist"),l=Y.default.join(r,E.fileName);k.default.ensureDirSync(Y.default.dirname(l)),k.default.writeFileSync(l,i),delete E.base64Image,delete E.buffer;const I=s||t.host;t.webpath?E.imgUrl=`${I}/${"/"===n?"":encodeURIComponent(n)}${encodeURIComponent(E.fileName)}${a}`.replace(/%2F/g,"/"):E.imgUrl=`${I}/${"/"===o?"":encodeURIComponent(o)}${encodeURIComponent(E.fileName)}${a}`.replace(/%2F/g,"/"),E.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(E.fileName)}`}}return e}catch(t){throw e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},or=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_OPTIONS")},default:r.options||"",required:!1}]};const Er=async e=>{const t=e.getConfig("picBed.local");if(!t)throw new Error("Can not find local config!");const r=t.path||"";let n=t.customUrl||"";n&&(n=n.replace(/\/$/,""));let a=t.webPath||"";a&&(a=a.replace(/\\/g,"/").replace(/^\//,"").replace(/\/$/,""));const i=e.output;for(const t of i)if(t.fileName&&t.buffer){let i=t.buffer;!i&&t.base64Image&&(i=Buffer.from(t.base64Image,"base64"));try{try{const s=Y.default.join(e.baseDir,"imgTemp","local");k.default.ensureDirSync(Y.default.dirname(Y.default.join(r,t.fileName))),k.default.ensureDirSync(Y.default.dirname(Y.default.join(s,t.fileName))),k.default.writeFileSync(Y.default.join(r,t.fileName),i),k.default.copyFileSync(Y.default.join(r,t.fileName),Y.default.join(s,t.fileName)),delete t.base64Image,delete t.buffer,t.imgUrl=n?a?`${n}/${encodeURIComponent(a)}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):`${n}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):Y.default.join(r,t.fileName),t.hash=Y.default.join(r,t.fileName),t.galleryPath=`http://localhost:36699/local/${encodeURIComponent(t.fileName)}`}catch(t){throw e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},lr=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class Ir{constructor(){this._isConnected=!1}static get instance(){return this._instance||(this._instance=new this)}static get client(){return this._client||(this._client=new h.NodeSSH)}changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{username:t,password:r,privateKey:n,passphrase:a}=e,i=n?{username:t,privateKeyPath:n,passphrase:a||void 0}:{username:t,password:r};try{return await Ir.client.connect(Object.assign({host:e.host,port:Number(e.port)||22},i)),this._isConnected=!0,!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this._isConnected)throw new Error("SSH 未连接");try{t=this.changeWinStylePathToUnix(t),await this.mkdir(Y.default.dirname(t).replace(/^\/+|\/+$/g,""),r),await Ir.client.putFile(e,t);const n=r.fileMode||"0644";if("0644"!==n){const e=`chmod ${n} "${t}"`;return await this.exec(e)}return!0}catch(e){throw new Error(e)}}async mkdir(e,t){if(!Ir.client.isConnected())throw new Error("SSH 未连接");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=this.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t],i=`chown ${n}:${a} "${e}"`;return this.exec(i)}async exec(e){return 0===(await Ir.client.execCommand(e)).code}close(){Ir.client.dispose(),this._isConnected=!1}}const Sr=async e=>{const t=e.getConfig("picBed.sftpplist");if(!t)throw new Error("Can not find sftpplist config!");t.port=Number(t.port)||22,t.uploadPath=(t.uploadPath||"").replace(/^\/+|\/+$/g,"")+"/";const r=(t.webPath||"").replace(/^\/+|\/+$/g,"")+"/";try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=Y.default.join(e.baseDir,"uploadTemp"),s=Y.default.join(e.baseDir,"imgTemp","sftpplist");k.default.ensureDirSync(s);const o=Y.default.join(i,a.fileName);k.default.ensureDirSync(Y.default.dirname(o)),k.default.writeFileSync(o,n);const E=Ir.instance;await E.connect(t);const l=Y.default.join(`/${t.uploadPath}`.replace(/\/\/+/g,"/"),a.fileName);await E.upload(o,l,t),t.fileUser&&await E.chown(l,t.fileUser),delete a.base64Image,delete a.buffer;const I=t.customUrl||t.host;t.webPath?a.imgUrl=`${I}/${"/"===r?"":encodeURIComponent(r)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=`${I}/${"/"===t.uploadPath?"":encodeURIComponent(t.uploadPath)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/");const S=Y.default.join(s,a.fileName);k.default.ensureDirSync(Y.default.dirname(S)),k.default.removeSync(S),k.default.moveSync(o,Y.default.join(s,a.fileName)),a.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(a.fileName)}`,E.close()}return e}catch(t){throw e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},_r=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},default:t.dirMode||"",required:!1}]};const ur=async(e,t)=>{const r={method:"POST",url:"https://telegra.ph/upload",headers:{"content-type":"multipart/form-data"},formData:{file:t}};return e.proxy&&(r.proxy=e.proxy),r},cr=async e=>{var t,r;let n=e.getConfig("picBed.telegraphplist");n||(n={});try{const r=e.output;for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=Y.default.join(e.baseDir,"uploadTemp");k.default.ensureDirSync(i);const s=Y.default.join(i,a.fileName);k.default.writeFileSync(s,r);const o=await ur(n,k.default.createReadStream(s)),E=await e.request(o),l="string"==typeof E?JSON.parse(E):E;if(k.default.remove(s),!(null===(t=null==l?void 0:l[0])||void 0===t?void 0:t.src))throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=`https://telegra.ph${l[0].src}`}return e}catch(t){throw e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(r=null==t?void 0:t.response)||void 0===r?void 0:r.data)||t}},Pr=e=>[{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:(e.getConfig("picBed.telegraphplist")||{}).proxy||"",required:!1}];const dr=(e,t,r)=>{const n=e.host||"127.0.0.1",a=e.port||36677,i=e.picbed||"",s=e.configName||"Default",o=e.serverKey||"";let E=`http://${n}:${a}/upload?configName=${s}`;return i&&(E+=`&picbed=${i}`),o&&(E+=`&key=${o}`),{method:"POST",url:E,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:Ee.default.lookup(t)}}},resolveWithFullResponse:!0}},pr=async e=>{var t;const r=e.getConfig("picBed.piclist");if(!r)throw new Error("Can't find PicList config");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=dr(r,a.fileName,n),s=await e.request(i).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));if(200!==s.statusCode||!(null===(t=s.body)||void 0===t?void 0:t.success))throw new Error(s.body.message);delete a.base64Image,delete a.buffer,a.imgUrl=s.body.result[0],a.fullResult=s.body.fullResult[0]}return e}catch(t){throw e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Cr=e=>{const t=e.getConfig("picBed.piclist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_HOST")},get alias(){return e.i18n.translate("PICBED_PICLIST_HOST")},default:t.host||"127.0.0.1",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PORT")},get alias(){return e.i18n.translate("PICBED_PICLIST_PORT")},default:t.port||36677,required:!1},{name:"picbed",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PICBED")},get alias(){return e.i18n.translate("PICBED_PICLIST_PICBED")},default:t.picbed||"",required:!1},{name:"configName",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},get alias(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},default:t.configName||"",required:!1},{name:"serverKey",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_KEY")},get alias(){return e.i18n.translate("PICBED_PICLIST_KEY")},default:t.serverKey||"",required:!1}]};const Ar=(e,t,r)=>{let n=e.host;n=n.replace(/\/$/,"");const a="V2"===e.version,i=e.token,s={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",token:i||void 0},o={image:{value:r,options:{filename:t}},ssl:"true"},E={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",Accept:"application/json",Authorization:i||void 0},l=e.strategyId,I=e.albumId;let S=e.permission.value;void 0===S&&(S=e.permission);const _={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:l,album_id:I,permission:S};l||delete _.strategy_id,I||delete _.album_id,0!==S&&1!==S&&delete _.permission;return{method:"POST",url:a?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new Ie.default.Agent({rejectUnauthorized:!1}),headers:a?E:s,formData:a?_:o}},gr=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");try{const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Ar(t,n.fileName,r);let i=await e.Request.request(a);i="string"==typeof i?JSON.parse(i):i;let s="V2"===t.version;if(!(s?!0===i.status:200===i.code))throw e.emit("notification",{title:"upload failed",body:i.message}),new Error(i.message);delete n.base64Image,delete n.buffer,n.imgUrl=s?i.data.links.url:i.data.url,s&&(n.hash=i.data.key)}return e}catch(t){throw e.emit(ht.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Tr=e=>{let t=e.getConfig("picBed.lskyplist")||{};return[{name:"version",type:"list",default:t.version||"V1",get prefix(){return e.i18n.translate("PICBED_LSKY_VERSION")},get alias(){return e.i18n.translate("PICBED_LSKY_VERSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_VERSION")},choices:["V1","V2"],required:!0},{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_HOST")},get alias(){return e.i18n.translate("PICBED_LSKY_HOST")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get alias(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_TOKEN")},default:t.token,required:!0},{name:"strategyId",type:"input",default:t.strategyId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_STRATEGY_ID")}},{name:"albumId",type:"input",default:t.albumId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_ALBUM_ID")}},{name:"permission",type:"list",default:t.permission||"private(default)",choices:[{name:"private(default)",value:0},{name:"public",value:1}],required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get alias(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_PERMISSION")}}]};class fr{constructor(e){this.date=new Date,this.info=e}year(){return`${this.date.getFullYear()}`}month(){return(this.date.getMonth()+1).toString().padStart(2,"0")}day(){return this.date.getDate().toString().padStart(2,"0")}fullName(){return this.info.fileName}fileName(){var e,t;return(null!==(e=this.info.fileName)&&void 0!==e?e:"").replace(null!==(t=this.info.extname)&&void 0!==t?t:"","")}extName(){var e;return(null!==(e=this.info.extname)&&void 0!==e?e:"").replace(".","")}md5(){return Q.default.createHash("md5").update(this.imgBuffer()).digest("hex")}md5B64(){return Q.default.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}md5B64Short(){return Q.default.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").slice(0,7)}sha1(){return Q.default.createHash("sha1").update(this.imgBuffer()).digest("hex")}sha256(){return Q.default.createHash("sha256").update(this.imgBuffer()).digest("hex")}timestamp(){return Math.floor(Date.now()/1e3).toString()}timestampMS(){return Date.now().toString()}imgBuffer(){return this.info.base64Image?this.info.base64Image:this.info.buffer}}function Dr(e,t){if(!t)return e.fileName;const r=new fr(e);let n=t;for(const e of fr.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function mr(e,t,r){const n=function(e=""){if(!e)return"";if(!/^https?:\/\//.test(e)){const[t,r]=e.split(":");return`http://${t.replace("127.0.0.1","localhost")}:${r}`}try{const{protocol:t,hostname:r,port:n}=new o.URL(e);return`${t}//${r.replace("127.0.0.1","localhost")}:${n}`}catch(e){return""}}(e);if(!n)return;return new(t?y.HttpsProxyAgent:y.HttpProxyAgent)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}async function Lr(e,t,r){try{const n=await N.getSignedUrl(e.client,new U.GetObjectCommand({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),a=new V.default.URL(n);return a.search="",a.href}catch(e){return Promise.reject(e)}}fr.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var hr={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new V.default.URL(e.endpoint).protocol}catch(e){}const a={};n?a.httpsAgent=mr(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):a.httpAgent=mr(e.proxy,!1,null!==(r=e.rejectUnauthorized)&&void 0!==r&&r);const i={region:e.region||"auto",endpoint:e.endpoint||void 0,credentials:{accessKeyId:e.accessKeyID,secretAccessKey:e.secretAccessKey},tls:n,forcePathStyle:e.pathStyleAccess,requestHandler:new R.NodeHttpHandler(a)};return new U.S3Client(i)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)return Promise.reject(new Error("undefined image"));let t,r,n;try{({body:t,contentType:r,contentEncoding:n}=await async function(e){var t;const r={};if(e.base64Image){const n=e.base64Image.replace(/^data:[/\w]+;base64,/,"");r.contentType=null===(t=e.base64Image.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/))||void 0===t?void 0:t[0],r.body=Buffer.from(n,"base64"),r.contentEncoding="base64"}else e.extname&&(r.contentType=_e.default.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await Se.default.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item))}catch(e){return Promise.reject(e)}const a=new U.PutObjectCommand({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n});let i,s;try{i=await e.client.send(a)}catch(e){return Promise.reject(e)}if(e.urlPrefix)s=`${e.urlPrefix}/${e.path}`;else try{s=await Lr(e,i.ETag,i.VersionId)}catch(e){return Promise.reject(e)}return{index:e.index,key:e.path,url:s,imgURL:s,versionId:i.VersionId,eTag:i.ETag}},getFileURL:Lr};const Br=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find amazon s3 uploader config");void 0===t.disableBucketPrefixToURL&&(t.disableBucketPrefixToURL=!1),"string"==typeof t.disableBucketPrefixToURL&&("true"===t.disableBucketPrefixToURL.toLowerCase()?t.disableBucketPrefixToURL=!0:"false"===t.disableBucketPrefixToURL.toLowerCase()&&(t.disableBucketPrefixToURL=!1)),t.urlPrefix&&(t.urlPrefix=t.urlPrefix.replace(/\/?$/,""),t.pathStyleAccess&&!t.disableBucketPrefixToURL&&(t.urlPrefix+="/"+t.bucketName));const r=hr.createS3Client(t),n=e.output,a=n.map(((e,n)=>hr.createUploadTask({client:r,index:n,bucketName:t.bucketName,path:Dr(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:t.urlPrefix})));let i;try{i=await Promise.all(a)}catch(t){throw e.log.error("上传到 S3 存储发生错误,请检查网络连接和配置是否正确"),e.log.error(t),e.emit("notification",{title:"S3 存储上传错误",body:"请检查配置是否正确",text:""}),t}for(const e of i){const{index:t,url:r,imgURL:a}=e;delete n[t].buffer,delete n[t].base64Image,n[t].imgUrl=a,n[t].url=r}return e},Ur=e=>{let t=e.getConfig("picBed.aws-s3-plist")||{};t=Object.assign(Object.assign({},{accessKeyID:"",secretAccessKey:"",bucketName:"",uploadPath:"{year}/{month}/{md5}.{extName}",pathStyleAccess:!1,rejectUnauthorized:!0,acl:"public-read"}),t);return[{name:"accessKeyID",type:"input",default:t.accessKeyID,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID")}},{name:"secretAccessKey",type:"input",default:t.secretAccessKey,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY")}},{name:"bucketName",type:"input",default:t.bucketName,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_BUCKET")}},{name:"uploadPath",type:"input",default:t.uploadPath,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH")}},{name:"region",type:"input",default:t.region,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REGION")}},{name:"endpoint",type:"input",default:t.endpoint,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ENDPOINT")}},{name:"proxy",type:"input",default:t.proxy,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PROXY")}},{name:"urlPrefix",type:"input",default:t.urlPrefix,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_URLPREFIX")}},{name:"pathStyleAccess",type:"confirm",default:t.pathStyleAccess||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS")}},{name:"rejectUnauthorized",type:"confirm",default:t.rejectUnauthorized||!0,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED")}},{name:"acl",type:"input",default:t.acl||"public-read",required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACL")}},{name:"disableBucketPrefixToURL",type:"input",default:t.disableBucketPrefixToURL||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL")}}]};const Nr=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:Zt,config:Jt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:Gt,config:bt})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:Ot,config:Mt})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:Kt,config:Ht})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:kt,config:Yt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:jt,config:Vt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:ar,config:ir})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:sr,config:or})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:Er,config:lr})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Sr,config:_r})}(e),function(e){e.helper.uploader.register("telegraphplist",{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:cr,config:Pr})}(e),function(e){e.helper.uploader.register("piclist",{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:pr,config:Cr})}(e),function(e){e.helper.uploader.register("lskyplist",{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:gr,config:Tr})}(e),function(e){e.helper.uploader.register("aws-s3-plist",{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:Br,config:Ur})}(e)}}),Rr=(e,t,r)=>{const n=Ue(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var Or={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let a;if(a=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:Le(r)?await Re(r,e):await Ne(r),a.success&&a.buffer){const i=Rr(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${ae.default().format("YYYYMMDDHHmmss")}${s}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var Mr={handle:async e=>(e.output.push(...e.input),e)};class yr{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=Y.default.join(this.ctx.baseDir,"package.json");if(!k.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/Kuingsmile/PicList-Core",license:"MIT"};k.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return ue.default.sync(t,{basedir:e.baseDir})}catch(r){return Y.default.join(e.baseDir,"node_modules",t)}}load(){const e=Y.default.join(this.ctx.baseDir,"package.json"),t=Y.default.join(this.ctx.baseDir,"node_modules/");if(!k.default.existsSync(t))return!1;const r=k.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),a=Object.keys(r.devDependencies||{}),i=n.concat(a).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return k.default.existsSync(t)}));for(const e of i)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),Dt(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),Dt(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(ht.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),Dt(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=Y.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 xr={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'},Gr={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const br=async e=>{!function(e){const t=Y.default.join(e.baseDir,"piclist-clipboard-images");k.default.existsSync(t)||k.default.mkdirSync(t)}(e);const t=Y.default.join(e.baseDir,"piclist-clipboard-images",`${ae.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const a=(()=>{const e=process.platform;if(ce.default)return"wsl";if("win32"===e)return"10"===q.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),i=Y.default.join(e.baseDir,Gr[a]);let s;k.default.existsSync(i)||k.default.writeFileSync(i,xr[a],"utf8"),s="darwin"===a?G.spawn("osascript",[i,t]):"win32"===a||"win10"===a?G.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",i,t]):G.spawn("sh",[i,t]),s.stdout.on("data",(i=>{if("linux"===a&&"no xclip or wl-clipboard"===i.toString().trim())return e.emit(ht.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),n(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const s=i.toString().trim();let o=!1;if(Y.default.basename(s)!==Y.default.basename(t)&&k.default.existsSync(s)&&(o=!0),"no image"!==s&&!k.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},wr=new r.EventEmitter,Wr=new Ie.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function Fr(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Kr(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Hr(e){var t,r,n,a,i,s,o;const E={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(E)}class vr{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),wr.on(Bt.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=de.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=Wr;const r=se.default.create(this.options);r.interceptors.response.use(Kr,Hr);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let a=e.proxy;if("string"==typeof a){try{a=new o.URL(e.proxy)}catch(e){a=!1,n.proxy=!1,console.error(e)}r=!0}a&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=de.default.httpsOverHttp({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new Pe.default;for(const r in e.formData)Fr(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let a="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(a=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(a=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(a=e.headers["content-type"],delete e.headers["content-type"]),""!==a&&e.headers&&(e.headers["Content-Type"]=a),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class $r{constructor(e){if(this.ctx=e,this.db=new F.JSONStore(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms"})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}class kr{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>Yr(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicList has already installed ${e.pkgName}`),!1):!!e.success)),i=a.map((e=>e.fullName)),s=a.map((e=>e.pkgName));if(i.length>0){const e=await this.execCommand("install",i,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>Yr(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=>Yr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},a={}){const i=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,E;let l=[e].concat(t).concat("--color=always").concat("--save");i&&(l=l.concat(`--registry=${i}`)),s&&(l=l.concat(`--proxy=${s}`));try{const e=pe.default("npm",l,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(E=e.stderr)||void 0===E||E.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(ht.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(ht.FAILED,e)}}))}}const Yr=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=xe(t,e.log);if(!n)return r;const a=Ge(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r},qr={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定accessKeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ENDPOINT:"设定自定义API接入点",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_OPTIONS:"设定网址后缀",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=123456",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"设定主机",PICBED_PICLIST_PORT:"设定端口",PICBED_PICLIST_PICBED:"设定图床",PICBED_PICLIST_CONFIGNAME:"设定配置名",PICBED_PICLIST_KEY:"设定鉴权Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"设定版本",PICBED_LSKY_MESSAGE_VERSION:"例如V1",PICBED_LSKY_HOST:"设定主机",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"设定Token",PICBED_LSKY_MESSAGE_TOKEN:"例如:1234567890",PICBED_LSKY_STRATEGY_ID:"设定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如:1",PICBED_LSKY_ALBUM_ID:"设定相册ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"选填,V2版本限定",PICBED_LSKY_PERMISSION:"设定权限",PICBED_LSKY_MESSAGE_PERMISSION:"例如:public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"设定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"设定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"设定Bucket",PICBED_AWSS3PLIST_REGION:"设定Region",PICBED_AWSS3PLIST_UPLOADPATH:"设定上传路径",PICBED_AWSS3PLIST_ENDPOINT:"设定自定义节点",PICBED_AWSS3PLIST_PROXY:"设定代理",PICBED_AWSS3PLIST_URLPREFIX:"设定自定义域名",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"启用s3ForcePathStyle",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"拒绝无效TLS证书连接",PICBED_AWSS3PLIST_ACL:"设定上传资源的访问策略",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要时启用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定accessKeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_ENDPOINT:"設定接入點",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_OPTIONS:"設定網址後綴",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=value",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"設定主機",PICBED_PICLIST_PORT:"設定端口",PICBED_PICLIST_PICBED:"設定圖床",PICBED_PICLIST_CONFIGNAME:"設定配置名",PICBED_PICLIST_KEY:"設定鑒權Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"設定版本",PICBED_LSKY_MESSAGE_VERSION:"請選擇版本",PICBED_LSKY_HOST:"設定主機",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"設定Token",PICBED_LSKY_MESSAGE_TOKEN:"請輸入Token",PICBED_LSKY_STRATEGY_ID:"設定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如1",PICBED_LSKY_ALBUM_ID:"設定相冊ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"例如1",PICBED_LSKY_PERMISSION:"設定上傳權限",PICBED_LSKY_MESSAGE_PERMISSION:"請選擇上傳權限",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"設定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"設定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"設定Bucket",PICBED_AWSS3PLIST_REGION:"設定Region",PICBED_AWSS3PLIST_UPLOADPATH:"設定上傳路徑",PICBED_AWSS3PLIST_ENDPOINT:"設定自定義節點",PICBED_AWSS3PLIST_PROXY:"設定代理",PICBED_AWSS3PLIST_URLPREFIX:"設定自定義網址",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"開啟 `pathStyleAccess`",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"開啟 `rejectUnauthorized`",PICBED_AWSS3PLIST_ACL:"設定ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"開啟 `pathStyleAccess` 時,是否要禁用最終生成URL中添加 bucket 前綴",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要時啟用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set accessKeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"Ex. test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_ENDPOINT:"Set Endpoint",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"Ex. https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_OPTIONS:"Set URL Suffix",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"Ex. ?key=value",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"Set Host",PICBED_PICLIST_PORT:"Set Port",PICBED_PICLIST_PICBED:"Set PicBed",PICBED_PICLIST_CONFIGNAME:"Set Config Name",PICBED_PICLIST_KEY:"Set Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"Set Version",PICBED_LSKY_MESSAGE_VERSION:"Ex. v1",PICBED_LSKY_HOST:"Set Host",PICBED_LSKY_MESSAGE_HOST:"Ex. https://lsky.co",PICBED_LSKY_TOKEN:"Set Token",PICBED_LSKY_MESSAGE_TOKEN:"Ex. xxx",PICBED_LSKY_STRATEGY_ID:"Set Strategy ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"Ex. 1",PICBED_LSKY_ALBUM_ID:"Set Album ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"Optional, only for V2",PICBED_LSKY_PERMISSION:"Set Permisson",PICBED_LSKY_MESSAGE_PERMISSION:"Ex. public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"Set AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"Set SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"Set Bucket",PICBED_AWSS3PLIST_REGION:"Set Region",PICBED_AWSS3PLIST_UPLOADPATH:"Set Upload Path",PICBED_AWSS3PLIST_ENDPOINT:"Set Endpoint",PICBED_AWSS3PLIST_PROXY:"Set Proxy",PICBED_AWSS3PLIST_URLPREFIX:"Set Custom URL",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"Set PathStyleAccess",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"Set RejectUnauthorized",PICBED_AWSS3PLIST_ACL:"Set ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"when `pathStyleAccess` is enabled, whether to disable adding bucket prefix to url",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"Ex. test",PICBED_AWSS3PLIST_MESSAGE_REGION:"Ex. us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"Ex. test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"Ex. https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"Ex. https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"Enable when `pathStyleAccess` is required",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"Enable when rejecting invalid TLS certificate connection is required",PICBED_AWSS3PLIST_MESSAGE_ACL:"Ex. public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"Enable when `pathStyleAccess` is enabled",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class jr{constructor(e){this.ctx=e,this.objectAdapter=new v.ObjectAdapter(qr);let t=this.ctx.getConfig("settings.language")||"zh-CN";qr[t]||(t="zh-CN"),this.i18n=new v.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();k.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=Y.default.join(e,t.name),n=k.default.readFileSync(r,"utf8");try{const e=Ce.default.load(n);qr[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=Y.default.join(this.ctx.baseDir,"i18n-cli");return k.default.pathExistsSync(e)||k.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=T.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),qr[e]=t,!0)}getLanguageList(){return Object.keys(qr)}}class Vr extends r.EventEmitter{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.8.1",this.configPath=e,this.output=[],this.input=[],this.rawInput=[],this.helper={transformer:new ft("transformer"),uploader:new ft("uploader"),beforeTransformPlugins:new ft("beforeTransformPlugins"),beforeUploadPlugins:new ft("beforeUploadPlugins"),afterUploadPlugins:new ft("afterUploadPlugins")},this.initConfigPath(),this.log=new Ut(this),this.cmd=new mt(this),this.pluginHandler=new kr(this),this.initConfig(),this.init()}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==Y.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=Y.default.dirname(this.configPath);k.default.pathExistsSync(this.configPath)||k.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new $r(this),this._config=this.db.read(!0)}init(){try{this.i18n=new jr(this),this.Request=new vr(this),this._pluginLoader=new yr(this),Dt("picgo"),Nr().register(this),{register(e){e.helper.transformer.register("path",Or),e.helper.transformer.register("base64",Mr)}}.register(this),Dt(""),this._pluginLoader.load(),this.lifecycle=new Nt(this)}catch(e){throw this.emit(ht.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?T.get(this._config,e):this._config}saveConfig(e){Ke(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&&(Fe(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Ke(e)?Object.keys(e).forEach((t=>{Fe(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),T.set(this._config,t,e[t]),wr.emit(Bt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Fe(e)?this.log.warn(`the config.${e} can't be unset`):T.unset(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await br(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(ht.FAILED,(()=>{t||k.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||k.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(ht.FAILED,e),e}}}exports.Commander=mt,exports.Lifecycle=Nt,exports.LifecyclePlugins=ft,exports.Logger=Ut,exports.PicGo=Vr,exports.PicGoUtils=at,exports.PluginHandler=kr,exports.PluginLoader=yr,exports.Request=vr;
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9jb3JlL0xpZmVjeWNsZS50cyIsIi4uL3NyYy91dGlscy9jcmVhdGVDb250ZXh0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc21tcy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RjeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbWd1ci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbG9jYWwudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RlbGVncmFwaC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3BpY2xpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9sc2t5LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zMy91cGxvYWRlci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2F3c3MzcGxpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbmRleC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL3BhdGgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9iYXNlNjQudHMiLCIuLi9zcmMvbGliL1BsdWdpbkxvYWRlci50cyIsIi4uL3NyYy91dGlscy9zdGF0aWMudHMiLCIuLi9zcmMvdXRpbHMvZ2V0Q2xpcGJvYXJkSW1hZ2UudHMiLCIuLi9zcmMvdXRpbHMvZXZlbnRCdXMudHMiLCIuLi9zcmMvbGliL1JlcXVlc3QudHMiLCIuLi9zcmMvdXRpbHMvZGIudHMiLCIuLi9zcmMvbGliL1BsdWdpbkhhbmRsZXIudHMiLCIuLi9zcmMvaTE4bi9pbmRleC50cyIsIi4uL3NyYy9pMThuL3poLUNOLnRzIiwiLi4vc3JjL2kxOG4vemgtVFcudHMiLCIuLi9zcmMvaTE4bi9lbi50cyIsIi4uL3NyYy9jb3JlL1BpY0dvLnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgcGx1Z2luSGFuZGxlcjogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgLy8gY29uc3QgcGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKGN0eClcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbnN0YWxsIDxwbHVnaW5zLi4uPicpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignaW5zdGFsbCBwaWNnbyBwbHVnaW4nKVxyXG4gICAgICAuYWxpYXMoJ2FkZCcpXHJcbiAgICAgIC5vcHRpb24oJy1wLCAtLXByb3h5IDxwcm94eT4nLCAnQWRkIHByb3h5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmFsaWFzKCdybScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudW5pbnN0YWxsKHBsdWdpbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGRhdGUgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGRhdGUgcGljZ28gcGx1Z2luJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHByb3h5LFxyXG4gICAgICAgICAgcmVnaXN0cnlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGNvbmZpZzogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxwYXRoPicsICdzZXQgY29uZmlnIHBhdGgnKVxyXG4gICAgICAvLyB3aWxsIGhhbmRsZSBpbiBgYmluL3BpY2dvYFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY29uZmlnXHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgaW1hZ2VTaXplIH0gZnJvbSAnaW1hZ2Utc2l6ZSdcclxuaW1wb3J0IHtcclxuICB0eXBlIElJbWdTaXplLFxyXG4gIHR5cGUgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sXHJcbiAgdHlwZSBJUGx1Z2luTmFtZVR5cGUsXHJcbiAgdHlwZSBJTG9nZ2VyLFxyXG4gIHR5cGUgSVBpY0dvLFxyXG4gIHR5cGUgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXHJcbiAgdHlwZSBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgVGV4dFRvU1ZHIGZyb20gJ3RleHQtdG8tc3ZnJ1xyXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZ0dlbmVyYXRvciAobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xyXG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0pLm1hcCgoKSA9PiBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSkpLmpvaW4oJycpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhUaW1lc3RhbXAgKG9sZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGAke01hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApfSR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKDUpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFJhbmRvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciA9IDUpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtyYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdEhlbHBlciAobnVtOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIHJldHVybiBudW0udG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bnVtfWAgOiBudW0udG9TdHJpbmcoKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZDUgKGlucHV0OiBjcnlwdG8uQmluYXJ5TGlrZSk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoaW5wdXQpLmRpZ2VzdCgnaGV4JylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBjdXN0b21Gb3JtYXQ6IHN0cmluZywgYWZmaXhGaWxlTmFtZT86IHN0cmluZywgZmlsZUJ1ZmZlcj86IGNyeXB0by5CaW5hcnlMaWtlKTogc3RyaW5nIHtcclxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXHJcbiAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKClcclxuICBjb25zdCBmaWxlYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSlcclxuICBjb25zdCBjb252ZXJzaW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiBzdHJpbmc+ID0ge1xyXG4gICAgJ3tZfSc6ICgpID0+IHllYXIsXHJcbiAgICAne3l9JzogKCkgPT4geWVhci5zbGljZSgyKSxcclxuICAgICd7bX0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldE1vbnRoKCkgKyAxKSxcclxuICAgICd7ZH0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldERhdGUoKSksXHJcbiAgICAne2h9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRIb3VycygpKSxcclxuICAgICd7aX0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldE1pbnV0ZXMoKSksXHJcbiAgICAne3N9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRTZWNvbmRzKCkpLFxyXG4gICAgJ3ttZDV9JzogKCkgPT4gZ2V0TWQ1KGZpbGVCdWZmZXIgfHwgZmlsZWJhc2VuYW1lKSxcclxuICAgICd7bWQ1LTE2fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSkuc2xpY2UoMCwgMTYpLFxyXG4gICAgJ3tzdHItMTB9JzogKCkgPT4gcmFuZG9tU3RyaW5nR2VuZXJhdG9yKDEwKSxcclxuICAgICd7c3RyLTIwfSc6ICgpID0+IHJhbmRvbVN0cmluZ0dlbmVyYXRvcigyMCksXHJcbiAgICAne2ZpbGVuYW1lfSc6ICgpID0+IGFmZml4RmlsZU5hbWUgPyBwYXRoLmJhc2VuYW1lKGFmZml4RmlsZU5hbWUsIHBhdGguZXh0bmFtZShhZmZpeEZpbGVOYW1lKSkgOiBmaWxlYmFzZW5hbWUsXHJcbiAgICAne3V1aWR9JzogKCkgPT4gdXVpZHY0KCkucmVwbGFjZSgvLS9nLCAnJyksXHJcbiAgICAne3RpbWVzdGFtcH0nOiAoKSA9PiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXHJcbiAgfVxyXG4gIGlmIChjdXN0b21Gb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAoIU9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnNvbWUoaXRlbSA9PiBjdXN0b21Gb3JtYXQuaW5jbHVkZXMoaXRlbSkpICYmICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ2xvY2FsRm9sZGVyJykpKSB7XHJcbiAgICByZXR1cm4gb2xkTmFtZVxyXG4gIH1cclxuICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUob2xkTmFtZSlcclxuICBsZXQgbmV3TmFtZSA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcclxuICAgIHJldHVybiBhY2MucmVwbGFjZShuZXcgUmVnRXhwKGN1ciwgJ2cnKSwgY29udmVyc2lvbk1hcFtjdXJdKCkpXHJcbiAgfSwgY3VzdG9tRm9ybWF0KSArIGV4dFxyXG4gIG5ld05hbWUgPSBuZXdOYW1lLnJlcGxhY2UoL3sobG9jYWxGb2xkZXI6PyhcXGQrKT8pfS9naSwgKF9yZXN1bHQsIGtleSwgY291bnQpID0+IHtcclxuICAgIGNvdW50ID0gTWF0aC5tYXgoMSwgY291bnQgfHwgMClcclxuICAgIGNvbnN0IHBhdGhzID0gcGF0aC5kaXJuYW1lKG9sZE5hbWUpLnNwbGl0KHBhdGguc2VwKVxyXG4gICAga2V5ID0gcGF0aHMuc2xpY2UoMCAtIGNvdW50KS5yZWR1Y2UoKGEsIGIpID0+IGAke2F9LyR7Yn1gKVxyXG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKC86L2csICcnKVxyXG4gIH0pXHJcbiAgcmV0dXJuIG5ld05hbWVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzVXJsID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiAoL15odHRwcz86XFwvXFwvLykudGVzdCh1cmwpXHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmxFbmNvZGUgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICB1cmwgPSB1cmwgfHwgJydcclxuICB0cnkge1xyXG4gICAgLy8gdGhlIHdob2xlIHVybCBlbmNvZGUgb3IgZGVjb2RlIHNob2xkIG5vdCB1c2UgZW5jb2RlVVJJQ29tcG9uZW50IG9yIGRlY29kZVVSSUNvbXBvbmVudFxyXG4gICAgcmV0dXJuIHVybCAhPT0gZGVjb2RlVVJJKHVybClcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKCFpc1VybEVuY29kZSh1cmwpKSB7XHJcbiAgICB1cmwgPSBlbmNvZGVVUkkodXJsKVxyXG4gIH1cclxuICByZXR1cm4gdXJsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRJbWFnZVNpemUgPSAoZmlsZTogQnVmZmVyKTogSUltZ1NpemUgPT4ge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCB7IHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgdHlwZSB9ID0gaW1hZ2VTaXplKGZpbGUpXHJcbiAgICBjb25zdCBleHRuYW1lID0gdHlwZSA/IGAuJHt0eXBlfWAgOiAnLnBuZydcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IHRydWUsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIGV4dG5hbWVcclxuICAgIH1cclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICAvLyBmYWxsYmFjayB0byAyMDAgKiAyMDBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogMjAwLFxyXG4gICAgICBoZWlnaHQ6IDIwMCxcclxuICAgICAgZXh0bmFtZTogJy5wbmcnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RlNGaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGV4dG5hbWU6IHBhdGguZXh0bmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcclxuICAgICAgYnVmZmVyOiBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCksXHJcbiAgICAgIHN1Y2Nlc3M6IHRydWVcclxuICAgIH1cclxuICB9IGNhdGNoIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYXNvbjogYHJlYWQgZmlsZSAke2ZpbGVQYXRofSBlcnJvcmAsXHJcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0VVJMRmlsZSA9IGFzeW5jICh1cmw6IHN0cmluZywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XHJcbiAgdXJsID0gaGFuZGxlVXJsRW5jb2RlKHVybClcclxuICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dFxyXG4gIGNvbnN0IHJlcXVlc3RGbiA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KHtcclxuICAgICAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAudGhlbigocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhIGFzIEJ1ZmZlclxyXG4gICAgICAgICAgfSlcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIGNvbnN0IHVybFBhdGggPSBuZXcgVVJMKHVybCkucGF0aG5hbWVcclxuICAgICAgICBsZXQgZXh0bmFtZSA9ICcnXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkwodXJsKS5zZWFyY2hQYXJhbXNcclxuICAgICAgICAgIGV4dG5hbWUgPSB1cmxQYXJhbXMuZ2V0KCd3eF9mbXQnKSB8fCBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgZXh0bmFtZSA9IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWV4dG5hbWUuc3RhcnRzV2l0aCgnLicpICYmIGV4dG5hbWUpIHtcclxuICAgICAgICAgIGV4dG5hbWUgPSBgLiR7ZXh0bmFtZX1gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgYnVmZmVyOiByZXMsXHJcbiAgICAgICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZSh1cmxQYXRoKSxcclxuICAgICAgICAgIGV4dG5hbWUsXHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcclxuICAgICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IGVycm9yLCAke2Vycm9yPy5tZXNzYWdlID8/ICcnfWBcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KSgpLmNhdGNoKHJlamVjdClcclxuICB9KVxyXG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+KChyZXNvbHZlKTogdm9pZCA9PiB7XHJcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gdGltZW91dGBcclxuICAgICAgfSlcclxuICAgIH0sIDMwMDAwKVxyXG4gIH0pXHJcbiAgcmV0dXJuIFByb21pc2UucmFjZShbcmVxdWVzdEZuLCB0aW1lb3V0UHJvbWlzZV0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZydzIHR5cGVcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHNjb3BlXHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gbm9ybWFsXHJcbiAqIDMuIHh4eCAtPiBzaW1wbGVcclxuICogNC4gbm90IGV4aXN0cyBvciBpcyBhIHBhdGggLT4gdW5rbm93blxyXG4gKiBAcGFyYW0gbmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk5hbWVUeXBlID0gKG5hbWU6IHN0cmluZyk6IElQbHVnaW5OYW1lVHlwZSA9PiB7XHJcbiAgaWYgKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkge1xyXG4gICAgcmV0dXJuICdzY29wZSdcclxuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICByZXR1cm4gJ25vcm1hbCdcclxuICB9IGVsc2UgaWYgKGlzU2ltcGxlTmFtZShuYW1lKSkge1xyXG4gICAgcmV0dXJuICdzaW1wbGUnXHJcbiAgfVxyXG4gIHJldHVybiAndW5rbm93bidcclxufVxyXG5cclxuLyoqXHJcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2ltcGxlIHBsdWdpbiBuYW1lIG9yIG5vdFxyXG4gKiBmb3IgZXhhbXBsZVxyXG4gKiAxLiB4eHggLT4gdHJ1ZVxyXG4gKiAyLiAvVXNyL3h4L3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBmYWxzZVxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5OYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNTaW1wbGVOYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBjb25zdCBwbHVnaW5QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIG5hbWVPclBhdGgpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBpZiAobmFtZU9yUGF0aC5pbmNsdWRlcygnLycpIHx8IG5hbWVPclBhdGguaW5jbHVkZXMoJ1xcXFwnKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBzdHJlYW1saW5lIHRoZSBmdWxsIHBsdWdpbiBuYW1lIHRvIGEgc2ltcGxlIG9uZVxyXG4gKiBmb3IgZXhhbXBsZTpcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiB4eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teXl5IC0+IHl5eVxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5GdWxsTmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVN0cmVhbWxpbmVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkge1xyXG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvcGljZ28tcGx1Z2luLS8sICcnKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGNvbXBsZXRlIHBsdWdpbiBuYW1lIHRvIGZ1bGwgbmFtZVxyXG4gKiBmb3IgZXhhbXBsZTpcclxuICogMS4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpblNpbXBsZU5hbWVcclxuICogQHBhcmFtIHNjb3BlIHBsdWdpblNjb3BlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGUgPSAnJyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKHNjb3BlKSB7XHJcbiAgICByZXR1cm4gYEAke3Njb3BlfS9waWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgaW5zdGFsbC91bmluc3RhbGwvdXBkYXRlIHBsdWdpbiBuYW1lIG9yIHBhdGhcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogMy4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4veHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aCBwbHVnaW5OYW1lIG9yIHBsdWdpblBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQcm9jZXNzUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aClcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgcGx1Z2luTmFtZVR5cGUgaXMgdW5rbm93IGhlcmVcclxuICAgICAgLy8gMS4gY2hlY2sgaWYgaXMgYW4gYWJzb2x1dGUgcGF0aFxyXG4gICAgICBsZXQgcGx1Z2luUGF0aCA9IG5hbWVPclBhdGhcclxuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSAmJiBmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZVVuaXhTdHlsZVBhdGgocGx1Z2luUGF0aClcclxuICAgICAgfVxyXG4gICAgICAvLyAyLiBjaGVjayBpZiBpcyBhIHJlbGF0aXZlIHBhdGhcclxuICAgICAgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMy4gaW52YWxpZCBuYW1lT3JQYXRoXHJcbiAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbiAke25hbWVPclBhdGh9YClcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZ2V0IHRoZSBub3JtYWwgcGx1Z2luIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIGFuIGV4Y2VwdGlvbjogW3BhY2thZ2UuanNvbidzIG5hbWVdICE9PSBbZm9sZGVyIG5hbWVdXHJcbiAqIHRoZW4gdXNlIFtwYWNrYWdlLmpzb24ncyBuYW1lXSwgdXN1YWxseSBtYXRjaCB0aGUgc2NvcGUgcGFja2FnZS5cclxuICogNi4gaWYgcGx1Z2luIG5hbWUgaGFzIHZlcnNpb246IHBpY2dvLXBsdWdpbi14eHhAeC54LnggdGhlbiByZW1vdmUgdGhlIHZlcnNpb25cclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXROb3JtYWxQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcclxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XHJcbiAgICBjYXNlICdub3JtYWwnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoKVxyXG4gICAgY2FzZSAnc2NvcGUnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoLCB0cnVlKVxyXG4gICAgY2FzZSAnc2ltcGxlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24oaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpKVxyXG4gICAgZGVmYXVsdDoge1xyXG4gICAgICAvLyBub3csIHRoZSBuYW1lT3JQYXRoIG11c3QgYmUgcGF0aFxyXG4gICAgICAvLyB0aGUgbmFtZU9yUGF0aCBoZXJlIHdpbGwgYmUgZW5zdXJlZCB3aXRoIHVuaXggc3R5bGVcclxuICAgICAgLy8gd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lIGNhdXNlIG5wbSB1c2luZyB0aGUgbmFtZSBpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkXHJcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gcGF0aC5wb3NpeC5qb2luKG5hbWVPclBhdGgsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpTT05QYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VKU09OUGF0aCkgfHwge31cclxuICAgICAgICBpZiAoIXBrZy5uYW1lPy5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICBsb2dnZXIud2FybihgVGhlIHBsdWdpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkIGlzICR7cGtnLm5hbWUgYXMgc3RyaW5nIHx8ICdlbXB0eSd9LCBuZWVkIHRvIGluY2x1ZGUgdGhlIHByZWZpeDogcGljZ28tcGx1Z2luLWApXHJcbiAgICAgICAgICByZXR1cm4gJydcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBrZy5uYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgdHJhbnNmb3JtIHRoZSBwYXRoIHRvIHVuaXggc3R5bGVcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gQzpcXFxceHh4XFxcXHh4eCAtPiBDOi94eHgveHh4XHJcbiAqIDIuIC94eHgveHh4IC0+IC94eHgveHh4XHJcbiAqIEBwYXJhbSBwYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlVW5peFN0eWxlUGF0aCA9IChwYXRoU3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGhBcnIgPSBwYXRoU3RyLnNwbGl0KHBhdGguc2VwKVxyXG4gIHJldHVybiBwYXRoQXJyLmpvaW4oJy8nKVxyXG59XHJcblxyXG4vKipcclxuICogcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uIHdoZW4gcmVnaXN0ZXIgcGx1Z2luIG5hbWVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICogQHBhcmFtIHNjb3BlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcmVtb3ZlUGx1Z2luVmVyc2lvbiA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIHNjb3BlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghbmFtZU9yUGF0aC5pbmNsdWRlcygnQCcpKSB7XHJcbiAgICByZXR1cm4gbmFtZU9yUGF0aFxyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgcmVnID0gLyguK1xcLyk/KHBpY2dvLXBsdWdpbi1cXHcrKShALispKi9cclxuICAgIC8vIGlmIGlzIGEgc2NvcGUgcGtnXHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgcmVnID0gLyguK1xcLyk/KF5AW14vXStcXC9waWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXRjaEFyciA9IG5hbWVPclBhdGgubWF0Y2gocmVnKVxyXG4gICAgaWYgKCFtYXRjaEFycikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ2NhbiBub3QgcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uJylcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXRjaEFyclsyXVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZSBjb25maWcgYmxhY2sgaXRlbSBsaXN0IHdoaWNoIHdvbid0IGJlIHNldHRlZFxyXG4gKiBvbmx5IGNhbiBiZSBnb3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb25maWdCbGFja0xpc3QgPSBbXVxyXG5cclxuLyoqXHJcbiAqIGNoZWNrIHNvbWUgY29uZmlnIGtleSBpcyBpbiBibGFja0xpc3RcclxuICogQHBhcmFtIGtleVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5CbGFja0xpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gY29uZmlnQmxhY2tMaXN0LnNvbWUoYmxhY2tJdGVtID0+IGtleS5zdGFydHNXaXRoKGJsYWNrSXRlbSkpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjaGVjayB0aGUgaW5wdXQgY29uZmlnIGlzIHZhbGlkXHJcbiAqIGNvbmZpZyBtdXN0IGJlIG9iamVjdCBzdWNoIGFzIHsgeHh4OiAneHh4JyB9XHJcbiAqICYmIGNhbid0IGJlIGFycmF5XHJcbiAqIEBwYXJhbSBjb25maWdcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0lucHV0Q29uZmlnVmFsaWQgPSAoY29uZmlnOiBhbnkpOiBib29sZWFuID0+IHtcclxuICBpZiAoXHJcbiAgICB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJlxyXG4gICAgIUFycmF5LmlzQXJyYXkoY29uZmlnKSAmJlxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZTxUPiAoc3RyOiBzdHJpbmcpOiBUIHwgc3RyaW5nIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgfVxyXG59XHJcblxyXG4vLyBob2xkLi4uXHJcbi8vIGV4cG9ydCBjb25zdCBjb25maWdXaGl0ZUxpc3Q6IFJlZ0V4cFtdID0gW1xyXG4vLyAgIC9ecGljQmVkLyxcclxuLy8gICAvXnBpY2dvUGx1Z2lucy8sXHJcbi8vICAgL15AW14vXStcXC9waWNnby1wbHVnaW4tLyxcclxuLy8gICAvZGVidWcvLFxyXG4vLyAgIC9zaWxlbnQvLFxyXG4vLyAgIC9jb25maWdQYXRoLyxcclxuLy8gICAvXnNldHRpbmdzLyxcclxuLy8gXVxyXG5cclxuLy8gZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5XaGl0ZUxpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuLy8gICByZXR1cm4gY29uZmlnV2hpdGVMaXN0LnNvbWUod2hpdGVJdGVtID0+IHdoaXRlSXRlbS50ZXN0KGtleSkpXHJcbi8vIH1cclxuXHJcbmV4cG9ydCBjb25zdCBmb3JjZU51bWJlciA9IChudW06IHN0cmluZyB8IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xyXG4gIHJldHVybiBpc05hTihOdW1iZXIobnVtKSkgPyAwIDogTnVtYmVyKG51bSlcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNQcm9kID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHRleHQyU1ZHIChcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIGNvbG9yPzogc3RyaW5nLFxyXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmdcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0ZXh0ID0gIXRleHQgPyAn5rWL6K+VJyA6IHRleHRcclxuICBmb250RmFtaWx5ID0gIWZvbnRGYW1pbHkgPyBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGggOiBmb250RmFtaWx5XHJcbiAgY29sb3IgPSAhY29sb3IgPyAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KScgOiBjb2xvclxyXG4gIGNvbnN0IHRleHQyU1ZHID0gVGV4dFRvU1ZHLmxvYWRTeW5jKGZvbnRGYW1pbHkpXHJcbiAgY29uc3Qgb3B0aW9uczogVGV4dFRvU1ZHLkdlbmVyYXRpb25PcHRpb25zID0ge1xyXG4gICAgYW5jaG9yOiAndG9wJyxcclxuICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgZmlsbDogY29sb3JcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3QgdGV4dFNWRyA9IHRleHQyU1ZHLmdldFNWRyh0ZXh0LCBvcHRpb25zKVxyXG4gIGNvbnN0IHN2ZyA9IEJ1ZmZlci5mcm9tKHRleHRTVkcpXHJcbiAgcmV0dXJuIHN2Z1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Fzc2V0cycsICdwaWNsaXN0LnBuZycpXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQWRkV2F0ZXJtYXJrIChcclxuICBpbWc6IEJ1ZmZlcixcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIGlzRnVsbFNjcmVlbldhdGVybWFyaz86IGJvb2xlYW4sXHJcbiAgd2F0ZXJtYXJrRGVncmVlPzogbnVtYmVyLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgcG9zaXRpb24/OiBzaGFycC5HcmF2aXR5XHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbyA9ICF3YXRlcm1hcmtTY2FsZVJhdGlvIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPCAwIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPiAxID8gMC4xNSA6IHdhdGVybWFya1NjYWxlUmF0aW9cclxuICBjb25zdCBpbWFnZSA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxyXG4gIGNvbnN0IHsgd2lkdGg6IGltZ1dpZHRoID0gMjAwIH0gPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpXHJcbiAgY29uc3Qgd2F0ZXJtYXJrID0gYXdhaXQgY3JlYXRlV2F0ZXJtYXJrKFxyXG4gICAgd2F0ZXJtYXJrVHlwZSxcclxuICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgIHRleHQsXHJcbiAgICB3YXRlcm1hcmtGb250UGF0aCxcclxuICAgIHdhdGVybWFya1NjYWxlUmF0aW8sXHJcbiAgICB3YXRlcm1hcmtDb2xvcixcclxuICAgIHdhdGVybWFya0ltYWdlUGF0aCxcclxuICAgIGltZ1dpZHRoLFxyXG4gICAgd2F0ZXJtYXJrRGVncmVlXHJcbiAgKVxyXG4gIGNvbnN0IGNvbXBvc2l0ZWQgPSBhd2FpdCBpbWFnZVxyXG4gICAgLmNvbXBvc2l0ZShbXHJcbiAgICAgIHtcclxuICAgICAgICBpbnB1dDogd2F0ZXJtYXJrLFxyXG4gICAgICAgIGdyYXZpdHk6IHBvc2l0aW9uIHx8ICdzb3V0aGVhc3QnLFxyXG4gICAgICAgIHRpbGU6IGlzRnVsbFNjcmVlbldhdGVybWFya1xyXG4gICAgICB9XHJcbiAgICBdKVxyXG4gICAgLnRvQnVmZmVyKClcclxuICByZXR1cm4gY29tcG9zaXRlZFxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXYXRlcm1hcmsgKFxyXG4gIHdhdGVybWFya1R5cGU6ICd0ZXh0JyB8ICdpbWFnZScsXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtTY2FsZVJhdGlvPzogbnVtYmVyLFxyXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcclxuICBpbWdXaWR0aDogbnVtYmVyID0gMjAwLFxyXG4gIHdhdGVybWFya0RlZ3JlZTogbnVtYmVyID0gMFxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIGxldCB3YXRlcm1hcms6IGFueVxyXG4gIGlmICh3YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGggPSB3YXRlcm1hcmtJbWFnZVBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aFxyXG4gICAgd2F0ZXJtYXJrID0gYXdhaXQgc2hhcnAod2F0ZXJtYXJrSW1hZ2VQYXRoKS50b0J1ZmZlcigpXHJcbiAgfSBlbHNlIHtcclxuICAgIHdhdGVybWFyayA9IGF3YWl0IHRleHQyU1ZHKFxyXG4gICAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICAgIHRleHQsXHJcbiAgICAgIHdhdGVybWFya0NvbG9yLFxyXG4gICAgICB3YXRlcm1hcmtGb250UGF0aCB8fCBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGhcclxuICAgIClcclxuICB9XHJcbiAgY29uc3QgeyB3aWR0aDogd2F0ZXJtYXJrV2lkdGgsIGhlaWdodDogd2F0ZXJtYXJrSGVpZ2h0IH0gPSBhd2FpdCBnZXRTaXplKFxyXG4gICAgd2F0ZXJtYXJrXHJcbiAgKVxyXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZVdpZHRoID0gTWF0aC5mbG9vcihpbWdXaWR0aCAqIGZvcmNlTnVtYmVyKHdhdGVybWFya1NjYWxlUmF0aW8pKVxyXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZUhlaWdodCA9IE1hdGguZmxvb3IoXHJcbiAgICAod2F0ZXJtYXJrUmVzaXplV2lkdGggKiB3YXRlcm1hcmtIZWlnaHQpIC8gd2F0ZXJtYXJrV2lkdGhcclxuICApXHJcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKHdhdGVybWFyaylcclxuICAgIC5yZXNpemUod2F0ZXJtYXJrUmVzaXplV2lkdGgsIHdhdGVybWFya1Jlc2l6ZUhlaWdodCwge1xyXG4gICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICB9KVxyXG4gICAgLnJvdGF0ZSh3YXRlcm1hcmtEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICAudG9CdWZmZXIoKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRTaXplIChpbWFnZTogQnVmZmVyKTogUHJvbWlzZTx7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0+IHtcclxuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHNoYXJwKGltYWdlKS5tZXRhZGF0YSgpXHJcbiAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoIHx8IDIwMCwgaGVpZ2h0OiBoZWlnaHQgfHwgMjAwIH1cclxufVxyXG5cclxuY29uc3QgdmFsaWRQYXJhbSA9ICguLi5wYXJhbXM6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIHBhcmFtcy5ldmVyeShwYXJhbSA9PiB7XHJcbiAgICBpZiAocGFyYW0gPT09IHVuZGVmaW5lZCB8fCBwYXJhbSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBwYXJhbSAhPT0gJydcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBwYXJhbSA+IDBcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbSkubGVuZ3RoID4gMFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCA9IFtcclxuICAnYXZpZicsXHJcbiAgJ2R6JyxcclxuICAnZml0cycsXHJcbiAgJ2dpZicsXHJcbiAgJ2hlaWYnLFxyXG4gICdpbnB1dCcsXHJcbiAgJ2pwZWcnLFxyXG4gICdqcGcnLFxyXG4gICdqcDInLFxyXG4gICdqeGwnLFxyXG4gICdtYWdpY2snLFxyXG4gICdvcGVuc2xpZGUnLFxyXG4gICdwZGYnLFxyXG4gICdwbmcnLFxyXG4gICdwcG0nLFxyXG4gICdyYXcnLFxyXG4gICdzdmcnLFxyXG4gICd0aWZmJyxcclxuICAndGlmJyxcclxuICAndicsXHJcbiAgJ3dlYnAnXHJcbl1cclxuXHJcbmNvbnN0IHZhbGlkT3V0cHV0Rm9ybWF0ID0gKGZvcm1hdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0LmluY2x1ZGVzKGZvcm1hdClcclxufVxyXG5cclxuY29uc3QgaW1hZ2VFeHRMaXN0ID0gWydqcGcnLCAnanBlZycsICdwbmcnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsgKGltZzogQnVmZmVyLCBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHRyeSB7XHJcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXHJcbiAgICBpbWFnZSA9IHNoYXJwKGF3YWl0IEFkZFdhdGVybWFyayhcclxuICAgICAgaW1nLFxyXG4gICAgICBvcHRpb25zLndhdGVybWFya1R5cGUgfHwgJ3RleHQnLFxyXG4gICAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya0RlZ3JlZSksXHJcbiAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVGV4dCxcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgZm9yY2VOdW1iZXIob3B0aW9ucy53YXRlcm1hcmtTY2FsZVJhdGlvKSxcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtDb2xvcixcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgIG9wdGlvbnMud2F0ZXJtYXJrUG9zaXRpb25cclxuICAgICksIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXHJcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBhZGQgd2F0ZXJtYXJrIGVycm9yOiAke2Vycm9yfWApXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25zIChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcclxuICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqID0gdHlwZW9mIG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaiA9PT0gJ3N0cmluZycgPyBzYWZlUGFyc2Uob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKSA6IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxyXG4gIHJldHVybiB7XHJcbiAgICBxdWFsaXR5OiBmb3JjZU51bWJlcihvcHRpb25zLnF1YWxpdHkpLFxyXG4gICAgaXNDb252ZXJ0OiBvcHRpb25zLmlzQ29udmVydCB8fCBmYWxzZSxcclxuICAgIGNvbnZlcnRGb3JtYXQ6IG9wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJyxcclxuICAgIGlzUmVTaXplOiBvcHRpb25zLmlzUmVTaXplIHx8IGZhbHNlLFxyXG4gICAgcmVTaXplSGVpZ2h0OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZUhlaWdodCksXHJcbiAgICByZVNpemVXaWR0aDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVXaWR0aCksXHJcbiAgICBza2lwUmVTaXplT2ZTbWFsbEltZzogb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZSxcclxuICAgIGlzUmVTaXplQnlQZXJjZW50OiBvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxyXG4gICAgcmVTaXplUGVyY2VudDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVQZXJjZW50KSxcclxuICAgIGlzUm90YXRlOiBvcHRpb25zLmlzUm90YXRlIHx8IGZhbHNlLFxyXG4gICAgaXNGbGlwOiBvcHRpb25zLmlzRmxpcCB8fCBmYWxzZSxcclxuICAgIGlzRmxvcDogb3B0aW9ucy5pc0Zsb3AgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcclxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnLFxyXG4gICAgZm9ybWF0Q29udmVydE9iajogZm9ybWF0Q29udmVydE9iaiB8fCB7fVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlUHJvY2VzcyAoaW1nOiBCdWZmZXIsIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLCByYXdGb3JtYXQ6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxyXG4gIHRyeSB7XHJcbiAgICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgICBpZiAoIWltYWdlRXh0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XHJcbiAgICAgIHJldHVybiBpbWdcclxuICAgIH1cclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIGxldCBxdWFsaXR5ID0gMTAwXHJcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnF1YWxpdHkpICYmIG9wdGlvbnMucXVhbGl0eSEgPCAxMDApIHtcclxuICAgICAgcXVhbGl0eSA9IG9wdGlvbnMucXVhbGl0eSFcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50KSB7XHJcbiAgICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucmVTaXplUGVyY2VudCkpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxyXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcclxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VXaWR0aCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEgLyAxMDApLFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaXNSZVNpemUpIHtcclxuICAgICAgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCkgJiYgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnZmlsbCdcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPiAwKSAmJiAodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplV2lkdGggPT09IDApKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcclxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXHJcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCAob3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA8IGltYWdlSGVpZ2h0KSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVIZWlnaHQgLyBpbWFnZUhlaWdodFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDApICYmICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAwKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA8IGltYWdlV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZVdpZHRoIC8gaW1hZ2VXaWR0aFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoLFxyXG4gICAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc1JvdGF0ZSAmJiBvcHRpb25zLnJvdGF0ZURlZ3JlZSkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLnJvdGF0ZShvcHRpb25zLnJvdGF0ZURlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzRmxpcCkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLmZsaXAoKVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNGbG9wKSB7XHJcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxvcCgpXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gZ2V0Q29udmVydGVkRm9ybWF0KG9wdGlvbnMsIHJhd0Zvcm1hdCkgYXMgYW55XHJcbiAgICAgIGlmIChuZXdGb3JtYXQgIT09IHJhd0Zvcm1hdCkge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgICBxdWFsaXR5LFxyXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyYXdGb3JtYXQgJiYgdmFsaWRPdXRwdXRGb3JtYXQocmF3Rm9ybWF0KSkge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQocmF3Rm9ybWF0IGFzIGFueSwge1xyXG4gICAgICAgICAgcXVhbGl0eSxcclxuICAgICAgICAgIG1vempwZWc6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQoJ2pwZycsIHtcclxuICAgICAgICAgIHF1YWxpdHksXHJcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICBsb2dnZXIuZXJyb3IoYEltYWdlIHByb2Nlc3MgZXJyb3I6ICR7ZXJyb3J9YClcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb252ZXJ0ZWRGb3JtYXQgKG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCByYXdGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucyB8fCB7fSlcclxuICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgbGV0IG5ld0Zvcm1hdCA9IG9wdGlvbnM/LmNvbnZlcnRGb3JtYXQgfHwgJ2pwZydcclxuICBpZiAob3B0aW9ucz8uZm9ybWF0Q29udmVydE9iaiAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmZvcm1hdENvbnZlcnRPYmopLmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IGZvcm1hdENvbnZlcnRPYmogPSBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmpcclxuICAgIGNvbnN0IGZvcm1hdENvbnZlcnRPYmpLZXlzID0gT2JqZWN0LmtleXMoZm9ybWF0Q29udmVydE9iailcclxuICAgIGlmIChmb3JtYXRDb252ZXJ0T2JqS2V5cy5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XHJcbiAgICAgIG5ld0Zvcm1hdCA9IGZvcm1hdENvbnZlcnRPYmpbcmF3Rm9ybWF0XVxyXG4gICAgICBpZiAoIXZhbGlkT3V0cHV0Rm9ybWF0KG5ld0Zvcm1hdCkpIHtcclxuICAgICAgICBuZXdGb3JtYXQgPSAnanBnJ1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zPy5waWNCZWQgPT09ICdpbWd1cicgJiYgbmV3Rm9ybWF0ID09PSAnd2VicCcpIHtcclxuICAgIG5ld0Zvcm1hdCA9ICdqcGcnXHJcbiAgfVxyXG4gIHJldHVybiBuZXdGb3JtYXRcclxufVxyXG5cclxuY29uc3QgaW1hZ2VGb3JtYXRMaXN0ID0gWydqcGcnLCAnanBlZycsICdwbmcnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYycsICdnaWYnXVxyXG5cclxuZXhwb3J0IGNvbnN0IG5lZWRBZGRXYXRlcm1hcmsgPSAod2F0ZXJtYXJrT3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zIHwgdW5kZWZpbmVkLCBmaWxlRXh0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBmaWxlRXh0ID0gZmlsZUV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcclxuICByZXR1cm4gISF3YXRlcm1hcmtPcHRpb25zICYmICEhd2F0ZXJtYXJrT3B0aW9ucy5pc0FkZFdhdGVybWFyayAmJiBpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMoZmlsZUV4dClcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG5lZWRDb21wcmVzcyA9IChjb21wcmVzc09wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCBmaWxlRXh0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBjb25zdCBub3JtYWxpemVkRXh0ID0gZmlsZUV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcclxuXHJcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMobm9ybWFsaXplZEV4dCkgfHwgIWNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBjb25zdCB7XHJcbiAgICBxdWFsaXR5LFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQsXHJcbiAgICByZVNpemVQZXJjZW50LFxyXG4gICAgaXNSZVNpemUsXHJcbiAgICByZVNpemVIZWlnaHQsXHJcbiAgICByZVNpemVXaWR0aCxcclxuICAgIGlzUm90YXRlLFxyXG4gICAgcm90YXRlRGVncmVlLFxyXG4gICAgaXNDb252ZXJ0LFxyXG4gICAgY29udmVydEZvcm1hdCxcclxuICAgIGlzRmxpcCxcclxuICAgIGlzRmxvcFxyXG4gIH0gPSBmb3JtYXRPcHRpb25zKGNvbXByZXNzT3B0aW9ucylcclxuXHJcbiAgaWYgKHZhbGlkUGFyYW0ocXVhbGl0eSkgJiYgcXVhbGl0eSEgPCAxMDApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc1JlU2l6ZUJ5UGVyY2VudCAmJiB2YWxpZFBhcmFtKHJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNSZVNpemUgJiYgKCh0eXBlb2YgcmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiByZVNpemVIZWlnaHQgPiAwKSB8fCAodHlwZW9mIHJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiByZVNpemVXaWR0aCA+IDApKSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzUm90YXRlICYmIHJvdGF0ZURlZ3JlZSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzRmxpcCB8fCBpc0Zsb3ApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc0NvbnZlcnQpIHtcclxuICAgIGNvbnN0IG5ld0Zvcm1hdCA9IGNvbnZlcnRGb3JtYXQgfHwgJ2pwZydcclxuICAgIHJldHVybiBmaWxlRXh0ICE9PSBuZXdGb3JtYXRcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCByZW1vdmVFeGlmID0gYXN5bmMgKGltZzogQnVmZmVyLCBmaWxlRXh0OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpIHx8IGZpbGVFeHQgPT09ICdzdmcnKSB7XHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG4gIHJldHVybiBhd2FpdCBzaGFycChpbWcsIHtcclxuICAgIGFuaW1hdGVkOiB0cnVlXHJcbiAgfSkudG9CdWZmZXIoKVxyXG59XHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVwbG9hZDogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VwbG9hZCcpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndXBsb2FkLCBnbyBnbyBnbycpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tpbnB1dC4uLl0nKVxyXG4gICAgICAuYWxpYXMoJ3UnKVxyXG4gICAgICAuYWN0aW9uKChpbnB1dDogc3RyaW5nW10pID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gaW5wdXRcclxuICAgICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsKGl0ZW0pID8gaXRlbSA6IHBhdGgucmVzb2x2ZShpdGVtKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBleGlzdCA9IGZzLmV4aXN0c1N5bmMoaXRlbSkgfHwgaXNVcmwoaXRlbSlcclxuICAgICAgICAgICAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYCR7aXRlbX0gZG9lcyBub3QgZXhpc3QuYClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhd2FpdCBjdHgudXBsb2FkKGlucHV0TGlzdClcclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVwbG9hZFxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElCdWlsZEluQ29tcHJlc3NPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncXVhbGl0eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQ29udmVydCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0NvbnZlcnQgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjb252ZXJ0Rm9ybWF0JyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnYXZpZicsICdkeicsICdmaXRzJywgJ2dpZicsICdoZWlmJywgJ2lucHV0JywgJ2pwZWcnLCAnanBnJywgJ2pwMicsICdqeGwnLCAnbWFnaWNrJywgJ29wZW5zbGlkZScsICdwZGYnLCAncG5nJywgJ3BwbScsICdyYXcnLCAnc3ZnJywgJ3RpZmYnLCAndGlmJywgJ3YnLCAnd2VicCddLFxyXG4gICAgICBkZWZhdWx0OiAnanBnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZSB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVdpZHRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplSGVpZ2h0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVIZWlnaHQgfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2tpcFJlU2l6ZU9mU21hbGxJbWcnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZVNpemVCeVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplUGVyY2VudCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVQZXJjZW50IHx8IDUwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGbGlwJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRmxpcCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzRmxvcCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Zsb3AgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JvdGF0ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSb3RhdGUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyb3RhdGVEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVtb3ZlRXhpZicsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlbW92ZUV4aWYgfHwgZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4oJ2J1aWxkSW4ud2F0ZXJtYXJrJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQWRkV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQWRkV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVHlwZScsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsndGV4dCcsICdpbWFnZSddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRGVncmVlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0RlZ3JlZSB8fCAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVGV4dCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1RleHQgfHwgJydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtGb250UGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1NjYWxlUmF0aW8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCAwLjE1XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrQ29sb3InLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1InKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrQ29sb3IgfHwgJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrSW1hZ2VQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ltYWdlUGF0aCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1Bvc2l0aW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBjaG9pY2VzOiBbJ25vcnRoJywgJ25vcnRoZWFzdCcsICdzb3V0aGVhc3QnLCAnc291dGgnLCAnc291dGh3ZXN0JywgJ25vcnRod2VzdCcsICd3ZXN0JywgJ2Vhc3QnLCAnY2VudGVyJywgJ2NlbnRyZSddLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1Bvc2l0aW9uIHx8ICdzb3V0aGVhc3QnXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2Zvcm1hdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRk9STUFUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5hYmxlJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0VOQUJMRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9FTkFCTEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5hYmxlIHx8IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgY29tcHJlc3MgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvY29tcHJlc3MnXHJcbmltcG9ydCB3YXRlcm1hcmsgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrJ1xyXG5pbXBvcnQgcmVuYW1lIGZyb20gJy4uL2JlZm9yZXVwbG9hZC9idWlsZEluUmVuYW1lJ1xyXG5cclxuLy8gaGFuZGxlIG1vZHVsZXMgY29uZmlnIC0+IHNhdmUgdG8gcGljZ28gY29uZmlnIGZpbGVcclxuY29uc3QgaGFuZGxlQ29uZmlnID0gYXN5bmMgKGN0eDogSVBpY0dvLCBwcm9tcHRzOiBJUGx1Z2luQ29uZmlnW10sIG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChwcm9tcHRzKVxyXG4gIGNvbnN0IGNvbmZpZ05hbWUgPSBtb2R1bGUgPT09ICd1cGxvYWRlcidcclxuICAgID8gYHBpY0JlZC4ke25hbWV9YFxyXG4gICAgOiBtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcidcclxuICAgICAgPyBgdHJhbnNmb3JtZXIuJHtuYW1lfWBcclxuICAgICAgOiBtb2R1bGUgPT09ICdidWlsZGluJ1xyXG4gICAgICAgID8gYGJ1aWxkSW4uJHtuYW1lfWBcclxuICAgICAgICA6IG5hbWVcclxuICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICBbY29uZmlnTmFtZV06IGFuc3dlclxyXG4gIH0pXHJcbiAgaWYgKG1vZHVsZSA9PT0gJ3VwbG9hZGVyJykge1xyXG4gICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAncGljQmVkLmN1cnJlbnQnOiBuYW1lLFxyXG4gICAgICAncGljQmVkLnVwbG9hZGVyJzogbmFtZVxyXG4gICAgfSlcclxuICB9IGVsc2UgaWYgKG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJykge1xyXG4gICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAncGljQmVkLnRyYW5zZm9ybWVyJzogbmFtZVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHNldHRpbmcgPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdzZXQnKVxyXG4gICAgICAuYWxpYXMoJ2NvbmZpZycpXHJcbiAgICAgIC5hcmd1bWVudHMoJzxtb2R1bGU+IFtuYW1lXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY29uZmlndXJlIGNvbmZpZyBvZiBwaWNnbyBtb2R1bGVzLCB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgICAgICAgIC8vIGF3YWl0IGN0eC5wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgICAgICAgIC8vIGlmIGEgbW9kdWxlIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ2J1aWxkaW4nOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjb21wcmVzcycpIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3dhdGVybWFyaycpIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyZW5hbWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHJlbmFtZS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYnVpbGRpbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBbJ2NvbXByZXNzJywgJ3dhdGVybWFyaycsICdyZW5hbWUnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBidWlsZGluIG1vZHVsZSdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdjb21wcmVzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3dhdGVybWFyaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdyZW5hbWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgcmVuYW1lLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ3VwbG9hZGVyJzpcclxuICAgICAgICAgICAgICBjYXNlICd0cmFuc2Zvcm1lcic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChuYW1lKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHgubG9nLmVycm9yKGBObyAke21vZHVsZX0gbmFtZWQgJHtuYW1lfWApOyByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7bW9kdWxlfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyW21vZHVsZV0uZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2hvb3NlIGEobikgJHttb2R1bGV9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KGFuc3dlclttb2R1bGVdKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICdwbHVnaW4nOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lLmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gYHBpY2dvLXBsdWdpbi0ke25hbWV9YFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSk/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhLmNvbmZpZyEoY3R4KSwgJ3BsdWdpbicsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYE5vIHBsdWdpbiBuYW1lZCAke25hbWV9YCk7IHJldHVyblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHBsdWdpbidcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbik/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBhbnN3ZXIucGx1Z2luKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKTsgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgY29uZmlnIHN1Y2Nlc3NmdWxseSEnKVxyXG4gICAgICAgICAgICBpZiAobW9kdWxlID09PSAncGx1Z2luJykge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgY29uZmlnLCBwbGVhc2UgcnVuIFxcJ3BpY2dvIHVzZSBwbHVnaW5zXFwnJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBzZXR0aW5nXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4sIHR5cGUgVW5kZWZpbmFibGUsIHR5cGUgSUNMSUNvbmZpZ3MsIHR5cGUgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgdXNlOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgndXNlJylcclxuICAgICAgLmFyZ3VtZW50cygnW21vZHVsZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VzZSBtb2R1bGVzIG9mIHBpY2dvJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgICAgICAgIC8vIGF3YWl0IGN0eC5wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgICAgICAgIGxldCBwcm9tcHRzOiBhbnlbXSA9IFtdXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogSUNMSUNvbmZpZ3MgPSB7XHJcbiAgICAgICAgICAgICAgdXBsb2FkZXI6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICd1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIGFuIHVwbG9hZGVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICd0cmFuc2Zvcm1lcicsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIGEgdHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgcGx1Z2luczoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW5zJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgcGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke2l0ZW19YCkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmIGFuIG9wdGlvbiBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcclxuICAgICAgICAgICAgaWYgKG1vZHVsZSkge1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWdbbW9kdWxlXSkge1xyXG4gICAgICAgICAgICAgICAgcHJvbXB0cy5wdXNoKGNvbmZpZ1ttb2R1bGVdKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lucycpOyByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcHJvbXB0cyA9IE9iamVjdC5rZXlzKGNvbmZpZykubWFwKChpdGVtOiBzdHJpbmcpID0+IGNvbmZpZ1tpdGVtXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBmb3IgcGx1Z2lucyBvcHRpb24gZnJvbSBBcnJheSB0byBvYmplY3RcclxuICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IGN0eC5nZXRDb25maWc8SVN0cmluZ0tleU1hcDxib29sZWFuPj4oJ3BpY2dvUGx1Z2lucycpXHJcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMocGx1Z2lucykuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IHRydWVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHBsdWdpbnNcclxuICAgICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICAgICAgICAgICBwaWNnb1BsdWdpbnM6IHBsdWdpbnNcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciB1cGxvYWRlciAmIHRyYW5zZm9ybWVyXHJcbiAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAncGljQmVkLmN1cnJlbnQnOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxyXG4gICAgICAgICAgICAgICdwaWNCZWQudXBsb2FkZXInOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxyXG4gICAgICAgICAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBhbnN3ZXIudHJhbnNmb3JtZXIgfHwgJ3BhdGgnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXNlXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHByb3h5OiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8dXJsPicsICdzZXQgcHJveHkgZm9yIHVwbG9hZGluZycsIChwcm94eTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICAncGljQmVkLnByb3h5JzogcHJveHlcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcHJveHlcclxuIiwiaW1wb3J0IG1hdGNoIGZyb20gJ21pbmltYXRjaCdcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSU9wdGlvbnMsIHR5cGUgSUZpbGVUcmVlIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGdsb2JieSBmcm9tICdnbG9iYnknXHJcbmltcG9ydCBlanMgZnJvbSAnZWpzJ1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHRlbXBsYXRlIGZpbGVzIHRvIGRlc3RpbmF0aW9uIGZpbGVzLlxyXG4gKiBAcGFyYW0ge1BpY0dvfSBjdHhcclxuICogQHBhcmFtIHtJT3B0aW9uc30gb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgZ2VuZXJhdGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgb3B0cyA9IGdldE9wdGlvbnMob3B0aW9ucy50bXApXHJcbiAgICBjb25zdCBzb3VyY2UgPSBwYXRoLmpvaW4ob3B0aW9ucy50bXAsICd0ZW1wbGF0ZScpXHJcbiAgICBsZXQgYW5zd2VycyA9IHt9XHJcbiAgICBpZiAob3B0cy5wcm9tcHRzICYmIG9wdHMucHJvbXB0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChvcHRzLnByb21wdHMpXHJcbiAgICB9XHJcbiAgICBsZXQgX2ZpbGVzOiBzdHJpbmdbXSA9IGF3YWl0IGdsb2JieShbJyoqLyonXSwgeyBjd2Q6IHNvdXJjZSwgZG90OiB0cnVlIH0pIC8vIGdldCBmaWxlcycgbmFtZSBhcnJheVxyXG4gICAgX2ZpbGVzID0gX2ZpbGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGxldCBnbG9iID0gJydcclxuICAgICAgT2JqZWN0LmtleXMob3B0cy5maWx0ZXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChtYXRjaChpdGVtLCBrZXksIHsgZG90OiB0cnVlIH0pKSB7XHJcbiAgICAgICAgICBnbG9iID0gaXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKGdsb2IpIHsgLy8gZmluZCBhIGZpbHRlciBleHByZXNzaW9uXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnMoY3R4LCBvcHRzLmZpbHRlcnNbZ2xvYl0sIGFuc3dlcnMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChfZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGN0eC5sb2cud2FybignVGVtcGxhdGUgZmlsZXMgbm90IGZvdW5kIScpOyByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVzID0gcmVuZGVyKF9maWxlcywgc291cmNlLCBhbnN3ZXJzKVxyXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxyXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIG9wdHMuY29tcGxldGUoeyBhbnN3ZXJzLCBvcHRpb25zLCBmaWxlczogX2ZpbGVzLCBjdHggfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xyXG4gICAgICBjdHgubG9nLnN1Y2Nlc3Mob3B0cy5jb21wbGV0ZU1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcclxuICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGZpbHRlcnMnIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4IFBpY0dvXHJcbiAqIEBwYXJhbSBleHAgY29uZGl0aW9uIGV4cHJlc3Npb25cclxuICogQHBhcmFtIGRhdGEgb3B0aW9ucyBkYXRhXHJcbiAqL1xyXG5jb25zdCBmaWx0ZXJzID0gKGN0eDogSVBpY0dvLCBleHA6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC1wbHVzLW9wZXJhbmRzLCBuby1uZXctZnVuYywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbFxyXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgJ3dpdGggKGRhdGEpIHsgcmV0dXJuICcgKyBleHAgKyAnfScpXHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBmbihkYXRhKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoYEVycm9yIHdoZW4gZXZhbHVhdGluZyBmaWx0ZXIgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YClcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0ZW1wbGF0ZSBvcHRpb25zXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVBhdGhcclxuICovXHJcbmNvbnN0IGdldE9wdGlvbnMgPSAodGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IG9wdGlvbnNQYXRoID0gcGF0aC5qb2luKHRlbXBsYXRlUGF0aCwgJ2luZGV4LmpzJylcclxuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zUGF0aCkpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbiAgICBjb25zdCBvcHRpb25zID0gcmVxdWlyZShvcHRpb25zUGF0aClcclxuICAgIHJldHVybiBvcHRpb25zXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB7fVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbmRlciBmaWxlcyB0byBhIHZpcnR1YWwgdHJlZSBvYmplY3RcclxuICogQHBhcmFtIHthcnJheX0gZmlsZXNcclxuICovXHJcbmNvbnN0IHJlbmRlciA9IChmaWxlczogc3RyaW5nW10sIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IGZpbGVUcmVlOiBJRmlsZVRyZWUgPSB7fVxyXG4gIGZpbGVzLmZvckVhY2goKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHNvdXJjZSwgZmlsZVBhdGgpLCAndXRmOCcpXHJcbiAgICBjb25zdCBjb250ZW50ID0gZWpzLnJlbmRlcihmaWxlLCBvcHRpb25zKVxyXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSB8fCAvW15cXHNdLy50ZXN0KGNvbnRlbnQpKSB7XHJcbiAgICAgIGZpbGVUcmVlW2ZpbGVQYXRoXSA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybiBmaWxlVHJlZVxyXG59XHJcblxyXG4vKipcclxuICogV3JpdGUgcmVuZGVyZWQgZmlsZXMnIGNvbnRlbnQgdG8gcmVhbCBmaWxlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJcclxuICogQHBhcmFtIHtvYmplY3R9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCB3cml0ZUZpbGVUcmVlID0gKGRpcjogc3RyaW5nLCBmaWxlczogYW55KTogdm9pZCA9PiB7XHJcbiAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKVxyXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZmlsZXNbbmFtZV0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBmaWx0ZXJzLFxyXG4gIGdlbmVyYXRlLFxyXG4gIHJlbmRlcixcclxuICB3cml0ZUZpbGVUcmVlXHJcbn1cclxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5pdFV0aWxzJ1xyXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXHJcbmltcG9ydCBkb3dubG9hZCBmcm9tICdkb3dubG9hZC1naXQtcmVwbydcclxuaW1wb3J0IHsgdHlwZSBJT3B0aW9ucywgdHlwZSBJUGx1Z2luLCB0eXBlIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgcm0gZnJvbSAncmltcmFmJ1xyXG5cclxuY29uc3QgcnVuID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIC8vIGNvbnN0IG5hbWUgPSBvcHRpb25zLmluUGxhY2UgPyBwYXRoLnJlbGF0aXZlKCcuLi8nLCBwcm9jZXNzLmN3ZCgpKSA6IG9wdGlvbnMucHJvamVjdFxyXG4gIGlmIChvcHRpb25zLm9mZmxpbmUpIHsgLy8gb2ZmbGluZSBtb2RlXHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zLnRlbXBsYXRlKSkge1xyXG4gICAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoYExvY2FsIHRlbXBsYXRlICR7b3B0aW9ucy50ZW1wbGF0ZX0gbm90IGZvdW5kYClcclxuICAgIH1cclxuICB9IGVsc2UgeyAvLyBvbmxpbmUgbW9kZVxyXG4gICAgb3B0aW9ucy50ZW1wbGF0ZSA9ICFvcHRpb25zLmhhc1NsYXNoXHJcbiAgICAgID8gJ1BpY0dvL3BpY2dvLXRlbXBsYXRlLScgKyBvcHRpb25zLnRlbXBsYXRlIC8vIG9mZmljaWFsIHRlbXBsYXRlXHJcbiAgICAgIDogb3B0aW9ucy50ZW1wbGF0ZVxyXG4gICAgZG93bmxvYWRBbmRHZW5lcmF0ZShjdHgsIG9wdGlvbnMpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZG93bmxvYWQgdGVtcGxhdGUgJiBnZW5lcmF0ZVxyXG4gKiBAcGFyYW0geyBQaWNHbyB9IGN0eFxyXG4gKiBAcGFyYW0geyBJT3B0aW9ucyB9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGRvd25sb2FkQW5kR2VuZXJhdGUgPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50bXApKSB7XHJcbiAgICBybS5zeW5jKG9wdGlvbnMudG1wKVxyXG4gIH1cclxuICBjdHgubG9nLmluZm8oJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGluZy4uLicpXHJcbiAgZG93bmxvYWQob3B0aW9ucy50ZW1wbGF0ZSwgb3B0aW9ucy50bXAsIHsgY2xvbmU6IG9wdGlvbnMuY2xvbmUgfSwgKGVycjogRXJyb3IpID0+IHtcclxuICAgIGlmIChlcnIpIHtcclxuICAgICAgY3R4LmxvZy5lcnJvcihlcnIpOyByZXR1cm5cclxuICAgIH1cclxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcclxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbml0JylcclxuICAgICAgLmFyZ3VtZW50cygnPHRlbXBsYXRlPiBbcHJvamVjdF0nKVxyXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxyXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY3JlYXRlIHBpY2dvIHBsdWdpblxcJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzJylcclxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNTbGFzaCA9IHRlbXBsYXRlLmluY2x1ZGVzKCcvJylcclxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHByb2dyYW0uY2xvbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2xpc3QvdGVtcGxhdGVzJywgdGVtcGxhdGUucmVwbGFjZSgvWy86XS9nLCAnLScpKSAvLyBmb3IgY2FjaGluZyB0ZW1wbGF0ZVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb2dyYW0ub2ZmbGluZSkge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlID0gdG1wXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgcHJvamVjdCxcclxuICAgICAgICAgICAgICBoYXNTbGFzaCxcclxuICAgICAgICAgICAgICBpblBsYWNlLFxyXG4gICAgICAgICAgICAgIGRlc3QsXHJcbiAgICAgICAgICAgICAgY2xvbmUsXHJcbiAgICAgICAgICAgICAgdG1wLFxyXG4gICAgICAgICAgICAgIG9mZmxpbmVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcHJvamVjdCBpcyBlbXB0eSBvciBleGlzdFxyXG4gICAgICAgICAgICBpZiAoaW5QbGFjZSB8fCBmcy5leGlzdHNTeW5jKGRlc3QpKSB7XHJcbiAgICAgICAgICAgICAgYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQoW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGluUGxhY2VcclxuICAgICAgICAgICAgICAgICAgICA/ICdHZW5lcmF0ZSBwcm9qZWN0IGluIGN1cnJlbnQgZGlyZWN0b3J5PydcclxuICAgICAgICAgICAgICAgICAgICA6ICdUYXJnZXQgZGlyZWN0b3J5IGV4aXN0cy4gQ29udGludWU/JyxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ29rJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0pLnRoZW4oKGFuc3dlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gcHJvamVjdCBpcyBnaXZlblxyXG4gICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub24oJy0taGVscCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coJ0V4YW1wbGVzOicpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCB3aXRoIGFuIG9mZmljaWFsIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHBsdWdpbiBteS1wcm9qZWN0JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHN0cmFpZ2h0IGZyb20gYSBnaXRodWIgdGVtcGxhdGUnKSlcclxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgdXNlcm5hbWUvcmVwbyBteS1wcm9qZWN0JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpbml0XHJcbiIsImltcG9ydCB7IHR5cGUgSVBsdWdpbiwgdHlwZSBJUGljR28sIHR5cGUgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgaTE4bjogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ2kxOG4nKVxyXG4gICAgICAuYXJndW1lbnRzKCdbbGFuZ10nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NoYW5nZSBsYW5ndWFnZSwgemgtQ04sIHpoLVRXLCBlbicpXHJcbiAgICAgIC5hY3Rpb24oYXN5bmMgKGxhbmc6IHN0cmluZyA9ICcnKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGN0eC5pMThuLmdldExhbmd1YWdlTGlzdCgpXHJcbiAgICAgICAgaWYgKCFsYW5nKSB7XHJcbiAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgIG5hbWU6ICdpMThuJyxcclxuICAgICAgICAgICAgICBjaG9pY2VzOiBsaXN0LFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBsYW5ndWFnZScsXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygnc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8c3RyaW5nPj4ocHJvbXB0cylcclxuICAgICAgICAgIGxhbmcgPSBhbnN3ZXIuaTE4blxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxpc3QuaW5jbHVkZXMobGFuZykpIHtcclxuICAgICAgICAgIGN0eC5sb2cud2FybignTm8gc3VjaCBsYW5ndWFnZScpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN0eC5pMThuLnNldExhbmd1YWdlKGxhbmcpXHJcbiAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoYExhbmd1YWdlIHNldCB0byAke2xhbmd9YClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpMThuXHJcbiIsImltcG9ydCB7IHR5cGUgSVBsdWdpbiwgdHlwZSBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXHJcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcclxuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcclxuaW1wb3J0IGlucXVpcmVyLCB7IHR5cGUgSW5xdWlyZXIgfSBmcm9tICdpbnF1aXJlcidcclxuaW1wb3J0IHsgdHlwZSBJUGx1Z2luLCB0eXBlIElDb21tYW5kZXIsIHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBjb21tYW5kZXJzIGZyb20gJy4uL3BsdWdpbnMvY29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcclxuXHJcbmV4cG9ydCBjbGFzcyBDb21tYW5kZXIgaW1wbGVtZW50cyBJQ29tbWFuZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5hbWUgPSAnY29tbWFuZGVyJ1xyXG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ID0gbmV3IE1hcDxzdHJpbmcsIElQbHVnaW4+KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG5cclxuICBwcm9ncmFtOiBDb21tYW5kXHJcbiAgaW5xdWlyZXI6IElucXVpcmVyXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKVxyXG4gICAgdGhpcy5pbnF1aXJlciA9IGlucXVpcmVyXHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWVcclxuICB9XHJcblxyXG4gIGluaXQgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9ncmFtXHJcbiAgICAgIC52ZXJzaW9uKHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT04sICctdiwgLS12ZXJzaW9uJylcclxuICAgICAgLm9wdGlvbignLWQsIC0tZGVidWcnLCAnZGVidWcgbW9kZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgZGVidWc6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub3B0aW9uKCctcywgLS1zaWxlbnQnLCAnc2lsZW50IG1vZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vbignY29tbWFuZDoqJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihgSW52YWxpZCBjb21tYW5kOiAke3RoaXMucHJvZ3JhbS5hcmdzLmpvaW4oJyAnKX1cXG5TZWUgLS1oZWxwIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLmApXHJcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgLy8gYnVpbHQtaW4gY29tbWFuZHNcclxuICAgIGNvbW1hbmRlcnModGhpcy5jdHgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIGlzIHJlcXVpcmVkIScpXHJcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5oYW5kbGUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbi5oYW5kbGUgbXVzdCBiZSBhIGZ1bmN0aW9uIScpXHJcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBwbHVnaW4gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgY29uc3QgY3VycmVudFBsdWdpbk5hbWUgPSBnZXRDdXJyZW50UGx1Z2luTmFtZSgpXHJcbiAgICBpZiAoY3VycmVudFBsdWdpbk5hbWUgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKGN1cnJlbnRQbHVnaW5OYW1lKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KGN1cnJlbnRQbHVnaW5OYW1lKT8ucHVzaChpZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChjdXJyZW50UGx1Z2luTmFtZSwgW2lkXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlciAocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcclxuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXHJcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRMaXN0KCkuZm9yRWFjaCgoaXRlbTogSVBsdWdpbikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGl0ZW0uaGFuZGxlKHRoaXMuY3R4KVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCAoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXHJcbiAgfVxyXG5cclxuICBnZXRMaXN0ICgpOiBJUGx1Z2luW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXHJcbiAgfVxyXG5cclxuICBnZXRJZExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbW1hbmRlclxyXG4iLCJpbXBvcnQgcGx1Z2luSGFuZGxlciBmcm9tICcuL3BsdWdpbkhhbmRsZXInXHJcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnXHJcbmltcG9ydCB1cGxvYWQgZnJvbSAnLi91cGxvYWQnXHJcbmltcG9ydCBzZXR0aW5nIGZyb20gJy4vc2V0dGluZydcclxuaW1wb3J0IHVzZSBmcm9tICcuL3VzZSdcclxuaW1wb3J0IHByb3h5IGZyb20gJy4vcHJveHknXHJcbmltcG9ydCBpbml0IGZyb20gJy4vaW5pdCdcclxuaW1wb3J0IGkxOG4gZnJvbSAnLi9pMThuJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgKGN0eDogSVBpY0dvKTogdm9pZCA9PiB7XHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncGx1Z2luSGFuZGxlcicsIHBsdWdpbkhhbmRsZXIpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3NldHRpbmcnLCBzZXR0aW5nKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VwbG9hZCcsIHVwbG9hZClcclxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigncHJveHknLCBwcm94eSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpbml0JywgaW5pdClcclxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcclxufVxyXG4iLCJleHBvcnQgZW51bSBJTG9nVHlwZSB7XHJcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcclxuICBpbmZvID0gJ2luZm8nLFxyXG4gIHdhcm4gPSAnd2FybicsXHJcbiAgZXJyb3IgPSAnZXJyb3InXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIGJ5IHVzZXJzXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcclxuICBVUExPQURfUFJPR1JFU1MgPSAndXBsb2FkUHJvZ3Jlc3MnLFxyXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxyXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcclxuICBCRUZPUkVfVVBMT0FEID0gJ2JlZm9yZVVwbG9hZCcsXHJcbiAgQUZURVJfVVBMT0FEID0gJ2FmdGVyVXBsb2FkJyxcclxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXHJcbiAgSU5TVEFMTCA9ICdpbnN0YWxsJyxcclxuICBVTklOU1RBTEwgPSAndW5pbnN0YWxsJyxcclxuICBVUERBVEUgPSAndXBkYXRlJyxcclxuICBOT1RJRklDQVRJT04gPSAnbm90aWZpY2F0aW9uJ1xyXG59XHJcblxyXG4vKipcclxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBvbmx5IGJ5IHBpY2dvXHJcbiAqL1xyXG5leHBvcnQgZW51bSBJQnVzRXZlbnQge1xyXG4gIENPTkZJR19DSEFOR0UgPSAnQ09ORklHX0NIQU5HRSdcclxufVxyXG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJ1xyXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7XHJcbiAgdHlwZSBJTG9nQXJndlR5cGUsXHJcbiAgdHlwZSBJTG9nQXJndlR5cGVXaXRoRXJyb3IsXHJcbiAgdHlwZSBVbmRlZmluYWJsZSxcclxuICB0eXBlIElMb2dDb2xvcixcclxuICB0eXBlIElMb2dnZXIsXHJcbiAgdHlwZSBJUGljR29cclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XHJcbiAgICBbSUxvZ1R5cGUuc3VjY2Vzc106ICdncmVlbicsXHJcbiAgICBbSUxvZ1R5cGUuaW5mb106ICdibHVlJyxcclxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXHJcbiAgICBbSUxvZ1R5cGUuZXJyb3JdOiAncmVkJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgbG9nTGV2ZWwhOiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIHByaXZhdGUgbG9nUGF0aCE6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTG9nICh0eXBlOiBJTG9nVHlwZSwgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgLy8gY2hlY2sgY29uZmlnLnNpbGVudFxyXG4gICAgdGhpcy5sb2dMZXZlbCA9IHRoaXMuY3R4LmdldENvbmZpZygnc2V0dGluZ3MubG9nTGV2ZWwnKVxyXG4gICAgaWYgKCF0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NpbGVudCcpICYmIHRoaXMuY2hlY2tMb2dMZXZlbCh0eXBlLCB0aGlzLmxvZ0xldmVsKSkge1xyXG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcclxuICAgICAgY29uc29sZS5sb2cobG9nSGVhZGVyLCAuLi5tc2cpXHJcbiAgICAgIHRoaXMubG9nUGF0aCA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MubG9nUGF0aCcpIHx8IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnLi9waWNsaXN0LmxvZycpXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIGZpeCBsb2cgZmlsZSBpcyB0b28gbGFyZ2UsIG5vdyB0aGUgbG9nIGZpbGUncyBkZWZhdWx0IHNpemUgaXMgMTAgTUJcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jaGVja0xvZ0ZpbGVJc0xhcmdlKHRoaXMubG9nUGF0aClcclxuICAgICAgICAgIGlmIChyZXN1bHQuaXNMYXJnZSkge1xyXG4gICAgICAgICAgICBjb25zdCB3YXJuaW5nTXNnID0gYExvZyBmaWxlIGlzIHRvbyBsYXJnZSAoPiAkeyhyZXN1bHQubG9nRmlsZVNpemVMaW1pdCEpIC8gMTAyNCAvIDEwMjQgfHwgJzEwJ30gTUIpLCByZWNyZWF0ZSBsb2cgZmlsZWBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdbUGljTGlzdCBXQVJOXTonKSwgd2FybmluZ01zZylcclxuICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZUxvZ0ZpbGUodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgICBtc2cudW5zaGlmdCh3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVXcml0ZUxvZyh0aGlzLmxvZ1BhdGgsIHR5cGUsIC4uLm1zZylcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB3aHk/Pz9cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiBjaGVja2luZyBsb2cgZmlsZSBzaXplJywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrTG9nRmlsZUlzTGFyZ2UgKGxvZ1BhdGg6IHN0cmluZyk6IHtcclxuICAgIGlzTGFyZ2U6IGJvb2xlYW5cclxuICAgIGxvZ0ZpbGVTaXplPzogbnVtYmVyXHJcbiAgICBsb2dGaWxlU2l6ZUxpbWl0PzogbnVtYmVyXHJcbiAgfSB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZSA9IGZzLnN0YXRTeW5jKGxvZ1BhdGgpLnNpemVcclxuICAgICAgY29uc3QgbG9nRmlsZVNpemVMaW1pdCA9IGZvcmNlTnVtYmVyKHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxudW1iZXI+Pignc2V0dGluZ3MubG9nRmlsZVNpemVMaW1pdCcpIHx8IDEwKSAqIDEwMjQgKiAxMDI0IC8vIDEwIE1CIGRlZmF1bHRcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc0xhcmdlOiBsb2dGaWxlU2l6ZSA+IGxvZ0ZpbGVTaXplTGltaXQsXHJcbiAgICAgICAgbG9nRmlsZVNpemUsXHJcbiAgICAgICAgbG9nRmlsZVNpemVMaW1pdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpc0xhcmdlOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZUxvZ0ZpbGUgKGxvZ1BhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcclxuICAgICAgZnMudW5saW5rU3luYyhsb2dQYXRoKVxyXG4gICAgICBmcy5jcmVhdGVGaWxlU3luYyhsb2dQYXRoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVXcml0ZUxvZyAobG9nUGF0aDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBsb2cgPSBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpfSBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dIGBcclxuICAgICAgbXNnLmZvckVhY2goKGl0ZW06IElMb2dBcmd2VHlwZVdpdGhFcnJvcikgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgbG9nICs9IGBcXG4tLS0tLS1FcnJvciBTdGFjayBCZWdpbi0tLS0tLVxcbiR7dXRpbC5mb3JtYXQoaXRlbT8uc3RhY2spfVxcbi0tLS0tLS1FcnJvciBTdGFjayBFbmQtLS0tLS0tIGBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSwgbnVsbCwgMilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxvZyArPSBgJHtpdGVtIGFzIHN0cmluZ30gYFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgbG9nICs9ICdcXG4nXHJcbiAgICAgIC8vIEEgc3luY2hyb25pemVkIGFwcHJvYWNoIHRvIGF2b2lkIGxvZyBtc2cgc2VxdWVuY2UgZXJyb3JzXHJcbiAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKGxvZ1BhdGgsIGxvZylcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIHdyaXRpbmcgbG9nIGZpbGUnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0xvZ0xldmVsICh0eXBlOiBzdHJpbmcsIGxldmVsOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGxldmVsID09PSB1bmRlZmluZWQgfHwgbGV2ZWwgPT09ICdhbGwnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcclxuICAgICAgcmV0dXJuIGxldmVsLnNvbWUoKGl0ZW06IHN0cmluZykgPT4gKGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHR5cGUgPT09IGxldmVsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWNjZXNzICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5zdWNjZXNzLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBpbmZvICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBlcnJvciAoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuZXJyb3IsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIHdhcm4gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLndhcm4sIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGRlYnVnICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXYoKSkge1xyXG4gICAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMb2dnZXJcclxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xyXG5pbXBvcnQgeyB0eXBlIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucywgdHlwZSBJTGlmZWN5Y2xlUGx1Z2lucywgdHlwZSBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbiwgdHlwZSBVbmRlZmluYWJsZSwgdHlwZSBJSW1nSW5mbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBnZXRVUkxGaWxlLCBoYW5kbGVVcmxFbmNvZGUsIGltYWdlUHJvY2VzcywgaXNVcmwsIG5lZWRDb21wcmVzcywgbmVlZEFkZFdhdGVybWFyaywgaW1hZ2VBZGRXYXRlck1hcmssIHJlbW92ZUV4aWYsIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZywgZ2V0Q29udmVydGVkRm9ybWF0IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4uL3V0aWxzL2NyZWF0ZUNvbnRleHQnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCBoZWljQ29udmVydCBmcm9tICdoZWljLWNvbnZlcnQnXHJcblxyXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0dGZMaW5rOiBzdHJpbmcgPSAnaHR0cHM6Ly9yZWxlYXNlLnBpY2xpc3QuY24vc2ltaGVpLnR0ZidcclxuICB0dGZQYXRoOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAncGljbGlzdFRlbXAnKVxyXG4gICAgY29uc3QgaW1nRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJylcclxuICAgIGZzLmVuc3VyZURpclN5bmMoaW1nRmlsZVBhdGgpXHJcbiAgICBmcy5lbXB0eURpclN5bmModGVtcEZpbGVQYXRoKVxyXG4gICAgdGhpcy50dGZQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnYXNzZXRzJywgJ3NpbWhlaS50dGYnKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZG93bmxvYWRUVEYgKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gcGF0aC5kaXJuYW1lKHRoaXMudHRmUGF0aClcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXREaXIpKSB7XHJcbiAgICAgIGZzLm1rZGlyU3luYyhvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXHJcbiAgICB9XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy50dGZQYXRoKSkge1xyXG4gICAgICB0aGlzLmN0eC5sb2cuaW5mbygnRG93bmxvYWQgdHRmIGZpbGUuJylcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodGhpcy50dGZMaW5rLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy50dGZQYXRoLCByZXMuZGF0YSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuaW5mbygnRG93bmxvYWQgdHRmIGZpbGUgc3VjY2Vzcy4nKVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLicpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdGFydCAoaW5wdXQ6IGFueVtdKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIC8vIGVuc3VyZSBldmVyeSB1cGxvYWQgcHJvY2VzcyBoYXMgYW4gdW5pcXVlIGNvbnRleHRcclxuICAgIGNvbnN0IGN0eCA9IGNyZWF0ZUNvbnRleHQodGhpcy5jdHgpXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBpbWFnZXMgaW5wdXRcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgbXVzdCBiZSBhbiBhcnJheS4nKVxyXG4gICAgICB9XHJcbiAgICAgIGN0eC5pbnB1dCA9IGlucHV0XHJcbiAgICAgIGN0eC5yYXdJbnB1dFBhdGggPSBbXSBhcyBzdHJpbmdbXVxyXG4gICAgICBjdHgucmF3SW5wdXQgPSBjbG9uZURlZXAoaW5wdXQpXHJcbiAgICAgIGN0eC5vdXRwdXQgPSBbXSBhcyBJSW1nSW5mb1tdXHJcbiAgICAgIGNvbnN0IGNvbXByZXNzT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJylcclxuICAgICAgY29uc3QgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXHJcbiAgICAgIGNvbnN0IHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQodHlwZSlcclxuICAgICAgaWYgKCF1cGxvYWRlciAmJiBjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgICBjb21wcmVzc09wdGlvbnMucGljQmVkID0gJ3NtbXMnXHJcbiAgICAgIH0gZWxzZSBpZiAoY29tcHJlc3NPcHRpb25zKSB7XHJcbiAgICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9IHR5cGVcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB3YXRlcm1hcmtPcHRpb25zID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpXHJcbiAgICAgIGlmIChjb21wcmVzc09wdGlvbnMgfHwgd2F0ZXJtYXJrT3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGVtcEZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgZnMubWtkaXJTeW5jKHRlbXBGaWxlUGF0aClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd2F0ZXJtYXJrTXNnID0gJ0FkZCB3YXRlcm1hcmsgdG8gaW1hZ2UnXHJcbiAgICAgICAgY29uc3QgY29tcHJlc3NNc2cgPSAnQ29tcHJlc3Mgb3IgY29udmVydCBpbWFnZSdcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cclxuICAgICAgICAgIGlmIChpc1VybChpdGVtKSkge1xyXG4gICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBpdGVtXHJcbiAgICAgICAgICAgIGluZm8gPSBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eClcclxuICAgICAgICAgICAgaWYgKGluZm8uc3VjY2VzcyAmJiBpbmZvLmJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlclxyXG4gICAgICAgICAgICAgIGxldCBpc1NraXAgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIGlmIChuZWVkQWRkV2F0ZXJtYXJrKHdhdGVybWFya09wdGlvbnMsIGluZm8uZXh0bmFtZSA/PyAnJykpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKHdhdGVybWFya09wdGlvbnM/LndhdGVybWFya0ZvbnRQYXRoIHx8IHdhdGVybWFya09wdGlvbnM/LndhdGVybWFya1R5cGUgPT09ICdpbWFnZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXHJcbiAgICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5sb2cud2FybignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLCBza2lwIGFkZCB3YXRlcm1hcmsuJylcclxuICAgICAgICAgICAgICAgICAgICBpc1NraXAgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghaXNTa2lwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyh3YXRlcm1hcmtNc2cpXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VBZGRXYXRlck1hcmsoaW5mby5idWZmZXIsIHdhdGVybWFya09wdGlvbnMsIHRoaXMudHRmUGF0aCwgY3R4LmxvZylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRDb21wcmVzcyhjb21wcmVzc09wdGlvbnMsIGluZm8uZXh0bmFtZSA/PyAnJykpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKHRyYW5zZm9ybWVkQnVmZmVyID8/IGluZm8uYnVmZmVyLCBjb21wcmVzc09wdGlvbnMsIGluZm8uZXh0bmFtZSA/PyAnJywgY3R4LmxvZylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdSZW1vdmUgZXhpZiBpbmZvLicpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IHJlbW92ZUV4aWYoaW5mby5idWZmZXIsIGluZm8uZXh0bmFtZSA/PyAnJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVkQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3RXh0XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3NPcHRpb25zPy5pc0NvbnZlcnQpIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gZ2V0Q29udmVydGVkRm9ybWF0KGNvbXByZXNzT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gaW5mby5leHRuYW1lID8/ICcnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgPyBgJHtwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSl9JHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGl0ZW0pLCBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKSlcclxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZvLnJlYXNvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cclxuICAgICAgICAgICAgbGV0IGlzU2tpcCA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmIChuZWVkQWRkV2F0ZXJtYXJrKHdhdGVybWFya09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSkpIHtcclxuICAgICAgICAgICAgICBpZiAoISh3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtGb250UGF0aCB8fCB3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICAgIGlzU2tpcCA9IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCFpc1NraXApIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyh3YXRlcm1hcmtNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgd2F0ZXJtYXJrT3B0aW9ucywgdGhpcy50dGZQYXRoLCBjdHgubG9nKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmVlZENvbXByZXNzKGNvbXByZXNzT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKSkge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcclxuICAgICAgICAgICAgICBpZiAocGF0aC5leHRuYW1lKGl0ZW0pID09PSAnLmhlaWMnIHx8IHBhdGguZXh0bmFtZShpdGVtKSA9PT0gJy5oZWlmJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpY0J1ZmZlciA9IGZzLnJlYWRGaWxlU3luYyhpdGVtKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpY1Jlc3VsdCA9IGF3YWl0IGhlaWNDb252ZXJ0KHtcclxuICAgICAgICAgICAgICAgICAgYnVmZmVyOiBoZWljQnVmZmVyLFxyXG4gICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdKUEVHJyxcclxuICAgICAgICAgICAgICAgICAgcXVhbGl0eTogMVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBIZWljQ29udmVydEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9LmpwZ2ApXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUsIEJ1ZmZlci5mcm9tKGhlaWNSZXN1bHQpKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3MoZnMucmVhZEZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUpLCBjb21wcmVzc09wdGlvbnMsICcuanBnJywgY3R4LmxvZylcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3ModHJhbnNmb3JtZWRCdWZmZXIgPz8gZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCBjb21wcmVzc09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSwgY3R4LmxvZylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihmcy5yZWFkRmlsZVN5bmMoaXRlbSksIHBhdGguZXh0bmFtZShpdGVtKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgbmV3RXh0XHJcbiAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBnZXRDb252ZXJ0ZWRGb3JtYXQoY29tcHJlc3NPcHRpb25zLCBwYXRoLmV4dG5hbWUoaXRlbSkpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld0V4dCA9IHBhdGguZXh0bmFtZShpdGVtKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGl0ZW0pLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcclxuICAgICAgICAgICAgICBjdHguaW5wdXRbaW5kZXhdID0gdGVtcEZpbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjdHguaW5wdXQpIHtcclxuICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGgucHVzaChpdGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9UcmFuc2Zvcm0oY3R4KVxyXG4gICAgICBjb25zdCByZW5hbWVDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cclxuICAgICAgaWYgKHJlbmFtZUNvbmZpZy5lbmFibGUpIHtcclxuICAgICAgICBjb25zdCBmb3JtYXQgPSByZW5hbWVDb25maWcuZm9ybWF0IHx8ICd7ZmlsZW5hbWV9J1xyXG4gICAgICAgIGN0eC5vdXRwdXQgPSBjdHgub3V0cHV0Lm1hcCgoaXRlbTogSUltZ0luZm8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGl0ZW0uZmlsZU5hbWVcclxuICAgICAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcoY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdLCBmb3JtYXQsIHVuZGVmaW5lZCwgaXRlbS5iYXNlNjRJbWFnZSA/IGl0ZW0uYmFzZTY0SW1hZ2UgOiBpdGVtLmJ1ZmZlcilcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXHJcbiAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVVcGxvYWQoY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcclxuICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XHJcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF0cmFuc2Zvcm1lcikge1xyXG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB0cmFuc2Zvcm1lciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHRyYW5zZm9ybWVyIC0gcGF0aGApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9VUExPQUQsIGN0eClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGxldCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgIGxldCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgaWYgKCF1cGxvYWRlcikge1xyXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdXBsb2FkZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB1cGxvYWRlciAtIHNtbXNgKVxyXG4gICAgICB0eXBlID0gJ3NtbXMnXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xyXG4gICAgICB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KCdzbW1zJylcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdXBsb2FkZXI/LmhhbmRsZShjdHgpXHJcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XHJcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIGxldCBtc2cgPSAnJ1xyXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcclxuICAgIGNvbnN0IGlzRW5jb2RlT3V0cHV0VVJMID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuY29kZU91dHB1dFVSTCcpID09PSB0cnVlXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbXNnICs9IGlzRW5jb2RlT3V0cHV0VVJMID8gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISkgOiBjdHgub3V0cHV0W2ldLmltZ1VybCFcclxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgbXNnICs9ICdcXG4nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxyXG4gICAgfVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zIChsaWZlQ3ljbGVQbHVnaW5zOiBJTGlmZWN5Y2xlUGx1Z2lucywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXHJcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcclxuICAgIGNvbnN0IGxpZmVDeWNsZU5hbWUgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldE5hbWUoKVxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxyXG4gICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0pKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG4vKipcclxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXHJcbiAqIEBwYXJhbSBjdHhcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgY29uZmlnUGF0aDogY3R4LmNvbmZpZ1BhdGgsXHJcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcclxuICAgIGxvZzogY3R4LmxvZyxcclxuICAgIGNtZDogY3R4LmNtZCxcclxuICAgIG91dHB1dDogW10sXHJcbiAgICBpbnB1dDogW10sXHJcbiAgICByYXdJbnB1dDogW10sXHJcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXHJcbiAgICBwbHVnaW5IYW5kbGVyOiBjdHgucGx1Z2luSGFuZGxlcixcclxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxyXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxyXG4gICAgVkVSU0lPTjogY3R4LlZFUlNJT04sXHJcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxyXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXHJcbiAgICBpMThuOiBjdHguaTE4bixcclxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVDb25maWc6IGN0eC5yZW1vdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdXBsb2FkOiBjdHgudXBsb2FkLmJpbmQoY3R4KSxcclxuICAgIGFkZExpc3RlbmVyOiBjdHguYWRkTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXHJcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVMaXN0ZW5lcjogY3R4LnJlbW92ZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgc2V0TWF4TGlzdGVuZXJzOiBjdHguc2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgcmF3TGlzdGVuZXJzOiBjdHgucmF3TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRMaXN0ZW5lcjogY3R4LnByZXBlbmRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJU21tc0NvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyLCBhcGlUb2tlbjogc3RyaW5nLCBiYWNrdXBEb21haW4gPSAnJyk6IElPbGRSZXFPcHRpb25zID0+IHtcclxuICBjb25zdCBkb21haW4gPSBiYWNrdXBEb21haW4gfHwgJ3NtLm1zJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtkb21haW59L2FwaS92Mi91cGxvYWRgLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXBpVG9rZW5cclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBzbWZpbGU6IHtcclxuICAgICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBzc2w6ICd0cnVlJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBzbW1zQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJylcclxuICBpZiAoIXNtbXNDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXHJcbiAgfVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgaW1hZ2UsIHNtbXNDb25maWc/LnRva2VuLCBzbW1zQ29uZmlnPy5iYWNrdXBEb21haW4pXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keS5jb2RlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLnVybFxyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEuaGFzaFxyXG4gICAgICAgIH0gZWxzZSBpZiAoYm9keS5jb2RlID09PSAnaW1hZ2VfcmVwZWF0ZWQnICYmIHR5cGVvZiBib2R5LmltYWdlcyA9PT0gJ3N0cmluZycpIHsgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndG9rZW4nLFxyXG4gICAgICBtZXNzYWdlOiAnYXBpIHRva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYmFja3VwRG9tYWluJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4nKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYmFja3VwRG9tYWluIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdzbW1zJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVMnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJVGN5dW5Db25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTaWduYXR1cmUge1xyXG4gIHNpZ25hdHVyZTogc3RyaW5nXHJcbiAgYXBwSWQ6IHN0cmluZ1xyXG4gIGJ1Y2tldDogc3RyaW5nXHJcbiAgc2lnblRpbWU6IHN0cmluZ1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBJU2lnbmF0dXJlID0+IHtcclxuICBjb25zdCBzZWNyZXRJZCA9IG9wdGlvbnMuc2VjcmV0SWRcclxuICBjb25zdCBzZWNyZXRLZXkgPSBvcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IGFwcElkID0gb3B0aW9ucy5hcHBJZFxyXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XHJcbiAgbGV0IHNpZ25hdHVyZVxyXG4gIGxldCBzaWduVGltZTogc3RyaW5nID0gJydcclxuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwKVxyXG4gICAgY29uc3QgY3VycmVudCA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDFcclxuICAgIGNvbnN0IGV4cGlyZWQgPSBjdXJyZW50ICsgMzYwMFxyXG5cclxuICAgIGNvbnN0IG11bHRpU2lnbmF0dXJlID0gYGE9JHthcHBJZH0mYj0ke2J1Y2tldH0maz0ke3NlY3JldElkfSZlPSR7ZXhwaXJlZH0mdD0ke2N1cnJlbnR9JnI9JHtyYW5kb219JmY9YFxyXG5cclxuICAgIGNvbnN0IHNpZ25IZXhLZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKG11bHRpU2lnbmF0dXJlKS5kaWdlc3QoKVxyXG4gICAgY29uc3QgdGVtcFN0cmluZyA9IEJ1ZmZlci5jb25jYXQoW3NpZ25IZXhLZXksIEJ1ZmZlci5mcm9tKG11bHRpU2lnbmF0dXJlKV0pXHJcbiAgICBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZW1wU3RyaW5nKS50b1N0cmluZygnYmFzZTY0JylcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi83Nzc4I3NpZ25hdHVyZVxyXG4gICAgY29uc3QgdG9kYXkgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcclxuICAgIGNvbnN0IHRvbW9ycm93ID0gdG9kYXkgKyA4NjQwMFxyXG4gICAgc2lnblRpbWUgPSBgJHt0b2RheX07JHt0b21vcnJvd31gXHJcbiAgICBjb25zdCBzaWduS2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShzaWduVGltZSkuZGlnZXN0KCdoZXgnKVxyXG4gICAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8gb3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcclxuICAgIGNvbnN0IGh0dHBTdHJpbmcgPSBgcHV0XFxuLyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9XFxuXFxuaG9zdD0ke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fVxcbmBcclxuICAgIGNvbnN0IHNoYTFlZEh0dHBTdHJpbmcgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShodHRwU3RyaW5nKS5kaWdlc3QoJ2hleCcpXHJcbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBgc2hhMVxcbiR7c2lnblRpbWV9XFxuJHtzaGExZWRIdHRwU3RyaW5nfVxcbmBcclxuICAgIHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2lnbktleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KCdoZXgnKVxyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgc2lnbmF0dXJlLFxyXG4gICAgYXBwSWQsXHJcbiAgICBidWNrZXQsXHJcbiAgICBzaWduVGltZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IElTaWduYXR1cmUsIGltYWdlOiBCdWZmZXIsIHZlcnNpb246IHN0cmluZyk6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgY29uc3QgYXJlYSA9IG9wdGlvbnMuYXJlYVxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGhcclxuICBpZiAoIW9wdGlvbnMudmVyc2lvbiB8fCBvcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICB1cmw6IGBodHRwOi8vJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbS9maWxlcy92Mi8ke3NpZ25hdHVyZS5hcHBJZH0vJHtzaWduYXR1cmUuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2ZpbGVOYW1lfWAsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICBIb3N0OiBgJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbWAsXHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLnNpZ25hdHVyZSxcclxuICAgICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxyXG4gICAgICB9LFxyXG4gICAgICBmb3JtRGF0YToge1xyXG4gICAgICAgIG9wOiAndXBsb2FkJyxcclxuICAgICAgICBmaWxlY29udGVudDogaW1hZ2VcclxuICAgICAgfSxcclxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8gb3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgIHVybDogYGh0dHA6Ly8ke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YCxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fWAsXHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYHEtc2lnbi1hbGdvcml0aG09c2hhMSZxLWFrPSR7b3B0aW9ucy5zZWNyZXRJZH0mcS1zaWduLXRpbWU9JHtzaWduYXR1cmUuc2lnblRpbWV9JnEta2V5LXRpbWU9JHtzaWduYXR1cmUuc2lnblRpbWV9JnEtaGVhZGVyLWxpc3Q9aG9zdCZxLXVybC1wYXJhbS1saXN0PSZxLXNpZ25hdHVyZT0ke3NpZ25hdHVyZS5zaWduYXR1cmV9YCxcclxuICAgICAgICBjb250ZW50VHlwZTogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxyXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBpbWFnZSxcclxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHRjWXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVRjeXVuQ29uZmlnPigncGljQmVkLnRjeXVuJylcclxuICBpZiAoIXRjWXVuT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgdGVuY2VudCBDT1MgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB0Y1l1bk9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gdGNZdW5PcHRpb25zLnBhdGggPz8gJydcclxuICAgIGNvbnN0IHVzZVY0ID0gIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGlmICghc2lnbmF0dXJlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSwgY3R4LkdVSV9WRVJTSU9OIHx8IGN0eC5WRVJTSU9OKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcclxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcclxuICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICBtc2c6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0FVVEhfRkFJTEVEJyksXHJcbiAgICAgICAgICAgICAgICBlcnJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgbGV0IGJvZHlcclxuICAgICAgICBpZiAodXNlVjQgJiYgdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYm9keSA9IHJlc1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgIGlmIChib2R5Py5ib2R5Py5lcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgYm9keS5ib2R5LmVyclxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHk/LmJvZHk/Lm1zZyB8fCBib2R5Py5ib2R5Py5tZXNzYWdlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25VcmwgPSB0Y1l1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgIGNvbnN0IHNsaW0gPSB0Y1l1bk9wdGlvbnMuc2xpbSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhIXRjWXVuT3B0aW9ucy5zbGltXHJcbiAgICAgICAgaWYgKHVzZVY0ICYmIGJvZHkubWVzc2FnZSA9PT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke3BhdGh9JHtpbWcuZmlsZU5hbWV9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2JvZHkuZGF0YS5zb3VyY2VfdXJsIGFzIHN0cmluZ30ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdXNlVjQgJiYgYm9keSAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IHRjWXVuT3B0aW9ucy5lbmRwb2ludCA/IHRjWXVuT3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHt0Y1l1bk9wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHt0Y1l1bk9wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5ib2R5Lm1zZylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNsaW0pIHtcclxuICAgICAgICAgIGlmIChvcHRpb25VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnJmltYWdlU2xpbSdcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgKz0gJz9pbWFnZVNsaW0nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGlmICghdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShlcnIuZXJyb3IpXHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgICAgY29kZTogYm9keS5jb2RlIGFzIHN0cmluZ1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0ZXh0OiAnaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NDMyJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVRjeXVuQ29uZmlnPigncGljQmVkLnRjeXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJykgfSxcclxuICAgICAgYWxpYXM6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTicpLFxyXG4gICAgICBjaG9pY2VzOiBbJ3Y0JywgJ3Y1J10sXHJcbiAgICAgIGRlZmF1bHQ6ICd2NScsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldElkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldEtleScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXBwSWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXBwSWQgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2xpbScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zbGltID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICEhdXNlckNvbmZpZy5zbGltLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBjb25maXJtVGV4dCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTScpIH0sXHJcbiAgICAgIGdldCBjYW5jZWxUZXh0ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwnKSB9LFxyXG4gICAgICBnZXQgdGlwcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQJykgfVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3RjeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSUdpdGh1YkNvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9uc1dpdGhKU09OIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmZ1bmN0aW9uIGJ1aWxkR2l0aHViQXBpVXJsIChyZXBvOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZywgZXh0cmE6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcclxuICBjb25zdCBlbmNvZGVkUGF0aCA9IGVuY29kZVVSSUNvbXBvbmVudChwYXRoKVxyXG4gIGNvbnN0IGVuY29kZWRGaWxlTmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSlcclxuICByZXR1cm4gYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvfS9jb250ZW50cy8ke2VuY29kZWRQYXRofSR7ZW5jb2RlZEZpbGVOYW1lfSR7ZXh0cmF9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnLCBkYXRhOiBhbnkpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCB7IHRva2VuLCByZXBvIH0gPSBvcHRpb25zXHJcbiAgY29uc3QgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYnVpbGRHaXRodWJBcGlVcmwocmVwbywgb3B0aW9ucy5wYXRoIHx8ICcnLCBmaWxlTmFtZSksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGVcclxuICAgIH0sXHJcbiAgICBib2R5OiBkYXRhLFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH0gYXMgY29uc3RcclxufVxyXG5cclxuY29uc3QgZ2V0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnKTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbywgYnJhbmNoIH0gPSBvcHRpb25zXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IGJ1aWxkR2l0aHViQXBpVXJsKHJlcG8sIG9wdGlvbnMucGF0aCB8fCAnJywgZmlsZU5hbWUsIGA/cmVmPSR7YnJhbmNofWApLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xyXG4gICAgfSxcclxuICAgIGpzb246IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgZ2l0aHViT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKVxyXG4gIGlmICghZ2l0aHViT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgZ2l0aHViIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgdXBsb2FkUGF0aCA9IGdpdGh1Yk9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgbWVzc2FnZTogJ1VwbG9hZCBieSBQaWNMaXN0JyxcclxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXHJcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcclxuICAgICAgICAgIHBhdGg6IHVwbG9hZFBhdGggKyBlbmNvZGVVUkkoaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zLCBkYXRhKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBib2R5OiB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICBkb3dubG9hZF91cmw6IHN0cmluZ1xyXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgICAgaWYgKGJvZHkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQodXBsb2FkUGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpIDogYm9keS5jb250ZW50LmRvd25sb2FkX3VybFxyXG4gICAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuY29udGVudC5zaGFcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgICAgaWYgKGVyci5zdGF0dXNDb2RlID09PSA0MjIpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRPcHRpb25zKGltZy5maWxlTmFtZSwgZ2l0aHViT3B0aW9ucykpIGFzIGFueVxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBpbWcuaGFzaCA9IHJlcy5zaGFcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQodXBsb2FkUGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpIDogcmVzLmRvd25sb2FkX3VybFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR2V0IENvbnRlbnRzIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElHaXRodWJDb25maWc+KCdwaWNCZWQuZ2l0aHViJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlcG8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVwbyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdicmFuY2gnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnJhbmNoIHx8ICdtYXN0ZXInLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignZ2l0aHViJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBxaW5pdSBmcm9tICdxaW5pdSdcclxuaW1wb3J0IHsgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElRaW5pdUNvbmZpZywgdHlwZSBJUGljR28sIHR5cGUgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuZnVuY3Rpb24gcG9zdE9wdGlvbnMgKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XHJcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgVXBUb2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWdCYXNlNjRcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlbGVjdEFyZWEgKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9rZW4gKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gcWluaXVPcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIHNjb3BlOiBxaW5pdU9wdGlvbnMuYnVja2V0XHJcbiAgfVxyXG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcclxuICByZXR1cm4gcHV0UG9saWN5LnVwbG9hZFRva2VuKG1hYylcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXHJcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHFpbml1IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxyXG4gICAgICAgICAgY29uc3QgdXJsT3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtib2R5LmtleSBhcyBzdHJpbmd9JHt1cmxPcHRpb25zfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjdHgubG9nLmVycm9yKCdxaW5pdSBlcnJvcicsIGJvZHkpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXHJcbiAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9TRUNSRVRLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJSW1ndXJDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnMsIHR5cGUgSUZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4uc3RhcnRzV2l0aCgnQmVhcmVyJykgPyBhY2Nlc3NUb2tlbiA6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIDogJydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJSW1ndXJDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xyXG4gIGNvbnN0IGNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZCB8fCAnJ1xyXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xyXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gZm9ybWF0QWNjZXNzVG9rZW4ob3B0aW9ucy5hY2Nlc3NUb2tlbiB8fCAnJylcclxuICBjb25zdCBhbGJ1bSA9IG9wdGlvbnMuYWxidW0gfHwgJydcclxuICBsZXQgYXV0aG9yaXphdGlvblxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbikge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGFjY2Vzc1Rva2VuXHJcbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGBDbGllbnQtSUQgJHtjbGllbnRJZH1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxyXG4gIH1cclxuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2ltYWdlJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgSG9zdDogJ2FwaS5pbWd1ci5jb20nLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXHJcbiAgICAgIHR5cGU6ICdiYXNlNjQnLFxyXG4gICAgICBuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xyXG4gICAgbGV0IGluaXRQYWdlcyA9IDBcclxuICAgIGxldCByZXNcclxuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xyXG4gICAgZG8ge1xyXG4gICAgICBjb25zdCBnZXRBbGJ1bUhhc2hPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2FjY291bnQvJHt1c2VybmFtZX0vYWxidW1zLyR7aW5pdFBhZ2VzfWAsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICAgICAgZ2V0QWxidW1IYXNoT3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICAgICAgfVxyXG4gICAgICByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRBbGJ1bUhhc2hPcHRpb25zKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcclxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhbGJ1bUxpc3QpIHtcclxuICAgICAgICBpZiAoaXRlbS50aXRsZSA9PT0gYWxidW0pIHtcclxuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGluaXRQYWdlcysrXHJcbiAgICB9IHdoaWxlIChyZXMuYm9keS5kYXRhLmxlbmd0aCA+IDApXHJcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhLmFsYnVtID0gYWxidW1IYXNoXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgaW1ndXJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKVxyXG4gIGlmICghaW1ndXJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBpbWd1ciBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBvc3RPcHRpb25zKGN0eCwgaW1ndXJPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcclxuICAgICAgICBpZiAoYm9keS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS5saW5rXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXHJcbiAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy5pbWd1ci5jb20vYXBpL2Vycm5vLydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHN0cmluZyB8IElFcnJvclxyXG4gICAgdGhyb3cgZXJyPy5yZXNwb25zZT8uZGF0YSB8fCBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUltZ3VyQ29uZmlnPigncGljQmVkLmltZ3VyJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NsaWVudElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzVG9rZW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzVG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FsYnVtJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignaW1ndXInLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElBbGl5dW5Db25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBnZXRDdXJyZW50VVRDRGF0ZSA9ICgpOiBzdHJpbmcgPT4gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcblxyXG4vLyBnZW5lcmF0ZSBPU1Mgc2lnbmF0dXJlXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IGRhdGUgPSBnZXRDdXJyZW50VVRDRGF0ZSgpXHJcbiAgY29uc3QgbWltZVR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICBjb25zdCBzaWduU3RyaW5nID0gYFBVVFxcblxcbiR7bWltZVR5cGV9XFxuJHtkYXRlfVxcbi8ke29wdGlvbnMuYnVja2V0fS8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWBcclxuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG9wdGlvbnMuYWNjZXNzS2V5U2VjcmV0KS51cGRhdGUoc2lnblN0cmluZykuZGlnZXN0KCdiYXNlNjQnKVxyXG4gIHJldHVybiBgT1NTICR7b3B0aW9ucy5hY2Nlc3NLZXlJZH06JHtzaWduYXR1cmV9YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGBodHRwczovLyR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5wYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb21gLFxyXG4gICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUsXHJcbiAgICAgIERhdGU6IGdldEN1cnJlbnRVVENEYXRlKCksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWFnZSxcclxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGFsaVl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJylcclxuICBpZiAoIWFsaVl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGFsaVl1biBPU1MgY29uZmlnJylcclxuICB9XHJcbiAgYWxpWXVuT3B0aW9ucy5wYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoLnJlcGxhY2UoL1xcLyokLywgJycpLnJlcGxhY2UoL15cXC8qLywgJycpICsgJy8nXHJcbiAgaWYgKGFsaVl1bk9wdGlvbnMucGF0aCA9PT0gJy8nKSB7XHJcbiAgICBhbGlZdW5PcHRpb25zLnBhdGggPSAnJ1xyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IGFsaVl1bk9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoID8/ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25VcmwgPSBhbGlZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHthbGlZdW5PcHRpb25zLmJ1Y2tldH0uJHthbGlZdW5PcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleUlkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleVNlY3JldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlTZWNyZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2FsaXl1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHtcclxuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRCcpXHJcbiAgICB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElVcHl1bkNvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgc2FmZVBhcnNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuLy8gZ2VuZXJhdGUgQ09TIHNpZ25hdHVyZSBzdHJpbmdcclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3Qgb3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yXHJcbiAgY29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLnBhc3N3b3JkXHJcbiAgY29uc3QgbWQ1UGFzc3dvcmQgPSBNRDUocGFzc3dvcmQpXHJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKVxyXG4gIGNvbnN0IHVyaSA9IGAvJHtvcHRpb25zLmJ1Y2tldH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICBjb25zdCB2YWx1ZSA9IGBQVVQmJHt1cml9JiR7ZGF0ZX1gXHJcbiAgY29uc3Qgc2lnbiA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgbWQ1UGFzc3dvcmQpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCdiYXNlNjQnKVxyXG4gIHJldHVybiBgVVBZVU4gJHtvcGVyYXRvcn06JHtzaWdufWBcclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgY29uc3QgYnVja2V0ID0gb3B0aW9ucy5idWNrZXRcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgbGV0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCB8fCAnaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJ1xyXG4gIGlmIChlbmRwb2ludC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICBlbmRwb2ludCA9IGVuZHBvaW50LnNsaWNlKDAsIC0xKVxyXG4gIH1cclxuICBpZiAoIWVuZHBvaW50LnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgZW5kcG9pbnQgPSBgaHR0cHM6Ly8ke2VuZHBvaW50fWBcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGAke2VuZHBvaW50fS8ke2J1Y2tldH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gTUQ1IChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgnaGV4JylcclxufVxyXG5cclxuY29uc3QgZ2V0QW50aUxlZWNoUGFyYW0gPSAoYW50aUxlZWNoVG9rZW46IHN0cmluZywgZXhwaXJlVGltZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHVyaSA9IGAvJHtvcHRpb25zLnBhdGggfHwgJyd9JHtmaWxlTmFtZX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLnJlcGxhY2UoL15cXC8rL2csICcvJylcclxuICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcclxuICBjb25zdCBleHBpcmUgPSBleHBpcmVUaW1lID8gbm93ICsgcGFyc2VJbnQoZXhwaXJlVGltZS50b1N0cmluZygpLCAxMCkgOiBub3cgKyAxODAwXHJcbiAgY29uc3Qgc2lnbiA9IE1ENShgJHthbnRpTGVlY2hUb2tlbn0mJHtleHBpcmV9JiR7dXJpfWApXHJcbiAgY29uc3QgdXB0ID0gYCR7c2lnbi5zdWJzdHJpbmcoMTIsIDIwKX0ke2V4cGlyZX1gXHJcbiAgcmV0dXJuIGBfdXB0PSR7dXB0fWBcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCB1cHl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpXHJcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHVwWXVuIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgcGF0aCA9IHVweXVuT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gdXB5dW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7dXB5dW5PcHRpb25zLnVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke3N1ZmZpeH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICBpZiAodXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwdCA9IGdldEFudGlMZWVjaFBhcmFtKHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbiwgdXB5dW5PcHRpb25zLmV4cGlyZVRpbWUsIHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gaW1nLmltZ1VybC5pbmNsdWRlcygnPycpID8gYCR7aW1nLmltZ1VybH0mJHt1cHR9YCA6IGAke2ltZy5pbWdVcmx9PyR7dXB0fWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKGVyci5tZXNzYWdlID09PSAnVXBsb2FkIGZhaWxlZCcpIHtcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGJvZHkgPSBzYWZlUGFyc2U8eyBjb2RlOiBzdHJpbmcgfT4oZXJyLmVycm9yKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5LmNvZGUgOiBib2R5XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLnVweXVuLmNvbS9hcGkvZXJybm8vJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wZXJhdG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3BlcmF0b3IgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1cmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhbnRpTGVlY2hUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYW50aUxlZWNoVG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2V4cGlyZVRpbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmV4cGlyZVRpbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd1cHl1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVdlYmRhdlBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdHlwZSB7IFdlYkRBVkNsaWVudCwgV2ViREFWQ2xpZW50T3B0aW9ucyB9IGZyb20gJ3dlYmRhdidcclxuaW1wb3J0IHsgQXV0aFR5cGUsIGNyZWF0ZUNsaWVudCB9IGZyb20gJ3dlYmRhdidcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcclxuICBpZiAoIXdlYmRhdnBsaXN0T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnJylcclxuICB9XHJcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL3xcXC8rJC9nLCAnJylcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMuc3NsRW5hYmxlZCA/ICdodHRwczovLycgOiAnaHR0cDovLycpICsgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgY29uc3QgYXV0aFR5cGUgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuYXV0aFR5cGUgfHwgJ2Jhc2ljJ1xyXG4gIGNvbnN0IHdlYnBhdGggPSAod2ViZGF2cGxpc3RPcHRpb25zLndlYnBhdGggfHwgJycpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJ1xyXG4gIGNvbnN0IHN1ZmZpeCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnM6IFdlYkRBVkNsaWVudE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICB1c2VybmFtZTogd2ViZGF2cGxpc3RPcHRpb25zLnVzZXJuYW1lLFxyXG4gICAgICAgICAgcGFzc3dvcmQ6IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXNzd29yZCxcclxuICAgICAgICAgIG1heEJvZHlMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiA0ICogMTAyNCAqIDEwMjQgKiAxMDI0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhdXRoVHlwZSA9PT0gJ2RpZ2VzdCcpIHtcclxuICAgICAgICAgIGNsaWVudE9wdGlvbnMuYXV0aFR5cGUgPSBBdXRoVHlwZS5EaWdlc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xpZW50OiBXZWJEQVZDbGllbnQgPSBjcmVhdGVDbGllbnQod2ViZGF2cGxpc3RPcHRpb25zLmhvc3QsIGNsaWVudE9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgcGF0aFRvQ3JlYXRlID0gdXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiB1cGxvYWRQYXRoXHJcbiAgICAgICAgaWYgKHBhdGhUb0NyZWF0ZSkge1xyXG4gICAgICAgICAgYXdhaXQgY2xpZW50LmNyZWF0ZURpcmVjdG9yeShwYXRoVG9DcmVhdGUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wdXRGaWxlQ29udGVudHMoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgaW1hZ2UsIHtcclxuICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3dlYmRhdnBsaXN0JylcclxuICAgICAgICAgIGNvbnN0IGltZ1RlbXBGaWxlUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoaW1nVGVtcEZpbGVQYXRoKSlcclxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW1nVGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gY3VzdG9tVXJsIHx8IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0XHJcbiAgICAgICAgICBpZiAod2ViZGF2cGxpc3RPcHRpb25zLndlYnBhdGgpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7d2VicGF0aCA9PT0gJy8nID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQod2VicGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke3N1ZmZpeH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt1cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudCh1cGxvYWRQYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7c3VmZml4fWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3dlYmRhdnBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NzbEVuYWJsZWQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3NsRW5hYmxlZCA/PyBmYWxzZSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRScpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYnBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXV0aFR5cGUnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRScpIH0sXHJcbiAgICAgIGNob2ljZXM6IFsnYmFzaWMnLCAnZGlnZXN0J10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXV0aFR5cGUgfHwgJ2Jhc2ljJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd3ZWJkYXZwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSUxvY2FsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBsb2NhbENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJylcclxuICBpZiAoIWxvY2FsQ29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBsb2NhbCBjb25maWchJylcclxuICB9XHJcbiAgY29uc3QgdXBsb2FkUGF0aCA9IGxvY2FsQ29uZmlnLnBhdGggfHwgJydcclxuICBsZXQgY3VzdG9tVXJsID0gbG9jYWxDb25maWcuY3VzdG9tVXJsIHx8ICcnXHJcbiAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgY3VzdG9tVXJsID0gY3VzdG9tVXJsLnJlcGxhY2UoL1xcLyQvLCAnJylcclxuICB9XHJcbiAgbGV0IHdlYlBhdGggPSBsb2NhbENvbmZpZy53ZWJQYXRoIHx8ICcnXHJcbiAgaWYgKHdlYlBhdGgpIHtcclxuICAgIHdlYlBhdGggPSB3ZWJQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKS5yZXBsYWNlKC9eXFwvLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcclxuICB9XHJcbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnbG9jYWwnKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSkpKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpKSlcclxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSksIGltYWdlKVxyXG4gICAgICAgICAgZnMuY29weUZpbGVTeW5jKHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpLCBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSkpXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpZiAod2ViUGF0aCkge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHdlYlBhdGgpfS8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbWcuaGFzaCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9sb2NhbC8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcclxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6ICdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHVwbG9hZCBpbWFnZScpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignbG9jYWwnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBOb2RlU1NILCB0eXBlIENvbmZpZyB9IGZyb20gJ25vZGUtc3NoLW5vLWNwdS1mZWF0dXJlcydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgdHlwZSBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5jbGFzcyBTU0hDbGllbnQge1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogU1NIQ2xpZW50XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2NsaWVudDogTm9kZVNTSFxyXG4gIHByaXZhdGUgX2lzQ29ubmVjdGVkID0gZmFsc2VcclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UgKCk6IFNTSENsaWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IHRoaXMoKSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNsaWVudCAoKTogTm9kZVNTSCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50IHx8ICh0aGlzLl9jbGllbnQgPSBuZXcgTm9kZVNTSCgpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXggKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0IChjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHsgdXNlcm5hbWUsIHBhc3N3b3JkLCBwcml2YXRlS2V5LCBwYXNzcGhyYXNlIH0gPSBjb25maWdcclxuICAgIGNvbnN0IGxvZ2luSW5mbzogQ29uZmlnID0gcHJpdmF0ZUtleVxyXG4gICAgICA/IHsgdXNlcm5hbWUsIHByaXZhdGVLZXlQYXRoOiBwcml2YXRlS2V5LCBwYXNzcGhyYXNlOiBwYXNzcGhyYXNlIHx8IHVuZGVmaW5lZCB9XHJcbiAgICAgIDogeyB1c2VybmFtZSwgcGFzc3dvcmQgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgU1NIQ2xpZW50LmNsaWVudC5jb25uZWN0KHtcclxuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcclxuICAgICAgICBwb3J0OiBOdW1iZXIoY29uZmlnLnBvcnQpIHx8IDIyLFxyXG4gICAgICAgIC4uLmxvZ2luSW5mb1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IHRydWVcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBsb2FkIChsb2NhbDogc3RyaW5nLCByZW1vdGU6IHN0cmluZywgY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMuX2lzQ29ubmVjdGVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1NIIOacqui/nuaOpScpXHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZW1vdGUgPSB0aGlzLmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXHJcbiAgICAgIGF3YWl0IHRoaXMubWtkaXIocGF0aC5kaXJuYW1lKHJlbW90ZSkucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBjb25maWcpXHJcbiAgICAgIGF3YWl0IFNTSENsaWVudC5jbGllbnQucHV0RmlsZShsb2NhbCwgcmVtb3RlKVxyXG4gICAgICBjb25zdCBmaWxlTW9kZSA9IGNvbmZpZy5maWxlTW9kZSB8fCAnMDY0NCdcclxuICAgICAgaWYgKGZpbGVNb2RlICE9PSAnMDY0NCcpIHtcclxuICAgICAgICBjb25zdCBzY3JpcHQgPSBgY2htb2QgJHtmaWxlTW9kZX0gXCIke3JlbW90ZX1cImBcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbWtkaXIgKGRpclBhdGg6IHN0cmluZywgY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIVNTSENsaWVudC5jbGllbnQuaXNDb25uZWN0ZWQoKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NTSCDmnKrov57mjqUnKVxyXG4gICAgfVxyXG4gICAgY29uc3QgZGlyZWN0b3J5TW9kZSA9IGNvbmZpZy5kaXJNb2RlIHx8ICcwNzU1J1xyXG4gICAgaWYgKGRpcmVjdG9yeU1vZGUgIT09ICcwNzU1Jykge1xyXG4gICAgICBjb25zdCBkaXJzID0gZGlyUGF0aC5zcGxpdCgnLycpXHJcbiAgICAgIGxldCBjdXJyZW50UGF0aCA9ICcnXHJcbiAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcclxuICAgICAgICBpZiAoZGlyKSB7XHJcbiAgICAgICAgICBjdXJyZW50UGF0aCArPSBgLyR7ZGlyfWBcclxuICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGBta2RpciBcIiR7Y3VycmVudFBhdGh9XCIgJiYgY2htb2QgJHtkaXJlY3RvcnlNb2RlfSBcIiR7Y3VycmVudFBhdGh9XCJgXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2NyaXB0ID0gYGNkIC8gJiYgbWtkaXIgLXAgXCIke2RpclBhdGh9XCJgXHJcbiAgICAgIGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hvd24gKHJlbW90ZTogc3RyaW5nLCB1c2VyOiBzdHJpbmcsIGdyb3VwPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZW1vdGUgPSB0aGlzLmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXHJcbiAgICBjb25zdCBbX3VzZXIsIF9ncm91cF0gPSBncm91cCA/IFt1c2VyLCBncm91cF0gOiB1c2VyLmluY2x1ZGVzKCc6JykgPyB1c2VyLnNwbGl0KCc6JykgOiBbdXNlciwgdXNlcl1cclxuXHJcbiAgICBjb25zdCBzY3JpcHQgPSBgY2hvd24gJHtfdXNlcn06JHtfZ3JvdXB9IFwiJHtyZW1vdGV9XCJgXHJcbiAgICByZXR1cm4gdGhpcy5leGVjKHNjcmlwdClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlYyAoc2NyaXB0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCBTU0hDbGllbnQuY2xpZW50LmV4ZWNDb21tYW5kKHNjcmlwdClcclxuICAgIHJldHVybiBleGVjUmVzdWx0LmNvZGUgPT09IDBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZSAoKTogdm9pZCB7XHJcbiAgICBTU0hDbGllbnQuY2xpZW50LmRpc3Bvc2UoKVxyXG4gICAgdGhpcy5faXNDb25uZWN0ZWQgPSBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU1NIQ2xpZW50XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVNmdHBQbGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBTU0hDbGllbnQgZnJvbSAnLi4vLi4vdXRpbHMvc3NoQ2xpZW50J1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHNmdHBwbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNmdHBQbGlzdENvbmZpZz4oJ3BpY0JlZC5zZnRwcGxpc3QnKVxyXG4gIGlmICghc2Z0cHBsaXN0Q29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzZnRwcGxpc3QgY29uZmlnIScpXHJcbiAgfVxyXG4gIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gTnVtYmVyKHNmdHBwbGlzdENvbmZpZy5wb3J0KSB8fCAyMlxyXG4gIHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoID0gKHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoIHx8ICcnKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLydcclxuICBjb25zdCB3ZWJQYXRoID0gKHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoIHx8ICcnKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLydcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVwbG9hZFRlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAndXBsb2FkVGVtcCcpXHJcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3NmdHBwbGlzdCcpXHJcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhpbWdUZW1wUGF0aClcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4odXBsb2FkVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZSh0ZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBjbGllbnQgPSBTU0hDbGllbnQuaW5zdGFuY2VcclxuICAgICAgICBhd2FpdCBjbGllbnQuY29ubmVjdChzZnRwcGxpc3RDb25maWcpXHJcbiAgICAgICAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGguam9pbihgLyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9YC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJyksIGltZy5maWxlTmFtZSlcclxuICAgICAgICBhd2FpdCBjbGllbnQudXBsb2FkKHRlbXBGaWxlUGF0aCwgcmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnKVxyXG4gICAgICAgIHNmdHBwbGlzdENvbmZpZy5maWxlVXNlciAmJiBhd2FpdCBjbGllbnQuY2hvd24ocmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyKVxyXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBzZnRwcGxpc3RDb25maWcuY3VzdG9tVXJsIHx8IHNmdHBwbGlzdENvbmZpZy5ob3N0XHJcbiAgICAgICAgaWYgKHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoKSB7XHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt3ZWJQYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudCh3ZWJQYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoaW1nVGVtcEZpbGVQYXRoKSlcclxuICAgICAgICBmcy5yZW1vdmVTeW5jKGltZ1RlbXBGaWxlUGF0aClcclxuICAgICAgICBmcy5tb3ZlU3luYyh0ZW1wRmlsZVBhdGgsIHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKSlcclxuICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9zZnRwcGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgY2xpZW50LmNsb3NlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTZnRwUGxpc3RDb25maWc+KCdwaWNCZWQuc2Z0cHBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BvcnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BPUlQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wb3J0IHx8IDIyLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncHJpdmF0ZUtleScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVknKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByaXZhdGVLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3NwaHJhc2UnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzcGhyYXNlIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1cGxvYWRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3ZWJQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2ViUGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZmlsZVVzZXInLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlVXNlciB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZmlsZU1vZGUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlTW9kZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZGlyTW9kZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmRpck1vZGUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NmdHBwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1QnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElUZWxlZ3JhcGhDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB0eXBlIHsgUmVhZFN0cmVhbSB9IGZyb20gJ2ZzJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAob3B0aW9uczogSVRlbGVncmFwaENvbmZpZywgaW1hZ2U6IFJlYWRTdHJlYW0pOiBQcm9taXNlPElPbGRSZXFPcHRpb25zPiA9PiB7XHJcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICdodHRwczovL3RlbGVncmEucGgvdXBsb2FkJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGZpbGU6IGltYWdlXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgbGV0IHRnT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVRlbGVncmFwaENvbmZpZz4oJ3BpY0JlZC50ZWxlZ3JhcGhwbGlzdCcpXHJcbiAgaWYgKCF0Z09wdGlvbnMpIHtcclxuICAgIHRnT3B0aW9ucyA9IHt9XHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHVwbG9hZFRlbXBQYXRoKVxyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnModGdPcHRpb25zLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRlbXBGaWxlUGF0aCkpXHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzKSA6IHJlc1xyXG4gICAgICAgIGZzLnJlbW92ZSh0ZW1wRmlsZVBhdGgpXHJcbiAgICAgICAgaWYgKGJvZHk/LlswXT8uc3JjKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovL3RlbGVncmEucGgke2JvZHlbMF0uc3JjfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcclxuICAgICAgdGV4dDogJydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHN0cmluZyB8IElFcnJvclxyXG4gICAgdGhyb3cgZXJyPy5yZXNwb25zZT8uZGF0YSB8fCBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVRlbGVncmFwaENvbmZpZz4oJ3BpY0JlZC50ZWxlZ3JhcGhwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndGVsZWdyYXBocGxpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVMRUdSQVBIJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHR5cGUgeyBJUGljTGlzdENvbmZpZywgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVBpY0xpc3RDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGhvc3QgPSBvcHRpb25zLmhvc3QgfHwgJzEyNy4wLjAuMSdcclxuICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0IHx8IDM2Njc3XHJcbiAgY29uc3QgcGljYmVkID0gb3B0aW9ucy5waWNiZWQgfHwgJydcclxuICBjb25zdCBjb25maWdOYW1lID0gb3B0aW9ucy5jb25maWdOYW1lIHx8ICdEZWZhdWx0J1xyXG4gIGNvbnN0IHNlcnZlcktleSA9IG9wdGlvbnMuc2VydmVyS2V5IHx8ICcnXHJcbiAgbGV0IHVybCA9IGBodHRwOi8vJHtob3N0fToke3BvcnR9L3VwbG9hZD9jb25maWdOYW1lPSR7Y29uZmlnTmFtZX1gXHJcbiAgaWYgKHBpY2JlZCkge1xyXG4gICAgdXJsICs9IGAmcGljYmVkPSR7cGljYmVkfWBcclxuICB9XHJcbiAgaWYgKHNlcnZlcktleSkge1xyXG4gICAgdXJsICs9IGAma2V5PSR7c2VydmVyS2V5fWBcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgZmlsZToge1xyXG4gICAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgICBjb250ZW50VHlwZTogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHBpY2xpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJUGljTGlzdENvbmZpZz4oJ3BpY0JlZC5waWNsaXN0JylcclxuICBpZiAoIXBpY2xpc3RPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBQaWNMaXN0IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHBpY2xpc3RPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGltYWdlKVxyXG5cclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXHJcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXHJcbiAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICAgICAgZXJyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5Py5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IHJlcy5ib2R5LnJlc3VsdFswXVxyXG4gICAgICAgICAgaW1nLmZ1bGxSZXN1bHQgPSByZXMuYm9keS5mdWxsUmVzdWx0WzBdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcxMjcuMC4wLjEnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BvcnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAzNjY3NyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGljYmVkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QSUNCRUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUElDQkVEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5waWNiZWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NvbmZpZ05hbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY29uZmlnTmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VydmVyS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9LRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZXJ2ZXJLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3BpY2xpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oZWxsb2RrMzQvcGljZ28tcGx1Z2luLWxhbmtvbmdcclxuLy8gTElDRU5TRTogTUlUXHJcblxyXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXHJcbmltcG9ydCB7IElMc2t5Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1HVFlQRSB7XHJcbiAgaW1nVXJsPzogc3RyaW5nXHJcbiAgdHlwZT86IHN0cmluZ1xyXG4gIGtleT86IHN0cmluZ1xyXG4gIGlkPzogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVYyRk9STURBVEEge1xyXG4gIGZpbGU6IHtcclxuICAgIHZhbHVlOiBCdWZmZXJcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgZmlsZW5hbWU6IHN0cmluZ1xyXG4gICAgfVxyXG4gIH1cclxuICBzc2w6IHN0cmluZ1xyXG4gIHN0cmF0ZWd5X2lkPzogc3RyaW5nXHJcbiAgYWxidW1faWQ/OiBzdHJpbmdcclxuICBwZXJtaXNzaW9uPzogbnVtYmVyXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElMc2t5Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbWFnZTogQnVmZmVyKTogYW55ID0+IHtcclxuICBsZXQgaG9zdCA9IG9wdGlvbnMuaG9zdFxyXG4gIGhvc3QgPSBob3N0LnJlcGxhY2UoL1xcLyQvLCAnJylcclxuICBjb25zdCBpc1YyID0gb3B0aW9ucy52ZXJzaW9uID09PSAnVjInXHJcbiAgY29uc3QgdG9rZW4gPSBvcHRpb25zLnRva2VuXHJcblxyXG4gIGNvbnN0IHYxSGVhZGVycyA9IHtcclxuICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgIENvbm5lY3Rpb246ICdrZWVwLWFsaXZlJyxcclxuICAgIHRva2VuOiB0b2tlbiB8fCB1bmRlZmluZWRcclxuICB9XHJcbiAgY29uc3QgdjFGb3JtRGF0YSA9IHtcclxuICAgIGltYWdlOiB7XHJcbiAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSFcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNzbDogJ3RydWUnXHJcbiAgfVxyXG5cclxuICBjb25zdCB2MkhlYWRlcnMgPSB7XHJcbiAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXHJcbiAgICBDb25uZWN0aW9uOiAna2VlcC1hbGl2ZScsXHJcbiAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgIEF1dGhvcml6YXRpb246IHRva2VuIHx8IHVuZGVmaW5lZFxyXG4gIH1cclxuICBjb25zdCBzdHJhdGVneUlkID0gb3B0aW9ucy5zdHJhdGVneUlkXHJcbiAgY29uc3QgYWxidW1JZCA9IG9wdGlvbnMuYWxidW1JZFxyXG4gIGxldCBwZXJtaXNzaW9uOiBhbnkgPSBvcHRpb25zLnBlcm1pc3Npb24udmFsdWVcclxuICBpZiAocGVybWlzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBwZXJtaXNzaW9uID0gb3B0aW9ucy5wZXJtaXNzaW9uXHJcbiAgfVxyXG4gIGNvbnN0IHYyRm9ybURhdGE6IElWMkZPUk1EQVRBID0ge1xyXG4gICAgZmlsZToge1xyXG4gICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzc2w6ICd0cnVlJyxcclxuICAgIHN0cmF0ZWd5X2lkOiBzdHJhdGVneUlkLFxyXG4gICAgYWxidW1faWQ6IGFsYnVtSWQsXHJcbiAgICBwZXJtaXNzaW9uXHJcbiAgfVxyXG4gIGlmICghc3RyYXRlZ3lJZCkge1xyXG4gICAgZGVsZXRlIHYyRm9ybURhdGEuc3RyYXRlZ3lfaWRcclxuICB9XHJcbiAgaWYgKCFhbGJ1bUlkKSB7XHJcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5hbGJ1bV9pZFxyXG4gIH1cclxuICBpZiAoIShwZXJtaXNzaW9uID09PSAwIHx8IHBlcm1pc3Npb24gPT09IDEpKSB7XHJcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5wZXJtaXNzaW9uXHJcbiAgfVxyXG5cclxuICBjb25zdCByZXF1ZXN0QWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xyXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxyXG4gIH0pXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBpc1YyID8gYCR7aG9zdH0vYXBpL3YxL3VwbG9hZGAgOiBgJHtob3N0fS9hcGkvdXBsb2FkYCxcclxuICAgIGFnZW50OiByZXF1ZXN0QWdlbnQsXHJcbiAgICBoZWFkZXJzOiBpc1YyID8gdjJIZWFkZXJzIDogdjFIZWFkZXJzLFxyXG4gICAgZm9ybURhdGE6IGlzVjIgPyB2MkZvcm1EYXRhIDogdjFGb3JtRGF0YVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBsc2t5T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUxza3lDb25maWc+KCdwaWNCZWQubHNreXBsaXN0JylcclxuICBpZiAoIWxza3lPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBsc2t5IHVwbG9hZGVyIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyIVxyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMobHNreU9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXHJcbiAgICAgIGxldCBib2R5ID0gYXdhaXQgY3R4LlJlcXVlc3QucmVxdWVzdChwb3N0Q29uZmlnKSBhcyBhbnlcclxuICAgICAgYm9keSA9IHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5XHJcbiAgICAgIGxldCBpc1YyID0gbHNreU9wdGlvbnMudmVyc2lvbiA9PT0gJ1YyJ1xyXG4gICAgICBsZXQgY29uZGl0aW9uID0gaXNWMiA/IChib2R5LnN0YXR1cyA9PT0gdHJ1ZSkgOiAoYm9keS5jb2RlID09PSAyMDApXHJcbiAgICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICBpbWcuaW1nVXJsID0gaXNWMiA/IGJvZHkuZGF0YS5saW5rcy51cmwgOiBib2R5LmRhdGEudXJsXHJcbiAgICAgICAgaWYgKGlzVjIpIHtcclxuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmtleVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguZW1pdCgnbm90aWZpY2F0aW9uJywge1xyXG4gICAgICAgICAgdGl0bGU6ICd1cGxvYWQgZmFpbGVkJyxcclxuICAgICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBsZXQgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxza3lDb25maWc+KCdwaWNCZWQubHNreXBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudmVyc2lvbiB8fCAnVjEnLFxyXG4gICAgICBnZXQgcHJlZml4KCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcygpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1ZFUlNJT04nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTicpIH0sXHJcbiAgICAgIGNob2ljZXM6IFsnVjEnLCAnVjInXSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXgoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9IT1NUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXgoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcygpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbixcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc3RyYXRlZ3lJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3RyYXRlZ3lJZCxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4KCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRCcpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW1JZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW1JZCxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4KCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfQUxCVU1fSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9BTEJVTV9JRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRCcpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGVybWlzc2lvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wZXJtaXNzaW9uIHx8ICdwcml2YXRlKGRlZmF1bHQpJyxcclxuICAgICAgY2hvaWNlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdwcml2YXRlKGRlZmF1bHQpJyxcclxuICAgICAgICAgIHZhbHVlOiAwXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAncHVibGljJyxcclxuICAgICAgICAgIHZhbHVlOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXgoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QRVJNSVNTSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OJykgfSxcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2xza3lwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUExJU1QnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufSIsImltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXHJcbmltcG9ydCBGaWxlVHlwZSBmcm9tIFwiZmlsZS10eXBlXCJcclxuaW1wb3J0IG1pbWUgZnJvbSBcIm1pbWVcIlxyXG5pbXBvcnQgeyBIdHRwc1Byb3h5QWdlbnQsIEh0dHBQcm94eUFnZW50IH0gZnJvbSBcImhwYWdlbnRcIlxyXG5pbXBvcnQgeyBJSW1nSW5mbyB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiXHJcbmltcG9ydCB7IFVSTCB9IGZyb20gXCJ1cmxcIlxyXG5cclxuY2xhc3MgRmlsZU5hbWVHZW5lcmF0b3Ige1xyXG4gIGRhdGU6IERhdGVcclxuICBpbmZvOiBJSW1nSW5mb1xyXG5cclxuICBzdGF0aWMgZmllbGRzID0gW1xyXG4gICAgXCJ5ZWFyXCIsIC8vIOW9k+WJjeaXpeacnyAtIOW5tFxyXG4gICAgXCJtb250aFwiLCAvLyDlvZPliY3ml6XmnJ8gLSDmnIhcclxuICAgIFwiZGF5XCIsIC8vIOW9k+WJjeaXpeacnyAtIOaXpVxyXG4gICAgXCJmdWxsTmFtZVwiLCAvLyDmlofku7blkI0sIOWMheWQq+aJqeWxleWQjVxyXG4gICAgXCJmaWxlTmFtZVwiLCAvLyDmlofku7blkI0sIOS4jeWMheWQq+aJqeWxleWQjVxyXG4gICAgXCJleHROYW1lXCIsIC8vIOaJqeWxleWQjVxyXG4gICAgXCJtZDVcIiwgLy8gbWQ1XHJcbiAgICBcIm1kNUI2NFwiLCAvLyBtZDUgYmFzZTY0XHJcbiAgICBcIm1kNUI2NFNob3J0XCIsIC8vIG1kNSBiYXNlNjQgc2hvcnRcclxuICAgIFwic2hhMVwiLCAvLyBzaGExXHJcbiAgICBcInNoYTI1NlwiLCAvLyBzaGEyNTZcclxuICAgIFwidGltZXN0YW1wXCIsIC8vIOW9k+WJjeaXtumXtOaIsywg56eSXHJcbiAgICBcInRpbWVzdGFtcE1TXCIsIC8vIOW9k+WJjeaXtumXtOaIsywg5q+r56eSXHJcbiAgXVxyXG5cclxuICBjb25zdHJ1Y3RvcihpbmZvOiBJSW1nSW5mbykge1xyXG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKVxyXG4gICAgdGhpcy5pbmZvID0gaW5mb1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHllYXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKX1gXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW9udGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGF5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZnVsbE5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmluZm8uZmlsZU5hbWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWxlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLmluZm8uZmlsZU5hbWUgPz8gJycpLnJlcGxhY2UodGhpcy5pbmZvLmV4dG5hbWUgPz8gJycsICcnKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4dE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5pbmZvLmV4dG5hbWUgPz8gJycpLnJlcGxhY2UoJy4nLCAnJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtZDUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdChcImhleFwiKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1kNUI2NCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNyeXB0b1xyXG4gICAgICAuY3JlYXRlSGFzaChcIm1kNVwiKVxyXG4gICAgICAudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKVxyXG4gICAgICAuZGlnZXN0KFwiYmFzZTY0XCIpXHJcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgXCItXCIpXHJcbiAgICAgIC5yZXBsYWNlKC9cXC8vZywgXCJfXCIpXHJcbiAgICAgIC5yZXBsYWNlKC89KyQvLCBcIlwiKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1kNUI2NFNob3J0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvXHJcbiAgICAgIC5jcmVhdGVIYXNoKFwibWQ1XCIpXHJcbiAgICAgIC51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpXHJcbiAgICAgIC5kaWdlc3QoXCJiYXNlNjRcIilcclxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCBcIi1cIilcclxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCBcIl9cIilcclxuICAgICAgLnNsaWNlKDAsIDcpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hhMSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdChcImhleFwiKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNoYTI1NigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KFwiaGV4XCIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZXN0YW1wKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkudG9TdHJpbmcoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRpbWVzdGFtcE1TKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGltZ0J1ZmZlcigpOiBzdHJpbmcgfCBCdWZmZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5mby5iYXNlNjRJbWFnZSA/IHRoaXMuaW5mby5iYXNlNjRJbWFnZSA6IHRoaXMuaW5mby5idWZmZXJcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXRoKGluZm86IElJbWdJbmZvLCBmb3JtYXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGlmICghZm9ybWF0KSB7XHJcbiAgICByZXR1cm4gaW5mby5maWxlTmFtZSFcclxuICB9XHJcblxyXG4gIGNvbnN0IGZpbGVOYW1lR2VuZXJhdG9yID0gbmV3IEZpbGVOYW1lR2VuZXJhdG9yKGluZm8pXHJcblxyXG4gIGxldCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBmb3JtYXRcclxuXHJcbiAgZm9yIChjb25zdCBrZXkgb2YgRmlsZU5hbWVHZW5lcmF0b3IuZmllbGRzKSB7XHJcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYHske2tleX19YCwgXCJnXCIpXHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBmb3JtYXRQYXRoID0gZm9ybWF0UGF0aC5yZXBsYWNlKHJlLCBmaWxlTmFtZUdlbmVyYXRvcltrZXldKCkpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gZm9ybWF0UGF0aFxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEluZm8oaW5mbzogSUltZ0luZm8pOiBQcm9taXNlPHtcclxuICBib2R5PzogQnVmZmVyXHJcbiAgY29udGVudFR5cGU/OiBzdHJpbmdcclxuICBjb250ZW50RW5jb2Rpbmc/OiBzdHJpbmdcclxufT4ge1xyXG4gIGNvbnN0IHJlc3VsdDoge1xyXG4gICAgYm9keT86IEJ1ZmZlclxyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmdcclxuICAgIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xyXG4gIH0gPSB7fVxyXG5cclxuICBpZiAoaW5mby5iYXNlNjRJbWFnZSkge1xyXG4gICAgY29uc3QgYm9keSA9IGluZm8uYmFzZTY0SW1hZ2UucmVwbGFjZSgvXmRhdGE6Wy9cXHddKztiYXNlNjQsLywgXCJcIilcclxuICAgIHJlc3VsdC5jb250ZW50VHlwZSA9IGluZm8uYmFzZTY0SW1hZ2UubWF0Y2goXHJcbiAgICAgIC9bXjpdXFx3K1xcL1tcXHctK1xcZC5dKyg/PTt8LCkvXHJcbiAgICApPy5bMF1cclxuICAgIHJlc3VsdC5ib2R5ID0gQnVmZmVyLmZyb20oYm9keSwgXCJiYXNlNjRcIilcclxuICAgIHJlc3VsdC5jb250ZW50RW5jb2RpbmcgPSBcImJhc2U2NFwiXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChpbmZvLmV4dG5hbWUpIHtcclxuICAgICAgcmVzdWx0LmNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGluZm8uZXh0bmFtZSkhXHJcbiAgICB9XHJcbiAgICByZXN1bHQuYm9keSA9IGluZm8uYnVmZmVyXHJcbiAgfVxyXG5cclxuICAvLyBmYWxsYmFjayB0byBkZXRlY3QgZnJvbSBidWZmZXJcclxuICBpZiAoIXJlc3VsdC5jb250ZW50VHlwZSkge1xyXG4gICAgY29uc3QgZmlsZVR5cGUgPSBhd2FpdCBGaWxlVHlwZS5mcm9tQnVmZmVyKHJlc3VsdC5ib2R5ISlcclxuICAgIHJlc3VsdC5jb250ZW50VHlwZSA9IGZpbGVUeXBlPy5taW1lXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdEh0dHBQcm94eVVSTCh1cmwgPSBcIlwiKTogc3RyaW5nIHtcclxuICBpZiAoIXVybCkgcmV0dXJuIFwiXCJcclxuXHJcbiAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSkge1xyXG4gICAgY29uc3QgW2hvc3QsIHBvcnRdID0gdXJsLnNwbGl0KFwiOlwiKVxyXG4gICAgcmV0dXJuIGBodHRwOi8vJHtob3N0LnJlcGxhY2UoXCIxMjcuMC4wLjFcIiwgXCJsb2NhbGhvc3RcIil9OiR7cG9ydH1gXHJcbiAgfVxyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IG5ldyBVUkwodXJsKVxyXG4gICAgcmV0dXJuIGAke3Byb3RvY29sfS8vJHtob3N0bmFtZS5yZXBsYWNlKFwiMTI3LjAuMC4xXCIsIFwibG9jYWxob3N0XCIpfToke3BvcnR9YFxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBcIlwiXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJveHlBZ2VudChcclxuICBwcm94eTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4gIHNzbEVuYWJsZWQ6IGJvb2xlYW4sXHJcbiAgcmVqZWN0VW5hdXRob3JpemVkOiBib29sZWFuXHJcbik6IEh0dHBQcm94eUFnZW50IHwgSHR0cHNQcm94eUFnZW50IHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCBmb3JtYXRlZFByb3h5ID0gZm9ybWF0SHR0cFByb3h5VVJMKHByb3h5KVxyXG4gIGlmICghZm9ybWF0ZWRQcm94eSkge1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgY29uc3QgQWdlbnQgPSBzc2xFbmFibGVkID8gSHR0cHNQcm94eUFnZW50IDogSHR0cFByb3h5QWdlbnRcclxuICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAga2VlcEFsaXZlOiB0cnVlLFxyXG4gICAga2VlcEFsaXZlTXNlY3M6IDEwMDAsXHJcbiAgICBzY2hlZHVsaW5nOiBcImxpZm9cIiBhcyBcImxpZm9cIiB8IFwiZmlmb1wiIHwgdW5kZWZpbmVkLFxyXG4gICAgcmVqZWN0VW5hdXRob3JpemVkLFxyXG4gICAgcHJveHk6IGZvcm1hdGVkUHJveHksXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbmV3IEFnZW50KG9wdGlvbnMpXHJcbn0iLCJpbXBvcnQge1xyXG4gIFMzQ2xpZW50LFxyXG4gIFMzQ2xpZW50Q29uZmlnLFxyXG4gIFB1dE9iamVjdENvbW1hbmQsXHJcbiAgR2V0T2JqZWN0Q29tbWFuZCxcclxuICBQdXRPYmplY3RDb21tYW5kT3V0cHV0LFxyXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIlxyXG5pbXBvcnQgeyBnZXRTaWduZWRVcmwgfSBmcm9tIFwiQGF3cy1zZGsvczMtcmVxdWVzdC1wcmVzaWduZXJcIlxyXG5pbXBvcnQge1xyXG4gIE5vZGVIdHRwSGFuZGxlcixcclxuICBOb2RlSHR0cEhhbmRsZXJPcHRpb25zLFxyXG59IGZyb20gXCJAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyXCJcclxuaW1wb3J0IHVybCBmcm9tIFwidXJsXCJcclxuaW1wb3J0IHsgSHR0cFByb3h5QWdlbnQsIEh0dHBzUHJveHlBZ2VudCB9IGZyb20gXCJocGFnZW50XCJcclxuaW1wb3J0IHsgSUF3c1MzUExpc3RVc2VyQ29uZmlnLCBJSW1nSW5mbyB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiXHJcbmltcG9ydCB7IGV4dHJhY3RJbmZvLCBnZXRQcm94eUFnZW50IH0gZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXBsb2FkUmVzdWx0IHtcclxuICBpbmRleDogbnVtYmVyXHJcbiAga2V5OiBzdHJpbmdcclxuICB1cmw6IHN0cmluZ1xyXG4gIGltZ1VSTDogc3RyaW5nXHJcbiAgdmVyc2lvbklkPzogc3RyaW5nXHJcbiAgZVRhZz86IHN0cmluZ1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTM0NsaWVudChvcHRzOiBJQXdzUzNQTGlzdFVzZXJDb25maWcpOiBTM0NsaWVudCB7XHJcbiAgbGV0IHNzbEVuYWJsZWQgPSB0cnVlXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHUgPSBuZXcgdXJsLlVSTChvcHRzLmVuZHBvaW50ISlcclxuICAgIHNzbEVuYWJsZWQgPSB1LnByb3RvY29sID09PSBcImh0dHBzOlwiXHJcbiAgfSBjYXRjaCB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICB9XHJcblxyXG4gIGNvbnN0IGh0dHBIYW5kbGVyT3B0czogTm9kZUh0dHBIYW5kbGVyT3B0aW9ucyA9IHt9XHJcbiAgaWYgKHNzbEVuYWJsZWQpIHtcclxuICAgIGh0dHBIYW5kbGVyT3B0cy5odHRwc0FnZW50ID0gPEh0dHBzUHJveHlBZ2VudD4oXHJcbiAgICAgIGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgdHJ1ZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpXHJcbiAgICApXHJcbiAgfSBlbHNlIHtcclxuICAgIGh0dHBIYW5kbGVyT3B0cy5odHRwQWdlbnQgPSA8SHR0cFByb3h5QWdlbnQ+KFxyXG4gICAgICBnZXRQcm94eUFnZW50KG9wdHMucHJveHksIGZhbHNlLCBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA/PyBmYWxzZSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNvbnN0IGNsaWVudE9wdGlvbnM6IFMzQ2xpZW50Q29uZmlnID0ge1xyXG4gICAgcmVnaW9uOiBvcHRzLnJlZ2lvbiB8fCBcImF1dG9cIixcclxuICAgIGVuZHBvaW50OiBvcHRzLmVuZHBvaW50IHx8IHVuZGVmaW5lZCxcclxuICAgIGNyZWRlbnRpYWxzOiB7XHJcbiAgICAgIGFjY2Vzc0tleUlkOiBvcHRzLmFjY2Vzc0tleUlELFxyXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IG9wdHMuc2VjcmV0QWNjZXNzS2V5LFxyXG4gICAgfSxcclxuICAgIHRsczogc3NsRW5hYmxlZCxcclxuICAgIGZvcmNlUGF0aFN0eWxlOiBvcHRzLnBhdGhTdHlsZUFjY2VzcyxcclxuICAgIHJlcXVlc3RIYW5kbGVyOiBuZXcgTm9kZUh0dHBIYW5kbGVyKGh0dHBIYW5kbGVyT3B0cyksXHJcbiAgfVxyXG5cclxuICBjb25zdCBjbGllbnQgPSBuZXcgUzNDbGllbnQoY2xpZW50T3B0aW9ucylcclxuICByZXR1cm4gY2xpZW50XHJcbn1cclxuXHJcbmludGVyZmFjZSBjcmVhdGVVcGxvYWRUYXNrT3B0cyB7XHJcbiAgY2xpZW50OiBTM0NsaWVudFxyXG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xyXG4gIHBhdGg6IHN0cmluZ1xyXG4gIGl0ZW06IElJbWdJbmZvXHJcbiAgaW5kZXg6IG51bWJlclxyXG4gIGFjbDogc3RyaW5nXHJcbiAgdXJsUHJlZml4Pzogc3RyaW5nXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFRhc2soXHJcbiAgb3B0czogY3JlYXRlVXBsb2FkVGFza09wdHNcclxuKTogUHJvbWlzZTxJVXBsb2FkUmVzdWx0PiB7XHJcbiAgaWYgKCFvcHRzLml0ZW0uYnVmZmVyICYmICFvcHRzLml0ZW0uYmFzZTY0SW1hZ2UpIHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJ1bmRlZmluZWQgaW1hZ2VcIikpXHJcbiAgfVxyXG5cclxuICBsZXQgYm9keTogQnVmZmVyIHwgdW5kZWZpbmVkXHJcbiAgbGV0IGNvbnRlbnRUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuICBsZXQgY29udGVudEVuY29kaW5nOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuXHJcbiAgdHJ5IHtcclxuICAgIDsoeyBib2R5LCBjb250ZW50VHlwZSwgY29udGVudEVuY29kaW5nIH0gPSBhd2FpdCBleHRyYWN0SW5mbyhvcHRzLml0ZW0pKVxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbW1hbmQgPSBuZXcgUHV0T2JqZWN0Q29tbWFuZCh7XHJcbiAgICBCdWNrZXQ6IG9wdHMuYnVja2V0TmFtZSxcclxuICAgIEtleTogb3B0cy5wYXRoLFxyXG4gICAgQUNMOiBvcHRzLmFjbCxcclxuICAgIEJvZHk6IGJvZHksXHJcbiAgICBDb250ZW50VHlwZTogY29udGVudFR5cGUsXHJcbiAgICBDb250ZW50RW5jb2Rpbmc6IGNvbnRlbnRFbmNvZGluZyxcclxuICB9KVxyXG5cclxuICBsZXQgb3V0cHV0OiBQdXRPYmplY3RDb21tYW5kT3V0cHV0XHJcbiAgdHJ5IHtcclxuICAgIG91dHB1dCA9IGF3YWl0IG9wdHMuY2xpZW50LnNlbmQoY29tbWFuZClcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXHJcbiAgfVxyXG5cclxuICBsZXQgdXJsOiBzdHJpbmdcclxuICBpZiAoIW9wdHMudXJsUHJlZml4KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB1cmwgPSBhd2FpdCBnZXRGaWxlVVJMKG9wdHMsIG91dHB1dC5FVGFnISwgb3V0cHV0LlZlcnNpb25JZCEpXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdXJsID0gYCR7b3B0cy51cmxQcmVmaXh9LyR7b3B0cy5wYXRofWBcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpbmRleDogb3B0cy5pbmRleCxcclxuICAgIGtleTogb3B0cy5wYXRoLFxyXG4gICAgdXJsOiB1cmwsXHJcbiAgICBpbWdVUkw6IHVybCxcclxuICAgIHZlcnNpb25JZDogb3V0cHV0LlZlcnNpb25JZCxcclxuICAgIGVUYWc6IG91dHB1dC5FVGFnLFxyXG4gIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVVSTChcclxuICBvcHRzOiBjcmVhdGVVcGxvYWRUYXNrT3B0cyxcclxuICBlVGFnOiBzdHJpbmcsXHJcbiAgdmVyc2lvbklkOiBzdHJpbmdcclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgc2lnbmVkVXJsID0gYXdhaXQgZ2V0U2lnbmVkVXJsKFxyXG4gICAgICBvcHRzLmNsaWVudCxcclxuICAgICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xyXG4gICAgICAgIEJ1Y2tldDogb3B0cy5idWNrZXROYW1lLFxyXG4gICAgICAgIEtleTogb3B0cy5wYXRoLFxyXG4gICAgICAgIElmTWF0Y2g6IGVUYWcsXHJcbiAgICAgICAgVmVyc2lvbklkOiB2ZXJzaW9uSWQsXHJcbiAgICAgIH0pLFxyXG4gICAgICB7IGV4cGlyZXNJbjogMzYwMCB9XHJcbiAgICApXHJcbiAgICBjb25zdCB1cmxPYmplY3QgPSBuZXcgdXJsLlVSTChzaWduZWRVcmwpXHJcbiAgICB1cmxPYmplY3Quc2VhcmNoID0gXCJcIlxyXG4gICAgcmV0dXJuIHVybE9iamVjdC5ocmVmXHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNyZWF0ZVMzQ2xpZW50LFxyXG4gIGNyZWF0ZVVwbG9hZFRhc2ssXHJcbiAgZ2V0RmlsZVVSTCxcclxufSIsIlxyXG5pbXBvcnQgdXBsb2FkZXIsIHsgSVVwbG9hZFJlc3VsdCB9IGZyb20gXCIuL3MzL3VwbG9hZGVyXCJcclxuaW1wb3J0IHsgZm9ybWF0UGF0aCB9IGZyb20gXCIuL3MzL3V0aWxzXCJcclxuaW1wb3J0IHsgSUF3c1MzUExpc3RVc2VyQ29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gXCIuLi8uLi9pMThuL3poLUNOXCJcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0gY3R4LmdldENvbmZpZyhcInBpY0JlZC5hd3MtczMtcGxpc3RcIilcclxuICAgIGlmICghdXNlckNvbmZpZykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGFtYXpvbiBzMyB1cGxvYWRlciBjb25maWdcIilcclxuICAgIH1cclxuICAgIGlmICh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHVzZXJDb25maWcuZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMID0gZmFsc2VcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKHVzZXJDb25maWcuZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiKSB7XHJcbiAgICAgICAgdXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPSB0cnVlXHJcbiAgICAgIH0gZWxzZSBpZiAodXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwudG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKSB7XHJcbiAgICAgICAgdXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodXNlckNvbmZpZy51cmxQcmVmaXgpIHtcclxuICAgICAgdXNlckNvbmZpZy51cmxQcmVmaXggPSB1c2VyQ29uZmlnLnVybFByZWZpeC5yZXBsYWNlKC9cXC8/JC8sIFwiXCIpXHJcbiAgICAgIGlmICh1c2VyQ29uZmlnLnBhdGhTdHlsZUFjY2VzcyAmJiAhdXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpIHtcclxuICAgICAgICB1c2VyQ29uZmlnLnVybFByZWZpeCArPSBcIi9cIiArIHVzZXJDb25maWcuYnVja2V0TmFtZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gdXBsb2FkZXIuY3JlYXRlUzNDbGllbnQodXNlckNvbmZpZylcclxuICAgIGNvbnN0IG91dHB1dCA9IGN0eC5vdXRwdXRcclxuXHJcbiAgICBjb25zdCB0YXNrcyA9IG91dHB1dC5tYXAoKGl0ZW0sIGlkeCkgPT5cclxuICAgICAgdXBsb2FkZXIuY3JlYXRlVXBsb2FkVGFzayh7XHJcbiAgICAgICAgY2xpZW50LFxyXG4gICAgICAgIGluZGV4OiBpZHgsXHJcbiAgICAgICAgYnVja2V0TmFtZTogdXNlckNvbmZpZy5idWNrZXROYW1lLFxyXG4gICAgICAgIHBhdGg6IGZvcm1hdFBhdGgoaXRlbSwgdXNlckNvbmZpZy51cGxvYWRQYXRoKSxcclxuICAgICAgICBpdGVtOiBpdGVtLFxyXG4gICAgICAgIGFjbDogdXNlckNvbmZpZy5hY2wgfHwgXCJwdWJsaWMtcmVhZFwiLFxyXG4gICAgICAgIHVybFByZWZpeDogdXNlckNvbmZpZy51cmxQcmVmaXgsXHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gICAgbGV0IHJlc3VsdHM6IElVcGxvYWRSZXN1bHRbXVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbCh0YXNrcylcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoXCLkuIrkvKDliLAgUzMg5a2Y5YKo5Y+R55Sf6ZSZ6K+v77yM6K+35qOA5p+l572R57uc6L+e5o6l5ZKM6YWN572u5piv5ZCm5q2j56GuXCIpXHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICBjdHguZW1pdChcIm5vdGlmaWNhdGlvblwiLCB7XHJcbiAgICAgICAgdGl0bGU6IFwiUzMg5a2Y5YKo5LiK5Lyg6ZSZ6K+vXCIsXHJcbiAgICAgICAgYm9keTogXCLor7fmo4Dmn6XphY3nva7mmK/lkKbmraPnoa5cIixcclxuICAgICAgICB0ZXh0OiBcIlwiLFxyXG4gICAgICB9KVxyXG4gICAgICB0aHJvdyBlcnJcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgIGNvbnN0IHsgaW5kZXgsIHVybCwgaW1nVVJMIH0gPSByZXN1bHRcclxuICAgICAgZGVsZXRlIG91dHB1dFtpbmRleF0uYnVmZmVyXHJcbiAgICAgIGRlbGV0ZSBvdXRwdXRbaW5kZXhdLmJhc2U2NEltYWdlXHJcbiAgICAgIG91dHB1dFtpbmRleF0uaW1nVXJsID0gaW1nVVJMXHJcbiAgICAgIG91dHB1dFtpbmRleF0udXJsID0gdXJsXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IGRlZmF1bHRDb25maWc6IElBd3NTM1BMaXN0VXNlckNvbmZpZyA9IHtcclxuICAgIGFjY2Vzc0tleUlEOiBcIlwiLFxyXG4gICAgc2VjcmV0QWNjZXNzS2V5OiBcIlwiLFxyXG4gICAgYnVja2V0TmFtZTogXCJcIixcclxuICAgIHVwbG9hZFBhdGg6IFwie3llYXJ9L3ttb250aH0ve21kNX0ue2V4dE5hbWV9XCIsXHJcbiAgICBwYXRoU3R5bGVBY2Nlc3M6IGZhbHNlLFxyXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiB0cnVlLFxyXG4gICAgYWNsOiBcInB1YmxpYy1yZWFkXCIsXHJcbiAgfVxyXG4gIGxldCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQXdzUzNQTGlzdFVzZXJDb25maWc+KCdwaWNCZWQuYXdzLXMzLXBsaXN0JykgfHwge31cclxuICB1c2VyQ29uZmlnID0geyAuLi5kZWZhdWx0Q29uZmlnLCAuLi51c2VyQ29uZmlnIH1cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJhY2Nlc3NLZXlJRFwiLFxyXG4gICAgICB0eXBlOiBcImlucHV0XCIsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SUQsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInNlY3JldEFjY2Vzc0tleVwiLFxyXG4gICAgICB0eXBlOiBcImlucHV0XCIsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0QWNjZXNzS2V5LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVknKSB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJidWNrZXROYW1lXCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXROYW1lLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQnKSB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJ1cGxvYWRQYXRoXCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VQTE9BRFBBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKSB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJyZWdpb25cIixcclxuICAgICAgdHlwZTogXCJpbnB1dFwiLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlZ2lvbixcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUdJT04nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTicpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImVuZHBvaW50XCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCcpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInByb3h5XCIsXHJcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BST1hZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWScpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInVybFByZWZpeFwiLFxyXG4gICAgICB0eXBlOiBcImlucHV0XCIsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsUHJlZml4LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYJykgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwicGF0aFN0eWxlQWNjZXNzXCIsXHJcbiAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGhTdHlsZUFjY2VzcyB8fCBmYWxzZSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1MnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUycpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInJlamVjdFVuYXV0aG9yaXplZFwiLFxyXG4gICAgICB0eXBlOiBcImNvbmZpcm1cIixcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWplY3RVbmF1dGhvcml6ZWQgfHwgdHJ1ZSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRCcpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImFjbFwiLFxyXG4gICAgICB0eXBlOiBcImlucHV0XCIsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNsIHx8IFwicHVibGljLXJlYWRcIixcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0wnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCcpIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTFwiLFxyXG4gICAgICB0eXBlOiBcImlucHV0XCIsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMIHx8IGZhbHNlLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJykgfSxcclxuICAgIH0sXHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYXdzLXMzLXBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1QnKVxyXG4gICAgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBpY0dvUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBTTU1TVXBsb2FkZXIgZnJvbSAnLi9zbW1zJ1xyXG5pbXBvcnQgdGNZdW5VcGxvYWRlciBmcm9tICcuL3RjeXVuJ1xyXG5pbXBvcnQgZ2l0aHViVXBsb2FkZXIgZnJvbSAnLi9naXRodWInXHJcbmltcG9ydCBxaW5pdVVwbG9hZGVyIGZyb20gJy4vcWluaXUnXHJcbmltcG9ydCBpbWd1clVwbG9hZGVyIGZyb20gJy4vaW1ndXInXHJcbmltcG9ydCBhbGlZdW5VcGxvYWRlciBmcm9tICcuL2FsaXl1bidcclxuaW1wb3J0IHVwWXVuVXBsb2FkZXIgZnJvbSAnLi91cHl1bidcclxuaW1wb3J0IHdlYmRhdnBsaXN0VXBsb2FkZXIgZnJvbSAnLi93ZWJkYXYnXHJcbmltcG9ydCBsb2NhbFVwbG9hZGVyIGZyb20gJy4vbG9jYWwnXHJcbmltcG9ydCBzZnRwVXBsb2FkZXIgZnJvbSAnLi9zZnRwJ1xyXG5pbXBvcnQgdGVsZWdyYXBoVXBsb2FkZXIgZnJvbSAnLi90ZWxlZ3JhcGgnXHJcbmltcG9ydCBwaWNsaXN0VXBsb2FkZXIgZnJvbSAnLi9waWNsaXN0J1xyXG5pbXBvcnQgbHNreVVwbG9hZGVyIGZyb20gJy4vbHNreSdcclxuaW1wb3J0IGF3c3MzcGxpc3RVcGxvYWRlciBmcm9tICcuL2F3c3MzcGxpc3QnXHJcblxyXG5jb25zdCBidWlsZEluVXBsb2FkZXJzOiBJUGljR29QbHVnaW4gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlZ2lzdGVyIChjdHg6IElQaWNHbykge1xyXG4gICAgICBhbGlZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIHRjWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICBTTU1TVXBsb2FkZXIoY3R4KVxyXG4gICAgICBnaXRodWJVcGxvYWRlcihjdHgpXHJcbiAgICAgIHFpbml1VXBsb2FkZXIoY3R4KVxyXG4gICAgICBpbWd1clVwbG9hZGVyKGN0eClcclxuICAgICAgdXBZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIHdlYmRhdnBsaXN0VXBsb2FkZXIoY3R4KVxyXG4gICAgICBsb2NhbFVwbG9hZGVyKGN0eClcclxuICAgICAgc2Z0cFVwbG9hZGVyKGN0eClcclxuICAgICAgdGVsZWdyYXBoVXBsb2FkZXIoY3R4KVxyXG4gICAgICBwaWNsaXN0VXBsb2FkZXIoY3R4KVxyXG4gICAgICBsc2t5VXBsb2FkZXIoY3R4KVxyXG4gICAgICBhd3NzM3BsaXN0VXBsb2FkZXIoY3R4KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblVwbG9hZGVyc1xyXG4iLCJpbXBvcnQge1xyXG4gIGlzVXJsLFxyXG4gIGdldEltYWdlU2l6ZSxcclxuICBnZXRGU0ZpbGUsXHJcbiAgZ2V0VVJMRmlsZVxyXG59IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sIHR5cGUgSUltZ0luZm8sIHR5cGUgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCByZXN1bHRzOiBJSW1nSW5mb1tdID0gY3R4Lm91dHB1dFxyXG4gIGF3YWl0IFByb21pc2UuYWxsKGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZyB8IEJ1ZmZlciwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvXHJcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGl0ZW0pKSB7XHJcbiAgICAgIGluZm8gPSB7XHJcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICBidWZmZXI6IGl0ZW0sXHJcbiAgICAgICAgZmlsZU5hbWU6ICcnLFxyXG4gICAgICAgIGV4dG5hbWU6ICcnXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNVcmwoaXRlbSkpIHtcclxuICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5mbyA9IGF3YWl0IGdldEZTRmlsZShpdGVtKVxyXG4gICAgfVxyXG4gICAgaWYgKGluZm8uc3VjY2VzcyAmJiBpbmZvLmJ1ZmZlcikge1xyXG4gICAgICBjb25zdCBpbWdTaXplID0gZ2V0SW1nU2l6ZShjdHgsIGluZm8uYnVmZmVyLCBpdGVtKVxyXG4gICAgICBjb25zdCBleHRuYW1lID0gaW5mby5leHRuYW1lIHx8IGltZ1NpemUuZXh0bmFtZSB8fCAnLnBuZydcclxuICAgICAgcmVzdWx0c1tpbmRleF0gPSB7XHJcbiAgICAgICAgYnVmZmVyOiBpbmZvLmJ1ZmZlcixcclxuICAgICAgICBmaWxlTmFtZTogaW5mby5maWxlTmFtZSB8fCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ke2V4dG5hbWV9YCxcclxuICAgICAgICB3aWR0aDogaW1nU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGltZ1NpemUuaGVpZ2h0LFxyXG4gICAgICAgIGV4dG5hbWU6IGluZm8uZXh0bmFtZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLmVycm9yKGluZm8ucmVhc29uKVxyXG4gICAgfVxyXG4gIH0pKVxyXG4gIC8vIHJlbW92ZSBlbXB0eSBpdGVtXHJcbiAgY3R4Lm91dHB1dCA9IHJlc3VsdHMuZmlsdGVyKGl0ZW0gPT4gaXRlbSlcclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmNvbnN0IGdldEltZ1NpemUgPSAoY3R4OiBJUGljR28sIGZpbGU6IEJ1ZmZlciwgcGF0aDogc3RyaW5nIHwgQnVmZmVyKTogSUltZ1NpemUgPT4ge1xyXG4gIGNvbnN0IGltYWdlU2l6ZSA9IGdldEltYWdlU2l6ZShmaWxlKVxyXG4gIGlmICghaW1hZ2VTaXplLnJlYWwpIHtcclxuICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKGBjYW4ndCBnZXQgJHtwYXRofSdzIGltYWdlIHNpemVgKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3R4LmxvZy53YXJuKCdjYW5cXCd0IGdldCBpbWFnZSBzaXplJylcclxuICAgIH1cclxuICAgIGN0eC5sb2cud2FybignZmFsbGJhY2sgdG8gMjAwICogMjAwJylcclxuICB9XHJcbiAgcmV0dXJuIGltYWdlU2l6ZVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgaGFuZGxlXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHJlc29sdmUgZnJvbSAncmVzb2x2ZSdcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQaWNHb1BsdWdpbiwgdHlwZSBJUGx1Z2luTG9hZGVyLCB0eXBlIElQaWNHb1BsdWdpbkludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xyXG5pbXBvcnQgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcclxuXHJcbi8qKlxyXG4gKiBMb2NhbCBwbHVnaW4gbG9hZGVyLCBmaWxlIHN5c3RlbSBpcyByZXF1aXJlZFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBsdWdpbkxvYWRlciBpbXBsZW1lbnRzIElQbHVnaW5Mb2FkZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIGxpc3Q6IHN0cmluZ1tdID0gW11cclxuICBwcml2YXRlIHJlYWRvbmx5IGZ1bGxMaXN0ID0gbmV3IFNldDxzdHJpbmc+KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJUGljR29QbHVnaW5JbnRlcmZhY2U+KClcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VQYXRoKSkge1xyXG4gICAgICBjb25zdCBwa2cgPSB7XHJcbiAgICAgICAgbmFtZTogJ3BpY2dvLXBsdWdpbnMnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgcmVwb3NpdG9yeTogJ2h0dHBzOi8vZ2l0aHViLmNvbS9LdWluZ3NtaWxlL1BpY0xpc3QtQ29yZScsXHJcbiAgICAgICAgbGljZW5zZTogJ01JVCdcclxuICAgICAgfVxyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHBhY2thZ2VQYXRoLCBKU09OLnN0cmluZ2lmeShwa2cpLCAndXRmOCcpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGVudHJ5XHJcbiAgcHJpdmF0ZSByZXNvbHZlUGx1Z2luIChjdHg6IElQaWNHbywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiByZXNvbHZlLnN5bmMobmFtZSwgeyBiYXNlZGlyOiBjdHguYmFzZURpciB9KVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMnLCBuYW1lKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gbG9hZCBhbGwgdGhpcmQgcGFydHkgcGx1Z2luXHJcbiAgbG9hZCAoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAncGFja2FnZS5qc29uJylcclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBUaGFua3MgdG8gaGV4byAtPiBodHRwczovL2dpdGh1Yi5jb20vaGV4b2pzL2hleG8vYmxvYi9tYXN0ZXIvbGliL2hleG8vbG9hZF9wbHVnaW5zLmpzXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGx1Z2luRGlyKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIGNvbnN0IGpzb24gPSBmcy5yZWFkSlNPTlN5bmMocGFja2FnZVBhdGgpXHJcbiAgICBjb25zdCBkZXBzID0gT2JqZWN0LmtleXMoanNvbi5kZXBlbmRlbmNpZXMgfHwge30pXHJcbiAgICBjb25zdCBkZXZEZXBzID0gT2JqZWN0LmtleXMoanNvbi5kZXZEZXBlbmRlbmNpZXMgfHwge30pXHJcbiAgICBjb25zdCBtb2R1bGVzID0gZGVwcy5jb25jYXQoZGV2RGVwcykuZmlsdGVyKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCEvXnBpY2dvLXBsdWdpbi18XkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHJldHVybiBmYWxzZVxyXG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5yZXNvbHZlUGx1Z2luKHRoaXMuY3R4LCBuYW1lKVxyXG4gICAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKVxyXG4gICAgfSlcclxuICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbihtb2R1bGUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJQbHVnaW4gKG5hbWU6IHN0cmluZywgcGx1Z2luPzogSVBpY0dvUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdQbGVhc2UgcHJvdmlkZSB2YWxpZCBwbHVnaW4nKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZnVsbExpc3QuYWRkKG5hbWUpXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyByZWdpc3RlciBsb2NhbCBwbHVnaW5cclxuICAgICAgaWYgKCFwbHVnaW4pIHtcclxuICAgICAgICBpZiAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB0cnVlIHx8ICh0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXHJcbiAgICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgIHRoaXMuZ2V0UGx1Z2luKG5hbWUpIS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IGBwaWNnb1BsdWdpbnNbJHtuYW1lfV1gXHJcbiAgICAgICAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgW3BsdWdpbl06IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyByZWdpc3RlciBwcm92aWRlZCBwbHVnaW5cclxuICAgICAgICAvLyAmJiB3b24ndCB3cml0ZSBjb25maWcgdG8gZmlsZXNcclxuICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXHJcbiAgICAgICAgY29uc3QgcGx1Z2luSW50ZXJmYWNlID0gcGx1Z2luKHRoaXMuY3R4KVxyXG4gICAgICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW5JbnRlcmZhY2UpXHJcbiAgICAgICAgcGx1Z2luSW50ZXJmYWNlLnJlZ2lzdGVyKHRoaXMuY3R4KVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGBQbHVnaW4gJHtuYW1lfSBMb2FkIEVycm9yYCxcclxuICAgICAgICBib2R5OiBlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcclxuICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXHJcbiAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIudXBsb2FkZXIudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnRyYW5zZm9ybWVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVUcmFuc2Zvcm1QbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguY21kLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LnJlbW92ZUNvbmZpZygncGljZ29QbHVnaW5zJywgbmFtZSlcclxuICB9XHJcblxyXG4gIC8vIGdldCBwbHVnaW4gYnkgbmFtZVxyXG4gIGdldFBsdWdpbiAobmFtZTogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbk1hcC5oYXMobmFtZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTWFwLmdldChuYW1lKVxyXG4gICAgfVxyXG4gICAgY29uc3QgcGx1Z2luRGlyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMvJylcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbiAgICBjb25zdCBwbHVnaW4gPSByZXF1aXJlKHBsdWdpbkRpciArIG5hbWUpKHRoaXMuY3R4KVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbilcclxuICAgIHJldHVybiBwbHVnaW5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbGlzdCBvZiBlbmFibGVkIHBsdWdpbnNcclxuICAgKi9cclxuICBnZXRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0XHJcbiAgfVxyXG5cclxuICBoYXNQbHVnaW4gKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZnVsbExpc3QuaGFzKG5hbWUpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGZ1bGwgbGlzdCBvZiBwbHVnaW5zLCB3aGV0aGVyIGl0IGlzIGVuYWJsZWQgb3Igbm90XHJcbiAgICovXHJcbiAgZ2V0RnVsbExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5mdWxsTGlzdF1cclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luTG9hZGVyXHJcbiIsImV4cG9ydCBjb25zdCBDTElQQk9BUkRfSU1BR0VfRk9MREVSID0gJ3BpY2xpc3QtY2xpcGJvYXJkLWltYWdlcydcclxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcbmltcG9ydCBvcyBmcm9tICdvcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgaXNXc2wgZnJvbSAnaXMtd3NsJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4vZW51bSdcclxuaW1wb3J0IG1hY0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9tYWMuYXBwbGVzY3JpcHQnXHJcbmltcG9ydCB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MucHMxJ1xyXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXHJcbmltcG9ydCBsaW51eENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9saW51eC5zaCdcclxuaW1wb3J0IHdzbENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93c2wuc2gnXHJcbmltcG9ydCB7IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgfSBmcm9tICcuL3N0YXRpYydcclxuXHJcbmV4cG9ydCB0eXBlIFBsYXRmb3JtID0gJ2RhcndpbicgfCAnd2luMzInIHwgJ3dpbjEwJyB8ICdsaW51eCcgfCAnd3NsJ1xyXG5cclxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcclxuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cclxuICBpZiAoaXNXc2wpIHtcclxuICAgIHJldHVybiAnd3NsJ1xyXG4gIH1cclxuICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRPUyA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpWzBdXHJcbiAgICBpZiAoY3VycmVudE9TID09PSAnMTAnKSB7XHJcbiAgICAgIHJldHVybiAnd2luMTAnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ3dpbjMyJ1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICByZXR1cm4gJ2RhcndpbidcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuICdsaW51eCdcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdENvbnRlbnQ6IHtcclxuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXHJcbn0gPSB7XHJcbiAgZGFyd2luOiBtYWNDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMzI6IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcclxuICBsaW51eDogbGludXhDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd3NsOiB3c2xDbGlwYm9hcmRTY3JpcHRcclxufVxyXG4vKipcclxuICogcG93ZXJzaGVsbCB3aWxsIHJlcG9ydCBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGhhdmUgYSAnLnBzMScgZXh0ZW5zaW9uLFxyXG4gKiBzbyB3ZSBzaG91bGQga2VlcCB0aGUgZXh0ZW5zaW9uIG5hbWUgY29uc2lzdGVudCB3aXRoIGNvcnJlc3BvbmRpbmcgc2hlbGxcclxuICovXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lOiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogJ21hYy5hcHBsZXNjcmlwdCcsXHJcbiAgd2luMzI6ICd3aW5kb3dzLnBzMScsXHJcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcclxuICBsaW51eDogJ2xpbnV4LnNoJyxcclxuICB3c2w6ICd3c2wuc2gnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUltYWdlRm9sZGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUilcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoaW1hZ2VQYXRoKSkge1xyXG4gICAgZnMubWtkaXJTeW5jKGltYWdlUGF0aClcclxuICB9XHJcbn1cclxuXHJcbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcclxuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xyXG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcclxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcclxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogYW55LCByZWplY3Q6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50UGxhdGZvcm0oKVxyXG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWVbcGxhdGZvcm1dKVxyXG4gICAgLy8gSWYgdGhlIHNjcmlwdCBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGNvbnRlbnQgdG8gdGhlIHNjcmlwdCBmaWxlXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2NyaXB0UGF0aCkpIHtcclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhcclxuICAgICAgICBzY3JpcHRQYXRoLFxyXG4gICAgICAgIHBsYXRmb3JtMlNjcmlwdENvbnRlbnRbcGxhdGZvcm1dLFxyXG4gICAgICAgICd1dGY4J1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBsZXQgZXhlY3V0aW9uXHJcbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdvc2FzY3JpcHQnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicgfHwgcGxhdGZvcm0gPT09ICd3aW4xMCcpIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3Bvd2Vyc2hlbGwnLCBbXHJcbiAgICAgICAgJy1ub3Byb2ZpbGUnLFxyXG4gICAgICAgICctbm9uaW50ZXJhY3RpdmUnLFxyXG4gICAgICAgICctbm9sb2dvJyxcclxuICAgICAgICAnLXN0YScsXHJcbiAgICAgICAgJy1leGVjdXRpb25wb2xpY3knLCAndW5yZXN0cmljdGVkJyxcclxuICAgICAgICAvLyBmaXggd2luZG93cyAxMCBuYXRpdmUgY21kIGNyYXNoIGJ1ZyB3aGVuIFwicGljZ28gdXBsb2FkXCJcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vUGljR28vUGljR28tQ29yZS9pc3N1ZXMvMzJcclxuICAgICAgICAvLyAnLXdpbmRvd3N0eWxlJywnaGlkZGVuJyxcclxuICAgICAgICAvLyAnLW5vZXhpdCcsXHJcbiAgICAgICAgJy1maWxlJywgc2NyaXB0UGF0aCxcclxuICAgICAgICBpbWFnZVBhdGhcclxuICAgICAgXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdzaCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGlvbi5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XHJcbiAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xyXG4gICAgICAgIGlmIChkYXRhLnRvU3RyaW5nKCkudHJpbSgpID09PSAnbm8geGNsaXAgb3Igd2wtY2xpcGJvYXJkJykge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6ICd4Y2xpcCBvciB3bC1jbGlwYm9hcmQgbm90IGZvdW5kJyxcclxuICAgICAgICAgICAgYm9keTogJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbydcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGltZ1BhdGggPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpXHJcblxyXG4gICAgICAvLyBpZiB0aGUgZmlsZVBhdGggaXMgdGhlIHJlYWwgZmlsZSBpbiBzeXN0ZW1cclxuICAgICAgLy8gd2Ugc2hvdWxkIGtlZXAgaXQgaW5zdGVhZCBvZiByZW1vdmluZ1xyXG4gICAgICBsZXQgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gZmFsc2VcclxuXHJcbiAgICAgIC8vIGluIG1hY09TIGlmIHlvdXIgY29weSB0aGUgZmlsZSBpbiBzeXN0ZW0sIGl0J3MgYmFzZW5hbWUgd2lsbCBub3QgZXF1YWwgdG8gb3VyIGRlZmF1bHQgYmFzZW5hbWVcclxuICAgICAgaWYgKHBhdGguYmFzZW5hbWUoaW1nUGF0aCkgIT09IHBhdGguYmFzZW5hbWUoaW1hZ2VQYXRoKSkge1xyXG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIG5vdCBnZW5lcmF0ZSBieSBwaWNnb1xyXG4gICAgICAgIC8vIGJ1dCB0aGUgcGF0aCBleGlzdHMsIHdlIHNob3VsZCBrZWVwIGl0XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgdGhlIGltZ1BhdGggaXMgaW52YWxpZFxyXG4gICAgICBpZiAoaW1nUGF0aCAhPT0gJ25vIGltYWdlJyAmJiAhZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBDYW4ndCBmaW5kICR7aW1nUGF0aH1gKSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgaW1nUGF0aCxcclxuICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmdcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ2V0Q2xpcGJvYXJkSW1hZ2VcclxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xyXG5cclxuY29uc3QgZXZlbnRCdXMgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuZXhwb3J0IHtcclxuICBldmVudEJ1c1xyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJvbWlzZS1mdW5jdGlvbi1hc3luYyAqL1xyXG5pbXBvcnQgYXhpb3MsIHsgdHlwZSBBeGlvc1JlcXVlc3RDb25maWcsIHR5cGUgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBVbmRlZmluYWJsZSwgdHlwZSBJQ29uZmlnQ2hhbmdlUGF5bG9hZCwgdHlwZSBJQ29uZmlnLCB0eXBlIElSZXF1ZXN0Q29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zLCB0eXBlIElSZXNwb25zZSwgdHlwZSBJRnVsbFJlc3BvbnNlLCB0eXBlIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcclxuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xyXG5pbXBvcnQgdHVubmVsIGZyb20gJ3R1bm5lbCdcclxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XHJcbiAgbWF4VmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIG1pblZlcnNpb246ICdUTFN2MS4yJyxcclxuICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXHJcbn0pXHJcblxyXG4vLyB0aGFua3MgZm9yIGh0dHBzOi8vZ2l0aHViLmRldi9yZXF1ZXN0L3JlcXVlc3QvYmxvYi9tYXN0ZXIvaW5kZXguanNcclxuZnVuY3Rpb24gYXBwZW5kRm9ybURhdGEgKGZvcm06IEZvcm1EYXRhLCBrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAndmFsdWUnIGluIGRhdGEgJiYgJ29wdGlvbnMnIGluIGRhdGEpIHtcclxuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YS52YWx1ZSwgZGF0YS5vcHRpb25zKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEpXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXF1ZXN0SW50ZXJjZXB0b3IgKG9wdGlvbnM6IElPbGRSZXFPcHRpb25zIHwgQXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NSZXF1ZXN0Q29uZmlnICYge1xyXG4gIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxyXG59IHtcclxuICBsZXQgX19pc09sZE9wdGlvbnMgPSBmYWxzZVxyXG4gIGNvbnN0IG9wdDogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gJiB7XHJcbiAgICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cclxuICB9ID0ge1xyXG4gICAgLi4ub3B0aW9ucyxcclxuICAgIHVybDogKG9wdGlvbnMudXJsIGFzIHN0cmluZykgfHwgJycsXHJcbiAgICBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfHwge31cclxuICB9XHJcbiAgLy8gdXNlciByZXF1ZXN0IGNvbmZpZyBwcm94eVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICBsZXQgcHJveHlPcHRpb25zID0gb3B0aW9ucy5wcm94eVxyXG4gICAgaWYgKHR5cGVvZiBwcm94eU9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcHJveHlPcHRpb25zID0gbmV3IFVSTChvcHRpb25zLnByb3h5KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcHJveHlPcHRpb25zID0gZmFsc2VcclxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgfVxyXG4gICAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICAgIH1cclxuICAgIGlmIChwcm94eU9wdGlvbnMpIHtcclxuICAgICAgaWYgKG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XHJcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcclxuICAgICAgICBvcHQuaHR0cHNBZ2VudCA9IHR1bm5lbC5odHRwc092ZXJIdHRwKHtcclxuICAgICAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucz8uaG9zdG5hbWUsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucz8ucG9ydCwgMTApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHQucHJveHkgPSB7XHJcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXHJcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCwgMTApLFxyXG4gICAgICAgICAgcHJvdG9jb2w6ICdodHRwJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoJ2Zvcm1EYXRhJyBpbiBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuZm9ybURhdGEpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IG9wdGlvbnMuZm9ybURhdGFba2V5XVxyXG4gICAgICBhcHBlbmRGb3JtRGF0YShmb3JtLCBrZXksIGRhdGEpXHJcbiAgICB9XHJcbiAgICBvcHQuZGF0YSA9IGZvcm1cclxuICAgIG9wdC5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbihvcHQuaGVhZGVycyB8fCB7fSwgZm9ybS5nZXRIZWFkZXJzKCkpXHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBvbGQgb3B0aW9uXHJcbiAgICBkZWxldGUgb3B0LmZvcm1EYXRhXHJcbiAgfVxyXG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xyXG4gICAgb3B0LmRhdGEgPSBvcHRpb25zLmJvZHlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25zXHJcbiAgICBkZWxldGUgb3B0LmJvZHlcclxuICB9XHJcbiAgaWYgKCdxcycgaW4gb3B0aW9ucykge1xyXG4gICAgb3B0LnBhcmFtcyA9IG9wdGlvbnMucXNcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gIH1cclxuICBvcHQuX19pc09sZE9wdGlvbnMgPSBfX2lzT2xkT3B0aW9uc1xyXG4gIHJldHVybiBvcHRcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzcG9uc2VJbnRlcmNlcHRvciAocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpOiBJRnVsbFJlc3BvbnNlIHtcclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzcG9uc2UsXHJcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXHJcbiAgICBib2R5OiByZXNwb25zZS5kYXRhXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNwb25zZUVycm9ySGFuZGxlciAoZXJyb3I6IGFueSkge1xyXG4gIC8vIGlmIChlcnJvci5yZXNwb25zZSkge1xyXG4gIC8vICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYW5kIHRoZSBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggYSBzdGF0dXMgY29kZVxyXG4gIC8vICAgLy8gdGhhdCBmYWxscyBvdXQgb2YgdGhlIHJhbmdlIG9mIDJ4eFxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm8pXHJcbiAgLy8gfSBlbHNlIGlmIChlcnJvci5yZXF1ZXN0KSB7XHJcbiAgLy8gICAvLyBUaGUgcmVxdWVzdCB3YXMgbWFkZSBidXQgbm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkXHJcbiAgLy8gICAvLyBgZXJyb3IucmVxdWVzdGAgaXMgYW4gaW5zdGFuY2Ugb2YgWE1MSHR0cFJlcXVlc3QgaW4gdGhlIGJyb3dzZXIgYW5kIGFuIGluc3RhbmNlIG9mXHJcbiAgLy8gICAvLyBodHRwLkNsaWVudFJlcXVlc3QgaW4gbm9kZS5qc1xyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLnJlcXVlc3QpXHJcbiAgLy8gfSBlbHNlIHtcclxuICAvLyAgIC8vIFNvbWV0aGluZyBoYXBwZW5lZCBpbiBzZXR0aW5nIHVwIHRoZSByZXF1ZXN0IHRoYXQgdHJpZ2dlcmVkIGFuIEVycm9yXHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IubWVzc2FnZSlcclxuICAvLyB9XHJcbiAgY29uc3QgZXJyb3JPYmogPSB7XHJcbiAgICBtZXRob2Q6IGVycm9yPy5jb25maWc/Lm1ldGhvZD8udG9VcHBlckNhc2UoKSB8fCAnJyxcclxuICAgIHVybDogZXJyb3I/LmNvbmZpZz8udXJsIHx8ICcnLFxyXG4gICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICcnLFxyXG4gICAgc3RhY2s6IGVycm9yPy5zdGFjayB8fCB7fSxcclxuICAgIHJlc3BvbnNlOiB7XHJcbiAgICAgIHN0YXR1czogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgICAgYm9keTogZXJyb3I/LnJlc3BvbnNlPy5kYXRhIHx8ICcnXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvck9iailcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3QgaW1wbGVtZW50cyBJUmVxdWVzdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcHJveHk6IFVuZGVmaW5hYmxlPHN0cmluZz4gPSAnJ1xyXG4gIG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ID0ge31cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gICAgZXZlbnRCdXMub24oSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIChkYXRhOiBJQ29uZmlnQ2hhbmdlUGF5bG9hZDxzdHJpbmcgfCBJQ29uZmlnWydwaWNCZWQnXT4pID0+IHtcclxuICAgICAgc3dpdGNoIChkYXRhLmNvbmZpZ05hbWUpIHtcclxuICAgICAgICBjYXNlICdwaWNCZWQnOlxyXG4gICAgICAgICAgaWYgKChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKT8ucHJveHkpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm94eSA9IChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKS5wcm94eVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdwaWNCZWQucHJveHknOlxyXG4gICAgICAgICAgdGhpcy5wcm94eSA9IGRhdGEudmFsdWUgYXMgc3RyaW5nXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQucHJveHknKVxyXG4gICAgaWYgKHByb3h5KSB7XHJcbiAgICAgIHRoaXMucHJveHkgPSBwcm94eVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVQcm94eSAoKTogQXhpb3NSZXF1ZXN0Q29uZmlnWydwcm94eSddIHwgZmFsc2Uge1xyXG4gICAgaWYgKHRoaXMucHJveHkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKHRoaXMucHJveHkpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0IHx8ICcwJywgMTApLFxyXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3h5T3B0aW9ucy5wcm90b2NvbFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8vICM2NCBkeW5hbWljIGdldCBwcm94eSB2YWx1ZVxyXG4gIHJlcXVlc3Q8VCwgVSBleHRlbmRzIChcclxuICAgIElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgSU9sZFJlcU9wdGlvbnMgPyBJT2xkUmVxT3B0aW9ucyA6IElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgQXhpb3NSZXF1ZXN0Q29uZmlnID8gQXhpb3NSZXF1ZXN0Q29uZmlnIDogbmV2ZXJcclxuICApPiAob3B0aW9uczogVSk6IFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PiB7XHJcbiAgICB0aGlzLm9wdGlvbnMucHJveHkgPSB0aGlzLmhhbmRsZVByb3h5KClcclxuICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IEluZmluaXR5XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4Q29udGVudExlbmd0aCA9IEluZmluaXR5XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb3h5ICYmIG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgICBob3N0OiB0aGlzLm9wdGlvbnMucHJveHkuaG9zdCxcclxuICAgICAgICAgIHBvcnQ6IHRoaXMub3B0aW9ucy5wcm94eS5wb3J0XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLm9wdGlvbnMucHJveHkgPSBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSBodHRwc0FnZW50XHJcbiAgICB9XHJcbiAgICAvLyAhTk9USUNFIHRoaXMub3B0aW9ucyAhPT0gb3B0aW9uc1xyXG4gICAgLy8gdGhpcy5vcHRpb25zIGlzIHRoZSBkZWZhdWx0IG9wdGlvbnNcclxuICAgIGNvbnN0IGluc3RhbmNlID0gYXhpb3MuY3JlYXRlKHRoaXMub3B0aW9ucylcclxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UocmVzcG9uc2VJbnRlcmNlcHRvciwgcmVzcG9uc2VFcnJvckhhbmRsZXIpXHJcblxyXG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIG9sZCByZXF1ZXN0IG9wdGlvbnMgdG8gbmV3IG9wdGlvbnNcclxuICAgIGNvbnN0IG9wdCA9IHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zKVxyXG5cclxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIC8vIGhhbmRsZSBDb250ZW50LVR5cGVcclxuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gJydcclxuICAgICAgaWYgKG9iaj8uaGVhZGVycz8uY29udGVudFR5cGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5jb250ZW50VHlwZVxyXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uQ29udGVudFR5cGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5Db250ZW50VHlwZVxyXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uWydjb250ZW50LXR5cGUnXSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ11cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29udGVudFR5cGUgIT09ICcnICYmIG9iai5oZWFkZXJzKSB7XHJcbiAgICAgICAgb2JqLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqXHJcbiAgICB9KVxyXG4gICAgaWYgKCdyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZScgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSB7XHJcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIC8vIHVzZSBvbGQgcmVxdWVzdCBvcHRpb24gZm9ybWF0XHJcbiAgICAgICAgaWYgKG9wdC5fX2lzT2xkT3B0aW9ucykge1xyXG4gICAgICAgICAgaWYgKCdqc29uJyBpbiBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pIGFzIFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PlxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdFxyXG4iLCJpbXBvcnQgeyB0eXBlIElDb25maWcsIHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcclxuaW1wb3J0IHsgdHlwZSBJSlNPTiB9IGZyb20gJ0BwaWNnby9zdG9yZS9kaXN0L3R5cGVzJ1xyXG5cclxuY2xhc3MgREIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHJlYWRvbmx5IGRiOiBKU09OU3RvcmVcclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmRiID0gbmV3IEpTT05TdG9yZSh0aGlzLmN0eC5jb25maWdQYXRoKVxyXG5cclxuICAgIGlmICghdGhpcy5kYi5oYXMoJ3BpY0JlZCcpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY0JlZCcsIHtcclxuICAgICAgICAgIHVwbG9hZGVyOiAnc21tcycsXHJcbiAgICAgICAgICBjdXJyZW50OiAnc21tcydcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kYi5oYXMoJ3BpY2dvUGx1Z2lucycpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY2dvUGx1Z2lucycsIHt9KVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlYWQgKGZsdXNoPzogYm9vbGVhbik6IElKU09OIHtcclxuICAgIHJldHVybiB0aGlzLmRiLnJlYWQoZmx1c2gpXHJcbiAgfVxyXG5cclxuICBnZXQgKGtleTogc3RyaW5nID0gJycpOiBhbnkge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICByZXR1cm4gdGhpcy5kYi5nZXQoa2V5KVxyXG4gIH1cclxuXHJcbiAgc2V0IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICB0aGlzLmRiLnNldChrZXksIHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgaGFzIChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICByZXR1cm4gdGhpcy5kYi5oYXMoa2V5KVxyXG4gIH1cclxuXHJcbiAgdW5zZXQgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLnVuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlnIChjb25maWc6IFBhcnRpYWw8SUNvbmZpZz4pOiB2b2lkIHtcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25maWcgKGNvbmZpZzogSUNvbmZpZyk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy51bnNldChuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgREJcclxuXHJcbi8vIGNvbnN0IGluaXRDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nKTogbG93ZGIuTG93ZGJTeW5jPGFueT4gPT4ge1xyXG4vLyB9XHJcblxyXG4vLyBjb25zdCBzYXZlQ29uZmlnID0gKGNvbmZpZ1BhdGg6IHN0cmluZywgY29uZmlnOiBhbnkpOiB2b2lkID0+IHtcclxuLy8gICBjb25zdCBkYiA9IGluaXRDb25maWcoY29uZmlnUGF0aClcclxuLy8gICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4vLyAgICAgZGIucmVhZCgpLnNldChuYW1lLCBjb25maWdbbmFtZV0pLndyaXRlKClcclxuLy8gICB9KVxyXG4vLyB9XHJcblxyXG4vLyBleHBvcnQge1xyXG4vLyBpbml0Q29uZmlnLFxyXG4vLyBzYXZlQ29uZmlnXHJcbi8vIH1cclxuIiwiaW1wb3J0IHNwYXduIGZyb20gJ2Nyb3NzLXNwYXduJ1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgSVJlc3VsdCxcclxuICB0eXBlIElQcm9jZXNzRW52LFxyXG4gIHR5cGUgSVBsdWdpblByb2Nlc3NSZXN1bHQsXHJcbiAgdHlwZSBJUGx1Z2luSGFuZGxlcixcclxuICB0eXBlIElQbHVnaW5IYW5kbGVyT3B0aW9ucyxcclxuICB0eXBlIFVuZGVmaW5hYmxlLFxyXG4gIHR5cGUgSVBpY0dvLFxyXG4gIHR5cGUgSVBsdWdpbkhhbmRsZXJSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGdldFByb2Nlc3NQbHVnaW5OYW1lLCBnZXROb3JtYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vaTE4bi96aC1DTidcclxuXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5IYW5kbGVyIGltcGxlbWVudHMgSVBsdWdpbkhhbmRsZXIge1xyXG4gIC8vIFRoYW5rcyB0byBmZWZsb3cgLT4gaHR0cHM6Ly9naXRodWIuY29tL2ZlZmxvdy9mZWZsb3cvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL2luc3RhbGwvcGx1Z2luLmpzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGFzeW5jIGluc3RhbGwgKHBsdWdpbnM6IHN0cmluZ1tdLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52PzogSVByb2Nlc3NFbnYpOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBzdHJpbmdbXSA9IFtdXHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcclxuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAvLyBkZXRlY3QgaWYgaGFzIGFscmVhZHkgaW5zdGFsbGVkXHJcbiAgICAgICAgLy8gb3Igd2lsbCBjYXVzZSBlcnJvclxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5wbHVnaW5Mb2FkZXIuaGFzUGx1Z2luKGl0ZW0ucGtnTmFtZSkpIHtcclxuICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChpdGVtLnBrZ05hbWUpXHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2VzcyhgUGljTGlzdCBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcclxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcclxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXHJcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVuaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZSAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kIChjbWQ6IHN0cmluZywgbW9kdWxlczogc3RyaW5nW10sIHdoZXJlOiBzdHJpbmcsIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY6IElQcm9jZXNzRW52ID0ge30pOiBQcm9taXNlPElSZXN1bHQ+IHtcclxuICAgIC8vIG9wdGlvbnMgZmlyc3RcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcclxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXHJcbiAgICAgIGlmIChyZWdpc3RyeSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3h5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7IGN3ZDogd2hlcmUsIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudikgfSlcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXHJcbiAgICAgICAgbnBtLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRvdXQpXHJcblxyXG4gICAgICAgIG5wbS5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3RkZXJyKVxyXG5cclxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xyXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IHtcclxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgZnVsbE5hbWU6ICcnLFxyXG4gICAgcGtnTmFtZTogJydcclxuICB9XHJcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcclxuICBpZiAoIXJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXHJcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxyXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcclxuICBpZiAoIXBrZ05hbWUpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxyXG4gICAgcGtnTmFtZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgeyBaSF9DTiwgdHlwZSBJTG9jYWxlc0tleSwgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXHJcblxyXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXHJcbmltcG9ydCB7IHR5cGUgSVN0cmluZ0tleU1hcCwgdHlwZSBJSTE4bk1hbmFnZXIgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcclxuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xyXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXHJcblxyXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcclxuICAnemgtQ04nOiBaSF9DTixcclxuICAnemgtVFcnOiBaSF9UVyxcclxuICBlbjogRU5cclxufVxyXG5cclxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcclxuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XHJcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcclxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4biAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xyXG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcclxuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcclxuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIgKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XHJcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcclxuICAgIH1cclxuICAgIHJldHVybiBpMThuRm9sZGVyXHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXHJcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGUgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFkZExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcclxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFuZ3VhZ2VMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBJMThuTWFuYWdlclxyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXHJcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLDkuIrkvKAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6K6+5a6a6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrpphY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWummFjY2Vzc0tleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICforr7lrprmjqXlhaXngrknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5p6B5pm65Y6L57ypJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAn5Zu+54mH5p6B5pm65Y6L57yp77yM6K+m5oOF6K+35Y+C6ICDW+aWh+aho+ivtOaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NjQzOCknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn5byA5ZCvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn5YWz6ZetJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICforr7lrprku5PlupPlkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICforr7lrprliIbmlK/lkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6K6+5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+iuvuWumuiuv+mXrue9keWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+iuvuWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICforr7lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6K6+5a6a55u45YaM5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICforr7lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5Lyg5pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6K6+5a6a5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ+iuvuWumuiHquWumuS5iUFQSeaOpeWFpeeCuScsXHJcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICforr7lrprpmLLnm5fpk75Ub2tlbicsXHJcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6K6+5a6a6L+H5pyf5pe26Ze0KOenkiknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxyXG5cclxuICAvLyB3ZWJkYXZwbGlzdFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICforr7lrprmjqXlj6PnvZHlnYAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn5ZCv55SoU1NMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHlnYDot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+iuvuWumuiupOivgeaWueW8jycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pe25ZCv55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/a2V5PTEyMzQ1NicsXHJcblxyXG4gIC8vIHNmdHBwbGlzdFxyXG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhoXnva5TRlRQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+iuvuWumuerr+WPoycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6K6+5a6a56eB6ZKlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+iuvuWumuengemSpeWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6K6+5a6a5paH5Lu255So5oi3Oue7hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICforr7lrprmlofku7bmnYPpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICforr7lrprmlofku7blpLnmnYPpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5jorqQyMicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6L6T5YWl56eB6ZKl5a+G56CBJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee9keWdgOaXtuS9v+eUqCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaC77yaMDc3NScsXHJcblxyXG4gIC8vIFBpY0xpc3RcclxuICBQSUNCRURfUElDTElTVDogJ1BpY0xpc3QnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BJQ0JFRDogJ+iuvuWumuWbvuW6iicsXHJcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+iuvuWumumFjee9ruWQjScsXHJcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAn6K6+5a6a6Ym05p2DS2V5JyxcclxuXHJcbiAgLy8gTHNreSBQcm9cclxuICBQSUNCRURfTFNLWV9QTElTVDogJ0xza3knLFxyXG4gIFBJQ0JFRF9MU0tZX1ZFUlNJT046ICforr7lrprniYjmnKwnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ+S+i+WmglYxJyxcclxuICBQSUNCRURfTFNLWV9IT1NUOiAn6K6+5a6a5Li75py6JyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tJyxcclxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICforr7lrprnrZbnlaVJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ+S+i+Wmgu+8mjEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6K6+5a6a55u45YaMSUQnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfpgInloavvvIxWMueJiOacrOmZkOWumicsXHJcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ+iuvuWumuadg+mZkCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAn5L6L5aaC77yacHVibGljJyxcclxuXHJcbiAgLy8gQXdzUzNQbGlzdFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ+iuvuWumkFjY2Vzc0tleUlkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6K6+5a6aU2VjcmV0QWNjZXNzS2V5JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ+iuvuWumlJlZ2lvbicsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICforr7lrproh6rlrprkuYnoioLngrknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAn6K6+5a6a5Luj55CGJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ+WQr+eUqHMzRm9yY2VQYXRoU3R5bGUnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+aLkue7neaXoOaViFRMU+ivgeS5pui/nuaOpScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAn6K6+5a6a5LiK5Lyg6LWE5rqQ55qE6K6/6Zeu562W55WlJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICflvIDlkK8gYHBhdGhTdHlsZUFjY2Vzc2Ag5pe277yM5piv5ZCm6KaB56aB55So5pyA57uI55Sf5oiQVVJM5Lit5re75YqgIGJ1Y2tldCDliY3nvIAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICfkvovlpoLvvJpBS0lBeHh4eHh4eHh4eHh4eCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZOiAn5L6L5aaC77yaeHh4eHh4eHh4eCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoLvvJp0ZXN0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ+mcgOimgeaXtuWQr+eUqCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHml7blkK/nlKgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaC77yacHVibGljLXJlYWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZyA6KaB5pe25ZCv55SoJyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/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+36YCJ5oup5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAn6K6+5a6a6YeN5ZG95ZCN5qC85byPJyxcclxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKblkK/nlKjph43lkb3lkI0nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICforr7lrprlm77niYfotKjph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6K+36L6T5YWlMC0xMDDnmoTmlbTmlbAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6L+b6KGM5qC85byP6L2s5o2iJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2s5o2i5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICforr7lrprovazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6K+36YCJ5oup6L2s5o2i5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6L+b6KGM5Zu+54mH57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnvKnmlL7ml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICforr7lrprnvKnmlL7lrr3luqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICforr7lrprnvKnmlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5Tov5vooYznvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICfmmK/lkKblnoLnm7Tnv7vovazlm77niYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2s5Zu+54mHJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICforr7lrprnvKnmlL7nmb7liIbmr5QnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6L+H5bCP5Zu+57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6L+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+S5Lu25ZCNJ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTG9jYWxlc0tleSA9IGtleW9mIHR5cGVvZiBaSF9DTlxyXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxyXG4iLCJpbXBvcnQgeyB0eXBlIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfVFc6IElMb2NhbGVzID0ge1xyXG4gIFVQTE9BRF9GQUlMRUQ6ICfkuIrlgrPlpLHmlZcnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5piv5ZCm5q2j56K6JyxcclxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+iri+aqouafpeS9oOeahOioreWumuWPiue2sui3rycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICfpjK/oqqTnorzvvJoke2NvZGV977yM6KuL5omT6ZaL54CP6Ka95Zmo6LK85LiK5Zyw5Z2A5p+l55yL55u46Zec5Y6f5ZugJyxcclxuICBTRVJWRVJfRVJST1I6ICfkvLrmnI3lmajlh7rpjK/vvIzoq4vph43oqaYnLFxyXG4gIEFVVEhfRkFJTEVEOiAn6KqN6K2J5aSx5pWXJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICflgpnnlKjkuIrlgrPntrLlnYAnLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIGxvY2FsXHJcbiAgUElDQkVEX0xPQ0FMOiAn5pys5ZywJyxcclxuICBQSUNCRURfTE9DQUxfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ+S+i+WmgiAvdXNyL2xvY2FsL2ltYWdlcy8nLFxyXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ+ioreWumue2suWdgOi3r+W+kScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOS6jue2sumggemhr+ekuueahOi3r+W+kScsXHJcblxyXG4gIC8vIEFsaS1jbG91ZFxyXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6Kit5a6aYWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICfoqK3lrpphY2Nlc3NLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJpvc3MtY24tYmVpamluZycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gVGVuY2VudC1jbG91ZFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfpqLDoqIrkupFDT1MnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ+ioreWumlNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+ioreWumkFwcElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ+S+i+Wmgu+8mjEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaYXAtYmVpamluZycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlTW9ncjInLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ+alteaZuuWjk+e4ricsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ+mXnOmWiScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICfplovllZMnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6ICflnJbniYfmpbXmmbrlo5PnuK7vvIzoqbPmg4Xoq4vlj4PogINb5paH5qqU6Kqq5piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2LzQ5MjU5KScsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6Kit5a6a5YCJ5bqr5ZCN56ixJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6Kit5a6a5YiG5pSv5ZCN56ixJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+ioreWumkFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICfoqK3lrproqKrllY/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICfoqK3lrppDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6Kit5a6aYWNjZXNzVG9rZW4nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+ioreWumuebuOewv+WQjScsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAn6Kit5a6aUFJPWFknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5YKz5pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ+ioreWumuaOpeWFpem7nicsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6Kit5a6a5pON5L2c5ZOhJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICfoqK3lrprmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAn6Kit5a6a5Yqg6YCf57ay5Z2AJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICfoqK3lrprpmLLnm5zpj4hUb2tlbicsXHJcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6Kit5a6a6YGO5pyf5pmC6ZaTKOenkiknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl5pON5L2c5ZOh5a+G56K8JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxyXG5cclxuICAvLyB3ZWJkYXZcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6Kit5a6aQVBJ5Li75qmfJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pmC5ZWf55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+ioreWumuWvhueivCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+ioreWumuiqjeitieaWueW8jycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICfoqK3lrprntrLnq5not6/lvpEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pmC5ZWf55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i8uOWFpeeUqOaItuWvhueivCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/a2V5PXZhbHVlJyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ+WFp+e9rlNGVFAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+ioreWumuS4u+apnycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICfoqK3lrprnp4HpkbAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6Kit5a6a56eB6ZGw5a+G56K8JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICfoqK3lrprmlofku7bnlKjmiLY657WEJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ+ioreWumuaWh+S7tuasiumZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ+ioreWumuaWh+S7tuWkvuasiumZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiqjTIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ+S+i+Wmgu+8mi9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovLjlhaXnp4HpkbDlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaC77yad3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICfkvovlpoLvvJowNjY0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcclxuXHJcbiAgLy8gUGljTGlzdFxyXG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ+ioreWumuS4u+apnycsXHJcbiAgUElDQkVEX1BJQ0xJU1RfUE9SVDogJ+ioreWumuerr+WPoycsXHJcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAn6Kit5a6a5ZyW5bqKJyxcclxuICBQSUNCRURfUElDTElTVF9DT05GSUdOQU1FOiAn6Kit5a6a6YWN572u5ZCNJyxcclxuICBQSUNCRURfUElDTElTVF9LRVk6ICfoqK3lrprpkZLmrIpLZXknLFxyXG5cclxuICAvLyBMc2t5IFByb1xyXG4gIFBJQ0JFRF9MU0tZX1BMSVNUOiAnTHNreScsXHJcbiAgUElDQkVEX0xTS1lfVkVSU0lPTjogJ+ioreWumueJiOacrCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAn6KuL6YG45pOH54mI5pysJyxcclxuICBQSUNCRURfTFNLWV9IT1NUOiAn6Kit5a6a5Li75qmfJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tJyxcclxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAn6KuL6Ly45YWlVG9rZW4nLFxyXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAn6Kit5a6a562W55WlSUQnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQ6ICfkvovlpoIxJyxcclxuICBQSUNCRURfTFNLWV9BTEJVTV9JRDogJ+ioreWumuebuOWGiklEJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAn5L6L5aaCMScsXHJcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ+ioreWumuS4iuWCs+asiumZkCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAn6KuL6YG45pOH5LiK5YKz5qyK6ZmQJyxcclxuXHJcbiAgLy8gQXdzUzNQbGlzdFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ+ioreWumkFjY2Vzc0tleUlkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6Kit5a6aU2VjcmV0QWNjZXNzS2V5JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ+ioreWumlJlZ2lvbicsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICfoqK3lrproh6rlrprnvqnnr4Dpu54nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAn6Kit5a6a5Luj55CGJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICfoqK3lrproh6rlrprnvqnntrLlnYAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ+mWi+WVnyBgcGF0aFN0eWxlQWNjZXNzYCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEOiAn6ZaL5ZWfIGByZWplY3RVbmF1dGhvcml6ZWRgJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICfoqK3lrppBQ0wnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+mWi+WVnyBgcGF0aFN0eWxlQWNjZXNzYCDmmYLvvIzmmK/lkKbopoHnpoHnlKjmnIDntYLnlJ/miJBVUkzkuK3mt7vliqAgYnVja2V0IOWJjee2tCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRDogJ+S+i+Wmgu+8mkFLSUF4eHh4eHh4eHh4eHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICfkvovlpoLvvJp4eHh4eHh4eHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ+S+i+Wmgu+8mnRlc3Qve2Z1bGxOYW1lfScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICfkvovlpoLvvJp1cy1lYXN0LTEnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ+mcgOimgeaZguWVn+eUqCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaC77yacHVibGljLXJlYWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZyA6KaB5pmC5ZWf55SoJyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICfoqK3lrprmsLTljbDpoZ7lnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+iri+mBuOaTh+awtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6Kit5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+ioreWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6KuL6Ly45YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICfoqK3lrprmsLTljbDlrZfpq5QnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfoq4vovLjlhaXmsLTljbDlrZfpq5Tmlofku7bot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ioreWumuawtOWNsOWclueJh+avlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfoq4vovLjlhaUwLTHnmoTmlbjlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ioreWumuawtOWNsOWtl+mrlOmhj+iJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfoq4vovLjlhaVyZ2LpoY/oibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ioreWumuawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfoq4vovLjlhaXmsLTljbDlnJbniYfot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6Kit5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6KuL6YG45pOH5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAn6Kit5a6a6YeN5ZG95ZCN5qC85byPJyxcclxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKbllZ/nlKjph43lkb3lkI0nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICfoqK3lrprlnJbniYfos6rph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMC0xMDDnmoTmlbTmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6YCy6KGM5qC85byP6L2J5o+bJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2J5o+b5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6KuL6YG45pOH6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6YCy6KGM5ZyW54mH57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICfoqK3lrprnuK7mlL7lr6zluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5TpgLLooYznuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICfmmK/lkKblnoLnm7Tnv7vovYnlnJbniYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2J5ZyW54mHJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICfoqK3lrprnuK7mlL7nmb7liIbmr5QnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6KuL6Ly45YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6YGO5bCP5ZyW57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6YCy6KGM5ZyW54mH5peL6L2JJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovYnmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6Kit5a6a5peL6L2J6KeS5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6KuL6Ly45YWl5pW45a2X77yM5Y+v54K66LKg5pW4JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ+aYr+WQpuenu+mZpEVYSUbos4foqIonLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG6LOH6KiK5pmC5ZWf55SoJyxcclxuXHJcbiAgLy8gUGx1Z2luIEhhbmRsZXJcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOd5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo53lpLHmlZcnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo53lpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijneWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeoseaIluato+eiuueahOWuieijnei3r+W+kScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246LyJ5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi8ieWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246LyJ5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovInlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZcnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ixJ1xyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBFTjogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ1VwbG9hZCBmYWlsZWQnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MnLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MgYW5kIG5ldHdvcmsnLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAnRXJyb3IgY29kZTogJHtjb2RlfSwgcGxlYXNlIG9wZW4gdGhlIGJyb3dzZXIgYW5kIHBhc3RlIHRoZSBhZGRyZXNzIHRvIHNlZSB0aGUgcmVhc29uJyxcclxuICBTRVJWRVJfRVJST1I6ICdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLFxyXG4gIEFVVEhfRkFJTEVEOiAnQXV0aGVudGljYXRpb24gZmFpbGVkJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAnU2V0IEJhY2t1cCBVcGxvYWQgRG9tYWluJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICdFeC4gc21tcy5hcHAnLFxyXG5cclxuICAvLyBsb2NhbFxyXG4gIFBJQ0JFRF9MT0NBTDogJ0xvY2FsJyxcclxuICBQSUNCRURfTE9DQUxfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAnRXguIC9Vc2Vycy9uYW1lL1BpY3R1cmVzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICdTZXQgV2ViIFBhdGgnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHVybCBwYXRoJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAnQWxpIENsb3VkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICdTZXQgYWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICdTZXQgYWNjZXNzS2V5U2VjcmV0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIG9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAnRXguID94LW9zcy1wcm9jZXNzPXh4eCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ1RlbmNlbnQgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0Nob29zZSBDT1MgdmVyc2lvbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ1NldCBTZWNyZXRJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICdTZXQgU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAnU2V0IEFwcElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ0V4LiAxMjM0NTY3ODkwJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBhcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAnRXguID9pbWFnZU1vZ3IyJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAnU2V0IEltYWdlU2xpbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDogJ0ltYWdlIGV4dHJlbWVseSBpbnRlbGxpZ2VudCBjb21wcmVzc2lvbiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBbZG9jdW1lbnQgZGVzY3JpcHRpb25dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODY0MzgpJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ09QRU4nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICdDTE9TRScsXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ1NldCBUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAnU2V0IFJlcG8gTmFtZScsXHJcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAnU2V0IEJyYW5jaCcsXHJcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICdFeC4gdXNlcm5hbWUvcmVwbycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ0V4LiBtYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gcWluaXVcclxuICBQSUNCRURfUUlOSVU6ICdRaW5pdScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ1NldCBBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICdTZXQgU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ1NldCBVUkwnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICdFeC4gejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlc2xpbScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAnRXguIGh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG5cclxuICAvLyB0ZWxlZ3JhcGhcclxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAnU2V0IENsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICdTZXQgQWNjZXNzIFRva2VuJyxcclxuICBQSUNCRURfSU1HVVJfQUxCVU06ICdTZXQgQWxidW0gTmFtZScsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAnU2V0IFByb3h5JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgYXMgYW5vbnltb3VzJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAnRXguIHRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAnVXB5dW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ1NldCBPcGVyYXRvcicsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAnU2V0IE9wZXJhdG9yIFBhc3N3b3JkJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICdTZXQgQW50aS1MZWVjaCBUb2tlbicsXHJcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAnU2V0IEV4cGlyZSBUaW1lKHNlY29uZHMpJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgb3BlcmF0b3IgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ0V4LiBodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAnRXguICFpbWdzbGltJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxyXG5cclxuICAvLyB3ZWJkYXZcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAnU2V0IEF1dGggVHlwZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiBodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICdFeC4gbWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIHBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/a2V5PXZhbHVlJyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ1NGVFAgQnVpbGRpbicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ1NldCBQb3J0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICdTZXQgUHJpdmF0ZSBLZXknLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnU2V0IFByaXZhdGUgS2V5IFBhc3NwaHJhc2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ1NldCBGaWxlIFVzZXI6R3JvdXAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAnU2V0IEZpbGUgTW9kZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ1NldCBEaXJlY3RvcnkgTW9kZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICdEZWZhdWx0IDIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ0V4LiAvVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnUGxlYXNlIHR5cGUgdGhlIHByaXZhdGUga2V5IHBhc3NwaHJhc2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAnRXguIHd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAnRXguIDA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ0V4LiAwNzc1JyxcclxuXHJcbiAgLy8gUGljTGlzdFxyXG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ1NldCBIb3N0JyxcclxuICBQSUNCRURfUElDTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BJQ0JFRDogJ1NldCBQaWNCZWQnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUU6ICdTZXQgQ29uZmlnIE5hbWUnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ1NldCBLZXknLFxyXG5cclxuICAvLyBMc2t5IFByb1xyXG4gIFBJQ0JFRF9MU0tZX1BMSVNUOiAnTHNreScsXHJcbiAgUElDQkVEX0xTS1lfVkVSU0lPTjogJ1NldCBWZXJzaW9uJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICdFeC4gdjEnLFxyXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vbHNreS5jbycsXHJcbiAgUElDQkVEX0xTS1lfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICdFeC4geHh4JyxcclxuICBQSUNCRURfTFNLWV9TVFJBVEVHWV9JRDogJ1NldCBTdHJhdGVneSBJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ0V4LiAxJyxcclxuICBQSUNCRURfTFNLWV9BTEJVTV9JRDogJ1NldCBBbGJ1bSBJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRDogJ09wdGlvbmFsLCBvbmx5IGZvciBWMicsXHJcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ1NldCBQZXJtaXNzb24nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ0V4LiBwdWJsaWMnLFxyXG5cclxuICAvLyBBd3NTM1BsaXN0XHJcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAnU2V0IEFjY2Vzc0tleUlkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAnU2V0IFNlY3JldEFjY2Vzc0tleScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAnU2V0IFJlZ2lvbicsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAnU2V0IFByb3h5JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAnU2V0IFBhdGhTdHlsZUFjY2VzcycsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEOiAnU2V0IFJlamVjdFVuYXV0aG9yaXplZCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAnU2V0IEFDTCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAnd2hlbiBgcGF0aFN0eWxlQWNjZXNzYCBpcyBlbmFibGVkLCB3aGV0aGVyIHRvIGRpc2FibGUgYWRkaW5nIGJ1Y2tldCBwcmVmaXggdG8gdXJsJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAnRXguIHh4eCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZOiAnRXguIHh4eCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICdFeC4gdGVzdCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICdFeC4gdXMtZWFzdC0xJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICdFeC4gdGVzdC97ZnVsbE5hbWV9JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGh0dHBzOi8vczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIHJlcXVpcmVkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ0VuYWJsZSB3aGVuIHJlamVjdGluZyBpbnZhbGlkIFRMUyBjZXJ0aWZpY2F0ZSBjb25uZWN0aW9uIGlzIHJlcXVpcmVkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTDogJ0V4LiBwdWJsaWMtcmVhZCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICdFbmFibGUgd2hlbiBgcGF0aFN0eWxlQWNjZXNzYCBpcyBlbmFibGVkJyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAnU2V0IHJlbmFtZSBmb3JtYXQnLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ0VuYWJsZSByZW5hbWUnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ1doZXRoZXIgdG8gYWRkIHdhdGVybWFyaycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ1NldCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAnUGxlYXNlIHNlbGVjdCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIGZ1bGwtc2NyZWVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAnU2V0IHdhdGVybWFyayBhbmdsZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICdTZXQgd2F0ZXJtYXJrIHRleHQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ1BsZWFzZSBlbnRlciB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgZm9udCBmaWxlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ1NldCB0aGUgcmF0aW8gb2YgdGhlIHdhdGVybWFyayB0byB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICdTZXQgd2F0ZXJtYXJrIGZvbnQgY29sb3InLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAnUGxlYXNlIGVudGVyIHRoZSBSR0IgY29sb3IgdmFsdWUnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ1NldCB3YXRlcm1hcmsgcG9zaXRpb24nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ1NldCBpbWFnZSBxdWFsaXR5JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ1BsZWFzZSBlbnRlciBhbiBpbnRlZ2VyIGJldHdlZW4gMC0xMDAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAnV2hldGhlciB0byBwZXJmb3JtIGZvcm1hdCBjb252ZXJzaW9uJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAnRW5hYmxlIHdoZW4gZm9ybWF0IGNvbnZlcnNpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ1NldCBjb252ZXJzaW9uIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICdQbGVhc2Ugc2VsZWN0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICdFbmFibGUgd2hlbiBpbWFnZSByZXNpemluZyBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ1NldCByZXNpemluZyB3aWR0aCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ1NldCByZXNpemluZyBoZWlnaHQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UgYnkgcGVyY2VudGFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAnRW5hYmxlIHdoZW4gcmVzaXppbmcgYnkgcGVyY2VudGFnZSBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIHZlcnRpY2FsbHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAnV2hldGhlciB0byBmbGlwIHRoZSBpbWFnZSBob3Jpem9udGFsbHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ1NldCByZXNpemluZyBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ1doZXRoZXIgdG8gc2tpcCByZXNpemluZyBvZiBzbWFsbCBpbWFnZXMnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICdXaGV0aGVyIHRvIHJvdGF0ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ0VuYWJsZSB3aGVuIGltYWdlIHJvdGF0aW9uIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ1NldCByb3RhdGlvbiBhbmdsZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlciwgY2FuIGJlIG5lZ2F0aXZlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ1doZXRoZXIgdG8gcmVtb3ZlIEVYSUYgaW5mb3JtYXRpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICdFbmFibGUgd2hlbiByZW1vdmluZyBFWElGIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkJyxcclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lIG9yIHZhbGlkIGluc3RhbGxhdGlvbiBwYXRoJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gdW5pbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQsIHBsZWFzZSBlbnRlciBhIHZhbGlkIHBsdWdpbiBuYW1lJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICdQbHVnaW4gdXBkYXRlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnXHJcbn1cclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcydcclxuaW1wb3J0IENvbW1hbmRlciBmcm9tICcuLi9saWIvQ29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9saWIvTG9nZ2VyJ1xyXG5pbXBvcnQgTGlmZWN5Y2xlIGZyb20gJy4vTGlmZWN5Y2xlJ1xyXG5pbXBvcnQgTGlmZWN5Y2xlUGx1Z2lucywgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4uL2xpYi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5pbXBvcnQgdXBsb2FkZXJzIGZyb20gJy4uL3BsdWdpbnMvdXBsb2FkZXInXHJcbmltcG9ydCB0cmFuc2Zvcm1lcnMgZnJvbSAnLi4vcGx1Z2lucy90cmFuc2Zvcm1lcidcclxuaW1wb3J0IFBsdWdpbkxvYWRlciBmcm9tICcuLi9saWIvUGx1Z2luTG9hZGVyJ1xyXG5pbXBvcnQgeyBnZXQsIHNldCwgdW5zZXQgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IHR5cGUgSUhlbHBlciwgdHlwZSBJSW1nSW5mbywgdHlwZSBJQ29uZmlnLCB0eXBlIElQaWNHbywgdHlwZSBJU3RyaW5nS2V5TWFwLCB0eXBlIElQbHVnaW5Mb2FkZXIsIHR5cGUgSUkxOG5NYW5hZ2VyLCB0eXBlIElQaWNHb1BsdWdpbiwgdHlwZSBJUGljR29QbHVnaW5JbnRlcmZhY2UsIHR5cGUgSVJlcXVlc3QgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IGdldENsaXBib2FyZEltYWdlIGZyb20gJy4uL3V0aWxzL2dldENsaXBib2FyZEltYWdlJ1xyXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9saWIvUmVxdWVzdCdcclxuaW1wb3J0IERCIGZyb20gJy4uL3V0aWxzL2RiJ1xyXG5pbXBvcnQgUGx1Z2luSGFuZGxlciBmcm9tICcuLi9saWIvUGx1Z2luSGFuZGxlcidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCwgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcclxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJMThuTWFuYWdlciB9IGZyb20gJy4uL2kxOG4nXHJcblxyXG5leHBvcnQgY2xhc3MgUGljR28gZXh0ZW5kcyBFdmVudEVtaXR0ZXIgaW1wbGVtZW50cyBJUGljR28ge1xyXG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcclxuICBwcml2YXRlIGxpZmVjeWNsZSE6IExpZmVjeWNsZVxyXG4gIHByaXZhdGUgZGIhOiBEQlxyXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZ1xyXG4gIGJhc2VEaXIhOiBzdHJpbmdcclxuICBoZWxwZXIhOiBJSGVscGVyXHJcbiAgbG9nOiBMb2dnZXJcclxuICBjbWQ6IENvbW1hbmRlclxyXG4gIG91dHB1dDogSUltZ0luZm9bXVxyXG4gIGlucHV0OiBhbnlbXVxyXG4gIHJhd0lucHV0OiBhbnlbXVxyXG4gIHBsdWdpbkhhbmRsZXI6IFBsdWdpbkhhbmRsZXJcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xyXG4gICAqXHJcbiAgICogdXNlIHJlcXVlc3QgaW5zdGVhZFxyXG4gICAqL1xyXG4gIFJlcXVlc3QhOiBSZXF1ZXN0XHJcbiAgaTE4biE6IElJMThuTWFuYWdlclxyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cclxuICBHVUlfVkVSU0lPTj86IHN0cmluZ1xyXG5cclxuICBnZXQgcGx1Z2luTG9hZGVyICgpOiBJUGx1Z2luTG9hZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yIChjb25maWdQYXRoOiBzdHJpbmcgPSAnJykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jb25maWdQYXRoID0gY29uZmlnUGF0aFxyXG4gICAgdGhpcy5vdXRwdXQgPSBbXVxyXG4gICAgdGhpcy5pbnB1dCA9IFtdXHJcbiAgICB0aGlzLnJhd0lucHV0ID0gW11cclxuICAgIHRoaXMuaGVscGVyID0ge1xyXG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXHJcbiAgICAgIHVwbG9hZGVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndXBsb2FkZXInKSxcclxuICAgICAgYmVmb3JlVHJhbnNmb3JtUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVRyYW5zZm9ybVBsdWdpbnMnKSxcclxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcclxuICAgICAgYWZ0ZXJVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYWZ0ZXJVcGxvYWRQbHVnaW5zJylcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxyXG4gICAgdGhpcy5sb2cgPSBuZXcgTG9nZ2VyKHRoaXMpXHJcbiAgICB0aGlzLmNtZCA9IG5ldyBDb21tYW5kZXIodGhpcylcclxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXHJcbiAgICB0aGlzLmluaXRDb25maWcoKVxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZ1BhdGggKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5jb25maWdQYXRoID0gaG9tZWRpcigpICsgJy8ucGljbGlzdC9jb25maWcuanNvbidcclxuICAgIH1cclxuICAgIGlmIChwYXRoLmV4dG5hbWUodGhpcy5jb25maWdQYXRoKS50b1VwcGVyQ2FzZSgpICE9PSAnLkpTT04nKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnUGF0aCA9ICcnXHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcclxuICAgIH1cclxuICAgIHRoaXMuYmFzZURpciA9IHBhdGguZGlybmFtZSh0aGlzLmNvbmZpZ1BhdGgpXHJcbiAgICBjb25zdCBleGlzdCA9IGZzLnBhdGhFeGlzdHNTeW5jKHRoaXMuY29uZmlnUGF0aClcclxuICAgIGlmICghZXhpc3QpIHtcclxuICAgICAgZnMuZW5zdXJlRmlsZVN5bmMoYCR7dGhpcy5jb25maWdQYXRofWApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDb25maWcgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYiA9IG5ldyBEQih0aGlzKVxyXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYi5yZWFkKHRydWUpIGFzIElDb25maWdcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBpbml0IDE4biBhdCBmaXJzdFxyXG4gICAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bk1hbmFnZXIodGhpcylcclxuICAgICAgdGhpcy5SZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpcylcclxuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVyID0gbmV3IFBsdWdpbkxvYWRlcih0aGlzKVxyXG4gICAgICAvLyBsb2FkIHNlbGYgcGx1Z2luc1xyXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgncGljZ28nKVxyXG4gICAgICB1cGxvYWRlcnModGhpcykucmVnaXN0ZXIodGhpcylcclxuICAgICAgdHJhbnNmb3JtZXJzKHRoaXMpLnJlZ2lzdGVyKHRoaXMpXHJcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCcnKVxyXG4gICAgICAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICB0aGlzLmxpZmVjeWNsZSA9IG5ldyBMaWZlY3ljbGUodGhpcylcclxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIC0xKVxyXG4gICAgICB0aGlzLmxvZy5lcnJvcihlKVxyXG4gICAgICB0aHJvdyBlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBlYXNpbHkgbWFubnVhbGx5IGxvYWQgYSBwbHVnaW5cclxuICAgKiBpZiBwcm92aWRlIHBsdWdpbiBuYW1lLCB3aWxsIHJlZ2lzdGVyIHBsdWdpbiBieSBuYW1lXHJcbiAgICogb3IganVzdCBpbnN0YW50aWF0ZSBhIHBsdWdpblxyXG4gICAqL1xyXG4gIHVzZSAocGx1Z2luOiBJUGljR29QbHVnaW4sIG5hbWU/OiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2Uge1xyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgdGhpcy5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4obmFtZSwgcGx1Z2luKVxyXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSBwbHVnaW4odGhpcylcclxuICAgICAgcmV0dXJuIHBsdWdpbkluc3RhbmNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckNvbW1hbmRzICgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuY21kLmluaXQoKVxyXG4gICAgICB0aGlzLmNtZC5sb2FkQ29tbWFuZHMoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnPFQ+IChuYW1lPzogc3RyaW5nKTogVCB7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZyBhcyB1bmtub3duIGFzIFRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBnZXQodGhpcy5fY29uZmlnLCBuYW1lKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbmZpZyAoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcclxuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcclxuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENvbmZpZyhjb25maWcpXHJcbiAgICB0aGlzLmRiLnNhdmVDb25maWcoY29uZmlnKVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29uZmlnIChrZXk6IHN0cmluZywgcHJvcE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cclxuICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KGtleSkpIHtcclxuICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke2tleX0gY2FuJ3QgYmUgcmVtb3ZlZGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy51bnNldENvbmZpZyhrZXksIHByb3BOYW1lKVxyXG4gICAgdGhpcy5kYi51bnNldChrZXksIHByb3BOYW1lKVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnIChjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KG5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke25hbWV9IGNhbid0IGJlIG1vZGlmaWVkYClcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXHJcbiAgICAgICAgZGVsZXRlIGNvbmZpZ1tuYW1lXVxyXG4gICAgICB9XHJcbiAgICAgIHNldCh0aGlzLl9jb25maWcsIG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgICAgZXZlbnRCdXMuZW1pdChJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwge1xyXG4gICAgICAgIGNvbmZpZ05hbWU6IG5hbWUsXHJcbiAgICAgICAgdmFsdWU6IGNvbmZpZ1tuYW1lXVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHVuc2V0Q29uZmlnIChrZXk6IHN0cmluZywgcHJvcE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cclxuICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KGtleSkpIHtcclxuICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke2tleX0gY2FuJ3QgYmUgdW5zZXRgKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHVuc2V0KHRoaXMuZ2V0Q29uZmlnKGtleSksIHByb3BOYW1lKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJlcXVlc3QgKCk6IElSZXF1ZXN0WydyZXF1ZXN0J10ge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVxdWVzdC5yZXF1ZXN0LmJpbmQodGhpcy5SZXF1ZXN0KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkIChpbnB1dD86IGFueVtdKTogUHJvbWlzZTxJSW1nSW5mb1tdIHwgRXJyb3I+IHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XHJcbiAgICAgIHRoaXMubG9nLmVycm9yKCdObyBjb25maWcgZmlsZSBmb3VuZCwgcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlnIGZpbGUgcGF0aCcpXHJcbiAgICAgIHJldHVybiBbXVxyXG4gICAgfVxyXG4gICAgLy8gdXBsb2FkIGZyb20gY2xpcGJvYXJkXHJcbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCB7IGltZ1BhdGgsIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyB9ID0gYXdhaXQgZ2V0Q2xpcGJvYXJkSW1hZ2UodGhpcylcclxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBub3QgZm91bmQgaW4gY2xpcGJvYXJkJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgLy8g5Yig6ZmkIHBpY2dvIOeUn+aIkOeahOWbvueJh+aWh+S7tu+8jOS+i+WmgiBgfi8ucGljZ28vMjAyMDA2MjEyMDU3MjAucG5nYFxyXG4gICAgICAgICAgICAgIGZzLnJlbW92ZShpbWdQYXRoKS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5vbmNlKCdmaW5pc2hlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICBmcy5yZW1vdmUoaW1nUGF0aCkuY2F0Y2goKGUpID0+IHsgdGhpcy5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0pXHJcbiAgICAgICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdXBsb2FkIGZyb20gcGF0aFxyXG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQpXHJcbiAgICAgIHJldHVybiBvdXRwdXRcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBpY0dvUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBJbWdGcm9tUGF0aCBmcm9tICcuL3BhdGgnXHJcbmltcG9ydCBJbWdGcm9tQmFzZTY0IGZyb20gJy4vYmFzZTY0J1xyXG5cclxuY29uc3QgYnVpbGRJblRyYW5zZm9ybWVyczogSVBpY0dvUGx1Z2luID0gKCkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICByZWdpc3RlciAoY3R4OiBJUGljR28pIHtcclxuICAgICAgY3R4LmhlbHBlci50cmFuc2Zvcm1lci5yZWdpc3RlcigncGF0aCcsIEltZ0Zyb21QYXRoKVxyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdiYXNlNjQnLCBJbWdGcm9tQmFzZTY0KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblRyYW5zZm9ybWVyc1xyXG4iXSwibmFtZXMiOlsicGx1Z2luSGFuZGxlciIsImhhbmRsZSIsImN0eCIsImNtZCIsInByb2dyYW0iLCJjb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGlhcyIsIm9wdGlvbiIsImFjdGlvbiIsInBsdWdpbnMiLCJwcm94eSIsInJlZ2lzdHJ5Iiwib3B0aW9ucyIsImluc3RhbGwiLCJjYXRjaCIsImUiLCJsb2ciLCJlcnJvciIsInVuaW5zdGFsbCIsInVwZGF0ZSIsImNvbmZpZyIsInJhbmRvbVN0cmluZ0dlbmVyYXRvciIsImxlbmd0aCIsImNoYXJzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiam9pbiIsImZvcm1hdEhlbHBlciIsIm51bSIsInRvU3RyaW5nIiwiZ2V0TWQ1IiwiaW5wdXQiLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwiZGlnZXN0IiwicmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIiwib2xkTmFtZSIsImN1c3RvbUZvcm1hdCIsImFmZml4RmlsZU5hbWUiLCJmaWxlQnVmZmVyIiwibm93IiwiRGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsImZpbGViYXNlbmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImV4dG5hbWUiLCJjb252ZXJzaW9uTWFwIiwic2xpY2UiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidXVpZHY0IiwidjQiLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwiT2JqZWN0Iiwia2V5cyIsInNvbWUiLCJpdGVtIiwiaW5jbHVkZXMiLCJleHQiLCJuZXdOYW1lIiwicmVkdWNlIiwiYWNjIiwiY3VyIiwiUmVnRXhwIiwiX3Jlc3VsdCIsImtleSIsImNvdW50IiwibWF4IiwiZGlybmFtZSIsInNwbGl0Iiwic2VwIiwiYSIsImIiLCJpc1VybCIsInVybCIsInRlc3QiLCJpc1VybEVuY29kZSIsImRlY29kZVVSSSIsImhhbmRsZVVybEVuY29kZSIsImVuY29kZVVSSSIsImdldEltYWdlU2l6ZSIsImZpbGUiLCJ3aWR0aCIsImhlaWdodCIsInR5cGUiLCJpbWFnZVNpemUiLCJyZWFsIiwiZ2V0RlNGaWxlIiwiYXN5bmMiLCJmaWxlUGF0aCIsImZpbGVOYW1lIiwiYnVmZmVyIiwiZnMiLCJyZWFkRmlsZSIsInN1Y2Nlc3MiLCJfYSIsInJlYXNvbiIsImdldFVSTEZpbGUiLCJ0aW1lb3V0SWQiLCJyZXF1ZXN0Rm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcyIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsInRoZW4iLCJyZXNwIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInVybFBhdGgiLCJVUkwiLCJwYXRobmFtZSIsInNlYXJjaFBhcmFtcyIsImdldCIsInN0YXJ0c1dpdGgiLCJtZXNzYWdlIiwidGltZW91dFByb21pc2UiLCJzZXRUaW1lb3V0IiwicmFjZSIsImdldFBsdWdpbk5hbWVUeXBlIiwibmFtZSIsImlzU2ltcGxlTmFtZSIsIm5hbWVPclBhdGgiLCJpc0Fic29sdXRlIiwicGx1Z2luUGF0aCIsInByb2Nlc3MiLCJjd2QiLCJleGlzdHNTeW5jIiwiaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lIiwic2NvcGUiLCJnZXRQcm9jZXNzUGx1Z2luTmFtZSIsImxvZ2dlciIsImNvbnNvbGUiLCJoYW5kbGVVbml4U3R5bGVQYXRoIiwid2FybiIsImdldE5vcm1hbFBsdWdpbk5hbWUiLCJyZW1vdmVQbHVnaW5WZXJzaW9uIiwicGFja2FnZUpTT05QYXRoIiwicG9zaXgiLCJwa2ciLCJyZWFkSlNPTlN5bmMiLCJwYXRoU3RyIiwicmVnIiwibWF0Y2hBcnIiLCJtYXRjaCIsImNvbmZpZ0JsYWNrTGlzdCIsImlzQ29uZmlnS2V5SW5CbGFja0xpc3QiLCJibGFja0l0ZW0iLCJpc0lucHV0Q29uZmlnVmFsaWQiLCJpc0FycmF5Iiwic2FmZVBhcnNlIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiZm9yY2VOdW1iZXIiLCJpc05hTiIsIk51bWJlciIsImlzRGV2IiwiZW52IiwiTk9ERV9FTlYiLCJkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoIiwiX19kaXJuYW1lIiwiQWRkV2F0ZXJtYXJrIiwiaW1nIiwid2F0ZXJtYXJrVHlwZSIsImRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCIsImlzRnVsbFNjcmVlbldhdGVybWFyayIsIndhdGVybWFya0RlZ3JlZSIsInRleHQiLCJ3YXRlcm1hcmtGb250UGF0aCIsIndhdGVybWFya1NjYWxlUmF0aW8iLCJ3YXRlcm1hcmtDb2xvciIsIndhdGVybWFya0ltYWdlUGF0aCIsInBvc2l0aW9uIiwiaW1hZ2UiLCJzaGFycCIsImFuaW1hdGVkIiwiaW1nV2lkdGgiLCJtZXRhZGF0YSIsIndhdGVybWFyayIsInRvQnVmZmVyIiwiY29sb3IiLCJmb250RmFtaWx5IiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImZpbGwiLCJ0ZXh0U1ZHIiwiVGV4dFRvU1ZHIiwibG9hZFN5bmMiLCJnZXRTVkciLCJCdWZmZXIiLCJ0ZXh0MlNWRyIsIndhdGVybWFya1dpZHRoIiwid2F0ZXJtYXJrSGVpZ2h0IiwiZ2V0U2l6ZSIsIndhdGVybWFya1Jlc2l6ZVdpZHRoIiwid2F0ZXJtYXJrUmVzaXplSGVpZ2h0IiwicmVzaXplIiwiZml0Iiwicm90YXRlIiwiYmFja2dyb3VuZCIsInIiLCJnIiwiYWxwaGEiLCJjcmVhdGVXYXRlcm1hcmsiLCJjb21wb3NpdGUiLCJncmF2aXR5IiwidGlsZSIsInZhbGlkUGFyYW0iLCJwYXJhbXMiLCJldmVyeSIsInBhcmFtIiwiYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QiLCJ2YWxpZE91dHB1dEZvcm1hdCIsImZvcm1hdCIsImltYWdlRXh0TGlzdCIsImltYWdlQWRkV2F0ZXJNYXJrIiwid2F0ZXJtYXJrVGV4dCIsIndhdGVybWFya1Bvc2l0aW9uIiwiZm9ybWF0T3B0aW9ucyIsImZvcm1hdENvbnZlcnRPYmoiLCJxdWFsaXR5IiwiaXNDb252ZXJ0IiwiY29udmVydEZvcm1hdCIsImlzUmVTaXplIiwicmVTaXplSGVpZ2h0IiwicmVTaXplV2lkdGgiLCJza2lwUmVTaXplT2ZTbWFsbEltZyIsImlzUmVTaXplQnlQZXJjZW50IiwicmVTaXplUGVyY2VudCIsImlzUm90YXRlIiwiaXNGbGlwIiwiaXNGbG9wIiwicm90YXRlRGVncmVlIiwicGljQmVkIiwiaW1hZ2VQcm9jZXNzIiwicmF3Rm9ybWF0IiwidG9Mb3dlckNhc2UiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJyb3VuZCIsInNjYWxlUmF0aW8iLCJmbGlwIiwiZmxvcCIsIm5ld0Zvcm1hdCIsImdldENvbnZlcnRlZEZvcm1hdCIsInRvRm9ybWF0IiwibW96anBlZyIsImltYWdlRm9ybWF0TGlzdCIsIm5lZWRBZGRXYXRlcm1hcmsiLCJ3YXRlcm1hcmtPcHRpb25zIiwiZmlsZUV4dCIsImlzQWRkV2F0ZXJtYXJrIiwibmVlZENvbXByZXNzIiwiY29tcHJlc3NPcHRpb25zIiwibm9ybWFsaXplZEV4dCIsInJlbW92ZUV4aWYiLCJ1cGxvYWQiLCJhcmd1bWVudHMiLCJpbnB1dExpc3QiLCJmaWx0ZXIiLCJleGlzdCIsImNvbXByZXNzIiwidXNlckNvbmZpZyIsImdldENvbmZpZyIsInByZWZpeCIsImkxOG4iLCJ0cmFuc2xhdGUiLCJyZXF1aXJlZCIsImRlZmF1bHQiLCJjaG9pY2VzIiwiaXNSZW1vdmVFeGlmIiwicmVuYW1lIiwiZW5hYmxlIiwiaGFuZGxlQ29uZmlnIiwicHJvbXB0cyIsIm1vZHVsZSIsImFuc3dlciIsImlucXVpcmVyIiwicHJvbXB0IiwiY29uZmlnTmFtZSIsInNhdmVDb25maWciLCJzZXR0aW5nIiwiYnVpbGRpbiIsImhlbHBlciIsImdldElkTGlzdCIsInBsdWdpbkxvYWRlciIsImdldFBsdWdpbiIsImdldEZ1bGxMaXN0IiwiX2IiLCJwbHVnaW4iLCJpbmZvIiwiYXJndiIsInVzZSIsInVwbG9hZGVyIiwidHJhbnNmb3JtZXIiLCJwdXNoIiwiZm9yRWFjaCIsInBpY2dvUGx1Z2lucyIsInNldENvbmZpZyIsImdlbmVyYXRlIiwib3B0cyIsImdldE9wdGlvbnMiLCJ0bXAiLCJzb3VyY2UiLCJhbnN3ZXJzIiwiX2ZpbGVzIiwiZ2xvYmJ5IiwiZG90IiwiZ2xvYiIsImZpbHRlcnMiLCJmaWxlcyIsInJlbmRlciIsIndyaXRlRmlsZVRyZWUiLCJkZXN0IiwiY29tcGxldGUiLCJjb21wbGV0ZU1lc3NhZ2UiLCJleHAiLCJmbiIsIkZ1bmN0aW9uIiwic3RyaW5naWZ5IiwidGVtcGxhdGVQYXRoIiwib3B0aW9uc1BhdGgiLCJyZXF1aXJlIiwiZmlsZVRyZWUiLCJyZWFkRmlsZVN5bmMiLCJjb250ZW50IiwiZWpzIiwiaXNCdWZmZXIiLCJkaXIiLCJlbnN1cmVEaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsInJ1biIsIm9mZmxpbmUiLCJ0ZW1wbGF0ZSIsImhhc1NsYXNoIiwiZG93bmxvYWRBbmRHZW5lcmF0ZSIsInJtIiwic3luYyIsImRvd25sb2FkIiwiY2xvbmUiLCJlcnIiLCJpbml0IiwicHJvamVjdCIsImluUGxhY2UiLCJob21lZGlyIiwib2siLCJvbiIsImNoYWxrIiwiZ3JheSIsImxhbmciLCJsaXN0IiwiZ2V0TGFuZ3VhZ2VMaXN0Iiwic2V0TGFuZ3VhZ2UiLCJMaWZlY3ljbGVQbHVnaW5zIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiTWFwIiwicGx1Z2luSWRNYXAiLCJyZWdpc3RlciIsImlkIiwiVHlwZUVycm9yIiwiaGFzIiwic2V0IiwiY3VycmVudFBsdWdpbiIsInVucmVnaXN0ZXIiLCJwbHVnaW5OYW1lIiwicGx1Z2luTGlzdCIsImRlbGV0ZSIsImdldE5hbWUiLCJnZXRMaXN0IiwidmFsdWVzIiwic2V0Q3VycmVudFBsdWdpbk5hbWUiLCJDb21tYW5kZXIiLCJDb21tYW5kIiwidmVyc2lvbiIsImRlYnVnIiwic2lsZW50IiwiYXJncyIsImV4aXQiLCJjdXJyZW50UGx1Z2luTmFtZSIsImxvYWRDb21tYW5kcyIsIklMb2dUeXBlIiwiSUJ1aWxkSW5FdmVudCIsIklCdXNFdmVudCIsIkxvZ2dlciIsImxldmVsIiwiaGFuZGxlTG9nIiwibXNnIiwibG9nTGV2ZWwiLCJjaGVja0xvZ0xldmVsIiwibG9nSGVhZGVyIiwidG9VcHBlckNhc2UiLCJsb2dQYXRoIiwiYmFzZURpciIsInJlc3VsdCIsImNoZWNrTG9nRmlsZUlzTGFyZ2UiLCJpc0xhcmdlIiwid2FybmluZ01zZyIsInllbGxvdyIsInJlY3JlYXRlTG9nRmlsZSIsInVuc2hpZnQiLCJoYW5kbGVXcml0ZUxvZyIsImxvZ0ZpbGVTaXplIiwic3RhdFN5bmMiLCJzaXplIiwibG9nRmlsZVNpemVMaW1pdCIsInVubGlua1N5bmMiLCJjcmVhdGVGaWxlU3luYyIsImRheWpzIiwiRXJyb3IiLCJ1dGlsIiwic3RhY2siLCJhcHBlbmRGaWxlU3luYyIsIkxpZmVjeWNsZSIsIkV2ZW50RW1pdHRlciIsInN1cGVyIiwidHRmTGluayIsInRlbXBGaWxlUGF0aCIsImltZ0ZpbGVQYXRoIiwiZW1wdHlEaXJTeW5jIiwidHRmUGF0aCIsIm91dHB1dERpciIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsImF4aW9zIiwiY29uZmlnUGF0aCIsIm91dHB1dCIsInJhd0lucHV0IiwiUmVxdWVzdCIsIlZFUlNJT04iLCJHVUlfVkVSU0lPTiIsImJpbmQiLCJyZW1vdmVDb25maWciLCJ1bnNldENvbmZpZyIsImFkZExpc3RlbmVyIiwib25jZSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwibGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwiZW1pdCIsImxpc3RlbmVyQ291bnQiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiZXZlbnROYW1lcyIsImNyZWF0ZUNvbnRleHQiLCJyYXdJbnB1dFBhdGgiLCJjbG9uZURlZXAiLCJ3YXRlcm1hcmtNc2ciLCJjb21wcmVzc01zZyIsImFsbFNldHRsZWQiLCJpbmRleCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiaXNTa2lwIiwiZG93bmxvYWRUVEYiLCJfYyIsIl9kIiwibmV3RXh0IiwiX2UiLCJfZiIsInRlbXBGaWxlIiwiZ2V0VGltZSIsImhlaWNCdWZmZXIiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwiYmVmb3JlVHJhbnNmb3JtIiwiZG9UcmFuc2Zvcm0iLCJyZW5hbWVDb25maWciLCJiYXNlNjRJbWFnZSIsImJlZm9yZVVwbG9hZCIsImRvVXBsb2FkIiwiYWZ0ZXJVcGxvYWQiLCJGQUlMRUQiLCJVUExPQURfUFJPR1JFU1MiLCJCRUZPUkVfVFJBTlNGT1JNIiwiaGFuZGxlUGx1Z2lucyIsImJlZm9yZVRyYW5zZm9ybVBsdWdpbnMiLCJjdXJyZW50VHJhbnNmb3JtZXIiLCJCRUZPUkVfVVBMT0FEIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsIm91dHB1dEltZyIsIkFGVEVSX1VQTE9BRCIsImFmdGVyVXBsb2FkUGx1Z2lucyIsImlzRW5jb2RlT3V0cHV0VVJMIiwiaSIsImltZ1VybCIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJBdXRob3JpemF0aW9uIiwiZm9ybURhdGEiLCJzbWZpbGUiLCJ2YWx1ZSIsImZpbGVuYW1lIiwic3NsIiwic21tc0NvbmZpZyIsImltZ0xpc3QiLCJwb3N0Q29uZmlnIiwidG9rZW4iLCJib2R5IiwiY29kZSIsImhhc2giLCJpbWFnZXMiLCJOT1RJRklDQVRJT04iLCJ0aXRsZSIsImdlbmVyYXRlU2lnbmF0dXJlIiwic2VjcmV0SWQiLCJzZWNyZXRLZXkiLCJhcHBJZCIsImJ1Y2tldCIsInNpZ25hdHVyZSIsInNpZ25UaW1lIiwidG9kYXkiLCJzaWduS2V5IiwiY3JlYXRlSG1hYyIsImVuZHBvaW50IiwiYXJlYSIsImh0dHBTdHJpbmciLCJzdHJpbmdUb1NpZ24iLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsImNvbmNhdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIkhvc3QiLCJtaW1lIiwibG9va3VwIiwib3AiLCJmaWxlY29udGVudCIsInRjWXVuT3B0aW9ucyIsImN1c3RvbVVybCIsInVzZVY0Iiwic3RhdHVzQ29kZSIsIm9wdGlvblVybCIsInNsaW0iLCJzb3VyY2VfdXJsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwidGlwcyIsImJ1aWxkR2l0aHViQXBpVXJsIiwicmVwbyIsImV4dHJhIiwianNvbiIsImJyYW5jaCIsImdpdGh1Yk9wdGlvbnMiLCJ1cGxvYWRQYXRoIiwiZG93bmxvYWRfdXJsIiwic2hhIiwiaW1nQmFzZTY0Iiwic2VsZWN0QXJlYSIsImdldFRva2VuIiwicWluaXVPcHRpb25zIiwiYWNjZXNzS2V5IiwibWFjIiwicWluaXUiLCJhdXRoIiwiTWFjIiwicnMiLCJQdXRQb2xpY3kiLCJ1cGxvYWRUb2tlbiIsImJhc2VVcmwiLCJ1cmxPcHRpb25zIiwicmVzcG9uc2UiLCJjbGllbnRJZCIsInVzZXJuYW1lIiwiYWNjZXNzVG9rZW4iLCJmb3JtYXRBY2Nlc3NUb2tlbiIsImFsYnVtIiwiYXV0aG9yaXphdGlvbiIsInJlcXVlc3RPcHRpb25zIiwiaW5pdFBhZ2VzIiwiYWxidW1IYXNoIiwiZ2V0QWxidW1IYXNoT3B0aW9ucyIsInRpbWVvdXQiLCJhbGJ1bUxpc3QiLCJpbWd1ck9wdGlvbnMiLCJsaW5rIiwiZGVsZXRlaGFzaCIsImdldEN1cnJlbnRVVENEYXRlIiwidG9VVENTdHJpbmciLCJkYXRlIiwic2lnblN0cmluZyIsImFjY2Vzc0tleVNlY3JldCIsImFjY2Vzc0tleUlkIiwiYWxpWXVuT3B0aW9ucyIsIm9wZXJhdG9yIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJwYXNzd29yZCIsImVuZHNXaXRoIiwiZ2V0QW50aUxlZWNoUGFyYW0iLCJhbnRpTGVlY2hUb2tlbiIsImV4cGlyZVRpbWUiLCJ1cmkiLCJleHBpcmUiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInVweXVuT3B0aW9ucyIsInN1ZmZpeCIsInVwdCIsIndlYmRhdnBsaXN0T3B0aW9ucyIsImhvc3QiLCJzc2xFbmFibGVkIiwiYXV0aFR5cGUiLCJ3ZWJwYXRoIiwiY2xpZW50T3B0aW9ucyIsIm1heEJvZHlMZW5ndGgiLCJtYXhDb250ZW50TGVuZ3RoIiwiQXV0aFR5cGUiLCJEaWdlc3QiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJwYXRoVG9DcmVhdGUiLCJjcmVhdGVEaXJlY3RvcnkiLCJwdXRGaWxlQ29udGVudHMiLCJvdmVyd3JpdGUiLCJpbWdUZW1wUGF0aCIsImltZ1RlbXBGaWxlUGF0aCIsImdhbGxlcnlQYXRoIiwibG9jYWxDb25maWciLCJ3ZWJQYXRoIiwiY29weUZpbGVTeW5jIiwiU1NIQ2xpZW50IiwiX2lzQ29ubmVjdGVkIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJfY2xpZW50IiwiTm9kZVNTSCIsImNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCIsInByaXZhdGVLZXkiLCJwYXNzcGhyYXNlIiwibG9naW5JbmZvIiwicHJpdmF0ZUtleVBhdGgiLCJjb25uZWN0IiwicG9ydCIsImxvY2FsIiwicmVtb3RlIiwibWtkaXIiLCJwdXRGaWxlIiwiZmlsZU1vZGUiLCJzY3JpcHQiLCJleGVjIiwiZGlyUGF0aCIsImlzQ29ubmVjdGVkIiwiZGlyZWN0b3J5TW9kZSIsImRpck1vZGUiLCJkaXJzIiwiY3VycmVudFBhdGgiLCJ1c2VyIiwiZ3JvdXAiLCJfdXNlciIsIl9ncm91cCIsImV4ZWNDb21tYW5kIiwiY2xvc2UiLCJkaXNwb3NlIiwic2Z0cHBsaXN0Q29uZmlnIiwidXBsb2FkVGVtcFBhdGgiLCJyZW1vdGVQYXRoIiwiZmlsZVVzZXIiLCJjaG93biIsInJlbW92ZVN5bmMiLCJtb3ZlU3luYyIsInRnT3B0aW9ucyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZW1vdmUiLCJzcmMiLCJwaWNiZWQiLCJzZXJ2ZXJLZXkiLCJwaWNsaXN0T3B0aW9ucyIsImZ1bGxSZXN1bHQiLCJpc1YyIiwidjFIZWFkZXJzIiwiQ29ubmVjdGlvbiIsInYxRm9ybURhdGEiLCJ2MkhlYWRlcnMiLCJBY2NlcHQiLCJzdHJhdGVneUlkIiwiYWxidW1JZCIsInBlcm1pc3Npb24iLCJ2MkZvcm1EYXRhIiwic3RyYXRlZ3lfaWQiLCJhbGJ1bV9pZCIsImFnZW50IiwiaHR0cHMiLCJBZ2VudCIsInJlamVjdFVuYXV0aG9yaXplZCIsImxza3lPcHRpb25zIiwic3RhdHVzIiwibGlua3MiLCJGaWxlTmFtZUdlbmVyYXRvciIsIm1vbnRoIiwicGFkU3RhcnQiLCJkYXkiLCJmdWxsTmFtZSIsImV4dE5hbWUiLCJtZDUiLCJpbWdCdWZmZXIiLCJtZDVCNjQiLCJtZDVCNjRTaG9ydCIsInNoYTEiLCJzaGEyNTYiLCJ0aW1lc3RhbXAiLCJ0aW1lc3RhbXBNUyIsImZvcm1hdFBhdGgiLCJmaWxlTmFtZUdlbmVyYXRvciIsImZpZWxkcyIsInJlIiwiZ2V0UHJveHlBZ2VudCIsImZvcm1hdGVkUHJveHkiLCJwcm90b2NvbCIsImhvc3RuYW1lIiwiZm9ybWF0SHR0cFByb3h5VVJMIiwiSHR0cHNQcm94eUFnZW50IiwiSHR0cFByb3h5QWdlbnQiLCJrZWVwQWxpdmUiLCJrZWVwQWxpdmVNc2VjcyIsInNjaGVkdWxpbmciLCJnZXRGaWxlVVJMIiwiZVRhZyIsInZlcnNpb25JZCIsInNpZ25lZFVybCIsImdldFNpZ25lZFVybCIsIkdldE9iamVjdENvbW1hbmQiLCJCdWNrZXQiLCJidWNrZXROYW1lIiwiS2V5IiwiSWZNYXRjaCIsIlZlcnNpb25JZCIsImV4cGlyZXNJbiIsInVybE9iamVjdCIsInNlYXJjaCIsImhyZWYiLCJjcmVhdGVTM0NsaWVudCIsImh0dHBIYW5kbGVyT3B0cyIsImh0dHBzQWdlbnQiLCJodHRwQWdlbnQiLCJyZWdpb24iLCJjcmVkZW50aWFscyIsImFjY2Vzc0tleUlEIiwic2VjcmV0QWNjZXNzS2V5IiwidGxzIiwiZm9yY2VQYXRoU3R5bGUiLCJwYXRoU3R5bGVBY2Nlc3MiLCJyZXF1ZXN0SGFuZGxlciIsIk5vZGVIdHRwSGFuZGxlciIsIlMzQ2xpZW50IiwiY3JlYXRlVXBsb2FkVGFzayIsImNvbnRlbnRFbmNvZGluZyIsImdldFR5cGUiLCJmaWxlVHlwZSIsIkZpbGVUeXBlIiwiZnJvbUJ1ZmZlciIsImV4dHJhY3RJbmZvIiwiUHV0T2JqZWN0Q29tbWFuZCIsIkFDTCIsImFjbCIsIkJvZHkiLCJDb250ZW50VHlwZSIsIkNvbnRlbnRFbmNvZGluZyIsInNlbmQiLCJ1cmxQcmVmaXgiLCJFVGFnIiwiaW1nVVJMIiwiZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMIiwidGFza3MiLCJpZHgiLCJyZXN1bHRzIiwiYXNzaWduIiwiYnVpbGRJblVwbG9hZGVycyIsImFsaVl1blVwbG9hZGVyIiwidGNZdW5VcGxvYWRlciIsIlNNTVNVcGxvYWRlciIsImdpdGh1YlVwbG9hZGVyIiwicWluaXVVcGxvYWRlciIsImltZ3VyVXBsb2FkZXIiLCJ1cFl1blVwbG9hZGVyIiwid2ViZGF2cGxpc3RVcGxvYWRlciIsImxvY2FsVXBsb2FkZXIiLCJzZnRwVXBsb2FkZXIiLCJ0ZWxlZ3JhcGhVcGxvYWRlciIsInBpY2xpc3RVcGxvYWRlciIsImxza3lVcGxvYWRlciIsImF3c3MzcGxpc3RVcGxvYWRlciIsImdldEltZ1NpemUiLCJJbWdGcm9tUGF0aCIsImltZ1NpemUiLCJJbWdGcm9tQmFzZTY0IiwiUGx1Z2luTG9hZGVyIiwiZnVsbExpc3QiLCJTZXQiLCJwbHVnaW5NYXAiLCJwYWNrYWdlUGF0aCIsInJlcG9zaXRvcnkiLCJsaWNlbnNlIiwicmVzb2x2ZVBsdWdpbiIsImJhc2VkaXIiLCJsb2FkIiwicGx1Z2luRGlyIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJtb2R1bGVzIiwicmVnaXN0ZXJQbHVnaW4iLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJ1bnJlZ2lzdGVyUGx1Z2luIiwiaGFzUGx1Z2luIiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwic3Bhd24iLCJzdGRvdXQiLCJ0cmltIiwiaW1nUGF0aCIsInNob3VsZEtlZXBBZnRlclVwbG9hZGluZyIsImV2ZW50QnVzIiwibWF4VmVyc2lvbiIsIm1pblZlcnNpb24iLCJhcHBlbmRGb3JtRGF0YSIsImZvcm0iLCJhcHBlbmQiLCJyZXNwb25zZUludGVyY2VwdG9yIiwicmVzcG9uc2VFcnJvckhhbmRsZXIiLCJlcnJvck9iaiIsIl9nIiwiQ09ORklHX0NIQU5HRSIsImhhbmRsZVByb3h5IiwicHJveHlPcHRpb25zIiwiSW5maW5pdHkiLCJ0dW5uZWwiLCJodHRwc092ZXJIdHRwIiwiY3JlYXRlIiwiaW50ZXJjZXB0b3JzIiwib3B0IiwiX19pc09sZE9wdGlvbnMiLCJGb3JtRGF0YSIsImdldEhlYWRlcnMiLCJxcyIsInJlcXVlc3RJbnRlcmNlcHRvciIsIm9iaiIsIkRCIiwiZGIiLCJKU09OU3RvcmUiLCJyZWFkIiwiZmx1c2giLCJ1bnNldCIsIlBsdWdpbkhhbmRsZXIiLCJpbnN0YWxsZWRQbHVnaW5zIiwicHJvY2Vzc1BsdWdpbnMiLCJoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyIsInBrZ05hbWUiLCJmdWxsTmFtZUxpc3QiLCJwa2dOYW1lTGlzdCIsIndoZXJlIiwibnBtIiwicGlwZSIsInN0ZGVyciIsImxhbmd1YWdlTGlzdCIsIlVQTE9BRF9GQUlMRUQiLCJDSEVDS19TRVRUSU5HUyIsIkNIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLIiwiVVBMT0FEX0ZBSUxFRF9SRUFTT04iLCJTRVJWRVJfRVJST1IiLCJBVVRIX0ZBSUxFRCIsIlBJQ0JFRF9TTU1TIiwiUElDQkVEX1NNTVNfVE9LRU4iLCJQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOIiwiUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOIiwiUElDQkVEX0xPQ0FMIiwiUElDQkVEX0xPQ0FMX1BBVEgiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIIiwiUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9MT0NBTF9XRUJQQVRIIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSCIsIlBJQ0JFRF9BTElDTE9VRCIsIlBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQiLCJQSUNCRURfQUxJQ0xPVURfQlVDS0VUIiwiUElDQkVEX0FMSUNMT1VEX0FSRUEiLCJQSUNCRURfQUxJQ0xPVURfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwiLCJQSUNCRURfQUxJQ0xPVURfT1BUSU9OUyIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUEiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVkiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTCIsIlBJQ0JFRF9HSVRIVUIiLCJQSUNCRURfR0lUSFVCX1RPS0VOIiwiUElDQkVEX0dJVEhVQl9SRVBPIiwiUElDQkVEX0dJVEhVQl9QQVRIIiwiUElDQkVEX0dJVEhVQl9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9RSU5JVSIsIlBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVkiLCJQSUNCRURfUUlOSVVfU0VDUkVUS0VZIiwiUElDQkVEX1FJTklVX0JVQ0tFVCIsIlBJQ0JFRF9RSU5JVV9QQVRIIiwiUElDQkVEX1FJTklVX1VSTCIsIlBJQ0JFRF9RSU5JVV9PUFRJT05TIiwiUElDQkVEX1FJTklVX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwiLCJQSUNCRURfVEVMRUdSQVBIIiwiUElDQkVEX0lNR1VSIiwiUElDQkVEX0lNR1VSX0NMSUVOVElEIiwiUElDQkVEX0lNR1VSX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTiIsIlBJQ0JFRF9JTUdVUl9BTEJVTSIsIlBJQ0JFRF9JTUdVUl9QUk9YWSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZIiwiUElDQkVEX1VQWVVOIiwiUElDQkVEX1VQWVVOX0JVQ0tFVCIsIlBJQ0JFRF9VUFlVTl9PUEVSQVRPUiIsIlBJQ0JFRF9VUFlVTl9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9QQVRIIiwiUElDQkVEX1VQWVVOX1VSTCIsIlBJQ0JFRF9VUFlVTl9PUFRJT05TIiwiUElDQkVEX1VQWVVOX0VORFBPSU5UIiwiUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4iLCJQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUiIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9XRUJEQVZQTElTVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFIiwiUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9TRlRQUExJU1QiLCJQSUNCRURfU0ZUUFBMSVNUX0hPU1QiLCJQSUNCRURfU0ZUUFBMSVNUX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFIiwiUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSIiwiUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERSIsIlBJQ0JFRF9QSUNMSVNUIiwiUElDQkVEX1BJQ0xJU1RfSE9TVCIsIlBJQ0JFRF9QSUNMSVNUX1BPUlQiLCJQSUNCRURfUElDTElTVF9QSUNCRUQiLCJQSUNCRURfUElDTElTVF9DT05GSUdOQU1FIiwiUElDQkVEX1BJQ0xJU1RfS0VZIiwiUElDQkVEX0xTS1lfUExJU1QiLCJQSUNCRURfTFNLWV9WRVJTSU9OIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OIiwiUElDQkVEX0xTS1lfSE9TVCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9MU0tZX1RPS0VOIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTiIsIlBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRCIsIlBJQ0JFRF9MU0tZX0FMQlVNX0lEIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRCIsIlBJQ0JFRF9MU0tZX1BFUk1JU1NJT04iLCJQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT04iLCJQSUNCRURfQVdTUzNQTElTVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTiIsIlBJQ0JFRF9BV1NTM1BMSVNUX1VQTE9BRFBBVEgiLCJQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZIiwiUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYIiwiUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTIiwiUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEIiwiUElDQkVEX0FXU1MzUExJU1RfQUNMIiwiUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT04iLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QQVRIU1RZTEVBQ0NFU1MiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwiLCJCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9SRU5BTUVfRk9STUFUIiwiQlVJTERJTl9SRU5BTUVfRU5BQkxFIiwiQlVJTERJTl9DT01QUkVTU19RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNGTElQIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMT1AiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUciLCJCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEIiwiZW4iLCJJMThuTWFuYWdlciIsIm9iamVjdEFkYXB0ZXIiLCJPYmplY3RBZGFwdGVyIiwibGFuZ3VhZ2UiLCJJMThuIiwiYWRhcHRlciIsImRlZmF1bHRMYW5ndWFnZSIsImxvYWRPdXR0ZXJJMThuIiwiaTE4bkZvbGRlciIsImdldE91dHRlckkxOG5Gb2xkZXIiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJpc0ZpbGUiLCJpMThuRmlsZVBhdGgiLCJpMThuRmlsZSIsImkxOG5GaWxlT2JqIiwieWFtbCIsInBhdGhFeGlzdHNTeW5jIiwiYWRkTG9jYWxlIiwibG9jYWxlcyIsIm9yaWdpbkxvY2FsZXMiLCJnZXRMb2NhbGUiLCJuZXdMb2NhbGVzIiwibWVyZ2UiLCJzZXRMb2NhbGUiLCJhZGRMYW5ndWFnZSIsIlBpY0dvIiwiX3BsdWdpbkxvYWRlciIsImluaXRDb25maWdQYXRoIiwiaW5pdENvbmZpZyIsImVuc3VyZUZpbGVTeW5jIiwiX2NvbmZpZyIsInVwbG9h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