piclist 1.9.5 → 1.9.6

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("events"),t=require("fs-extra"),r=require("lodash"),n=require("os"),a=require("path"),i=require("commander"),s=require("inquirer"),E=require("image-size"),o=require("url"),l=require("text-to-svg"),I=require("sharp"),_=require("crypto"),S=require("uuid"),u=require("chalk"),P=require("download-git-repo"),c=require("rimraf"),A=require("minimatch"),p=require("globby"),C=require("ejs"),D=require("dayjs"),d=require("util"),T=require("cross-spawn"),g=require("resolve"),L=require("axios"),f=require("form-data"),m=require("https"),h=require("tunnel"),B=require("heic-convert"),N=require("mime-types"),U=require("@aws-sdk/client-s3"),R=require("@aws-sdk/s3-request-presigner"),O=require("@smithy/node-http-handler"),M=require("file-type"),y=require("mime"),G=require("hpagent"),b=require("qiniu"),x=require("node-ssh-no-cpu-features"),w=require("webdav"),W=require("child_process"),K=require("is-wsl"),F=require("@picgo/store"),H=require("js-yaml"),v=require("@picgo/i18n");function $(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var k=$(t),Y=$(n),q=$(a),V=$(s),j=$(o),z=$(l),X=$(I),Q=$(_),Z=$(u),J=$(P),ee=$(A),te=$(p),re=$(D),ne=$(d),ae=$(L),ie=$(f),se=$(m),Ee=$(B),oe=$(M),le=$(y),Ie=$(b),_e=$(K),Se=$(H);const ue=(e,t,r,n,a,i)=>{let s=e.program.command(t).description(r).alias(n);(null==i?void 0:i.proxy)&&(s=s.option("-p, --proxy <proxy>","Add proxy for installing plugins")),(null==i?void 0:i.registry)&&(s=s.option("-r, --registry <registry>","Choose a registry for installing plugins")),s.action(a)},Pe={handle:e=>{const t=e.cmd;ue(t,"install <plugins...>","install picgo plugin","add",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0}),ue(t,"uninstall <plugins...>","uninstall picgo plugin","rm",(t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),ue(t,"update <plugins...>","update picgo plugin","up",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0})}},ce={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function Ae(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function pe(e){return 1===e.toString().length?`0${e}`:e.toString()}function Ce(e){return Q.default.createHash("md5").update(e).digest("hex")}function De(e,t,r,n){const a=new Date,i=a.getFullYear().toString(),s=q.default.basename(e,q.default.extname(e)),E={"{Y}":()=>i,"{y}":()=>i.slice(2),"{m}":()=>pe(a.getMonth()+1),"{d}":()=>pe(a.getDate()),"{h}":()=>pe(a.getHours()),"{i}":()=>pe(a.getMinutes()),"{s}":()=>pe(a.getSeconds()),"{ms}":()=>a.getMilliseconds().toString().padStart(3,"0"),"{md5}":()=>Ce(n||s),"{md5-16}":()=>Ce(n||s).slice(0,16),"{filename}":()=>r?q.default.basename(r,q.default.extname(r)):s,"{uuid}":()=>S.v4().replace(/-/g,""),"{timestamp}":()=>a.getTime().toString()};if(void 0===t||!Object.keys(E).some((e=>t.includes(e)))&&!t.includes("localFolder:")&&!t.includes("str-"))return e;const o=q.default.extname(e);let l=Object.keys(E).reduce(((e,t)=>e.replace(new RegExp(t,"g"),E[t]())),t)+o;return l=l.replace(/{str-(\d+)}/gi,((e,t)=>Ae(parseInt(t,10)))),l=l.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return q.default.dirname(e).split(q.default.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),l}const de=e=>/^https?:\/\//.test(e),Te=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},ge=e=>(Te(e)||(e=encodeURI(e)),e),Le=e=>{try{const{width:t=0,height:r=0,type:n}=E.imageSize(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},fe=async e=>{try{return{extname:q.default.extname(e),fileName:q.default.basename(e),buffer:await t.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},me=async(e,t)=>{let r;e=ge(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")||q.default.extname(i)||""}catch(e){s=q.default.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:q.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])},he=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Be(e)?"simple":"unknown",Be=e=>{if(q.default.isAbsolute(e))return!1;const t=q.default.join(process.cwd(),e);return!k.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Ne=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,Ue=(e,t=console)=>{switch(he(e)){case"normal":case"scope":return e;case"simple":return Ne(e);default:{let r=e;return q.default.isAbsolute(e)&&k.default.existsSync(e)?Oe(r):(r=q.default.join(process.cwd(),e),k.default.existsSync(r)?Oe(r):(t.warn(`Can't find plugin ${e}`),""))}}},Re=(e,r=console)=>{var n;switch(he(e)){case"normal":return Me(e);case"scope":return Me(e,!0);case"simple":return Me(Ne(e));default:{if(!k.default.existsSync(e))return r.warn(`Can't find plugin: ${e}`),"";const a=q.default.posix.join(e,"package.json");if(k.default.existsSync(a)){const e=t.readJSONSync(a)||{};return(null===(n=e.name)||void 0===n?void 0:n.includes("picgo-plugin-"))?e.name:(r.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return r.warn(`Can't find plugin: ${e}`),""}}},Oe=e=>e.split(q.default.sep).join("/"),Me=(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},ye=[],Ge=e=>ye.some((t=>e.startsWith(t))),be=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function xe(e){try{return JSON.parse(e)}catch(t){return e}}const we=(e=0)=>isNaN(Number(e))?0:Number(e),We=()=>"development"===process.env.NODE_ENV;const Ke=q.default.join(__dirname,"assets","piclist.png");async function Fe(e,t,r,n,a,i,s,E,o,l,I){E=!E||E<0||E>1?.15:E;const _=X.default(e,{animated:!0}),{width:S=200}=await _.metadata(),u=await async function(e,t,r,n,a,i,s,E=200,o=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:_}=await async function(e){const{width:t,height:r}=await X.default(e).metadata();return{width:t||200,height:r||200}}(l),S=Math.floor(E*we(a)),u=Math.floor(S*_/I);return await X.default(l).resize(S,u,{fit:"inside"}).rotate(o,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,E,o,l,S,a);return await _.composite([{input:u,gravity:I||"southeast",tile:n}]).toBuffer()}const He=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),ve=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],$e=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],ke=e=>ve.includes(e);async function Ye(e,t,r,n){try{let n=X.default(e,{animated:!0});return n=X.default(await Fe(e,t.watermarkType||"text",r,t.isFullScreenWatermark,we(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,we(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?xe(e.formatConvertObj):e.formatConvertObj;return{quality:we(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:we(e.reSizeHeight),reSizeWidth:we(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:we(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:we(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function Ve(e,t,r,n){t=qe(t);try{if(r=je(r),!$e.includes(r)||"gif"===r)return e;let n=X.default(e,{animated:!0}),a=100;if(He(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(He(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=ze(t,r);e!==r&&(n=n.toFormat(e,{quality:a,mozjpeg:!0}))}else n=r&&ke(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}}const je=e=>e.toLowerCase().replace(".","");function ze(e,t){if(e=qe(e||{}),"gif"===(t=je(t)))return"gif";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],ke(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const Xe=(e,t)=>(t=je(t),!!e&&!!e.isAddWatermark&&$e.includes(t)&&"svg"!==t),Qe=(e,t)=>{if(!$e.includes(je(t))||!e)return!1;const{quality:r,isReSizeByPercent:n,reSizePercent:a,isReSize:i,reSizeHeight:s,reSizeWidth:E,isRotate:o,rotateDegree:l,isConvert:I,convertFormat:_,isFlip:S,isFlop:u}=qe(e);if(He(r)&&r<100)return!0;if(n&&He(a))return!0;if(i&&("number"==typeof s&&s>0||"number"==typeof E&&E>0))return!0;if(o&&l)return!0;if(S||u)return!0;if(I){return t!==(_||"jpg")}return!1},Ze=async(e,t)=>(t=je(t),$e.includes(t)&&"svg"!==t?await X.default(e,{animated:!0}).toBuffer():e);var Je=Object.freeze({__proto__:null,randomStringGenerator:Ae,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${Ae(5)}${q.default.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${Ae(t)}${q.default.extname(e)}`},renameFileNameWithCustomString:De,isUrl:de,isUrlEncode:Te,handleUrlEncode:ge,getImageSize:Le,getFSFile:fe,getURLFile:me,getPluginNameType:he,isSimpleName:Be,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Ne,getProcessPluginName:Ue,getNormalPluginName:Re,handleUnixStylePath:Oe,removePluginVersion:Me,configBlackList:ye,isConfigKeyInBlackList:Ge,isInputConfigValid:be,safeParse:xe,forceNumber:we,isDev:We,AddWatermark:Fe,imageAddWaterMark:Ye,imageCompress:Ve,getConvertedFormat:ze,isNeedAddWatermark:Xe,isNeedCompress:Qe,removeExif:Ze});const et={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:q.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 tt=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 rt=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 nt=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 at=e=>({advancedplist:e.i18n.translate("PICBED_ADVANCEDPLIST"),alistplist:e.i18n.translate("PICBED_ALIST_PLIST"),aliyun:e.i18n.translate("PICBED_ALICLOUD"),"aws-s3-plist":e.i18n.translate("PICBED_AWSS3PLIST"),github:e.i18n.translate("PICBED_GITHUB"),imgur:e.i18n.translate("PICBED_IMGUR"),local:e.i18n.translate("PICBED_LOCAL"),lskyplist:e.i18n.translate("PICBED_LSKY_PLIST"),piclist:e.i18n.translate("PICBED_PICLIST"),qiniu:e.i18n.translate("PICBED_QINIU"),sftpplist:e.i18n.translate("PICBED_SFTPPLIST"),smms:e.i18n.translate("PICBED_SMMS"),tcyun:e.i18n.translate("PICBED_TENCENTCLOUD"),telegraphplist:e.i18n.translate("PICBED_TELEGRAPH"),upyun:e.i18n.translate("PICBED_UPYUN"),webdavplist:e.i18n.translate("PICBED_WEBDAVPLIST")}),it=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})},st={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 it(e,tt(e),t,r);else if("watermark"===r)await it(e,rt(e),t,r);else if("rename"===r)await it(e,nt(e),t,r);else{const r=[{type:"list",name:"buildin",choices:[{name:e.i18n.translate("BUILDIN_COMPRESS"),value:"compress"},{name:e.i18n.translate("BUILDIN_WATERMARK"),value:"watermark"},{name:e.i18n.translate("BUILDIN_RENAME"),value:"rename"}],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await it(e,tt(e),t,n.buildin):"watermark"===n.buildin?await it(e,rt(e),t,n.buildin):"rename"===n.buildin&&await it(e,nt(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 it(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList().map((t=>({name:at(e)[t]||t,value:t}))),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 it(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 it(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 it(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)}))}))}},Et={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().map((t=>({name:at(e)[t]||t,value:t}))),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 saved successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},ot={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},lt=async(e,t)=>{try{const r=_t(t.tmp),n=q.default.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await te.default(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{ee.default(t,e,{dot:!0})&&(n=t)})),!n||It(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=St(i,n,a);ut(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)}},It=(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}},_t=e=>{const t=q.default.join(e,"index.js");if(k.default.existsSync(t)){return require(t)}return{}},St=(e,t,r)=>{const n={};return e.forEach((e=>{const a=k.default.readFileSync(q.default.join(t,e),"utf8"),i=C.render(a,r);(Buffer.isBuffer(i)||/[^\s]/.test(i))&&(n[e]=i)})),n},ut=(e,r)=>{Object.keys(r).forEach((n=>{const a=q.default.join(e,n);t.ensureDirSync(q.default.dirname(a)),k.default.writeFileSync(a,r[n])}))},Pt=(e,t)=>{t.offline?k.default.existsSync(t.template)?lt(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,ct(e,t))},ct=(e,t)=>{k.default.existsSync(t.tmp)&&c.sync(t.tmp),e.log.info("Template files are downloading..."),J.default(t.template,t.tmp,{clone:t.clone},(r=>{r?e.log.error(r):(e.log.success("Template files are downloaded!"),lt(e,t).catch((t=>{e.log.error(t)})))}))},At={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,E=q.default.resolve(r||"."),o=a.clone||!1,l=a.offline||!1,I=q.default.join(n.homedir(),".piclist/templates",t.replace(/[/:]/g,"-"));a.offline&&(t=I);const _={template:t,project:r,hasSlash:i,inPlace:s,dest:E,clone:o,tmp:I,offline:l};s||k.default.existsSync(E)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&Pt(e,_)})):Pt(e,_)}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()}))}},pt={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 Ct{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),Ct.currentPlugin&&(this.pluginIdMap.has(Ct.currentPlugin)?null===(r=this.pluginIdMap.get(Ct.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(Ct.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)=>{Ct.currentPlugin=e};class dt{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new i.Command,this.inquirer=V.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.9.5","-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",Pe),e.cmd.register("config",ce),e.cmd.register("setting",st),e.cmd.register("upload",et),e.cmd.register("use",Et),e.cmd.register("proxy",ot),e.cmd.register("init",At),e.cmd.register("i18n",pt)}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=Ct.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 Tt,gt,Lt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(Tt||(Tt={})),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"}(gt||(gt={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(Lt||(Lt={}));class ft{constructor(e){this.level={[Tt.success]:"green",[Tt.info]:"blue",[Tt.warn]:"yellow",[Tt.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")||q.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*we(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),t.createFileSync(e))}handleWriteLog(e,t,...r){try{let n=`${re.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${ne.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(Tt.success,...e)}info(...e){this.handleLog(Tt.info,...e)}error(...e){this.handleLog(Tt.error,...e)}warn(...e){this.handleLog(Tt.warn,...e)}debug(...e){We()&&this.handleLog(Tt.info,...e)}}class mt{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>ht(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=>ht(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=>ht(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 E,o;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=T.spawn("npm",l,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(E=e.stdout)||void 0===E||E.on("data",(e=>{t+=e})).pipe(process.stdout),null===(o=e.stderr)||void 0===o||o.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(gt.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(gt.FAILED,e)}}))}}const ht=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=Ue(t,e.log);if(!n)return r;const a=Re(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r};class Bt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=q.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 g.sync(t,{basedir:e.baseDir})}catch(r){return q.default.join(e.baseDir,"node_modules",t)}}load(){const e=q.default.join(this.ctx.baseDir,"node_modules/");if(!k.default.existsSync(e))return!1;const r=q.default.join(this.ctx.baseDir,"package.json"),n=t.readJSONSync(r),a=Object.keys(n.dependencies||{}),i=Object.keys(n.devDependencies||{}),s=a.concat(i).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 s)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(gt.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=q.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 Nt=new e.EventEmitter,Ut=new se.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function Rt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Ot(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Mt(e){var t,r,n,a,i,s,E;const o={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===(E=null==e?void 0:e.response)||void 0===E?void 0:E.data)||""}};return Promise.reject(o)}class yt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Nt.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=h.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=Ut;const r=ae.default.create(this.options);r.interceptors.response.use(Ot,Mt);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=h.httpsOverHttp({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new ie.default;for(const r in e.formData)Rt(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 Gt extends e.EventEmitter{constructor(e){super(),this.ctx=e,this.ttfPath=q.default.join(e.baseDir,"assets","simhei.ttf"),t.ensureDirSync(q.default.join(e.baseDir,"imgTemp"));e.getConfig("settings.enableSecondUploader")||!1||t.emptyDirSync(q.default.join(e.baseDir,"piclistTemp"))}async downloadTTF(){try{if(t.ensureDirSync(q.default.dirname(this.ttfPath)),k.default.existsSync(this.ttfPath)&&k.default.statSync(this.ttfPath).size>0)return!0;this.ctx.log.info("Download ttf file.");const e=await ae.default.get("https://release.piclist.cn/simhei.ttf",{responseType:"arraybuffer"});return k.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file successfully."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}helpGetOption(e){const t=e.getConfig("buildIn.compress"),r=e.getConfig("buildIn.watermark"),n=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms";return!e.helper.uploader.get(n)&&t?t.picBed="smms":t&&(t.picBed=n),{compressOptions:t,watermarkOptions:r}}async start(e,t=!1){const n=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],processedInput:[],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),uploadReturnCtx:e.uploadReturnCtx.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.");return n.input=e,n.output=[],n.rawInputPath=[],n.rawInput=r.cloneDeep(e),t?(n.log.info("Skip process."),n.output=e,await this.doUpload(n),n.input=n.rawInput,await this.afterUpload(n),n):(await this.preprocess(n),await this.beforeTransform(n),await this.doTransform(n),await this.buildInRename(n),await this.beforeUpload(n),n.processedInput=r.cloneDeep(n.output),await this.doUpload(n),n.input=n.rawInput,await this.afterUpload(n),n)}catch(e){if(n.log.warn(gt.FAILED),n.emit(gt.UPLOAD_PROGRESS,-1),n.emit(gt.FAILED,e),n.log.error(e),n.getConfig("debug"))throw e;return n}}async preprocess(e){const{compressOptions:t,watermarkOptions:r}=this.helpGetOption(e);if(e.emit(gt.UPLOAD_PROGRESS,0),e.emit(gt.BEFORE_TRANSFORM,e),e.log.info("Before transform"),t||r){const n=q.default.join(e.baseDir,"piclistTemp");await Promise.allSettled(e.input.map((async(a,i)=>{const s=de(a),E=s?await me(a,e):{success:!1};if(s&&(!E.success||!E.buffer))return;let o,l=!1;e.rawInputPath[i]=a;const I=s?E.extname||"":q.default.extname(a),_=s?E.buffer:k.default.readFileSync(a);if(Xe(r,I)){if(!(null==r?void 0:r.watermarkFontPath)&&"image"!==(null==r?void 0:r.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),l=!0)}l||(e.log.info("Add watermark to image"),o=await Ye(_,r,this.ttfPath,e.log))}if(Qe(t,I))if(e.log.info("Compress or convert image"),s||".heic"!==I&&".heif"!==I)o=await Ve(null!=o?o:_,t,I,e.log);else{const r=await Ee.default({buffer:_,format:"JPEG",quality:1}),i=q.default.join(n,`${q.default.basename(a,I)}.jpg`);k.default.writeFileSync(i,Buffer.from(r)),o=await Ve(k.default.readFileSync(i),t,".jpg",e.log)}if(!o&&(null==t?void 0:t.isRemoveExif)&&(e.log.info("Remove exif info."),o=await Ze(_,I)),o){let r=(null==t?void 0:t.isConvert)?ze(t,I):I;r=r.startsWith(".")?r:`.${r}`;const l=s?q.default.join(n,`${E.fileName?`${q.default.basename(E.fileName,q.default.extname(E.fileName))}`:(new Date).getTime()}${r}`):q.default.join(n,`${q.default.basename(a,I)}${r}`);e.rawInputPath[i]=q.default.join(q.default.dirname(a),s?q.default.basename(l):`${q.default.basename(a,I)}${r}`),k.default.writeFileSync(l,o),e.input[i]=l}})))}else for(const t of e.input)e.rawInputPath.push(t);return e}async buildInRename(e){const t=e.getConfig("buildIn.rename")||{};if(t.enable){const r=t.format||"{filename}";e.output=e.output.map(((t,n)=>{let a=t.fileName;return r&&(a=De(e.rawInputPath[n],r,void 0,t.base64Image?t.base64Image:t.buffer),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),t.fileName=a,t}))}return e}async beforeTransform(e){return await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(gt.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(gt.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(gt.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(gt.AFTER_UPLOAD,e),e.emit(gt.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?ge(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(gt.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}}function bt({path:e,startSlash:t=!1,endSlash:r=!0,rootToEmpty:n=!0}){const a=null==e?void 0:e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");return a?`${t?"/":""}${a}${r?"/":""}`:n?"":"/"}function xt(e){return e.replace(/\/{2,}/g,"/").split("/").map((e=>encodeURIComponent(e))).join("/")}const wt="advancedplist",Wt="alistplist",Kt="aliyun",Ft="aws-s3-plist",Ht="github",vt="imgur",$t="local",kt="lskyplist",Yt="piclist",qt="qiniu",Vt="sftpplist",jt="smms",zt="tcyun",Xt="telegraphplist",Qt="upyun",Zt="webdavplist",Jt=(e,t,r,n,a,i,s)=>({method:n.toUpperCase(),url:r,headers:Object.assign(Object.assign({},{contentType:"multipart/form-data","User-Agent":"PicList"}),a),formData:Object.assign({[s]:{value:e,options:{filename:t}}},i),json:!0}),er=async e=>{const t=e.getConfig("picBed.advancedplist");if(!t)throw new Error("Can not find advancedplist 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=Jt(r,n.fileName,t.endpoint,t.method,JSON.parse(t.headers||"{}"),JSON.parse(t.body||"{}"),t.formDataKey||"file");let i=await e.request(a);i="string"==typeof i?JSON.parse(i):i;let s=i;const E=t.resDataPath||"data.url";for(const e of E.split(".")){if(!s||"object"!=typeof s||!(e in s)){s=void 0;break}s=s[e]}if(!s||"string"!=typeof s)throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:i.message}),new Error(i.message);delete n.base64Image,delete n.buffer,t.customPrefix&&(n.imgUrl=t.customPrefix+s),n.imgUrl=s}return e},tr=e=>{const t=e.getConfig("picBed.advancedplist")||{};return[{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT")},default:t.endpoint||"",required:!0},{name:"method",type:"list",choices:["POST","PUT","GET"],get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_METHOD")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_METHOD")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_METHOD")},default:t.method||"POST",required:!1},{name:"formDataKey",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_FORM_DATA_KEY")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_FORM_DATA_KEY")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY")},default:t.formDataKey||"file",required:!1},{name:"headers",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_HEADERS")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_HEADERS")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_HEADERS")},default:t.headers||"{}",required:!1},{name:"body",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_BODY")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_BODY")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_BODY")},default:t.body||"{}",required:!1},{name:"customPrefix",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_CUSTOM_PREFIX")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_CUSTOM_PREFIX")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX")},default:t.customPrefix||"",required:!1},{name:"resDataPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_RES_DATA_PATH")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_RES_DATA_PATH")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH")},default:t.resDataPath||"data.url",required:!1}]};const rr=(e,t,r,n,a)=>({method:"PUT",url:`${e}/api/fs/form`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:t,"File-Path":encodeURIComponent(n)},formData:{file:{value:a,options:{filename:r}}},resolveWithFullResponse:!0}),nr=(e,t)=>{if(200!==t.statusCode||200!==t.body.code||"success"!==t.body.message)throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:t.body.message}),new Error(t.body.message)},ar=e=>{const{url:t,token:r,username:n,password:a,uploadPath:i,webPath:s,customUrl:E}=e;return{url:(t||"").replace(/\/$/,""),token:r||"",username:n||"",password:a||"",uploadPath:bt({path:i||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}),webPath:s?bt({path:s||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}):"",customUrl:(E||"").replace(/\/$/,"")}},ir=async e=>{const t=e.getConfig("picBed.alistplist");if(!t)throw new Error("Can not find alist config!");const{url:r,username:n,password:a,uploadPath:i,webPath:s,customUrl:E}=ar(t);let{token:o}=ar(t);if(o||(o=await(async(e,t,r,n)=>{const a=e.getConfig("picgo-plugin-buildin-alistplist");if(a&&a.refreshedAt&&Date.now()-a.refreshedAt<36e5&&a.token)return a.token;const i=await ae.default.post(`${t}/api/auth/login`,{username:r,password:n});if(200===i.data.code&&"success"===i.data.message){const t=i.data.data.token;return e.saveConfig({"picgo-plugin-buildin-alistplist":{token:t,refreshedAt:Date.now()}}),t}throw new Error("Get token failed")})(e,r,n,a)),!r||!(o||n&&a))throw new Error("Please check your alist config!");const l=e.output;for(const t of l)if(t.fileName&&t.buffer){let n=t.buffer;!n&&t.base64Image&&(n=Buffer.from(t.base64Image,"base64"));const a=`${i}${t.fileName}`,l=rr(r,o,t.fileName,a,n),I=await e.request(l);nr(e,I);const _=`${r}/api/fs/list`,S=`${r}/api/fs/get`,u=await e.request({method:"POST",url:_,headers:{Authorization:o,"Content-Type":"application/json"},body:{password:"",page:1,per_page:1,refresh:!0,path:q.default.dirname(a)},resolveWithFullResponse:!0});nr(e,u);const P=await e.request({method:"POST",url:S,headers:{Authorization:o,"Content-Type":"application/json"},body:{password:"",path:a,page:1,per_page:1,refresh:!0},resolveWithFullResponse:!0});nr(e,P);const c=P.body.data.sign,A=xt(`${s||i}${t.fileName}`);t.imgUrl=`${E||r}/d${A}`,t.imgUrl+=c?`?sign=${c}`:"",delete t.base64Image,delete t.buffer}return e},sr=e=>{const t=e.getConfig("picBed.alistplist")||{};return[{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_URL")},get alias(){return e.i18n.translate("PICBED_ALIST_URL")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_URL")},default:t.url||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_TOKEN")},get alias(){return e.i18n.translate("PICBED_ALIST_TOKEN")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_TOKEN")},default:t.token||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_ALIST_USERNAME")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_ALIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_PASSWORD")},default:t.password||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_UPLOAD_PATH")},get alias(){return e.i18n.translate("PICBED_ALIST_UPLOAD_PATH")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_UPLOAD_PATH")},default:t.uploadPath||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_WEB_PATH")},get alias(){return e.i18n.translate("PICBED_ALIST_WEB_PATH")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_WEB_PATH")},default:t.webPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};const Er=()=>(new Date).toUTCString(),or=(e,t)=>{const r=Er(),n=`PUT\n\n${N.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}`},lr=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${xt(`${e.path}${t}`)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:Er(),"Content-Type":N.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),Ir=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=bt({path:t.path});try{const r=e.output,n=(t.customUrl||"").replace(/\/$/,""),a=t.path;for(const i of r)if(i.fileName&&i.buffer){const r=or(t,i.fileName);let s=i.buffer;!s&&i.base64Image&&(s=Buffer.from(i.base64Image,"base64"));const E=lr(t,i.fileName,r,s);if(200!==(await e.request(E)).statusCode)throw new Error("Upload failed");{delete i.base64Image,delete i.buffer;const e=t.options||"";i.imgUrl=n?`${n}/${xt(`${a}${i.fileName}`)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${xt(`${a}${i.fileName}`)}${e}`}}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},_r=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}]};class Sr{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 ur(e,t){if(!t)return e.fileName;const r=new Sr(e);let n=t;for(const e of Sr.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function Pr(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?G.HttpsProxyAgent:G.HttpProxyAgent)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}Sr.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var cr={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new j.default.URL(e.endpoint).protocol}catch(e){}const a={};n?a.httpsAgent=Pr(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):a.httpAgent=Pr(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 O.NodeHttpHandler(a)};return new U.S3Client(i)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)throw new Error("undefined image");try{const{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=le.default.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await oe.default.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item),a=new U.PutObjectCommand({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n}),i=await e.client.send(a);let s;return s=e.urlPrefix?`${e.urlPrefix}/${e.path}`:await async function(e,t,r){const n=await R.getSignedUrl(e.client,new U.GetObjectCommand({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),a=new j.default.URL(n);return a.search="",a.href}(e,i.ETag,i.VersionId),{key:e.path,url:s,imgURL:s,versionId:i.VersionId,eTag:i.ETag}}catch(e){return Promise.reject(e)}}};function Ar(e){return"string"==typeof e?"true"===e.toLowerCase():Boolean(e)}const pr=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find aws s3 uploader config");try{const r=Ar(t.disableBucketPrefixToURL);let n=t.urlPrefix;n&&(n=n.replace(/\/?$/,""),t.pathStyleAccess&&!r&&(n+="/"+t.bucketName));const a=cr.createS3Client(t),i=e.output;for(const e of i){const r=await cr.createUploadTask({client:a,bucketName:t.bucketName,path:ur(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:n});delete e.buffer,delete e.base64Image,e.imgUrl=r.imgURL,e.url=r.url}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),t}},Cr=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:!1,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||!1,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:"list",default:t.acl||"public-read",choices:["private","public-read","public-read-write","authenticated-read","aws-exec-read","bucket-owner-read","bucket-owner-full-control"],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:"confirm",default:Ar(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")}}]};function Dr(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${xt(`${t}${r}`)}${n}`}const dr=(e,t,r)=>{const{token:n,repo:a}=t,i=N.lookup(e)||"application/octet-stream";return{method:"PUT",url:Dr(a,t.path,e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":i},body:r,json:!0}},Tr=(e,t)=>{const{token:r,repo:n,branch:a}=t;return{method:"GET",url:Dr(n,t.path,e,`?ref=${a}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},gr=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");const r=bt({path:t.path});t.path=r,t.customUrl=(t.customUrl||"").replace(/\/$/,"");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){const n=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:n,path:r+encodeURI(a.fileName)},s=dr(a.fileName,t,i);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=t.customUrl?`${t.customUrl}/${xt(`${r}${a.fileName}`)}`:n.content.download_url,a.hash=n.content.sha}catch(n){if(422!==n.statusCode)throw n;delete a.base64Image,delete a.buffer;const i=await e.request(Tr(a.fileName,t));if(!Object.keys(i).length)throw n;a.hash=i.sha,a.imgUrl=t.customUrl?`${t.customUrl}/${xt(`${r}${a.fileName}`)}`:i.download_url}}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Lr=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}]};const fr=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),E=t.album||"";let o;if(i&&s)o=s;else{if(!a)throw new Error("clientId or accessToken is required");o=`Client-ID ${a}`}const l={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:o,"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&&E){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:o},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===E){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},mr=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 fr(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(gt.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}},hr=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 Br=async e=>{var r;const n=e.getConfig("picBed.local");if(!n)throw new Error("Can not find local config!");const a=n.path||"",i=(n.customUrl||"").replace(/\/$/,""),s=bt({path:null===(r=n.webPath)||void 0===r?void 0:r.replace(/\\/g,"/")}),E=e.output;for(const r of E)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));try{const E=q.default.join(e.baseDir,"imgTemp","local"),o=q.default.join(E,r.fileName),l=q.default.join(a,r.fileName);t.ensureDirSync(q.default.dirname(l)),t.ensureDirSync(q.default.dirname(o)),k.default.writeFileSync(l,n),k.default.copyFileSync(l,o),delete r.base64Image,delete r.buffer,r.imgUrl=i?`${i}/${xt(`${s}${r.fileName}`)}`:q.default.join(a,r.fileName),r.hash=q.default.join(a,r.fileName),r.galleryPath=`http://localhost:36699/local/${xt(r.fileName).replace(/^\//,"")}`}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}return e},Nr=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")}}]};const Ur=(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},E={image:{value:r,options:{filename:t}},ssl:"true"},o={"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 _=e.permission.value;void 0===_&&(_=e.permission);const S={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:l,album_id:I,permission:_};l||delete S.strategy_id,I||delete S.album_id,0!==_&&1!==_&&delete S.permission;return{method:"POST",url:a?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new se.default.Agent({rejectUnauthorized:!1}),headers:a?o:s,formData:a?S:E}},Rr=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Ur(t,n.fileName,r);let i=await e.request(a);i="string"==typeof i?JSON.parse(i):i;const s="V2"===t.version;if(!(s?!0===i.status:200===i.code))throw e.emit(gt.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},Or=e=>{const 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")}}]};const Mr=(e,t,r)=>{const{host:n="127.0.0.1",port:a="",picbed:i="",configName:s="Default",serverKey:E=""}=e,o=n.match(/(\d+)\.(\d+)\.(\d+)\.(\d+)/),l=n.startsWith("https://")?"https://":"http://",I=n.replace(/(http:\/\/|https:\/\/)/,"");return{method:"POST",url:`${o?`${l}${I}:${a||"36677"}`:`${l}${I}${a?`:${a}`:""}`}/upload?configName=${s}${i?`&picbed=${i}`:""}${E?`&key=${E}`:""}`,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:N.lookup(t)}}},resolveWithFullResponse:!0}},yr=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=Mr(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?s.body.fullResult[0]:""}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Gr=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}]};function br(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":N.lookup(t)||"application/octet-stream"},body:n}}function xr(e){const t=e.accessKey,r=e.secretKey,n=new Ie.default.auth.digest.Mac(t,r),a={scope:e.bucket};return new Ie.default.rs.PutPolicy(a).uploadToken(n)}const wr=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=br(t,n.fileName,xr(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(gt.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(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Wr=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}]};class Kr{constructor(){this.client=new x.NodeSSH,this.isConnected=!1}static getInstance(){return Kr.instance||(Kr.instance=new Kr),Kr.instance}static changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{host:t,port:r,username:n,password:a,privateKey:i,passphrase:s}=e,E=i?{username:n,privateKeyPath:i,passphrase:s||void 0}:{username:n,password:a};try{await this.client.connect(Object.assign({host:t,port:Number(r)||22},E)),this.isConnected=!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this.isConnected)throw new Error("SSH client is not connected");try{t=Kr.changeWinStylePathToUnix(t),await this.mkdir(q.default.dirname(t).replace(/^\/+|\/+$/g,""),r),await this.client.putFile(e,t);const n=r.fileMode||"0644";"0644"!==n&&await this.exec(`chmod ${n} "${t}"`)}catch(e){throw new Error(e)}}async mkdir(e,t){if(!this.client.isConnected())throw new Error("sftp client is not connected");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=Kr.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t];await this.exec(`chown ${n}:${a} "${e}"`)}async exec(e){return 0===(await this.client.execCommand(e)).code}close(){this.client.dispose(),this.isConnected=!1}}const Fr=async e=>{const r=e.getConfig("picBed.sftpplist");if(!r)throw new Error("Can not find sftpplist config!");r.port=Number(r.port)||22,(r.port<0||r.port>65535)&&(r.port=22),r.uploadPath=bt({path:r.uploadPath,rootToEmpty:!1});const n=bt({path:r.webPath,rootToEmpty:!1});try{const a=e.output;for(const i of a)if(i.fileName&&i.buffer){let a=i.buffer;!a&&i.base64Image&&(a=Buffer.from(i.base64Image,"base64"));const s=q.default.join(e.baseDir,"uploadTemp"),E=q.default.join(e.baseDir,"imgTemp","sftpplist");t.ensureDirSync(E);const o=q.default.join(s,i.fileName);t.ensureDirSync(q.default.dirname(o)),k.default.writeFileSync(o,a);const l=Kr.getInstance();await l.connect(r);const I=q.default.join(`/${r.uploadPath}`.replace(/\/\/+/g,"/"),i.fileName);await l.upload(o,I,r),r.fileUser&&await l.chown(I,r.fileUser),delete i.base64Image,delete i.buffer;const _=r.customUrl||r.host;r.webPath?i.imgUrl=`${_}/${xt(`${"/"===n?"":n}${i.fileName}`)}`:i.imgUrl=`${_}/${xt(`${"/"===r.uploadPath?"":r.uploadPath}${i.fileName}`)}`;const S=q.default.join(E,i.fileName);t.ensureDirSync(q.default.dirname(S)),t.removeSync(S),t.moveSync(o,q.default.join(E,i.fileName)),i.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(i.fileName)}`,l.close()}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Hr=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 vr=(e,t,r,n="")=>{let a=n||"sm.ms";return a=a.replace(/^https?:\/\//,"").replace(/\/$/,""),{method:"POST",url:`https://${a}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}},$r=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=vr(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain),i=await e.request(a),s=JSON.parse(i);if("success"===s.code)delete n.base64Image,delete n.buffer,n.imgUrl=s.data.url,n.hash=s.data.hash;else{if("image_repeated"!==s.code||"string"!=typeof s.images)throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.message}),new Error(s.message);{delete n.base64Image,delete n.buffer,n.imgUrl=s.images;const e=await ae.default.get("https://sm.ms/api/v2/upload_history",{headers:{Authorization:t.token}});if("success"===e.data.code){const t=e.data.data;for(const e of t)if(e.url===s.images){n.hash=e.hash;break}}}}}return e},kr=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const Yr=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,E="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);E=`${r};${r+86400}`;const a=Q.default.createHmac("sha1",n).update(E).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,o=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,l=`sha1\n${E}\n${Q.default.createHash("sha1").update(o).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,E=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,o=Q.default.createHmac("sha1",n).update(E).digest(),l=Buffer.concat([o,Buffer.from(E)]);s=Buffer.from(l).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:E}},qr=(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}/${xt(`${s}${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:N.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}},Vr=async e=>{var t,r,n;const a=e.getConfig("picBed.tcyun");if(!a)throw new Error("Can't find tencent COS config");try{const i=e.output,s=(a.customUrl||"").replace(/\/$/,""),E=bt({path:a.path});a.path=E;const o=!a.version||"v4"===a.version;for(const l of i)if(l.fileName&&l.buffer){const i=Yr(a,l.fileName);if(!i)return!1;let I=l.buffer;!I&&l.base64Image&&(I=Buffer.from(l.base64Image,"base64"));const _=qr(a,l.fileName,i,I,e.GUI_VERSION||e.VERSION),S=await e.request(_).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let u;if(u=o&&"string"==typeof S?JSON.parse(S):S,400===u.statusCode)throw(null===(t=null==u?void 0:u.body)||void 0===t?void 0:t.err)?u.body.err:new Error((null===(r=null==u?void 0:u.body)||void 0===r?void 0:r.msg)||(null===(n=null==u?void 0:u.body)||void 0===n?void 0:n.message));const P=a.options||"",c=void 0!==a.slim&&!!a.slim;if(o&&"SUCCESS"===u.message)delete l.base64Image,delete l.buffer,l.imgUrl=s?`${s}/${xt(`${E}${l.fileName}`)}${P}`:`${u.data.source_url}${P}`;else{if(o||!u||200!==u.statusCode)throw new Error(S.body.msg);if(delete l.base64Image,delete l.buffer,s)l.imgUrl=`${s}/${xt(`${E}${l.fileName}`)}${P}`;else{const e=a.endpoint?a.endpoint:`cos.${a.area}.myqcloud.com`;l.imgUrl=`https://${a.bucket}.${e}/${xt(`${E}${l.fileName}`)}${P}`}}c&&(l.imgUrl+=P?"&imageSlim":"?imageSlim")}return e}catch(t){if(!a.version||"v4"===a.version)try{const r=JSON.parse(t.error);e.emit(gt.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}},jr=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")}}]};const zr=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},Xr=async e=>{var r,n;let a=e.getConfig("picBed.telegraphplist");a||(a={});try{const n=e.output;for(const i of n)if(i.fileName&&i.buffer){let n=i.buffer;!n&&i.base64Image&&(n=Buffer.from(i.base64Image,"base64"));const s=q.default.join(e.baseDir,"uploadTemp");t.ensureDirSync(s);const E=q.default.join(s,i.fileName);k.default.writeFileSync(E,n);const o=await zr(a,k.default.createReadStream(E)),l=await e.request(o),I="string"==typeof l?JSON.parse(l):l;if(t.remove(E),!(null===(r=null==I?void 0:I[0])||void 0===r?void 0:r.src))throw new Error("Server error, please try again");delete i.base64Image,delete i.buffer,i.imgUrl=`https://telegra.ph${I[0].src}`}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data)||t}},Qr=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 Zr=(e,t)=>{const r=e.path||"",n=e.operator,a=en(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${xt(`${r}${t}`)}`}&${i}`;return`UPYUN ${n}:${Q.default.createHmac("sha1",a).update(s).digest("base64")}`},Jr=(e,t,r,n)=>{const a=e.bucket,i=e.path;let s=(e.endpoint||"https://v0.api.upyun.com").replace(/\/+$/g,"");return s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${a}/${xt(`${i}${t}`)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":N.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function en(e){return Q.default.createHash("md5").update(e).digest("hex")}const tn=(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=${`${en(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},rn=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=bt({path:t.path});t.path=n;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=Zr(t,a.fileName),s=Jr(t,a.fileName,i,r),E=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}/${xt(`${n}${a.fileName}`)}${E}`,t.antiLeechToken){const e=tn(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(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=xe(t.error);e.emit(gt.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}},nn=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 an=async e=>{const r=e.getConfig("picBed.webdavplist");if(!r)throw new Error("Can't find webdavplist config");r.host=r.host.replace(/^https?:\/\/|\/+$/g,""),r.host=(r.sslEnabled?"https://":"http://")+r.host,r.path=bt({path:r.path,rootToEmpty:!1});const n=r.authType||"basic",a=bt({path:r.webpath,rootToEmpty:!1}),i=r.options||"";try{const s=e.output,E=r.customUrl,o=r.path;for(const l of s)if(l.fileName&&l.buffer){let s=l.buffer;!s&&l.base64Image&&(s=Buffer.from(l.base64Image,"base64"));const I={username:r.username,password:r.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===n&&(I.authType=w.AuthType.Digest);const _=w.createClient(r.host,I),S="/"===o?"":o;S&&await _.createDirectory(S,{recursive:!0});if(!await _.putFileContents(`${o}${l.fileName}`.replace(/^\/+|\/+$/g,""),s,{overwrite:!0}))throw new Error("Upload failed");{const n=q.default.join(e.baseDir,"imgTemp","webdavplist"),I=q.default.join(n,l.fileName);t.ensureDirSync(q.default.dirname(I)),k.default.writeFileSync(I,s),delete l.base64Image,delete l.buffer;const _=E||r.host;r.webpath?l.imgUrl=`${_}/${xt(`${a}${l.fileName}`).replace(/^\/+/g,"")}${i}`:l.imgUrl=`${_}/${xt(`${o}${l.fileName}`).replace(/^\/+/g,"")}${i}`,l.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(l.fileName)}`}}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},sn=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 En=()=>({register(e){!function(e){e.helper.uploader.register(wt,{get name(){return e.i18n.translate("PICBED_ADVANCEDPLIST")},handle:er,config:tr})}(e),function(e){e.helper.uploader.register(Wt,{get name(){return e.i18n.translate("PICBED_ALIST_PLIST")},handle:ir,config:sr})}(e),function(e){e.helper.uploader.register(Kt,{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:Ir,config:_r})}(e),function(e){e.helper.uploader.register(Ft,{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:pr,config:Cr})}(e),function(e){e.helper.uploader.register(Ht,{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:gr,config:Lr})}(e),function(e){e.helper.uploader.register(vt,{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:mr,config:hr})}(e),function(e){e.helper.uploader.register($t,{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:Br,config:Nr})}(e),function(e){e.helper.uploader.register(kt,{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:Rr,config:Or})}(e),function(e){e.helper.uploader.register(Yt,{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:yr,config:Gr})}(e),function(e){e.helper.uploader.register(qt,{get name(){return e.i18n.translate("PICBED_QINIU")},handle:wr,config:Wr})}(e),function(e){e.helper.uploader.register(Vt,{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Fr,config:Hr})}(e),function(e){e.helper.uploader.register(jt,{get name(){return e.i18n.translate("PICBED_SMMS")},handle:$r,config:kr})}(e),function(e){e.helper.uploader.register(zt,{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:Vr,config:jr})}(e),function(e){e.helper.uploader.register(Xt,{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:Xr,config:Qr})}(e),function(e){e.helper.uploader.register(Qt,{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:rn,config:nn})}(e),function(e){e.helper.uploader.register(Zt,{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:an,config:sn})}(e)}}),on=(e,t,r)=>{const n=Le(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 ln={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 me(r,e):await fe(r),a.success&&a.buffer){const i=on(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${re.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 In={handle:async e=>(e.output.push(...e.input),e)};const _n={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 ($null -eq $img) {\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 ($null -eq $img) {\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 ($null -ne $file) {\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'},Sn={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const un=async e=>{!function(e){const r=q.default.join(e.baseDir,"piclist-clipboard-images");t.ensureDirSync(r)}(e);const r=q.default.join(e.baseDir,"piclist-clipboard-images",`${re.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((t,n)=>{const a=(()=>{const e=process.platform;return _e.default?"wsl":"win32"===e?"10"===Y.default.release().split(".")[0]?"win10":"win32":"darwin"===e?"darwin":"linux"})(),i=q.default.join(e.baseDir,Sn[a]);let s;k.default.existsSync(i)||k.default.writeFileSync(i,_n[a],"utf8"),s="darwin"===a?W.spawn("osascript",[i,r]):"win32"===a||"win10"===a?W.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",i,r]):W.spawn("sh",[i,r]),s.stdout.on("data",(i=>{if("linux"===a&&"no xclip or wl-clipboard"===i.toString().trim())return e.emit(gt.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 E=!1;if(q.default.basename(s)!==q.default.basename(r)&&k.default.existsSync(s)&&(E=!0),"no image"!==s&&!k.default.existsSync(s))return n(new Error(`Can't find ${s}`));t({imgPath:s,shouldKeepAfterUploading:E})}))}))};class Pn{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",smms:{token:""}})}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])}))}}const cn={"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_MESSAGE_TOKEN:"请填写Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ADVANCEDPLIST:"高级自定义",PICBED_ADVANCEDPLIST_ENDPOINT:"设定接口网址",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"例如:https://example.com/upload",PICBED_ADVANCEDPLIST_METHOD:"设定请求方法",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"请选择请求方法",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"设定表单参数名",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"例如:file",PICBED_ADVANCEDPLIST_HEADERS:"设定请求头",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'例如:{"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"设定请求体",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'例如:{"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"设定自定义前缀",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"例如:https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"设定返回数据URL路径",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"例如:data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"设定URL",PICBED_ALIST_MESSAGE_URL:"例如:https://alist.example.com",PICBED_ALIST_TOKEN:"设定Token",PICBED_ALIST_MESSAGE_TOKEN:"请输入Token(与用户名-密码二选一)",PICBED_ALIST_USERNAME:"设定用户名",PICBED_ALIST_MESSAGE_USERNAME:"请输入用户名(与Token二选一)",PICBED_ALIST_PASSWORD:"设定密码",PICBED_ALIST_MESSAGE_PASSWORD:"请输入密码",PICBED_ALIST_UPLOAD_PATH:"设定上传路径",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如:/test",PICBED_ALIST_WEB_PATH:"设定网站路径",PICBED_ALIST_MESSAGE_WEB_PATH:"用于拼接网址路径",PICBED_ALIST_CUSTOMURL:"设定自定义域名",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如:https://test.com",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:"兰空图床",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:"水印设置",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:"重命名设置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS:"图片处理",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_MESSAGE_TOKEN:"請輸入Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ADVANCEDPLIST:"高級自定義",PICBED_ADVANCEDPLIST_ENDPOINT:"設定API主機",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"例如:https://example.com/upload",PICBED_ADVANCEDPLIST_METHOD:"設定請求方法",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"請選擇請求方法",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"設定表單Key",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"例如:file",PICBED_ADVANCEDPLIST_HEADERS:"設定請求頭",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'例如:{"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"設定請求體",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'例如:{"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"設定自定義前綴",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"例如:https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"設定返回數據路徑",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"例如:data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"設定URL",PICBED_ALIST_MESSAGE_URL:"例如:https://alist.example.com",PICBED_ALIST_TOKEN:"設定Token",PICBED_ALIST_MESSAGE_TOKEN:"請輸入Token(與用戶名-密碼二選一)",PICBED_ALIST_USERNAME:"設定用戶名",PICBED_ALIST_MESSAGE_USERNAME:"請輸入用戶名(與Token二選一)",PICBED_ALIST_PASSWORD:"設定密碼",PICBED_ALIST_MESSAGE_PASSWORD:"請輸入密碼",PICBED_ALIST_UPLOAD_PATH:"設定上傳路徑",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如:/test",PICBED_ALIST_WEB_PATH:"設定網址路徑",PICBED_ALIST_MESSAGE_WEB_PATH:"用于網頁顯示的路徑",PICBED_ALIST_CUSTOMURL:"設定自訂網址",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如:https://test.com",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:"蘭空圖床",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:"水印設定",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:"重命名設定",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS:"圖片處理設定",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_MESSAGE_TOKEN:"Please enter the token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_ADVANCEDPLIST:"Advanced",PICBED_ADVANCEDPLIST_ENDPOINT:"Set Endpoint",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"Please enter the endpoint",PICBED_ADVANCEDPLIST_METHOD:"Set Method",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"Please select the request method",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"Set FormData Key",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"Please enter the FormData key",PICBED_ADVANCEDPLIST_HEADERS:"Set Headers",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'such as {"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"Set Body",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'such as {"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"Set Custom Prefix",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"such as https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"Set Response Data Path",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"such as data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"Set URL",PICBED_ALIST_MESSAGE_URL:"Ex. https://alist.example.com",PICBED_ALIST_TOKEN:"Set Token",PICBED_ALIST_MESSAGE_TOKEN:"Please enter the token(choose one of either username-password or token)",PICBED_ALIST_USERNAME:"Set Username",PICBED_ALIST_MESSAGE_USERNAME:"Please enter the username(choose one of either username-password or token)",PICBED_ALIST_PASSWORD:"Set Password",PICBED_ALIST_MESSAGE_PASSWORD:"Please enter the password",PICBED_ALIST_UPLOAD_PATH:"Set Upload Path",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"Ex. /test/",PICBED_ALIST_WEB_PATH:"Set Web Path",PICBED_ALIST_MESSAGE_WEB_PATH:"Used to generate url path",PICBED_ALIST_CUSTOMURL:"Set Custom URL",PICBED_ALIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",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:"Rename Settings",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK:"Watermark Settings",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:"Processing Settings",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 An{constructor(e){this.ctx=e,this.objectAdapter=new v.ObjectAdapter(cn);let t=this.ctx.getConfig("settings.language")||"zh-CN";cn[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=q.default.join(e,t.name),n=k.default.readFileSync(r,"utf8");try{const e=Se.default.load(n);cn[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=q.default.join(this.ctx.baseDir,"i18n-cli");return t.pathExistsSync(e)||t.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 n=this.objectAdapter.getLocale(e);if(!n)return!1;const a=r.merge(n,t);return this.objectAdapter.setLocale(e,a),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),cn[e]=t,!0)}getLanguageList(){return Object.keys(cn)}}class pn extends e.EventEmitter{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.9.5",this.configPath=e,this.input=[],this.rawInput=[],this.processedInput=[],this.output=[],this.helper={transformer:new Ct("transformer"),uploader:new Ct("uploader"),beforeTransformPlugins:new Ct("beforeTransformPlugins"),beforeUploadPlugins:new Ct("beforeUploadPlugins"),afterUploadPlugins:new Ct("afterUploadPlugins")},this.initConfigPath(),this.log=new ft(this),this.cmd=new dt(this),this.pluginHandler=new mt(this),this.initConfig(),this.init()}initConfigPath(){if(this.configPath=this.configPath||q.default.join(n.homedir(),".piclist/config.json"),".JSON"!==q.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=q.default.dirname(this.configPath),t.pathExistsSync(this.configPath)||t.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new Pn(this),this._config=this.db.read(!0)}init(){try{this.i18n=new An(this),this.Request=new yt(this),this._pluginLoader=new Bt(this),Dt("picgo"),En().register(this),{register(e){e.helper.transformer.register("path",ln),e.helper.transformer.register("base64",In)}}.register(this),Dt(""),this._pluginLoader.load(),this.lifecycle=new Gt(this)}catch(e){throw this.emit(gt.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){return t?(this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t)):e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?r.get(this._config,e):(this._config=this.db.read(!0),this._config)}saveConfig(e){be(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&&(Ge(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){be(e)?Object.keys(e).forEach((t=>{Ge(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),r.set(this._config,t,e[t]),Nt.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&&(Ge(e)?this.log.warn(`the config.${e} can't be unset`):r.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:r}=await un(this),n=()=>{r||t.remove(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");{this.once(gt.FAILED,n),this.once(gt.FINISHED,n);const{output:t}=await this.lifecycle.start([e]);return t}}catch(e){throw this.emit(gt.FAILED,e),e}}async uploadReturnCtx(e,r=!1){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),this;if(void 0!==e&&0!==e.length)return await this.lifecycle.start(e,r);try{const{imgPath:e,shouldKeepAfterUploading:n}=await un(this),a=()=>{n||t.remove(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");return this.once(gt.FAILED,a),this.once(gt.FINISHED,a),await this.lifecycle.start([e],r)}catch(e){throw this.emit(gt.FAILED,e),e}}}exports.Commander=dt,exports.Lifecycle=Gt,exports.LifecyclePlugins=Ct,exports.Logger=ft,exports.PicGo=pn,exports.PicGoUtils=Je,exports.PluginHandler=mt,exports.PluginLoader=Bt,exports.Request=yt;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL2V2ZW50QnVzLnRzIiwiLi4vc3JjL2xpYi9SZXF1ZXN0LnRzIiwiLi4vc3JjL2NvcmUvTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUNvbnRleHQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91dGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FkdmFuY2VkcGxpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGlzdC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3MzL3V0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXBsb2FkZXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hd3NzM3BsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9sb2NhbC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2xza3kudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9waWNsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NtbXMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RlbGVncmFwaC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW5kZXgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9wYXRoLnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvYmFzZTY0LnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9pMThuL3poLUNOLnRzIiwiLi4vc3JjL2kxOG4vaW5kZXgudHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxudHlwZSBhY3Rpb25GdW5jID0gKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHZvaWRcblxuY29uc3QgY3JlYXRlQ29tbWFuZCA9IChcbiAgY21kOiBhbnksXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgYWxpYXM6IHN0cmluZyxcbiAgYWN0aW9uOiBhY3Rpb25GdW5jLFxuICBvcHRpb25zPzogeyBwcm94eTogYm9vbGVhbjsgcmVnaXN0cnk6IGJvb2xlYW4gfVxuKTogdm9pZCA9PiB7XG4gIGxldCBwcm9ncmFtID0gY21kLnByb2dyYW0uY29tbWFuZChjb21tYW5kKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxpYXMoYWxpYXMpXG4gIGlmIChvcHRpb25zPy5wcm94eSkge1xuICAgIHByb2dyYW0gPSBwcm9ncmFtLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXG4gIH1cbiAgaWYgKG9wdGlvbnM/LnJlZ2lzdHJ5KSB7XG4gICAgcHJvZ3JhbSA9IHByb2dyYW0ub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxuICB9XG4gIHByb2dyYW0uYWN0aW9uKGFjdGlvbilcbn1cblxuY29uc3QgcGx1Z2luSGFuZGxlcjogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY3JlYXRlQ29tbWFuZChcbiAgICAgIGNtZCxcbiAgICAgICdpbnN0YWxsIDxwbHVnaW5zLi4uPicsXG4gICAgICAnaW5zdGFsbCBwaWNnbyBwbHVnaW4nLFxuICAgICAgJ2FkZCcsXG4gICAgICAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IHByb3h5LCByZWdpc3RyeSB9ID0gcHJvZ3JhbVxuICAgICAgICBjb25zdCBvcHRpb25zID0geyBwcm94eSwgcmVnaXN0cnkgfVxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB7IHByb3h5OiB0cnVlLCByZWdpc3RyeTogdHJ1ZSB9XG4gICAgKVxuICAgIGNyZWF0ZUNvbW1hbmQoY21kLCAndW5pbnN0YWxsIDxwbHVnaW5zLi4uPicsICd1bmluc3RhbGwgcGljZ28gcGx1Z2luJywgJ3JtJywgKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBjdHgucGx1Z2luSGFuZGxlci51bmluc3RhbGwocGx1Z2lucykuY2F0Y2goZSA9PiB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIH0pXG4gICAgfSlcbiAgICBjcmVhdGVDb21tYW5kKFxuICAgICAgY21kLFxuICAgICAgJ3VwZGF0ZSA8cGx1Z2lucy4uLj4nLFxuICAgICAgJ3VwZGF0ZSBwaWNnbyBwbHVnaW4nLFxuICAgICAgJ3VwJyxcbiAgICAgIChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHByb3h5LCByZWdpc3RyeSB9XG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVwZGF0ZShwbHVnaW5zLCBvcHRpb25zKS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgeyBwcm94eTogdHJ1ZSwgcmVnaXN0cnk6IHRydWUgfVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbS5vcHRpb24oJy1jLCAtLWNvbmZpZyA8cGF0aD4nLCAnc2V0IGNvbmZpZyBwYXRoJylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb25maWdcbiIsImltcG9ydCBmcywgeyByZWFkRmlsZSwgcmVhZEpTT05TeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgaW1hZ2VTaXplIH0gZnJvbSAnaW1hZ2Utc2l6ZSdcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcbmltcG9ydCBUZXh0VG9TVkcgZnJvbSAndGV4dC10by1zdmcnXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5cbmltcG9ydCB7XG4gIElJbWdTaXplLFxuICBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyxcbiAgSVBsdWdpbk5hbWVUeXBlLFxuICBJTG9nZ2VyLFxuICBJUGljR28sXG4gIElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcbn0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSdcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSlcbiAgICAubWFwKCgpID0+IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKSlcbiAgICAuam9pbignJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFRpbWVzdGFtcChvbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7TWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCl9JHtyYW5kb21TdHJpbmdHZW5lcmF0b3IoNSl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoUmFuZG9tU3RyaW5nKG9sZE5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIgPSA1KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3JhbmRvbVN0cmluZ0dlbmVyYXRvcihsZW5ndGgpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVscGVyKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIG51bS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtudW19YCA6IG51bS50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIGdldE1kNShpbnB1dDogY3J5cHRvLkJpbmFyeUxpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShpbnB1dCkuZGlnZXN0KCdoZXgnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nKFxuICBvbGROYW1lOiBzdHJpbmcsXG4gIGN1c3RvbUZvcm1hdDogc3RyaW5nLFxuICBhZmZpeEZpbGVOYW1lPzogc3RyaW5nLFxuICBmaWxlQnVmZmVyPzogY3J5cHRvLkJpbmFyeUxpa2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKClcbiAgY29uc3QgZmlsZWJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpXG4gIGNvbnN0IGNvbnZlcnNpb25NYXA6IFJlY29yZDxzdHJpbmcsICgpID0+IHN0cmluZz4gPSB7XG4gICAgJ3tZfSc6ICgpID0+IHllYXIsXG4gICAgJ3t5fSc6ICgpID0+IHllYXIuc2xpY2UoMiksXG4gICAgJ3ttfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0TW9udGgoKSArIDEpLFxuICAgICd7ZH0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldERhdGUoKSksXG4gICAgJ3tofSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0SG91cnMoKSksXG4gICAgJ3tpfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0TWludXRlcygpKSxcbiAgICAne3N9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRTZWNvbmRzKCkpLFxuICAgICd7bXN9JzogKCkgPT4gbm93LmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKSxcbiAgICAne21kNX0nOiAoKSA9PiBnZXRNZDUoZmlsZUJ1ZmZlciB8fCBmaWxlYmFzZW5hbWUpLFxuICAgICd7bWQ1LTE2fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSkuc2xpY2UoMCwgMTYpLFxuICAgICd7ZmlsZW5hbWV9JzogKCkgPT4gKGFmZml4RmlsZU5hbWUgPyBwYXRoLmJhc2VuYW1lKGFmZml4RmlsZU5hbWUsIHBhdGguZXh0bmFtZShhZmZpeEZpbGVOYW1lKSkgOiBmaWxlYmFzZW5hbWUpLFxuICAgICd7dXVpZH0nOiAoKSA9PiB1dWlkdjQoKS5yZXBsYWNlKC8tL2csICcnKSxcbiAgICAne3RpbWVzdGFtcH0nOiAoKSA9PiBub3cuZ2V0VGltZSgpLnRvU3RyaW5nKClcbiAgfVxuICBpZiAoXG4gICAgY3VzdG9tRm9ybWF0ID09PSB1bmRlZmluZWQgfHxcbiAgICAoIU9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnNvbWUoaXRlbSA9PiBjdXN0b21Gb3JtYXQuaW5jbHVkZXMoaXRlbSkpICYmXG4gICAgICAhY3VzdG9tRm9ybWF0LmluY2x1ZGVzKCdsb2NhbEZvbGRlcjonKSAmJlxuICAgICAgIWN1c3RvbUZvcm1hdC5pbmNsdWRlcygnc3RyLScpKVxuICApIHtcbiAgICByZXR1cm4gb2xkTmFtZVxuICB9XG4gIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShvbGROYW1lKVxuICBsZXQgbmV3TmFtZSA9XG4gICAgT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkucmVkdWNlKChhY2MsIGN1cikgPT4ge1xuICAgICAgcmV0dXJuIGFjYy5yZXBsYWNlKG5ldyBSZWdFeHAoY3VyLCAnZycpLCBjb252ZXJzaW9uTWFwW2N1cl0oKSlcbiAgICB9LCBjdXN0b21Gb3JtYXQpICsgZXh0XG4gIGNvbnN0IHN0clJlZ2V4ID0gL3tzdHItKFxcZCspfS9naVxuICBuZXdOYW1lID0gbmV3TmFtZS5yZXBsYWNlKHN0clJlZ2V4LCAoXywgZ3JvdXAxKSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoZ3JvdXAxLCAxMClcbiAgICByZXR1cm4gcmFuZG9tU3RyaW5nR2VuZXJhdG9yKGxlbmd0aClcbiAgfSlcbiAgbmV3TmFtZSA9IG5ld05hbWUucmVwbGFjZSgveyhsb2NhbEZvbGRlcjo/KFxcZCspPyl9L2dpLCAoX3Jlc3VsdCwga2V5LCBjb3VudCkgPT4ge1xuICAgIGNvdW50ID0gTWF0aC5tYXgoMSwgY291bnQgfHwgMClcbiAgICBjb25zdCBwYXRocyA9IHBhdGguZGlybmFtZShvbGROYW1lKS5zcGxpdChwYXRoLnNlcClcbiAgICBrZXkgPSBwYXRocy5zbGljZSgwIC0gY291bnQpLnJlZHVjZSgoYSwgYikgPT4gYCR7YX0vJHtifWApXG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKC86L2csICcnKVxuICB9KVxuICByZXR1cm4gbmV3TmFtZVxufVxuXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IC9eaHR0cHM/OlxcL1xcLy8udGVzdCh1cmwpXG5cbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB1cmwgPSB1cmwgfHwgJydcbiAgdHJ5IHtcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XG4gICAgcmV0dXJuIHVybCAhPT0gZGVjb2RlVVJJKHVybClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFpc1VybEVuY29kZSh1cmwpKSB7XG4gICAgdXJsID0gZW5jb2RlVVJJKHVybClcbiAgfVxuICByZXR1cm4gdXJsXG59XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVNpemUgPSAoZmlsZTogQnVmZmVyKTogSUltZ1NpemUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCB0eXBlIH0gPSBpbWFnZVNpemUoZmlsZSlcbiAgICBjb25zdCBleHRuYW1lID0gdHlwZSA/IGAuJHt0eXBlfWAgOiAnLnBuZydcbiAgICByZXR1cm4ge1xuICAgICAgcmVhbDogdHJ1ZSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZXh0bmFtZVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGZhbGxiYWNrIHRvIDIwMCAqIDIwMFxuICAgIHJldHVybiB7XG4gICAgICByZWFsOiBmYWxzZSxcbiAgICAgIHdpZHRoOiAyMDAsXG4gICAgICBoZWlnaHQ6IDIwMCxcbiAgICAgIGV4dG5hbWU6ICcucG5nJ1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0RlNGaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4dG5hbWU6IHBhdGguZXh0bmFtZShmaWxlUGF0aCksXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXG4gICAgICBidWZmZXI6IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKSxcbiAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7XG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxuICAgICAgc3VjY2VzczogZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xuICB1cmwgPSBoYW5kbGVVcmxFbmNvZGUodXJsKVxuICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dFxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4XG4gICAgICAgICAgLnJlcXVlc3Qoe1xuICAgICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihyZXNwID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEgYXMgQnVmZmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgICAgY29uc3QgdXJsUGF0aCA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgICAgICBsZXQgZXh0bmFtZSA9ICcnXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTCh1cmwpLnNlYXJjaFBhcmFtc1xuICAgICAgICAgIGV4dG5hbWUgPSB1cmxQYXJhbXMuZ2V0KCd3eF9mbXQnKSB8fCBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBleHRuYW1lID0gcGF0aC5leHRuYW1lKHVybFBhdGgpIHx8ICcnXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleHRuYW1lLnN0YXJ0c1dpdGgoJy4nKSAmJiBleHRuYW1lKSB7XG4gICAgICAgICAgZXh0bmFtZSA9IGAuJHtleHRuYW1lfWBcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBidWZmZXI6IHJlcyxcbiAgICAgICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZSh1cmxQYXRoKSxcbiAgICAgICAgICBleHRuYW1lLFxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IGVycm9yLCAke2Vycm9yPy5tZXNzYWdlID8/ICcnfWBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KSgpLmNhdGNoKHJlamVjdClcbiAgfSlcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gdGltZW91dGBcbiAgICAgIH0pXG4gICAgfSwgMzAwMDApXG4gIH0pXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxufVxuXG4vKipcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nJ3MgdHlwZVxuICogZm9yIGV4YW1wbGVcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBub3JtYWxcbiAqIDMuIHh4eCAtPiBzaW1wbGVcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cbiAqIEBwYXJhbSBuYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuICdzY29wZSdcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xuICAgIHJldHVybiAnbm9ybWFsJ1xuICB9IGVsc2UgaWYgKGlzU2ltcGxlTmFtZShuYW1lKSkge1xuICAgIHJldHVybiAnc2ltcGxlJ1xuICB9XG4gIHJldHVybiAndW5rbm93bidcbn1cblxuLyoqXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcbiAqIGZvciBleGFtcGxlXG4gKiAxLiB4eHggLT4gdHJ1ZVxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbk5hbWVPclBhdGhcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAobmFtZU9yUGF0aC5pbmNsdWRlcygnLycpIHx8IG5hbWVPclBhdGguaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcbiAqIGZvciBleGFtcGxlOlxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiB4eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbkZ1bGxOYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLCAnJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9waWNnby1wbHVnaW4tLywgJycpXG4gIH1cbn1cblxuLyoqXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcbiAqIGZvciBleGFtcGxlOlxuICogMS4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWUgcGx1Z2luU2ltcGxlTmFtZVxuICogQHBhcmFtIHNjb3BlIHBsdWdpblNjb3BlXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nLCBzY29wZSA9ICcnKTogc3RyaW5nID0+XG4gIHNjb3BlID8gYEAke3Njb3BlfS9waWNnby1wbHVnaW4tJHtuYW1lfWAgOiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXG5cbi8qKlxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXG4gKiBmb3IgZXhhbXBsZVxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiAzLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNC4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4veHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcbiAqIEBwYXJhbSBuYW1lT3JQYXRoIHBsdWdpbk5hbWUgb3IgcGx1Z2luUGF0aFxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xuICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgY2FzZSAnc2NvcGUnOlxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgcmV0dXJuIGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXG4gICAgICAvLyAxLiBjaGVjayBpZiBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICBsZXQgcGx1Z2luUGF0aCA9IG5hbWVPclBhdGhcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxuICAgICAgfVxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXG4gICAgICBwbHVnaW5QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIG5hbWVPclBhdGgpXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxuICAgICAgfVxuICAgICAgLy8gMy4gaW52YWxpZCBuYW1lT3JQYXRoXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBnZXQgdGhlIG5vcm1hbCBwbHVnaW4gbmFtZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDMuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNS4gYW4gZXhjZXB0aW9uOiBbcGFja2FnZS5qc29uJ3MgbmFtZV0gIT09IFtmb2xkZXIgbmFtZV1cbiAqIHRoZW4gdXNlIFtwYWNrYWdlLmpzb24ncyBuYW1lXSwgdXN1YWxseSBtYXRjaCB0aGUgc2NvcGUgcGFja2FnZS5cbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxuICovXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XG4gICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKG5hbWVPclBhdGgpXG4gICAgY2FzZSAnc2NvcGUnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcbiAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24oaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpKVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIG5vdywgdGhlIG5hbWVPclBhdGggbXVzdCBiZSBwYXRoXG4gICAgICAvLyB0aGUgbmFtZU9yUGF0aCBoZXJlIHdpbGwgYmUgZW5zdXJlZCB3aXRoIHVuaXggc3R5bGVcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXG4gICAgICAgIHJldHVybiAnJ1xuICAgICAgfVxuICAgICAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gcGF0aC5wb3NpeC5qb2luKG5hbWVPclBhdGgsICdwYWNrYWdlLmpzb24nKVxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luOiAke25hbWVPclBhdGh9YClcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwa2cgPSByZWFkSlNPTlN5bmMocGFja2FnZUpTT05QYXRoKSB8fCB7fVxuICAgICAgICBpZiAoIXBrZy5uYW1lPy5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgVGhlIHBsdWdpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkIGlzICR7KHBrZy5uYW1lIGFzIHN0cmluZykgfHwgJ2VtcHR5J30sIG5lZWQgdG8gaW5jbHVkZSB0aGUgcHJlZml4OiBwaWNnby1wbHVnaW4tYFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4gJydcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGtnLm5hbWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBoYW5kbGUgdHJhbnNmb3JtIHRoZSBwYXRoIHRvIHVuaXggc3R5bGVcbiAqIGZvciBleGFtcGxlXG4gKiAxLiBDOlxcXFx4eHhcXFxceHh4IC0+IEM6L3h4eC94eHhcbiAqIDIuIC94eHgveHh4IC0+IC94eHgveHh4XG4gKiBAcGFyYW0gcGF0aFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlVW5peFN0eWxlUGF0aCA9IChwYXRoU3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcbiAgcmV0dXJuIHBhdGhBcnIuam9pbignLycpXG59XG5cbi8qKlxuICogcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uIHdoZW4gcmVnaXN0ZXIgcGx1Z2luIG5hbWVcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4QDEuMC4wIC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWVPclBhdGhcbiAqIEBwYXJhbSBzY29wZVxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlUGx1Z2luVmVyc2lvbiA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIHNjb3BlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgIHJldHVybiBuYW1lT3JQYXRoXG4gIH0gZWxzZSB7XG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXG4gICAgLy8gaWYgaXMgYSBzY29wZSBwa2dcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xuICAgIH1cbiAgICBjb25zdCBtYXRjaEFyciA9IG5hbWVPclBhdGgubWF0Y2gocmVnKVxuICAgIGlmICghbWF0Y2hBcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignY2FuIG5vdCByZW1vdmUgcGx1Z2luIHZlcnNpb24nKVxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1hdGNoQXJyWzJdXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogdGhlIGNvbmZpZyBibGFjayBpdGVtIGxpc3Qgd2hpY2ggd29uJ3QgYmUgc2V0dGVkXG4gKiBvbmx5IGNhbiBiZSBnb3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpZ0JsYWNrTGlzdCA9IFtdXG5cbi8qKlxuICogY2hlY2sgc29tZSBjb25maWcga2V5IGlzIGluIGJsYWNrTGlzdFxuICogQHBhcmFtIGtleVxuICovXG5leHBvcnQgY29uc3QgaXNDb25maWdLZXlJbkJsYWNrTGlzdCA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gY29uZmlnQmxhY2tMaXN0LnNvbWUoYmxhY2tJdGVtID0+IGtleS5zdGFydHNXaXRoKGJsYWNrSXRlbSkpXG59XG5cbi8qKlxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxuICogY29uZmlnIG11c3QgYmUgb2JqZWN0IHN1Y2ggYXMgeyB4eHg6ICd4eHgnIH1cbiAqICYmIGNhbid0IGJlIGFycmF5XG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShjb25maWcpICYmIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4oc3RyOiBzdHJpbmcpOiBUIHwgc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmb3JjZU51bWJlciA9IChudW06IHN0cmluZyB8IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXG59XG5cbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG5cbmFzeW5jIGZ1bmN0aW9uIHRleHQyU1ZHKFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgdGV4dD86IHN0cmluZyxcbiAgY29sb3I/OiBzdHJpbmcsXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmdcbik6IFByb21pc2U8QnVmZmVyPiB7XG4gIHRleHQgPSAhdGV4dCA/ICfmtYvor5UnIDogdGV4dFxuICBmb250RmFtaWx5ID0gIWZvbnRGYW1pbHkgPyBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGggOiBmb250RmFtaWx5XG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcbiAgY29uc3QgdGV4dDJTVkcgPSBUZXh0VG9TVkcubG9hZFN5bmMoZm9udEZhbWlseSlcbiAgY29uc3Qgb3B0aW9uczogVGV4dFRvU1ZHLkdlbmVyYXRpb25PcHRpb25zID0ge1xuICAgIGFuY2hvcjogJ3RvcCcsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgZmlsbDogY29sb3JcbiAgICB9XG4gIH1cbiAgY29uc3QgdGV4dFNWRyA9IHRleHQyU1ZHLmdldFNWRyh0ZXh0LCBvcHRpb25zKVxuICByZXR1cm4gQnVmZmVyLmZyb20odGV4dFNWRylcbn1cblxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdhc3NldHMnLCAncGljbGlzdC5wbmcnKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQWRkV2F0ZXJtYXJrKFxuICBpbWc6IEJ1ZmZlcixcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXG4gIGlzRnVsbFNjcmVlbldhdGVybWFyaz86IGJvb2xlYW4sXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcbiAgdGV4dD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbyA9XG4gICAgIXdhdGVybWFya1NjYWxlUmF0aW8gfHwgd2F0ZXJtYXJrU2NhbGVSYXRpbyA8IDAgfHwgd2F0ZXJtYXJrU2NhbGVSYXRpbyA+IDEgPyAwLjE1IDogd2F0ZXJtYXJrU2NhbGVSYXRpb1xuICBjb25zdCBpbWFnZSA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICBjb25zdCB7IHdpZHRoOiBpbWdXaWR0aCA9IDIwMCB9ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKVxuICBjb25zdCB3YXRlcm1hcmsgPSBhd2FpdCBjcmVhdGVXYXRlcm1hcmsoXG4gICAgd2F0ZXJtYXJrVHlwZSxcbiAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXG4gICAgdGV4dCxcbiAgICB3YXRlcm1hcmtGb250UGF0aCxcbiAgICB3YXRlcm1hcmtTY2FsZVJhdGlvLFxuICAgIHdhdGVybWFya0NvbG9yLFxuICAgIHdhdGVybWFya0ltYWdlUGF0aCxcbiAgICBpbWdXaWR0aCxcbiAgICB3YXRlcm1hcmtEZWdyZWVcbiAgKVxuICByZXR1cm4gYXdhaXQgaW1hZ2VcbiAgICAuY29tcG9zaXRlKFtcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHdhdGVybWFyayxcbiAgICAgICAgZ3Jhdml0eTogcG9zaXRpb24gfHwgJ3NvdXRoZWFzdCcsXG4gICAgICAgIHRpbGU6IGlzRnVsbFNjcmVlbldhdGVybWFya1xuICAgICAgfVxuICAgIF0pXG4gICAgLnRvQnVmZmVyKClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2F0ZXJtYXJrKFxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgdGV4dD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXG4gIGltZ1dpZHRoOiBudW1iZXIgPSAyMDAsXG4gIHdhdGVybWFya0RlZ3JlZTogbnVtYmVyID0gMFxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IHdhdGVybWFyazogYW55XG4gIGlmICh3YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSB7XG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoID0gd2F0ZXJtYXJrSW1hZ2VQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGhcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCBzaGFycCh3YXRlcm1hcmtJbWFnZVBhdGgpLnRvQnVmZmVyKClcbiAgfSBlbHNlIHtcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCB0ZXh0MlNWRyhcbiAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICAgIHRleHQsXG4gICAgICB3YXRlcm1hcmtDb2xvcixcbiAgICAgIHdhdGVybWFya0ZvbnRQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aFxuICAgIClcbiAgfVxuICBjb25zdCB7IHdpZHRoOiB3YXRlcm1hcmtXaWR0aCwgaGVpZ2h0OiB3YXRlcm1hcmtIZWlnaHQgfSA9IGF3YWl0IGdldFNpemUod2F0ZXJtYXJrKVxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVXaWR0aCA9IE1hdGguZmxvb3IoaW1nV2lkdGggKiBmb3JjZU51bWJlcih3YXRlcm1hcmtTY2FsZVJhdGlvKSlcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0ID0gTWF0aC5mbG9vcigod2F0ZXJtYXJrUmVzaXplV2lkdGggKiB3YXRlcm1hcmtIZWlnaHQpIC8gd2F0ZXJtYXJrV2lkdGgpXG4gIHJldHVybiBhd2FpdCBzaGFycCh3YXRlcm1hcmspXG4gICAgLnJlc2l6ZSh3YXRlcm1hcmtSZXNpemVXaWR0aCwgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0LCB7XG4gICAgICBmaXQ6ICdpbnNpZGUnXG4gICAgfSlcbiAgICAucm90YXRlKHdhdGVybWFya0RlZ3JlZSwge1xuICAgICAgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9XG4gICAgfSlcbiAgICAudG9CdWZmZXIoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTaXplKGltYWdlOiBCdWZmZXIpOiBQcm9taXNlPHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHNoYXJwKGltYWdlKS5tZXRhZGF0YSgpXG4gIHJldHVybiB7IHdpZHRoOiB3aWR0aCB8fCAyMDAsIGhlaWdodDogaGVpZ2h0IHx8IDIwMCB9XG59XG5cbmNvbnN0IHZhbGlkUGFyYW0gPSAoLi4ucGFyYW1zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gcGFyYW1zLmV2ZXJ5KHBhcmFtID0+IHtcbiAgICBpZiAocGFyYW0gPT09IHVuZGVmaW5lZCB8fCBwYXJhbSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHJldHVybiBwYXJhbSAhPT0gJydcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJykgcmV0dXJuIHBhcmFtID4gMFxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmtleXMocGFyYW0pLmxlbmd0aCA+IDBcbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxufVxuXG4vKipcbiAqIOi9rOaNouWQjuWPr+S7pei+k+WHuueahOagvOW8j+WIl+ihqFxuICovXG5jb25zdCBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCA9IFtcbiAgJ2F2aWYnLFxuICAnZHonLFxuICAnZml0cycsXG4gICdnaWYnLFxuICAnaGVpZicsXG4gICdpbnB1dCcsXG4gICdqcGVnJyxcbiAgJ2pwZycsXG4gICdqcDInLFxuICAnanhsJyxcbiAgJ21hZ2ljaycsXG4gICdvcGVuc2xpZGUnLFxuICAncGRmJyxcbiAgJ3BuZycsXG4gICdwcG0nLFxuICAncmF3JyxcbiAgJ3N2ZycsXG4gICd0aWZmJyxcbiAgJ3RpZicsXG4gICd2JyxcbiAgJ3dlYnAnXG5dXG5cbi8qKlxuICog5Y+v5Lul5aSE55CG55qE5Zu+54mH5qC85byP5YiX6KGoXG4gKi9cbmNvbnN0IGltYWdlRm9ybWF0TGlzdCA9IFtcbiAgJ2pwZycsXG4gICdqcGVnJyxcbiAgJ3BuZycsXG4gICd3ZWJwJyxcbiAgJ2JtcCcsXG4gICd0aWZmJyxcbiAgJ3RpZicsXG4gICdzdmcnLFxuICAnaWNvJyxcbiAgJ2F2aWYnLFxuICAnaGVpZicsXG4gICdoZWljJyxcbiAgJ2dpZidcbl1cblxuY29uc3QgdmFsaWRPdXRwdXRGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuID0+IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0LmluY2x1ZGVzKGZvcm1hdClcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQWRkV2F0ZXJNYXJrKFxuICBpbWc6IEJ1ZmZlcixcbiAgb3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgbG9nZ2VyOiBJTG9nZ2VyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICB0cnkge1xuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcbiAgICBpbWFnZSA9IHNoYXJwKFxuICAgICAgYXdhaXQgQWRkV2F0ZXJtYXJrKFxuICAgICAgICBpbWcsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXG4gICAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICAgICAgb3B0aW9ucy5pc0Z1bGxTY3JlZW5XYXRlcm1hcmssXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtUZXh0LFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0NvbG9yLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0ltYWdlUGF0aCxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxuICAgICAgKSxcbiAgICAgIHsgYW5pbWF0ZWQ6IHRydWUgfVxuICAgIClcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBhZGQgd2F0ZXJtYXJrIGVycm9yOiAke2Vycm9yfWApXG4gICAgcmV0dXJuIGltZ1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE9wdGlvbnMob3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMpOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnRPYmogPVxuICAgIHR5cGVvZiBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmogPT09ICdzdHJpbmcnID8gc2FmZVBhcnNlKG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaikgOiBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmpcbiAgcmV0dXJuIHtcbiAgICBxdWFsaXR5OiBmb3JjZU51bWJlcihvcHRpb25zLnF1YWxpdHkpLFxuICAgIGlzQ29udmVydDogb3B0aW9ucy5pc0NvbnZlcnQgfHwgZmFsc2UsXG4gICAgY29udmVydEZvcm1hdDogb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnLFxuICAgIGlzUmVTaXplOiBvcHRpb25zLmlzUmVTaXplIHx8IGZhbHNlLFxuICAgIHJlU2l6ZUhlaWdodDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVIZWlnaHQpLFxuICAgIHJlU2l6ZVdpZHRoOiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVdpZHRoKSxcbiAgICBza2lwUmVTaXplT2ZTbWFsbEltZzogb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZSxcbiAgICBpc1JlU2l6ZUJ5UGVyY2VudDogb3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZSxcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxuICAgIGlzUm90YXRlOiBvcHRpb25zLmlzUm90YXRlIHx8IGZhbHNlLFxuICAgIGlzRmxpcDogb3B0aW9ucy5pc0ZsaXAgfHwgZmFsc2UsXG4gICAgaXNGbG9wOiBvcHRpb25zLmlzRmxvcCB8fCBmYWxzZSxcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcbiAgICBwaWNCZWQ6IG9wdGlvbnMucGljQmVkIHx8ICdzbW1zJyxcbiAgICBmb3JtYXRDb252ZXJ0T2JqOiBmb3JtYXRDb252ZXJ0T2JqIHx8IHt9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQ29tcHJlc3MoXG4gIGltZzogQnVmZmVyLFxuICBvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcbiAgcmF3Rm9ybWF0OiBzdHJpbmcsXG4gIGxvZ2dlcjogSUxvZ2dlclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucylcbiAgdHJ5IHtcbiAgICByYXdGb3JtYXQgPSBub3JtYWxpemVJbWFnZUV4dChyYXdGb3JtYXQpXG4gICAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMocmF3Rm9ybWF0KSB8fCByYXdGb3JtYXQgPT09ICdnaWYnKSByZXR1cm4gaW1nXG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICAgIGxldCBxdWFsaXR5ID0gMTAwXG4gICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5xdWFsaXR5KSAmJiBvcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XG4gICAgICBxdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5IVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCkge1xuICAgICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5yZVNpemVQZXJjZW50KSkge1xuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXG4gICAgICAgICAgICBNYXRoLnJvdW5kKChpbWFnZVdpZHRoICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISkgLyAxMDApLFxuICAgICAgICAgICAgTWF0aC5yb3VuZCgoaW1hZ2VIZWlnaHQgKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhKSAvIDEwMCksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaXNSZVNpemUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDAgJiZcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGggPiAwXG4gICAgICApIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUob3B0aW9ucy5yZVNpemVXaWR0aCwgb3B0aW9ucy5yZVNpemVIZWlnaHQsIHtcbiAgICAgICAgICBmaXQ6ICdmaWxsJ1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDAgJiZcbiAgICAgICAgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAwKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPCBpbWFnZUhlaWdodCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZUhlaWdodCAvIGltYWdlSGVpZ2h0XG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBzY2FsZVJhdGlvKSwgb3B0aW9ucy5yZVNpemVIZWlnaHQsIHtcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMCAmJlxuICAgICAgICAodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gMClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IChvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nICYmIG9wdGlvbnMucmVTaXplV2lkdGggPCBpbWFnZVdpZHRoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVSYXRpbyA9IG9wdGlvbnMucmVTaXplV2lkdGggLyBpbWFnZVdpZHRoXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShvcHRpb25zLnJlU2l6ZVdpZHRoLCBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogc2NhbGVSYXRpbyksIHtcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcbiAgICAgIGltYWdlID0gaW1hZ2Uucm90YXRlKG9wdGlvbnMucm90YXRlRGVncmVlLCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYWxwaGE6IDAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNGbGlwKSB7XG4gICAgICBpbWFnZSA9IGltYWdlLmZsaXAoKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc0Zsb3ApIHtcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxvcCgpXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzQ29udmVydCkge1xuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gZ2V0Q29udmVydGVkRm9ybWF0KG9wdGlvbnMsIHJhd0Zvcm1hdCkgYXMgYW55XG4gICAgICBpZiAobmV3Rm9ybWF0ICE9PSByYXdGb3JtYXQpIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChuZXdGb3JtYXQsIHtcbiAgICAgICAgICBxdWFsaXR5LFxuICAgICAgICAgIG1vempwZWc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQocmF3Rm9ybWF0IGFzIGFueSwge1xuICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdCgnanBnJywge1xuICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBwcm9jZXNzIGVycm9yOiAke2Vycm9yfWApXG4gICAgcmV0dXJuIGltZ1xuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlRXh0ID0gKGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZEZvcm1hdChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgcmF3Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zIHx8IHt9KVxuICByYXdGb3JtYXQgPSBub3JtYWxpemVJbWFnZUV4dChyYXdGb3JtYXQpXG4gIGlmIChyYXdGb3JtYXQgPT09ICdnaWYnKSByZXR1cm4gJ2dpZidcbiAgbGV0IG5ld0Zvcm1hdCA9IG9wdGlvbnM/LmNvbnZlcnRGb3JtYXQgfHwgJ2pwZydcbiAgaWYgKG9wdGlvbnM/LmZvcm1hdENvbnZlcnRPYmogJiYgT2JqZWN0LmtleXMob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZm9ybWF0Q29udmVydE9iaiA9IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxuICAgIGNvbnN0IGZvcm1hdENvbnZlcnRPYmpLZXlzID0gT2JqZWN0LmtleXMoZm9ybWF0Q29udmVydE9iailcbiAgICBpZiAoZm9ybWF0Q29udmVydE9iaktleXMuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xuICAgICAgbmV3Rm9ybWF0ID0gZm9ybWF0Q29udmVydE9ialtyYXdGb3JtYXRdXG4gICAgICBpZiAoIXZhbGlkT3V0cHV0Rm9ybWF0KG5ld0Zvcm1hdCkpIHtcbiAgICAgICAgbmV3Rm9ybWF0ID0gJ2pwZydcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnM/LnBpY0JlZCA9PT0gJ2ltZ3VyJyAmJiBuZXdGb3JtYXQgPT09ICd3ZWJwJykge1xuICAgIG5ld0Zvcm1hdCA9ICdqcGcnXG4gIH1cbiAgcmV0dXJuIG5ld0Zvcm1hdFxufVxuXG5leHBvcnQgY29uc3QgaXNOZWVkQWRkV2F0ZXJtYXJrID0gKFxuICB3YXRlcm1hcmtPcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIGZpbGVFeHQ6IHN0cmluZ1xuKTogYm9vbGVhbiA9PiB7XG4gIGZpbGVFeHQgPSBub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KVxuICByZXR1cm4gKFxuICAgICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpICYmIGZpbGVFeHQgIT09ICdzdmcnXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGlzTmVlZENvbXByZXNzID0gKGNvbXByZXNzT3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KSkgfHwgIWNvbXByZXNzT3B0aW9ucykgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qge1xuICAgIHF1YWxpdHksXG4gICAgaXNSZVNpemVCeVBlcmNlbnQsXG4gICAgcmVTaXplUGVyY2VudCxcbiAgICBpc1JlU2l6ZSxcbiAgICByZVNpemVIZWlnaHQsXG4gICAgcmVTaXplV2lkdGgsXG4gICAgaXNSb3RhdGUsXG4gICAgcm90YXRlRGVncmVlLFxuICAgIGlzQ29udmVydCxcbiAgICBjb252ZXJ0Rm9ybWF0LFxuICAgIGlzRmxpcCxcbiAgICBpc0Zsb3BcbiAgfSA9IGZvcm1hdE9wdGlvbnMoY29tcHJlc3NPcHRpb25zKVxuXG4gIGlmICh2YWxpZFBhcmFtKHF1YWxpdHkpICYmIHF1YWxpdHkhIDwgMTAwKSByZXR1cm4gdHJ1ZVxuICBpZiAoaXNSZVNpemVCeVBlcmNlbnQgJiYgdmFsaWRQYXJhbShyZVNpemVQZXJjZW50KSkgcmV0dXJuIHRydWVcbiAgaWYgKFxuICAgIGlzUmVTaXplICYmXG4gICAgKCh0eXBlb2YgcmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiByZVNpemVIZWlnaHQgPiAwKSB8fCAodHlwZW9mIHJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiByZVNpemVXaWR0aCA+IDApKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1JvdGF0ZSAmJiByb3RhdGVEZWdyZWUpIHJldHVybiB0cnVlXG4gIGlmIChpc0ZsaXAgfHwgaXNGbG9wKSByZXR1cm4gdHJ1ZVxuICBpZiAoaXNDb252ZXJ0KSB7XG4gICAgY29uc3QgbmV3Rm9ybWF0ID0gY29udmVydEZvcm1hdCB8fCAnanBnJ1xuICAgIHJldHVybiBmaWxlRXh0ICE9PSBuZXdGb3JtYXRcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4aWYgPSBhc3luYyAoaW1nOiBCdWZmZXIsIGZpbGVFeHQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiA9PiB7XG4gIGZpbGVFeHQgPSBub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KVxuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KSB8fCBmaWxlRXh0ID09PSAnc3ZnJykgcmV0dXJuIGltZ1xuICByZXR1cm4gYXdhaXQgc2hhcnAoaW1nLCB7XG4gICAgYW5pbWF0ZWQ6IHRydWVcbiAgfSkudG9CdWZmZXIoKVxufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHVwbG9hZDogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjdHguY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGxvYWQsIGdvIGdvIGdvJylcbiAgICAgIC5hcmd1bWVudHMoJ1tpbnB1dC4uLl0nKVxuICAgICAgLmFsaWFzKCd1JylcbiAgICAgIC5hY3Rpb24oKGlucHV0OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dExpc3QgPSBpbnB1dFxuICAgICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXG4gICAgICAgICAgICAgIGlmICghZXhpc3QpIHtcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYCR7aXRlbX0gZG9lcyBub3QgZXhpc3QuYClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZXhpc3RcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXG4gICAgICAgIH0pKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3F1YWxpdHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzQ29udmVydCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQ29udmVydCB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2NvbnZlcnRGb3JtYXQnLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgICdhdmlmJyxcbiAgICAgICAgJ2R6JyxcbiAgICAgICAgJ2ZpdHMnLFxuICAgICAgICAnZ2lmJyxcbiAgICAgICAgJ2hlaWYnLFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAnanBlZycsXG4gICAgICAgICdqcGcnLFxuICAgICAgICAnanAyJyxcbiAgICAgICAgJ2p4bCcsXG4gICAgICAgICdtYWdpY2snLFxuICAgICAgICAnb3BlbnNsaWRlJyxcbiAgICAgICAgJ3BkZicsXG4gICAgICAgICdwbmcnLFxuICAgICAgICAncHBtJyxcbiAgICAgICAgJ3JhdycsXG4gICAgICAgICdzdmcnLFxuICAgICAgICAndGlmZicsXG4gICAgICAgICd0aWYnLFxuICAgICAgICAndicsXG4gICAgICAgICd3ZWJwJ1xuICAgICAgXSxcbiAgICAgIGRlZmF1bHQ6ICdqcGcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNSZVNpemUnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemUgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZVNpemVXaWR0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVTaXplSGVpZ2h0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZUhlaWdodCB8fCA1MDBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdza2lwUmVTaXplT2ZTbWFsbEltZycsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzUmVTaXplQnlQZXJjZW50JyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVTaXplUGVyY2VudCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVBlcmNlbnQgfHwgNTBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc0ZsaXAnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0ZsaXAgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc0Zsb3AnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTE9QJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Zsb3AgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc1JvdGF0ZScsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JPVEFURScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JPVEFURScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JvdGF0ZSB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JvdGF0ZURlZ3JlZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yb3RhdGVEZWdyZWUgfHwgOTBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc1JlbW92ZUV4aWYnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlbW92ZUV4aWYgfHwgZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpZ1xufVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaXNBZGRXYXRlcm1hcmsnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0FkZFdhdGVybWFyayB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya1R5cGUnLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFsndGV4dCcsICdpbWFnZSddLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUeXBlIHx8ICd0ZXh0J1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzRnVsbFNjcmVlbldhdGVybWFyaycsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRGVncmVlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUZXh0IHx8ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRm9udFBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya1NjYWxlUmF0aW8nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtTY2FsZVJhdGlvIHx8IDAuMTVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtDb2xvcicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0NvbG9yIHx8ICdyZ2JhKDIwNCwgMjA0LCAyMDQsIDAuNDUpJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya0ltYWdlUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ltYWdlUGF0aCB8fCAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya1Bvc2l0aW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgJ25vcnRoJyxcbiAgICAgICAgJ25vcnRoZWFzdCcsXG4gICAgICAgICdzb3V0aGVhc3QnLFxuICAgICAgICAnc291dGgnLFxuICAgICAgICAnc291dGh3ZXN0JyxcbiAgICAgICAgJ25vcnRod2VzdCcsXG4gICAgICAgICd3ZXN0JyxcbiAgICAgICAgJ2Vhc3QnLFxuICAgICAgICAnY2VudGVyJyxcbiAgICAgICAgJ2NlbnRyZSdcbiAgICAgIF0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1Bvc2l0aW9uIHx8ICdzb3V0aGVhc3QnXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb25maWdcbn1cbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxhbnk+KCdidWlsZEluLnJlbmFtZScpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdmb3JtYXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9GT1JNQVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5hYmxlJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9FTkFCTEUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0VOQUJMRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmFibGUgfHwgZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpZ1xufVxuIiwiaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgSVBpY0dvLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCB1cGxvYWRlclRyYW5zbGF0b3JzID0gKGN0eDogSVBpY0dvKSA9PiB7XG4gIHJldHVybiB7XG4gICAgYWR2YW5jZWRwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1QnKSxcbiAgICBhbGlzdHBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUExJU1QnKSxcbiAgICBhbGl5dW46IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRCcpLFxuICAgICdhd3MtczMtcGxpc3QnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVCcpLFxuICAgIGdpdGh1YjogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpLFxuICAgIGltZ3VyOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKSxcbiAgICBsb2NhbDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMJyksXG4gICAgbHNreXBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QTElTVCcpLFxuICAgIHBpY2xpc3Q6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUJyksXG4gICAgcWluaXU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpLFxuICAgIHNmdHBwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpLFxuICAgIHNtbXM6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJyksXG4gICAgdGN5dW46IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKSxcbiAgICB0ZWxlZ3JhcGhwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTEVHUkFQSCcpLFxuICAgIHVweXVuOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU4nKSxcbiAgICB3ZWJkYXZwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJylcbiAgfSBhcyBJU3RyaW5nS2V5TWFwPGFueT5cbn1cbiIsImltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IGNvbXByZXNzIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzJ1xuaW1wb3J0IHdhdGVybWFyayBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci93YXRlcm1hcmsnXG5pbXBvcnQgcmVuYW1lIGZyb20gJy4uL2JlZm9yZXVwbG9hZC9idWlsZEluUmVuYW1lJ1xuaW1wb3J0IHsgdXBsb2FkZXJUcmFuc2xhdG9ycyB9IGZyb20gJy4vdXRpbHMnXG5cbi8vIGhhbmRsZSBtb2R1bGVzIGNvbmZpZyAtPiBzYXZlIHRvIHBpY2dvIGNvbmZpZyBmaWxlXG5jb25zdCBoYW5kbGVDb25maWcgPSBhc3luYyAoY3R4OiBJUGljR28sIHByb21wdHM6IElQbHVnaW5Db25maWdbXSwgbW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChwcm9tcHRzKVxuICBjb25zdCBjb25maWdOYW1lID1cbiAgICBtb2R1bGUgPT09ICd1cGxvYWRlcidcbiAgICAgID8gYHBpY0JlZC4ke25hbWV9YFxuICAgICAgOiBtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcidcbiAgICAgICAgPyBgdHJhbnNmb3JtZXIuJHtuYW1lfWBcbiAgICAgICAgOiBtb2R1bGUgPT09ICdidWlsZGluJ1xuICAgICAgICAgID8gYGJ1aWxkSW4uJHtuYW1lfWBcbiAgICAgICAgICA6IG5hbWVcbiAgY3R4LnNhdmVDb25maWcoe1xuICAgIFtjb25maWdOYW1lXTogYW5zd2VyXG4gIH0pXG4gIGlmIChtb2R1bGUgPT09ICd1cGxvYWRlcicpIHtcbiAgICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgICAncGljQmVkLmN1cnJlbnQnOiBuYW1lLFxuICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IG5hbWVcbiAgICB9KVxuICB9IGVsc2UgaWYgKG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJykge1xuICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBuYW1lXG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCBzZXR0aW5nID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ3NldCcpXG4gICAgICAuYWxpYXMoJ2NvbmZpZycpXG4gICAgICAuYXJndW1lbnRzKCc8bW9kdWxlPiBbbmFtZV0nKVxuICAgICAgLmRlc2NyaXB0aW9uKCdjb25maWd1cmUgY29uZmlnIG9mIHBpY2dvIG1vZHVsZXMsIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xuICAgICAgICAgICAgLy8gYXdhaXQgY3R4LnBsdWdpbkxvYWRlci5sb2FkKClcbiAgICAgICAgICAgIC8vIGlmIGEgbW9kdWxlIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xuICAgICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnYnVpbGRpbic6XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjb21wcmVzcycpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2F0ZXJtYXJrJykge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAncmVuYW1lJykge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgcmVuYW1lLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTUycpLCB2YWx1ZTogJ2NvbXByZXNzJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSSycpLCB2YWx1ZTogJ3dhdGVybWFyaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUUnKSwgdmFsdWU6ICdyZW5hbWUnIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBidWlsZGluIG1vZHVsZSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5idWlsZGluID09PSAnY29tcHJlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3dhdGVybWFyaycpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3JlbmFtZScpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgcmVuYW1lLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICd1cGxvYWRlcic6XG4gICAgICAgICAgICAgIGNhc2UgJ3RyYW5zZm9ybWVyJzpcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQobmFtZSlcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjdHgubG9nLmVycm9yKGBObyAke21vZHVsZX0gbmFtZWQgJHtuYW1lfWApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHttb2R1bGV9YCxcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyW21vZHVsZV0uZ2V0SWRMaXN0KCkubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHVwbG9hZGVyVHJhbnNsYXRvcnMoY3R4KVtpdGVtXSB8fCBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBDaG9vc2UgYShuKSAke21vZHVsZX1gXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChhbnN3ZXJbbW9kdWxlXSlcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXJbbW9kdWxlXSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSAncGx1Z2luJzpcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lLmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpPy5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgbmFtZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihgTm8gcGx1Z2luIG5hbWVkICR7bmFtZX1gKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2luJyxcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHBsdWdpbidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxuICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pPy5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKFxuICAgICAgICAgICAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgICAgICAgICAgICBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKSEuY29uZmlnIShjdHgpLFxuICAgICAgICAgICAgICAgICAgICAgICdwbHVnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5wbHVnaW5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgY29uZmlnIHN1Y2Nlc3NmdWxseSEnKVxuICAgICAgICAgICAgaWYgKG1vZHVsZSA9PT0gJ3BsdWdpbicpIHtcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKFwiSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgY29uZmlnLCBwbGVhc2UgcnVuICdwaWNnbyB1c2UgcGx1Z2lucydcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0dGluZ1xuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSwgSUNMSUNvbmZpZ3MsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IHVwbG9hZGVyVHJhbnNsYXRvcnMgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCB1c2U6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgndXNlJylcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcbiAgICAgIC5kZXNjcmlwdGlvbigndXNlIG1vZHVsZXMgb2YgcGljZ28nKVxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBwcm9tcHRzOiBhbnlbXSA9IFtdXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xuICAgICAgICAgICAgICB1cGxvYWRlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYW4gdXBsb2FkZXInLFxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0SWRMaXN0KCkubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHVwbG9hZGVyVHJhbnNsYXRvcnMoY3R4KVtpdGVtXSB8fCBpdGVtLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0cmFuc2Zvcm1lcicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldElkTGlzdCgpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBwbHVnaW5zJyxcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgICAgY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7aXRlbX1gKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgYW4gb3B0aW9uIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xuICAgICAgICAgICAgaWYgKG1vZHVsZSkge1xuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcbiAgICAgICAgICAgICAgICBwcm9tcHRzLnB1c2goY29uZmlnW21vZHVsZV0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW5zJylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJvbXB0cyA9IE9iamVjdC5rZXlzKGNvbmZpZykubWFwKChpdGVtOiBzdHJpbmcpID0+IGNvbmZpZ1tpdGVtXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxuXG4gICAgICAgICAgICAvLyBoYW5kbGUgZm9yIHBsdWdpbnMgb3B0aW9uIGZyb20gQXJyYXkgdG8gb2JqZWN0XG4gICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IGN0eC5nZXRDb25maWc8SVN0cmluZ0tleU1hcDxib29sZWFuPj4oJ3BpY2dvUGx1Z2lucycpXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBsdWdpbnMpLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgcGx1Z2luc1xuICAgICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgICAgICAgICAgICAgcGljZ29QbHVnaW5zOiBwbHVnaW5zXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgdXBsb2FkZXIgJiB0cmFuc2Zvcm1lclxuICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgICAgICAgICAncGljQmVkLmN1cnJlbnQnOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxuICAgICAgICAgICAgICAncGljQmVkLnVwbG9hZGVyJzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcbiAgICAgICAgICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IGFuc3dlci50cmFuc2Zvcm1lciB8fCAncGF0aCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBzYXZlZCBzdWNjZXNzZnVsbHkhJylcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgcHJveHk6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xuICAgICAgY3R4LnNldENvbmZpZyh7XG4gICAgICAgICdwaWNCZWQucHJveHknOiBwcm94eVxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHByb3h5XG4iLCJpbXBvcnQgbWF0Y2ggZnJvbSAnbWluaW1hdGNoJ1xuXG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xuaW1wb3J0IHsgcmVuZGVyIGFzIGVqc1JlbmRlciB9IGZyb20gJ2VqcydcblxuaW1wb3J0IHsgSVBpY0dvLCBJT3B0aW9ucywgSUZpbGVUcmVlIH0gZnJvbSAnLi4vdHlwZXMnXG5cbi8qKlxuICogR2VuZXJhdGUgdGVtcGxhdGUgZmlsZXMgdG8gZGVzdGluYXRpb24gZmlsZXMuXG4gKiBAcGFyYW0ge1BpY0dvfSBjdHhcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuY29uc3QgZ2VuZXJhdGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRzID0gZ2V0T3B0aW9ucyhvcHRpb25zLnRtcClcbiAgICBjb25zdCBzb3VyY2UgPSBwYXRoLmpvaW4ob3B0aW9ucy50bXAsICd0ZW1wbGF0ZScpXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxuICAgIGlmIChvcHRzLnByb21wdHMgJiYgb3B0cy5wcm9tcHRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChvcHRzLnByb21wdHMpXG4gICAgfVxuICAgIGxldCBfZmlsZXM6IHN0cmluZ1tdID0gYXdhaXQgZ2xvYmJ5KFsnKiovKiddLCB7IGN3ZDogc291cmNlLCBkb3Q6IHRydWUgfSkgLy8gZ2V0IGZpbGVzJyBuYW1lIGFycmF5XG4gICAgX2ZpbGVzID0gX2ZpbGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgZ2xvYiA9ICcnXG4gICAgICBPYmplY3Qua2V5cyhvcHRzLmZpbHRlcnMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChtYXRjaChpdGVtLCBrZXksIHsgZG90OiB0cnVlIH0pKSB7XG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChnbG9iKSB7XG4gICAgICAgIC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxuICAgICAgICByZXR1cm4gZmlsdGVycyhjdHgsIG9wdHMuZmlsdGVyc1tnbG9iXSwgYW5zd2VycylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY3R4LmxvZy53YXJuKCdUZW1wbGF0ZSBmaWxlcyBub3QgZm91bmQhJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IHJlbmRlcihfZmlsZXMsIHNvdXJjZSwgYW5zd2VycylcbiAgICB3cml0ZUZpbGVUcmVlKG9wdGlvbnMuZGVzdCwgZmlsZXMpXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRzLmNvbXBsZXRlKHsgYW5zd2Vycywgb3B0aW9ucywgZmlsZXM6IF9maWxlcywgY3R4IH0pXG4gICAgfVxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xuICAgICAgY3R4LmxvZy5zdWNjZXNzKG9wdHMuY29tcGxldGVNZXNzYWdlKVxuICAgIH1cbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY3R4LmxvZy5lcnJvcihlKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcbiAqIEBwYXJhbSBjdHggUGljR29cbiAqIEBwYXJhbSBleHAgY29uZGl0aW9uIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxuICovXG5jb25zdCBmaWx0ZXJzID0gKGN0eDogSVBpY0dvLCBleHA6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcbiAgY29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCAnd2l0aCAoZGF0YSkgeyByZXR1cm4gJyArIGV4cCArICd9JylcbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oZGF0YSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGN0eC5sb2cuZXJyb3IoYEVycm9yIHdoZW4gZXZhbHVhdGluZyBmaWx0ZXIgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YClcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0ZW1wbGF0ZSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXG4gKi9cbmNvbnN0IGdldE9wdGlvbnMgPSAodGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBhbnkgPT4ge1xuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnNQYXRoKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBmaWxlcyB0byBhIHZpcnR1YWwgdHJlZSBvYmplY3RcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXG4gKi9cbmNvbnN0IHJlbmRlciA9IChmaWxlczogc3RyaW5nW10sIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cbiAgZmlsZXMuZm9yRWFjaCgoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHNvdXJjZSwgZmlsZVBhdGgpLCAndXRmOCcpXG4gICAgY29uc3QgY29udGVudCA9IGVqc1JlbmRlcihmaWxlLCBvcHRpb25zKVxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xuICAgICAgZmlsZVRyZWVbZmlsZVBhdGhdID0gY29udGVudFxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGZpbGVUcmVlXG59XG5cbi8qKlxuICogV3JpdGUgcmVuZGVyZWQgZmlsZXMnIGNvbnRlbnQgdG8gcmVhbCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXG4gKiBAcGFyYW0ge29iamVjdH0gZmlsZXNcbiAqL1xuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xuICBPYmplY3Qua2V5cyhmaWxlcykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKVxuICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcbiAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBmaWxlc1tuYW1lXSlcbiAgfSlcbn1cblxuZXhwb3J0IHsgZmlsdGVycywgZ2VuZXJhdGUsIHJlbmRlciwgd3JpdGVGaWxlVHJlZSB9XG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgc3luYyB9IGZyb20gJ3JpbXJhZidcblxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuLi8uLi91dGlscy9pbml0VXRpbHMnXG5pbXBvcnQgeyBJT3B0aW9ucywgSVBsdWdpbiwgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgaWYgKG9wdGlvbnMub2ZmbGluZSkge1xuICAgIC8vIG9mZmxpbmUgbW9kZVxuICAgIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudGVtcGxhdGUpKSB7XG4gICAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIG9ubGluZSBtb2RlXG4gICAgb3B0aW9ucy50ZW1wbGF0ZSA9ICFvcHRpb25zLmhhc1NsYXNoXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxuICAgICAgOiBvcHRpb25zLnRlbXBsYXRlXG4gICAgZG93bmxvYWRBbmRHZW5lcmF0ZShjdHgsIG9wdGlvbnMpXG4gIH1cbn1cblxuLyoqXG4gKiBkb3dubG9hZCB0ZW1wbGF0ZSAmIGdlbmVyYXRlXG4gKiBAcGFyYW0geyBQaWNHbyB9IGN0eFxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXG4gKi9cbmNvbnN0IGRvd25sb2FkQW5kR2VuZXJhdGUgPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xuICAgIHN5bmMob3B0aW9ucy50bXApXG4gIH1cbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxuICBkb3dubG9hZChvcHRpb25zLnRlbXBsYXRlLCBvcHRpb25zLnRtcCwgeyBjbG9uZTogb3B0aW9ucy5jbG9uZSB9LCAoZXJyOiBFcnJvcikgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcbiAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgIH0pXG4gIH0pXG59XG5cbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgnaW5pdCcpXG4gICAgICAuYXJndW1lbnRzKCc8dGVtcGxhdGU+IFtwcm9qZWN0XScpXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxuICAgICAgLm9wdGlvbignLS1vZmZsaW5lJywgJ3VzZSBjYWNoZWQgdGVtcGxhdGUnKVxuICAgICAgLmRlc2NyaXB0aW9uKFwiY3JlYXRlIHBpY2dvIHBsdWdpbidzIGRldmVsb3BtZW50IHRlbXBsYXRlc1wiKVxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NsYXNoID0gdGVtcGxhdGUuaW5jbHVkZXMoJy8nKVxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xuICAgICAgICAgICAgY29uc3QgZGVzdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0IHx8ICcuJylcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gcHJvZ3JhbS5jbG9uZSB8fCBmYWxzZVxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxuICAgICAgICAgICAgY29uc3QgdG1wID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNsaXN0L3RlbXBsYXRlcycsIHRlbXBsYXRlLnJlcGxhY2UoL1svOl0vZywgJy0nKSkgLy8gZm9yIGNhY2hpbmcgdGVtcGxhdGVcblxuICAgICAgICAgICAgaWYgKHByb2dyYW0ub2ZmbGluZSkge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgICAgaGFzU2xhc2gsXG4gICAgICAgICAgICAgIGluUGxhY2UsXG4gICAgICAgICAgICAgIGRlc3QsXG4gICAgICAgICAgICAgIGNsb25lLFxuICAgICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICAgIG9mZmxpbmVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcHJvamVjdCBpcyBlbXB0eSBvciBleGlzdFxuICAgICAgICAgICAgaWYgKGluUGxhY2UgfHwgZnMuZXhpc3RzU3luYyhkZXN0KSkge1xuICAgICAgICAgICAgICBhd2FpdCBjdHguY21kLmlucXVpcmVyXG4gICAgICAgICAgICAgICAgLnByb21wdChbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogaW5QbGFjZSA/ICdHZW5lcmF0ZSBwcm9qZWN0IGluIGN1cnJlbnQgZGlyZWN0b3J5PycgOiAnVGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIENvbnRpbnVlPycsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvaydcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIC50aGVuKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5vaykge1xuICAgICAgICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBwcm9qZWN0IGlzIGdpdmVuXG4gICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLm9uKCctLWhlbHAnLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKClcbiAgICAgICAgY29uc29sZS5sb2coJ0V4YW1wbGVzOicpXG4gICAgICAgIGNvbnNvbGUubG9nKClcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggYW4gb2ZmaWNpYWwgdGVtcGxhdGUnKSlcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHBsdWdpbiBteS1wcm9qZWN0JylcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgc3RyYWlnaHQgZnJvbSBhIGdpdGh1YiB0ZW1wbGF0ZScpKVxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgdXNlcm5hbWUvcmVwbyBteS1wcm9qZWN0JylcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0XG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJUGljR28sIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgaTE4bjogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCdpMThuJylcbiAgICAgIC5hcmd1bWVudHMoJ1tsYW5nXScpXG4gICAgICAuZGVzY3JpcHRpb24oJ2NoYW5nZSBsYW5ndWFnZSwgemgtQ04sIHpoLVRXLCBlbicpXG4gICAgICAuYWN0aW9uKGFzeW5jIChsYW5nOiBzdHJpbmcgPSAnJykgPT4ge1xuICAgICAgICBjb25zdCBsaXN0ID0gY3R4LmkxOG4uZ2V0TGFuZ3VhZ2VMaXN0KClcbiAgICAgICAgaWYgKCFsYW5nKSB7XG4gICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICBuYW1lOiAnaTE4bicsXG4gICAgICAgICAgICAgIGNob2ljZXM6IGxpc3QsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBsYW5ndWFnZScsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXG4gICAgICAgICAgbGFuZyA9IGFuc3dlci5pMThuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsaXN0LmluY2x1ZGVzKGxhbmcpKSB7XG4gICAgICAgICAgY3R4LmxvZy53YXJuKCdObyBzdWNoIGxhbmd1YWdlJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShsYW5nKVxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7bGFuZ31gKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG5cbiIsImltcG9ydCB7IElQbHVnaW4sIElMaWZlY3ljbGVQbHVnaW5zIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGVQbHVnaW5zIGltcGxlbWVudHMgSUxpZmVjeWNsZVBsdWdpbnMge1xuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcGx1Z2luc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0OiBNYXA8c3RyaW5nLCBJUGx1Z2luPlxuICAvKipcbiAgICogVGhlIG1hcCBvZiBwbHVnaW4gaWRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWRNYXA6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPlxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmxpc3QgPSBuZXcgTWFwKClcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXG4gIH1cblxuICByZWdpc3RlcihpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXG5cbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXG5cbiAgICBpZiAoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSB7XG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pPy5wdXNoKGlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXIocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVxuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcbiAgfVxuXG4gIGdldExpc3QoKTogSVBsdWdpbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cbiAgfVxuXG4gIGdldElkTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJyZW50UGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQgPT4ge1xuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXG59XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgcmV0dXJuIExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpblxufVxuXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVQbHVnaW5zXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlcyAqL1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCBpbnF1aXJlciwgeyBJbnF1aXJlciB9IGZyb20gJ2lucXVpcmVyJ1xuXG5pbXBvcnQgY29tbWFuZGVycyBmcm9tICcuLi9wbHVnaW5zL2NvbW1hbmRlcidcbmltcG9ydCB7IGdldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xuXG5pbXBvcnQgeyBJUGx1Z2luLCBJQ29tbWFuZGVyLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRlciBpbXBsZW1lbnRzIElDb21tYW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWUgPSAnY29tbWFuZGVyJ1xuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3QgPSBuZXcgTWFwPHN0cmluZywgSVBsdWdpbj4oKVxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cblxuICBwcm9ncmFtOiBDb21tYW5kXG4gIGlucXVpcmVyOiBJbnF1aXJlclxuXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIHRoaXMuaW5xdWlyZXIgPSBpbnF1aXJlclxuICAgIHRoaXMuY3R4ID0gY3R4XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVxuICB9XG5cbiAgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyYW1cbiAgICAgIC52ZXJzaW9uKHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT04sICctdiwgLS12ZXJzaW9uJylcbiAgICAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ2RlYnVnIG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCctcywgLS1zaWxlbnQnLCAnc2lsZW50IG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLm9uKCdjb21tYW5kOionLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBjb21tYW5kOiAke3RoaXMucHJvZ3JhbS5hcmdzLmpvaW4oJyAnKX1cXG5TZWUgLS1oZWxwIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLmBcbiAgICAgICAgKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgIH0pXG5cbiAgICAvLyBidWlsdC1pbiBjb21tYW5kc1xuICAgIGNvbW1hbmRlcnModGhpcy5jdHgpXG4gIH1cblxuICByZWdpc3RlcihpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIGlzIHJlcXVpcmVkIScpXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IHBsdWdpbiBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5OYW1lID0gZ2V0Q3VycmVudFBsdWdpbk5hbWUoKVxuICAgIGlmIChjdXJyZW50UGx1Z2luTmFtZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKGN1cnJlbnRQbHVnaW5OYW1lKSkge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChjdXJyZW50UGx1Z2luTmFtZSk/LnB1c2goaWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChjdXJyZW50UGx1Z2luTmFtZSwgW2lkXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbG9hZENvbW1hbmRzKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TGlzdCgpLmZvckVhY2goKGl0ZW06IElQbHVnaW4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGl0ZW0uaGFuZGxlKHRoaXMuY3R4KVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXQoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxuICB9XG5cbiAgZ2V0TGlzdCgpOiBJUGx1Z2luW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxuICB9XG5cbiAgZ2V0SWRMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZGVyXG4iLCJpbXBvcnQgcGx1Z2luSGFuZGxlciBmcm9tICcuL3BsdWdpbkhhbmRsZXInXG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJ1xuaW1wb3J0IHVwbG9hZCBmcm9tICcuL3VwbG9hZCdcbmltcG9ydCBzZXR0aW5nIGZyb20gJy4vc2V0dGluZydcbmltcG9ydCB1c2UgZnJvbSAnLi91c2UnXG5pbXBvcnQgcHJveHkgZnJvbSAnLi9wcm94eSdcbmltcG9ydCBpbml0IGZyb20gJy4vaW5pdCdcbmltcG9ydCBpMThuIGZyb20gJy4vaTE4bidcblxuaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IChjdHg6IElQaWNHbyk6IHZvaWQgPT4ge1xuICBjdHguY21kLnJlZ2lzdGVyKCdwbHVnaW5IYW5kbGVyJywgcGx1Z2luSGFuZGxlcilcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxuICBjdHguY21kLnJlZ2lzdGVyKCdzZXR0aW5nJywgc2V0dGluZylcbiAgY3R4LmNtZC5yZWdpc3RlcigndXBsb2FkJywgdXBsb2FkKVxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3Byb3h5JywgcHJveHkpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2luaXQnLCBpbml0KVxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcbn1cbiIsImV4cG9ydCBlbnVtIElMb2dUeXBlIHtcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcbiAgaW5mbyA9ICdpbmZvJyxcbiAgd2FybiA9ICd3YXJuJyxcbiAgZXJyb3IgPSAnZXJyb3InXG59XG5cbi8qKlxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBieSB1c2Vyc1xuICovXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcbiAgVVBMT0FEX1BST0dSRVNTID0gJ3VwbG9hZFByb2dyZXNzJyxcbiAgRkFJTEVEID0gJ2ZhaWxlZCcsXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcbiAgQkVGT1JFX1VQTE9BRCA9ICdiZWZvcmVVcGxvYWQnLFxuICBBRlRFUl9VUExPQUQgPSAnYWZ0ZXJVcGxvYWQnLFxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXG4gIElOU1RBTEwgPSAnaW5zdGFsbCcsXG4gIFVOSU5TVEFMTCA9ICd1bmluc3RhbGwnLFxuICBVUERBVEUgPSAndXBkYXRlJyxcbiAgTk9USUZJQ0FUSU9OID0gJ25vdGlmaWNhdGlvbidcbn1cblxuLyoqXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIG9ubHkgYnkgcGljZ29cbiAqL1xuZXhwb3J0IGVudW0gSUJ1c0V2ZW50IHtcbiAgQ09ORklHX0NIQU5HRSA9ICdDT05GSUdfQ0hBTkdFJ1xufVxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IGZzLCB7IGNyZWF0ZUZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHV0aWwgZnJvbSAndXRpbCdcblxuaW1wb3J0IHsgSUxvZ1R5cGUgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvZ0FyZ3ZUeXBlLCBJTG9nQXJndlR5cGVXaXRoRXJyb3IsIFVuZGVmaW5hYmxlLCBJTG9nQ29sb3IsIElMb2dnZXIsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XG4gICAgW0lMb2dUeXBlLnN1Y2Nlc3NdOiAnZ3JlZW4nLFxuICAgIFtJTG9nVHlwZS5pbmZvXTogJ2JsdWUnLFxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXG4gICAgW0lMb2dUeXBlLmVycm9yXTogJ3JlZCdcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSBsb2dMZXZlbCE6IHN0cmluZyB8IHN0cmluZ1tdXG4gIHByaXZhdGUgbG9nUGF0aCE6IHN0cmluZ1xuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxvZyh0eXBlOiBJTG9nVHlwZSwgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nTGV2ZWwgPSB0aGlzLmN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxvZ0xldmVsJylcbiAgICBpZiAoIXRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2lsZW50JykgJiYgdGhpcy5jaGVja0xvZ0xldmVsKHR5cGUsIHRoaXMubG9nTGV2ZWwpKSB7XG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcbiAgICAgIGNvbnNvbGUubG9nKGxvZ0hlYWRlciwgLi4ubXNnKVxuICAgICAgdGhpcy5sb2dQYXRoID1cbiAgICAgICAgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5sb2dQYXRoJykgfHwgcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICcuL3BpY2xpc3QubG9nJylcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2hlY2tMb2dGaWxlSXNMYXJnZSh0aGlzLmxvZ1BhdGgpXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0xhcmdlKSB7XG4gICAgICAgICAgICBjb25zdCB3YXJuaW5nTXNnID0gYExvZyBmaWxlIGlzIHRvbyBsYXJnZSAoPiAke3Jlc3VsdC5sb2dGaWxlU2l6ZUxpbWl0ISAvIDEwMjQgLyAxMDI0IHx8ICcxMCd9IE1CKSwgcmVjcmVhdGUgbG9nIGZpbGVgXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1tQaWNMaXN0IFdBUk5dOicpLCB3YXJuaW5nTXNnKVxuICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZUxvZ0ZpbGUodGhpcy5sb2dQYXRoKVxuICAgICAgICAgICAgbXNnLnVuc2hpZnQod2FybmluZ01zZylcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oYW5kbGVXcml0ZUxvZyh0aGlzLmxvZ1BhdGgsIHR5cGUsIC4uLm1zZylcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiBjaGVja2luZyBsb2cgZmlsZSBzaXplJywgZSlcbiAgICAgICAgfVxuICAgICAgfSwgMClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTG9nRmlsZUlzTGFyZ2UobG9nUGF0aDogc3RyaW5nKToge1xuICAgIGlzTGFyZ2U6IGJvb2xlYW5cbiAgICBsb2dGaWxlU2l6ZT86IG51bWJlclxuICAgIGxvZ0ZpbGVTaXplTGltaXQ/OiBudW1iZXJcbiAgfSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplID0gZnMuc3RhdFN5bmMobG9nUGF0aCkuc2l6ZVxuICAgICAgY29uc3QgbG9nRmlsZVNpemVMaW1pdCA9XG4gICAgICAgIGZvcmNlTnVtYmVyKHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxudW1iZXI+Pignc2V0dGluZ3MubG9nRmlsZVNpemVMaW1pdCcpIHx8IDEwKSAqIDEwMjQgKiAxMDI0IC8vIDEwIE1CIGRlZmF1bHRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTGFyZ2U6IGxvZ0ZpbGVTaXplID4gbG9nRmlsZVNpemVMaW1pdCxcbiAgICAgICAgbG9nRmlsZVNpemUsXG4gICAgICAgIGxvZ0ZpbGVTaXplTGltaXRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgaXNMYXJnZTogZmFsc2UgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWNyZWF0ZUxvZ0ZpbGUobG9nUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcbiAgICAgIGZzLnVubGlua1N5bmMobG9nUGF0aClcbiAgICAgIGNyZWF0ZUZpbGVTeW5jKGxvZ1BhdGgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVXcml0ZUxvZyhsb2dQYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgbG9nID0gYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKX0gW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XSBgXG4gICAgICBtc2cuZm9yRWFjaCgoaXRlbTogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGxvZyArPSBgXFxuLS0tLS0tRXJyb3IgU3RhY2sgQmVnaW4tLS0tLS1cXG4ke3V0aWwuZm9ybWF0KGl0ZW0/LnN0YWNrKX1cXG4tLS0tLS0tRXJyb3IgU3RhY2sgRW5kLS0tLS0tLSBgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0sIG51bGwsIDIpXG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZyArPSBgJHtpdGVtIGFzIHN0cmluZ30gYFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbG9nICs9ICdcXG4nXG4gICAgICBmcy5hcHBlbmRGaWxlU3luYyhsb2dQYXRoLCBsb2cpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIHdyaXRpbmcgbG9nIGZpbGUnLCBlKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMb2dMZXZlbCh0eXBlOiBzdHJpbmcsIGxldmVsOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkIHx8IGxldmVsID09PSAnYWxsJykgcmV0dXJuIHRydWVcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcbiAgICAgIHJldHVybiBsZXZlbC5zb21lKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpXG4gICAgfVxuICAgIHJldHVybiB0eXBlID09PSBsZXZlbFxuICB9XG5cbiAgc3VjY2VzcyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuc3VjY2VzcywgLi4ubXNnKVxuICB9XG5cbiAgaW5mbyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuaW5mbywgLi4ubXNnKVxuICB9XG5cbiAgZXJyb3IoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmVycm9yLCAuLi5tc2cpXG4gIH1cblxuICB3YXJuKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS53YXJuLCAuLi5tc2cpXG4gIH1cblxuICBkZWJ1ZyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgaWYgKGlzRGV2KCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2VyXG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2Nyb3NzLXNwYXduJ1xuaW1wb3J0IHtcbiAgSVJlc3VsdCxcbiAgSVByb2Nlc3NFbnYsXG4gIElQbHVnaW5Qcm9jZXNzUmVzdWx0LFxuICBJUGx1Z2luSGFuZGxlcixcbiAgSVBsdWdpbkhhbmRsZXJPcHRpb25zLFxuICBVbmRlZmluYWJsZSxcbiAgSVBpY0dvLFxuICBJUGx1Z2luSGFuZGxlclJlc3VsdFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUsIGdldE5vcm1hbFBsdWdpbk5hbWUgfSBmcm9tICcuLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uL2kxOG4vemgtQ04nXG5cbmV4cG9ydCBjbGFzcyBQbHVnaW5IYW5kbGVyIGltcGxlbWVudHMgSVBsdWdpbkhhbmRsZXIge1xuICAvLyBUaGFua3MgdG8gZmVmbG93IC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9mZWZsb3cvZmVmbG93L2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9pbnN0YWxsL3BsdWdpbi5qc1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGwoXG4gICAgcGx1Z2luczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sXG4gICAgZW52PzogSVByb2Nlc3NFbnZcbiAgKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcbiAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKVxuICAgICAgLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgLy8gZGV0ZWN0IGlmIGhhcyBhbHJlYWR5IGluc3RhbGxlZFxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXG4gICAgICAgIGlmICh0aGlzLmN0eC5wbHVnaW5Mb2FkZXIuaGFzUGx1Z2luKGl0ZW0ucGtnTmFtZSkpIHtcbiAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2goaXRlbS5wa2dOYW1lKVxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNMaXN0IGhhcyBhbHJlYWR5IGluc3RhbGxlZCAke2l0ZW0ucGtnTmFtZX1gKVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHNvbWV0aGluZyB3cm9uZywgZmlsdGVyIGl0IG91dFxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIGNvbnN0IGZ1bGxOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0uZnVsbE5hbWUpXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXG4gICAgaWYgKGZ1bGxOYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBpbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgZnVsbE5hbWVMaXN0OlxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXG4gICAgICAvLyAyLiBpbnN0YWxsIGxvY2FsIHBhY2FnZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgnaW5zdGFsbCcsIGZ1bGxOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpciwgb3B0aW9ucywgZW52KVxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbEZhaWxlZCcsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXG4gICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsKHBsdWdpbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcbiAgICAgIC8vIG5wbSB1bmluc3RhbGwgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VuaW5zdGFsbCcsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyKVxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIudW5yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxTdWNjZXNzJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBwbHVnaW5zOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSxcbiAgICBlbnY/OiBJUHJvY2Vzc0VudlxuICApOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXG4gICAgaWYgKHBrZ05hbWVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxuICAgICAgLy8gbnBtIHVwZGF0ZSB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgndXBkYXRlJywgcGtnTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSlcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlU3VjY2VzcycsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQnKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kKFxuICAgIGNtZDogc3RyaW5nLFxuICAgIG1vZHVsZXM6IHN0cmluZ1tdLFxuICAgIHdoZXJlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sXG4gICAgZW52OiBJUHJvY2Vzc0VudiA9IHt9XG4gICk6IFByb21pc2U8SVJlc3VsdD4ge1xuICAgIC8vIG9wdGlvbnMgZmlyc3RcbiAgICBjb25zdCByZWdpc3RyeSA9IG9wdGlvbnMucmVnaXN0cnkgfHwgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5yZWdpc3RyeScpXG4gICAgY29uc3QgcHJveHkgPSBvcHRpb25zLnByb3h5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucHJveHknKVxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XG4gICAgICBsZXQgYXJncyA9IFtjbWRdLmNvbmNhdChtb2R1bGVzKS5jb25jYXQoJy0tY29sb3I9YWx3YXlzJykuY29uY2F0KCctLXNhdmUnKVxuICAgICAgaWYgKHJlZ2lzdHJ5KSB7XG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXG4gICAgICB9XG4gICAgICBpZiAocHJveHkpIHtcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7XG4gICAgICAgICAgY3dkOiB3aGVyZSxcbiAgICAgICAgICBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCBlbnYpXG4gICAgICAgIH0pXG5cbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXG4gICAgICAgIG5wbS5zdGRvdXRcbiAgICAgICAgICA/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGFcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKHByb2Nlc3Muc3Rkb3V0KVxuXG4gICAgICAgIG5wbS5zdGRlcnJcbiAgICAgICAgICA/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGFcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKHByb2Nlc3Muc3RkZXJyKVxuXG4gICAgICAgIG5wbS5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZTogMCwgZGF0YTogb3V0cHV0IH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xuICAgICAgICBucG0ub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxuICAgICAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsICdOUE0gaXMgbm90IGluc3RhbGxlZCcpXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxuICogQHBhcmFtIGN0eFxuICogQHBhcmFtIG5hbWVPclBhdGhcbiAqL1xuY29uc3QgaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MgPSAoY3R4OiBJUGljR28sIG5hbWVPclBhdGg6IHN0cmluZyk6IElQbHVnaW5Qcm9jZXNzUmVzdWx0ID0+IHtcbiAgY29uc3QgcmVzID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGZ1bGxOYW1lOiAnJyxcbiAgICBwa2dOYW1lOiAnJ1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGdldFByb2Nlc3NQbHVnaW5OYW1lKG5hbWVPclBhdGgsIGN0eC5sb2cpXG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIC8vIGZpcnN0IGdldCByZXN1bHQgdGhlbiBkbyB0aGlzIHByb2Nlc3NcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxuICBjb25zdCBwa2dOYW1lID0gZ2V0Tm9ybWFsUGx1Z2luTmFtZShyZXN1bHQsIGN0eC5sb2cpXG4gIGlmICghcGtnTmFtZSkge1xuICAgIHJldHVybiByZXNcbiAgfVxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgZnVsbE5hbWU6IHJlc3VsdCxcbiAgICBwa2dOYW1lXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxuIiwiaW1wb3J0IGZzLCB7IHJlYWRKU09OU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IHN5bmMgfSBmcm9tICdyZXNvbHZlJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJUGljR28sIElQaWNHb1BsdWdpbiwgSVBsdWdpbkxvYWRlciwgSVBpY0dvUGx1Z2luSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXgnXG5pbXBvcnQgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcblxuLyoqXG4gKiBMb2NhbCBwbHVnaW4gbG9hZGVyLCBmaWxlIHN5c3RlbSBpcyByZXF1aXJlZFxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9hZGVyIGltcGxlbWVudHMgSVBsdWdpbkxvYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXG4gIHByaXZhdGUgcmVhZG9ubHkgZnVsbExpc3QgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJUGljR29QbHVnaW5JbnRlcmZhY2U+KClcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMuaW5pdCgpXG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VQYXRoKSkge1xuICAgICAgY29uc3QgcGtnID0ge1xuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAncGljZ28tcGx1Z2lucycsXG4gICAgICAgIHJlcG9zaXRvcnk6ICdodHRwczovL2dpdGh1Yi5jb20vS3VpbmdzbWlsZS9QaWNMaXN0LUNvcmUnLFxuICAgICAgICBsaWNlbnNlOiAnTUlUJ1xuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxuICAgIH1cbiAgfVxuXG4gIC8vIGdldCBwbHVnaW4gZW50cnlcbiAgcHJpdmF0ZSByZXNvbHZlUGx1Z2luKGN0eDogSVBpY0dvLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc3luYyhuYW1lLCB7IGJhc2VkaXI6IGN0eC5iYXNlRGlyIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcbiAgICB9XG4gIH1cblxuICAvLyBsb2FkIGFsbCB0aGlyZCBwYXJ0eSBwbHVnaW5cbiAgbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxuICAgIC8vIFRoYW5rcyB0byBoZXhvIC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9oZXhvanMvaGV4by9ibG9iL21hc3Rlci9saWIvaGV4by9sb2FkX3BsdWdpbnMuanNcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGx1Z2luRGlyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxuICAgIGNvbnN0IGpzb24gPSByZWFkSlNPTlN5bmMocGFja2FnZVBhdGgpXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxuICAgIGNvbnN0IGRldkRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSlcbiAgICBjb25zdCBtb2R1bGVzID0gZGVwcy5jb25jYXQoZGV2RGVwcykuZmlsdGVyKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJlc29sdmVQbHVnaW4odGhpcy5jdHgsIG5hbWUpXG4gICAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbihtb2R1bGUpXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZWdpc3RlclBsdWdpbihuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdQbGVhc2UgcHJvdmlkZSB2YWxpZCBwbHVnaW4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZnVsbExpc3QuYWRkKG5hbWUpXG4gICAgdHJ5IHtcbiAgICAgIC8vIHJlZ2lzdGVyIGxvY2FsIHBsdWdpblxuICAgICAgaWYgKCFwbHVnaW4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgIHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIHRoaXMuZ2V0UGx1Z2luKG5hbWUpIS5yZWdpc3Rlcih0aGlzLmN0eClcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxuICAgICAgICAgIHRoaXMuY3R4LnNhdmVDb25maWcoe1xuICAgICAgICAgICAgW3BsdWdpbl06IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZWdpc3RlciBwcm92aWRlZCBwbHVnaW5cbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXG4gICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXG4gICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcbiAgICAgICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbkludGVyZmFjZSlcbiAgICAgICAgcGx1Z2luSW50ZXJmYWNlLnJlZ2lzdGVyKHRoaXMuY3R4KVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxuICAgICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICB0aXRsZTogYFBsdWdpbiAke25hbWV9IExvYWQgRXJyb3JgLFxuICAgICAgICBib2R5OiBlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXJQbHVnaW4obmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxuICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXG4gICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIudXBsb2FkZXIudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5jbWQudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LnJlbW92ZUNvbmZpZygncGljZ29QbHVnaW5zJywgbmFtZSlcbiAgfVxuXG4gIC8vIGdldCBwbHVnaW4gYnkgbmFtZVxuICBnZXRQbHVnaW4obmFtZTogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5NYXAuZ2V0KG5hbWUpXG4gICAgfVxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCBwbHVnaW4gPSByZXF1aXJlKHBsdWdpbkRpciArIG5hbWUpKHRoaXMuY3R4KVxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXG4gICAgcmV0dXJuIHBsdWdpblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBlbmFibGVkIHBsdWdpbnNcbiAgICovXG4gIGdldExpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmxpc3RcbiAgfVxuXG4gIGhhc1BsdWdpbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mdWxsTGlzdC5oYXMobmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgbGlzdCBvZiBwbHVnaW5zLCB3aGV0aGVyIGl0IGlzIGVuYWJsZWQgb3Igbm90XG4gICAqL1xuICBnZXRGdWxsTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmZ1bGxMaXN0XVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBQbHVnaW5Mb2FkZXJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcblxuY29uc3QgZXZlbnRCdXMgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuZXhwb3J0IHsgZXZlbnRCdXMgfVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHR5cGUgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXG5pbXBvcnQgeyBodHRwc092ZXJIdHRwIH0gZnJvbSAndHVubmVsJ1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIElQaWNHbyxcbiAgVW5kZWZpbmFibGUsXG4gIElDb25maWdDaGFuZ2VQYXlsb2FkLFxuICBJQ29uZmlnLFxuICBJUmVxdWVzdENvbmZpZyxcbiAgSU9sZFJlcU9wdGlvbnMsXG4gIElSZXNwb25zZSxcbiAgSUZ1bGxSZXNwb25zZSxcbiAgSVJlcXVlc3Rcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcblxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XG4gIG1heFZlcnNpb246ICdUTFN2MS4yJyxcbiAgbWluVmVyc2lvbjogJ1RMU3YxLjInLFxuICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG59KVxuXG4vLyB0aGFua3MgZm9yIGh0dHBzOi8vZ2l0aHViLmRldi9yZXF1ZXN0L3JlcXVlc3QvYmxvYi9tYXN0ZXIvaW5kZXguanNcbmZ1bmN0aW9uIGFwcGVuZEZvcm1EYXRhKGZvcm06IEZvcm1EYXRhLCBrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBkYXRhICYmICdvcHRpb25zJyBpbiBkYXRhKSB7XG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhLnZhbHVlLCBkYXRhLm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zOiBJT2xkUmVxT3B0aW9ucyB8IEF4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUmVxdWVzdENvbmZpZyAmIHtcbiAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXG59IHtcbiAgbGV0IF9faXNPbGRPcHRpb25zID0gZmFsc2VcbiAgY29uc3Qgb3B0OiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiAmIHtcbiAgICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cbiAgfSA9IHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHVybDogKG9wdGlvbnMudXJsIGFzIHN0cmluZykgfHwgJycsXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gIH1cbiAgLy8gdXNlciByZXF1ZXN0IGNvbmZpZyBwcm94eVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIGxldCBwcm94eU9wdGlvbnMgPSBvcHRpb25zLnByb3h5XG4gICAgaWYgKHR5cGVvZiBwcm94eU9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKG9wdGlvbnMucHJveHkpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHByb3h5T3B0aW9ucyA9IGZhbHNlXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgIH1cbiAgICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAocHJveHlPcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcbiAgICAgICAgb3B0Lmh0dHBzQWdlbnQgPSBodHRwc092ZXJIdHRwKHtcbiAgICAgICAgICBwcm94eToge1xuICAgICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zPy5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucz8ucG9ydCwgMTApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0LnByb3h5ID0ge1xuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCwgMTApLFxuICAgICAgICAgIHByb3RvY29sOiAnaHR0cCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJ2Zvcm1EYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5mb3JtRGF0YSkge1xuICAgICAgY29uc3QgZGF0YSA9IG9wdGlvbnMuZm9ybURhdGFba2V5XVxuICAgICAgYXBwZW5kRm9ybURhdGEoZm9ybSwga2V5LCBkYXRhKVxuICAgIH1cbiAgICBvcHQuZGF0YSA9IGZvcm1cbiAgICBvcHQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0LmhlYWRlcnMgfHwge30sIGZvcm0uZ2V0SGVhZGVycygpKVxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBvbGQgb3B0aW9uXG4gICAgZGVsZXRlIG9wdC5mb3JtRGF0YVxuICB9XG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xuICAgIG9wdC5kYXRhID0gb3B0aW9ucy5ib2R5XG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25zXG4gICAgZGVsZXRlIG9wdC5ib2R5XG4gIH1cbiAgaWYgKCdxcycgaW4gb3B0aW9ucykge1xuICAgIG9wdC5wYXJhbXMgPSBvcHRpb25zLnFzXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXG4gIH1cbiAgb3B0Ll9faXNPbGRPcHRpb25zID0gX19pc09sZE9wdGlvbnNcbiAgcmV0dXJuIG9wdFxufVxuXG5mdW5jdGlvbiByZXNwb25zZUludGVyY2VwdG9yKHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlKTogSUZ1bGxSZXNwb25zZSB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVzcG9uc2UsXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIGJvZHk6IHJlc3BvbnNlLmRhdGFcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNwb25zZUVycm9ySGFuZGxlcihlcnJvcjogYW55KSB7XG4gIGNvbnN0IGVycm9yT2JqID0ge1xuICAgIG1ldGhvZDogZXJyb3I/LmNvbmZpZz8ubWV0aG9kPy50b1VwcGVyQ2FzZSgpIHx8ICcnLFxuICAgIHVybDogZXJyb3I/LmNvbmZpZz8udXJsIHx8ICcnLFxuICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXG4gICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgfHwgJycsXG4gICAgc3RhY2s6IGVycm9yPy5zdGFjayB8fCB7fSxcbiAgICByZXNwb25zZToge1xuICAgICAgc3RhdHVzOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxuICAgICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcbiAgICAgIGJvZHk6IGVycm9yPy5yZXNwb25zZT8uZGF0YSB8fCAnJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3JPYmopXG59XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgSVJlcXVlc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHByaXZhdGUgcHJveHk6IFVuZGVmaW5hYmxlPHN0cmluZz4gPSAnJ1xuICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiA9IHt9XG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICB0aGlzLmluaXQoKVxuICAgIGV2ZW50QnVzLm9uKElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCAoZGF0YTogSUNvbmZpZ0NoYW5nZVBheWxvYWQ8c3RyaW5nIHwgSUNvbmZpZ1sncGljQmVkJ10+KSA9PiB7XG4gICAgICBzd2l0Y2ggKGRhdGEuY29uZmlnTmFtZSkge1xuICAgICAgICBjYXNlICdwaWNCZWQnOlxuICAgICAgICAgIGlmICgoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSk/LnByb3h5KSB7XG4gICAgICAgICAgICB0aGlzLnByb3h5ID0gKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pLnByb3h5XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3BpY0JlZC5wcm94eSc6XG4gICAgICAgICAgdGhpcy5wcm94eSA9IGRhdGEudmFsdWUgYXMgc3RyaW5nXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQucHJveHknKVxuICAgIGlmIChwcm94eSkge1xuICAgICAgdGhpcy5wcm94eSA9IHByb3h5XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcm94eSgpOiBBeGlvc1JlcXVlc3RDb25maWdbJ3Byb3h5J10gfCBmYWxzZSB7XG4gICAgaWYgKHRoaXMucHJveHkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3h5T3B0aW9ucyA9IG5ldyBVUkwodGhpcy5wcm94eSlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQgfHwgJzAnLCAxMCksXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3h5T3B0aW9ucy5wcm90b2NvbFxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGVtcHR5ICovXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gIzY0IGR5bmFtaWMgZ2V0IHByb3h5IHZhbHVlXG4gIHJlcXVlc3Q8XG4gICAgVCxcbiAgICBVIGV4dGVuZHMgSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBJT2xkUmVxT3B0aW9uc1xuICAgICAgPyBJT2xkUmVxT3B0aW9uc1xuICAgICAgOiBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIEF4aW9zUmVxdWVzdENvbmZpZ1xuICAgICAgICA/IEF4aW9zUmVxdWVzdENvbmZpZ1xuICAgICAgICA6IG5ldmVyXG4gID4ob3B0aW9uczogVSk6IFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PiB7XG4gICAgdGhpcy5vcHRpb25zLnByb3h5ID0gdGhpcy5oYW5kbGVQcm94eSgpXG4gICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICB0aGlzLm9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IEluZmluaXR5XG4gICAgdGhpcy5vcHRpb25zLm1heENvbnRlbnRMZW5ndGggPSBJbmZpbml0eVxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJveHkgJiYgb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNPdmVySHR0cCh7XG4gICAgICAgIHByb3h5OiB7XG4gICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLnByb3h5Lmhvc3QsXG4gICAgICAgICAgcG9ydDogdGhpcy5vcHRpb25zLnByb3h5LnBvcnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNBZ2VudFxuICAgIH1cbiAgICAvLyAhTk9USUNFIHRoaXMub3B0aW9ucyAhPT0gb3B0aW9uc1xuICAgIC8vIHRoaXMub3B0aW9ucyBpcyB0aGUgZGVmYXVsdCBvcHRpb25zXG4gICAgY29uc3QgaW5zdGFuY2UgPSBheGlvcy5jcmVhdGUodGhpcy5vcHRpb25zKVxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UocmVzcG9uc2VJbnRlcmNlcHRvciwgcmVzcG9uc2VFcnJvckhhbmRsZXIpXG5cbiAgICAvLyBjb21wYXRpYmxlIHdpdGggb2xkIHJlcXVlc3Qgb3B0aW9ucyB0byBuZXcgb3B0aW9uc1xuICAgIGNvbnN0IG9wdCA9IHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zKVxuXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIC8vIGhhbmRsZSBDb250ZW50LVR5cGVcbiAgICAgIGxldCBjb250ZW50VHlwZSA9ICcnXG4gICAgICBpZiAob2JqPy5oZWFkZXJzPy5jb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuY29udGVudFR5cGVcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5Db250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuQ29udGVudFR5cGVcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5bJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgICB9XG4gICAgICBpZiAoY29udGVudFR5cGUgIT09ICcnICYmIG9iai5oZWFkZXJzKSB7XG4gICAgICAgIG9iai5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGNvbnRlbnRUeXBlXG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqXG4gICAgfSlcbiAgICBpZiAoJ3Jlc29sdmVXaXRoRnVsbFJlc3BvbnNlJyBpbiBvcHRpb25zICYmIG9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KS50aGVuKHJlcyA9PiB7XG4gICAgICAgIC8vIHVzZSBvbGQgcmVxdWVzdCBvcHRpb24gZm9ybWF0XG4gICAgICAgIGlmIChvcHQuX19pc09sZE9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoJ2pzb24nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXG4gICAgICAgIH1cbiAgICAgIH0pIGFzIFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PlxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5pbXBvcnQgZnMsIHsgZW1wdHlEaXJTeW5jLCBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHtcbiAgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLFxuICBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcbiAgSUxpZmVjeWNsZVBsdWdpbnMsXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxuICBJUGljR28sXG4gIElQbHVnaW4sXG4gIFVuZGVmaW5hYmxlLFxuICBJSW1nSW5mb1xufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7XG4gIGdldFVSTEZpbGUsXG4gIGhhbmRsZVVybEVuY29kZSxcbiAgaW1hZ2VDb21wcmVzcyxcbiAgaXNVcmwsXG4gIGlzTmVlZENvbXByZXNzLFxuICBpc05lZWRBZGRXYXRlcm1hcmssXG4gIGltYWdlQWRkV2F0ZXJNYXJrLFxuICByZW1vdmVFeGlmLFxuICByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcsXG4gIGdldENvbnZlcnRlZEZvcm1hdFxufSBmcm9tICcuLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xuXG5jb25zdCB3YXRlcm1hcmtNc2cgPSAnQWRkIHdhdGVybWFyayB0byBpbWFnZSdcbmNvbnN0IGNvbXByZXNzTXNnID0gJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnXG5cbmNvbnN0IHR0ZkZpbGVMaW5rID0gJ2h0dHBzOi8vcmVsZWFzZS5waWNsaXN0LmNuL3NpbWhlaS50dGYnXG5cbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHR0ZlBhdGg6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy50dGZQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnYXNzZXRzJywgJ3NpbWhlaS50dGYnKVxuICAgIGVuc3VyZURpclN5bmMocGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcpKVxuICAgIGNvbnN0IGVuYWJsZVNlY29uZFVwbG9hZGVyID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuYWJsZVNlY29uZFVwbG9hZGVyJykgfHwgZmFsc2VcbiAgICBpZiAoIWVuYWJsZVNlY29uZFVwbG9hZGVyKSB7XG4gICAgICBlbXB0eURpclN5bmMocGF0aC5qb2luKGN0eC5iYXNlRGlyLCAncGljbGlzdFRlbXAnKSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRvd25sb2FkVFRGKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZSh0aGlzLnR0ZlBhdGgpKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmModGhpcy50dGZQYXRoKSAmJiBmcy5zdGF0U3luYyh0aGlzLnR0ZlBhdGgpLnNpemUgPiAwKSByZXR1cm4gdHJ1ZVxuICAgICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlLicpXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodHRmRmlsZUxpbmssIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMudHRmUGF0aCwgcmVzLmRhdGEpXG4gICAgICB0aGlzLmN0eC5sb2cuaW5mbygnRG93bmxvYWQgdHRmIGZpbGUgc3VjY2Vzc2Z1bGx5LicpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGVscEdldE9wdGlvbihjdHg6IElQaWNHbyk6IHtcbiAgICBjb21wcmVzc09wdGlvbnM6IFVuZGVmaW5hYmxlPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPlxuICAgIHdhdGVybWFya09wdGlvbnM6IFVuZGVmaW5hYmxlPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz5cbiAgfSB7XG4gICAgY29uc3QgY29tcHJlc3NPcHRpb25zID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4+KCdidWlsZEluLmNvbXByZXNzJylcbiAgICBjb25zdCB3YXRlcm1hcmtPcHRpb25zID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+PignYnVpbGRJbi53YXRlcm1hcmsnKVxuICAgIGNvbnN0IHR5cGUgPVxuICAgICAgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHxcbiAgICAgIGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5jdXJyZW50JykgfHxcbiAgICAgICdzbW1zJ1xuICAgIGNvbnN0IHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQodHlwZSlcbiAgICBpZiAoIXVwbG9hZGVyICYmIGNvbXByZXNzT3B0aW9ucykge1xuICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9ICdzbW1zJ1xuICAgIH0gZWxzZSBpZiAoY29tcHJlc3NPcHRpb25zKSB7XG4gICAgICBjb21wcmVzc09wdGlvbnMucGljQmVkID0gdHlwZVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29tcHJlc3NPcHRpb25zLFxuICAgICAgd2F0ZXJtYXJrT3B0aW9uc1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KGlucHV0OiBhbnlbXSwgc2tpcFByb2Nlc3MgPSBmYWxzZSk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgLy8gZW5zdXJlIGV2ZXJ5IHVwbG9hZCBwcm9jZXNzIGhhcyBhbiB1bmlxdWUgY29udGV4dFxuICAgIGNvbnN0IGN0eCA9IGNyZWF0ZUNvbnRleHQodGhpcy5jdHgpXG4gICAgdHJ5IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHRocm93IG5ldyBFcnJvcignSW5wdXQgbXVzdCBiZSBhbiBhcnJheS4nKVxuICAgICAgY3R4LmlucHV0ID0gaW5wdXRcbiAgICAgIGN0eC5vdXRwdXQgPSBbXSBhcyBJSW1nSW5mb1tdXG4gICAgICBjdHgucmF3SW5wdXRQYXRoID0gW10gYXMgc3RyaW5nW11cbiAgICAgIGN0eC5yYXdJbnB1dCA9IGNsb25lRGVlcChpbnB1dClcbiAgICAgIGlmIChza2lwUHJvY2Vzcykge1xuICAgICAgICBjdHgubG9nLmluZm8oJ1NraXAgcHJvY2Vzcy4nKVxuICAgICAgICBjdHgub3V0cHV0ID0gaW5wdXRcbiAgICAgICAgYXdhaXQgdGhpcy5kb1VwbG9hZChjdHgpXG4gICAgICAgIGN0eC5pbnB1dCA9IGN0eC5yYXdJbnB1dFxuICAgICAgICBhd2FpdCB0aGlzLmFmdGVyVXBsb2FkKGN0eClcbiAgICAgICAgcmV0dXJuIGN0eFxuICAgICAgfVxuICAgICAgLy8gbGlmZWN5Y2xlIG1haW5cbiAgICAgIGF3YWl0IHRoaXMucHJlcHJvY2VzcyhjdHgpXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXG4gICAgICBhd2FpdCB0aGlzLmRvVHJhbnNmb3JtKGN0eClcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRJblJlbmFtZShjdHgpXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVVwbG9hZChjdHgpXG4gICAgICBjdHgucHJvY2Vzc2VkSW5wdXQgPSBjbG9uZURlZXAoY3R4Lm91dHB1dClcbiAgICAgIGF3YWl0IHRoaXMuZG9VcGxvYWQoY3R4KVxuICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XG4gICAgICBhd2FpdCB0aGlzLmFmdGVyVXBsb2FkKGN0eClcbiAgICAgIHJldHVybiBjdHhcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGN0eC5sb2cud2FybihJQnVpbGRJbkV2ZW50LkZBSUxFRClcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxuICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgaWYgKGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ2RlYnVnJykpIHtcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGN0eFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcHJvY2VzcyhjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY29uc3QgeyBjb21wcmVzc09wdGlvbnMsIHdhdGVybWFya09wdGlvbnMgfSA9IHRoaXMuaGVscEdldE9wdGlvbihjdHgpXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDApXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVFJBTlNGT1JNLCBjdHgpXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcbiAgICBpZiAoY29tcHJlc3NPcHRpb25zIHx8IHdhdGVybWFya09wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICBjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtSXNVcmwgPSBpc1VybChpdGVtKVxuICAgICAgICAgIGNvbnN0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvID0gaXRlbUlzVXJsID8gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpIDogeyBzdWNjZXNzOiBmYWxzZSB9XG4gICAgICAgICAgaWYgKGl0ZW1Jc1VybCAmJiAoIWluZm8uc3VjY2VzcyB8fCAhaW5mby5idWZmZXIpKSByZXR1cm5cblxuICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlcjogVW5kZWZpbmFibGU8QnVmZmVyPlxuICAgICAgICAgIGxldCBpc1NraXAgPSBmYWxzZVxuICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cbiAgICAgICAgICBjb25zdCBleHRlbnRpb24gPSBpdGVtSXNVcmwgPyBpbmZvLmV4dG5hbWUgfHwgJycgOiBwYXRoLmV4dG5hbWUoaXRlbSlcbiAgICAgICAgICBjb25zdCBmaWxlQnVmZmVyOiBCdWZmZXIgPSBpdGVtSXNVcmwgPyBpbmZvLmJ1ZmZlciEgOiBmcy5yZWFkRmlsZVN5bmMoaXRlbSlcbiAgICAgICAgICBpZiAoaXNOZWVkQWRkV2F0ZXJtYXJrKHdhdGVybWFya09wdGlvbnMsIGV4dGVudGlvbikpIHtcbiAgICAgICAgICAgIGlmICghKHdhdGVybWFya09wdGlvbnM/LndhdGVybWFya0ZvbnRQYXRoIHx8IHdhdGVybWFya09wdGlvbnM/LndhdGVybWFya1R5cGUgPT09ICdpbWFnZScpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXG4gICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5sb2cud2FybignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLCBza2lwIGFkZCB3YXRlcm1hcmsuJylcbiAgICAgICAgICAgICAgICBpc1NraXAgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNTa2lwKSB7XG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyh3YXRlcm1hcmtNc2cpXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VBZGRXYXRlck1hcmsoZmlsZUJ1ZmZlciwgd2F0ZXJtYXJrT3B0aW9ucyEsIHRoaXMudHRmUGF0aCwgY3R4LmxvZylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzTmVlZENvbXByZXNzKGNvbXByZXNzT3B0aW9ucywgZXh0ZW50aW9uKSkge1xuICAgICAgICAgICAgY3R4LmxvZy5pbmZvKGNvbXByZXNzTXNnKVxuICAgICAgICAgICAgaWYgKCFpdGVtSXNVcmwgJiYgKGV4dGVudGlvbiA9PT0gJy5oZWljJyB8fCBleHRlbnRpb24gPT09ICcuaGVpZicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGhlaWNSZXN1bHQgPSBhd2FpdCBoZWljQ29udmVydCh7XG4gICAgICAgICAgICAgICAgYnVmZmVyOiBmaWxlQnVmZmVyLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ0pQRUcnLFxuICAgICAgICAgICAgICAgIHF1YWxpdHk6IDFcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgY29uc3QgdGVtcEhlaWNDb252ZXJ0RmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0uanBnYClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlLCBCdWZmZXIuZnJvbShoZWljUmVzdWx0KSlcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUNvbXByZXNzKFxuICAgICAgICAgICAgICAgIGZzLnJlYWRGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlKSxcbiAgICAgICAgICAgICAgICBjb21wcmVzc09wdGlvbnMhLFxuICAgICAgICAgICAgICAgICcuanBnJyxcbiAgICAgICAgICAgICAgICBjdHgubG9nXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VDb21wcmVzcyhcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBmaWxlQnVmZmVyLFxuICAgICAgICAgICAgICAgIGNvbXByZXNzT3B0aW9ucyEsXG4gICAgICAgICAgICAgICAgZXh0ZW50aW9uLFxuICAgICAgICAgICAgICAgIGN0eC5sb2dcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRyYW5zZm9ybWVkQnVmZmVyICYmIGNvbXByZXNzT3B0aW9ucz8uaXNSZW1vdmVFeGlmKSB7XG4gICAgICAgICAgICBjdHgubG9nLmluZm8oJ1JlbW92ZSBleGlmIGluZm8uJylcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihmaWxlQnVmZmVyLCBleHRlbnRpb24pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xuICAgICAgICAgICAgbGV0IG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0ID8gZ2V0Q29udmVydGVkRm9ybWF0KGNvbXByZXNzT3B0aW9ucywgZXh0ZW50aW9uKSA6IGV4dGVudGlvblxuICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxuICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBpdGVtSXNVcmxcbiAgICAgICAgICAgICAgPyBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICB0ZW1wRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICBgJHtcbiAgICAgICAgICAgICAgICAgICAgaW5mby5maWxlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgID8gYCR7cGF0aC5iYXNlbmFtZShpbmZvLmZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoaW5mby5maWxlTmFtZSkpfWBcbiAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICB9JHtuZXdFeHR9YFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIGV4dGVudGlvbil9JHtuZXdFeHR9YClcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgcGF0aC5kaXJuYW1lKGl0ZW0pLFxuICAgICAgICAgICAgICBpdGVtSXNVcmwgPyBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKSA6IGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0ke25ld0V4dH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcbiAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGN0eC5pbnB1dCkge1xuICAgICAgICBjdHgucmF3SW5wdXRQYXRoIS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRJblJlbmFtZShjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY29uc3QgcmVuYW1lQ29uZmlnID0gY3R4LmdldENvbmZpZzxhbnk+KCdidWlsZEluLnJlbmFtZScpIHx8IHt9XG4gICAgaWYgKHJlbmFtZUNvbmZpZy5lbmFibGUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IHJlbmFtZUNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXG4gICAgICBjdHgub3V0cHV0ID0gY3R4Lm91dHB1dC5tYXAoKGl0ZW06IElJbWdJbmZvLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBmaWxlTmFtZSA9IGl0ZW0uZmlsZU5hbWVcbiAgICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICAgIGZpbGVOYW1lID0gcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nKFxuICAgICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdLFxuICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgaXRlbS5iYXNlNjRJbWFnZSA/IGl0ZW0uYmFzZTY0SW1hZ2UgOiBpdGVtLmJ1ZmZlclxuICAgICAgICAgIClcbiAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoL1xcLysvZywgJy8nKVxuICAgICAgICAgIGlmIChmaWxlTmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXG4gICAgICAgIHJldHVybiBpdGVtXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVRyYW5zZm9ybShjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucywgY3R4KVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0oY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcbiAgICBjb25zdCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnRyYW5zZm9ybWVyJykgfHwgJ3BhdGgnXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxuICAgIGlmICghdHJhbnNmb3JtZXIpIHtcbiAgICAgIHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQoJ3BhdGgnKVxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdHJhbnNmb3JtZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB0cmFuc2Zvcm1lciAtIHBhdGhgKVxuICAgIH1cbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcbiAgICBhd2FpdCB0cmFuc2Zvcm1lcj8uaGFuZGxlKGN0eClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJlZm9yZVVwbG9hZChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDYwKVxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVVBMT0FELCBjdHgpXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucywgY3R4KVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGxldCB0eXBlID1cbiAgICAgIGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8XG4gICAgICAnc21tcydcbiAgICBsZXQgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXG4gICAgaWYgKCF1cGxvYWRlcikge1xuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHVwbG9hZGVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdXBsb2FkZXIgLSBzbW1zYClcbiAgICAgIHR5cGUgPSAnc21tcydcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xuICAgICAgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCgnc21tcycpXG4gICAgfVxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxuICAgIGF3YWl0IHVwbG9hZGVyPy5oYW5kbGUoY3R4KVxuICAgIGZvciAoY29uc3Qgb3V0cHV0SW1nIG9mIGN0eC5vdXRwdXQpIHtcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFmdGVyVXBsb2FkKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkFGVEVSX1VQTE9BRCwgY3R4KVxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVQbHVnaW5zKGN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLCBjdHgpXG4gICAgbGV0IG1zZyA9ICcnXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcbiAgICBjb25zdCBpc0VuY29kZU91dHB1dFVSTCA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8Ym9vbGVhbj4+KCdzZXR0aW5ncy5lbmNvZGVPdXRwdXRVUkwnKSA9PT0gdHJ1ZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1zZyArPSBpc0VuY29kZU91dHB1dFVSTCA/IGhhbmRsZVVybEVuY29kZShjdHgub3V0cHV0W2ldLmltZ1VybCEpIDogY3R4Lm91dHB1dFtpXS5pbWdVcmwhXG4gICAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgbXNnICs9ICdcXG4nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXG4gICAgICBkZWxldGUgY3R4Lm91dHB1dFtpXS5idWZmZXJcbiAgICB9XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxuICAgIGN0eC5sb2cuc3VjY2VzcyhgXFxuJHttc2d9YClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVBsdWdpbnMobGlmZUN5Y2xlUGx1Z2luczogSUxpZmVjeWNsZVBsdWdpbnMsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjb25zdCBwbHVnaW5zID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRMaXN0KClcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcbiAgICBjb25zdCBsaWZlQ3ljbGVOYW1lID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXROYW1lKClcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHBsdWdpbnMubWFwKGFzeW5jIChwbHVnaW46IElQbHVnaW4sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjdHgubG9nLmluZm8oYCR7bGlmZUN5Y2xlTmFtZX06ICR7cGx1Z2luTmFtZXNbaW5kZXhdfSBydW5uaW5nYClcbiAgICAgICAgICBhd2FpdCBwbHVnaW4uaGFuZGxlKGN0eClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYCR7bGlmZUN5Y2xlTmFtZX06ICR7cGx1Z2luTmFtZXNbaW5kZXhdfSBlcnJvcmApXG4gICAgICAgICAgdGhyb3cgZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgICByZXR1cm4gY3R4XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi90eXBlcydcblxuLyoqXG4gKiBjcmVhdGUgYW4gdW5pcXVlIGNvbnRleHQgZm9yIGVhY2ggdXBsb2FkIHByb2Nlc3NcbiAqIEBwYXJhbSBjdHhcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRleHQgPSAoY3R4OiBJUGljR28pOiBJUGljR28gPT4ge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGg6IGN0eC5jb25maWdQYXRoLFxuICAgIGJhc2VEaXI6IGN0eC5iYXNlRGlyLFxuICAgIGxvZzogY3R4LmxvZyxcbiAgICBjbWQ6IGN0eC5jbWQsXG4gICAgb3V0cHV0OiBbXSxcbiAgICBpbnB1dDogW10sXG4gICAgcmF3SW5wdXQ6IFtdLFxuICAgIHByb2Nlc3NlZElucHV0OiBbXSxcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXG4gICAgcGx1Z2luSGFuZGxlcjogY3R4LnBsdWdpbkhhbmRsZXIsXG4gICAgUmVxdWVzdDogY3R4LlJlcXVlc3QsXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxuICAgIFZFUlNJT046IGN0eC5WRVJTSU9OLFxuICAgIEdVSV9WRVJTSU9OOiBjdHguR1VJX1ZFUlNJT04sXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXG4gICAgaTE4bjogY3R4LmkxOG4sXG4gICAgZ2V0Q29uZmlnOiBjdHguZ2V0Q29uZmlnLmJpbmQoY3R4KSxcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXG4gICAgcmVtb3ZlQ29uZmlnOiBjdHgucmVtb3ZlQ29uZmlnLmJpbmQoY3R4KSxcbiAgICBzZXRDb25maWc6IGN0eC5zZXRDb25maWcuYmluZChjdHgpLFxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxuICAgIHVwbG9hZDogY3R4LnVwbG9hZC5iaW5kKGN0eCksXG4gICAgdXBsb2FkUmV0dXJuQ3R4OiBjdHgudXBsb2FkUmV0dXJuQ3R4LmJpbmQoY3R4KSxcbiAgICBhZGRMaXN0ZW5lcjogY3R4LmFkZExpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBvbjogY3R4Lm9uLmJpbmQoY3R4KSxcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXG4gICAgcmVtb3ZlTGlzdGVuZXI6IGN0eC5yZW1vdmVMaXN0ZW5lci5iaW5kKGN0eCksXG4gICAgb2ZmOiBjdHgub2ZmLmJpbmQoY3R4KSxcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIHNldE1heExpc3RlbmVyczogY3R4LnNldE1heExpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgZ2V0TWF4TGlzdGVuZXJzOiBjdHguZ2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIHJhd0xpc3RlbmVyczogY3R4LnJhd0xpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgZW1pdDogY3R4LmVtaXQuYmluZChjdHgpLFxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcbiAgICBwcmVwZW5kTGlzdGVuZXI6IGN0eC5wcmVwZW5kTGlzdGVuZXIuYmluZChjdHgpLFxuICAgIHByZXBlbmRPbmNlTGlzdGVuZXI6IGN0eC5wcmVwZW5kT25jZUxpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGhIZWxwZXIoe1xuICBwYXRoLFxuICBzdGFydFNsYXNoID0gZmFsc2UsXG4gIGVuZFNsYXNoID0gdHJ1ZSxcbiAgcm9vdFRvRW1wdHkgPSB0cnVlXG59OiB7XG4gIHBhdGg/OiBzdHJpbmdcbiAgc3RhcnRTbGFzaD86IGJvb2xlYW5cbiAgZW5kU2xhc2g/OiBib29sZWFuXG4gIHJvb3RUb0VtcHR5PzogYm9vbGVhblxufSk6IHN0cmluZyB7XG4gIGNvbnN0IGNsZWFuUGF0aCA9IHBhdGg/LnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKS5yZXBsYWNlKC9cXC97Mix9L2csICcvJylcbiAgaWYgKCFjbGVhblBhdGgpIHtcbiAgICByZXR1cm4gcm9vdFRvRW1wdHkgPyAnJyA6ICcvJ1xuICB9XG4gIHJldHVybiBgJHtzdGFydFNsYXNoID8gJy8nIDogJyd9JHtjbGVhblBhdGh9JHtlbmRTbGFzaCA/ICcvJyA6ICcnfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhcbiAgICAucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpXG4gICAgLnNwbGl0KCcvJylcbiAgICAubWFwKHAgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHApKVxuICAgIC5qb2luKCcvJylcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkSW5VcGxvYWRlck5hbWVzID0ge1xuICBhZHZhbmNlZHBsaXN0OiAnYWR2YW5jZWRwbGlzdCcsXG4gIGFsaXN0cGxpc3Q6ICdhbGlzdHBsaXN0JyxcbiAgYWxpeXVuOiAnYWxpeXVuJyxcbiAgJ2F3cy1zMy1wbGlzdCc6ICdhd3MtczMtcGxpc3QnLFxuICBnaXRodWI6ICdnaXRodWInLFxuICBpbWd1cjogJ2ltZ3VyJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIGxza3lwbGlzdDogJ2xza3lwbGlzdCcsXG4gIHBpY2xpc3Q6ICdwaWNsaXN0JyxcbiAgcWluaXU6ICdxaW5pdScsXG4gIHNmdHBwbGlzdDogJ3NmdHBwbGlzdCcsXG4gIHNtbXM6ICdzbW1zJyxcbiAgdGN5dW46ICd0Y3l1bicsXG4gIHRlbGVncmFwaHBsaXN0OiAndGVsZWdyYXBocGxpc3QnLFxuICB1cHl1bjogJ3VweXVuJyxcbiAgd2ViZGF2cGxpc3Q6ICd3ZWJkYXZwbGlzdCdcbn1cbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElBZHZhbmNlZFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIGltYWdlOiBCdWZmZXIsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIGVuZHBvaW50OiBzdHJpbmcsXG4gIG1ldGhvZDogYW55LFxuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBib2R5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBmb3JtRGF0YUtleTogc3RyaW5nXG4pOiBJT2xkUmVxT3B0aW9ucyA9PiB7XG4gIGNvbnN0IGRlZmF1bHRIZWFkZXJzID0ge1xuICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCdcbiAgfVxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgdXJsOiBlbmRwb2ludCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5kZWZhdWx0SGVhZGVycyxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBbZm9ybURhdGFLZXldOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLi4uYm9keVxuICAgIH0sXG4gICAganNvbjogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGFkdmFuY2VkcGxpc3RDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBZHZhbmNlZFBsaXN0Q29uZmlnPigncGljQmVkLmFkdmFuY2VkcGxpc3QnKVxuICBpZiAoIWFkdmFuY2VkcGxpc3RDb25maWcpIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIGFkdmFuY2VkcGxpc3QgY29uZmlnJylcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICB9XG4gICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoXG4gICAgICAgIGltYWdlLFxuICAgICAgICBpbWcuZmlsZU5hbWUsXG4gICAgICAgIGFkdmFuY2VkcGxpc3RDb25maWcuZW5kcG9pbnQsXG4gICAgICAgIGFkdmFuY2VkcGxpc3RDb25maWcubWV0aG9kLFxuICAgICAgICBKU09OLnBhcnNlKGFkdmFuY2VkcGxpc3RDb25maWcuaGVhZGVycyB8fCAne30nKSxcbiAgICAgICAgSlNPTi5wYXJzZShhZHZhbmNlZHBsaXN0Q29uZmlnLmJvZHkgfHwgJ3t9JyksXG4gICAgICAgIGFkdmFuY2VkcGxpc3RDb25maWcuZm9ybURhdGFLZXkgfHwgJ2ZpbGUnXG4gICAgICApXG5cbiAgICAgIGxldCBib2R5ID0gKGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpKSBhcyBhbnlcbiAgICAgIGJvZHkgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keVxuICAgICAgbGV0IGltYWdlVXJsID0gYm9keVxuICAgICAgY29uc3QgcmVzRGF0YVBhdGggPSBhZHZhbmNlZHBsaXN0Q29uZmlnLnJlc0RhdGFQYXRoIHx8ICdkYXRhLnVybCdcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc0RhdGFQYXRoLnNwbGl0KCcuJykpIHtcbiAgICAgICAgaWYgKGltYWdlVXJsICYmIHR5cGVvZiBpbWFnZVVybCA9PT0gJ29iamVjdCcgJiYga2V5IGluIGltYWdlVXJsKSB7XG4gICAgICAgICAgaW1hZ2VVcmwgPSBpbWFnZVVybFtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1hZ2VVcmwgPSB1bmRlZmluZWRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW1hZ2VVcmwgJiYgdHlwZW9mIGltYWdlVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGlmIChhZHZhbmNlZHBsaXN0Q29uZmlnLmN1c3RvbVByZWZpeCkge1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBhZHZhbmNlZHBsaXN0Q29uZmlnLmN1c3RvbVByZWZpeCArIGltYWdlVXJsXG4gICAgICAgIH1cbiAgICAgICAgaW1nLmltZ1VybCA9IGltYWdlVXJsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFkdmFuY2VkUGxpc3RDb25maWc+KCdwaWNCZWQuYWR2YW5jZWRwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdlbmRwb2ludCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdtZXRob2QnLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgY2hvaWNlczogWydQT1NUJywgJ1BVVCcsICdHRVQnXSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVRIT0QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX01FVEhPRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX01FVEhPRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5tZXRob2QgfHwgJ1BPU1QnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZm9ybURhdGFLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9GT1JNX0RBVEFfS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9GT1JNX0RBVEFfS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRk9STV9EQVRBX0tFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtRGF0YUtleSB8fCAnZmlsZScsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdoZWFkZXJzJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfSEVBREVSUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfSEVBREVSUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaGVhZGVycyB8fCAne30nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYm9keScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0JPRFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0JPRFknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9CT0RZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJvZHkgfHwgJ3t9JyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVByZWZpeCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0NVU1RPTV9QUkVGSVgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0NVU1RPTV9QUkVGSVgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9DVVNUT01fUFJFRklYJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVByZWZpeCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Jlc0RhdGFQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU19EQVRBX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVzRGF0YVBhdGggfHwgJ2RhdGEudXJsJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuYWR2YW5jZWRwbGlzdCwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUFsaXN0Q29uZmlnLCBJT2xkUmVxT3B0aW9ucywgSUZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbnRlcmZhY2UgSUFsaXN0VG9rZW5TdG9yZSB7XG4gIHRva2VuOiBzdHJpbmdcbiAgcmVmcmVzaGVkQXQ6IG51bWJlclxufVxuXG5jb25zdCBnZXRBbGlzdFRva2VuID0gYXN5bmMgKGN0eDogSVBpY0dvLCB1cmw6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRva2VuU3RvcmUgPSBjdHguZ2V0Q29uZmlnPElBbGlzdFRva2VuU3RvcmU+KCdwaWNnby1wbHVnaW4tYnVpbGRpbi1hbGlzdHBsaXN0JylcbiAgaWYgKHRva2VuU3RvcmUgJiYgdG9rZW5TdG9yZS5yZWZyZXNoZWRBdCAmJiBEYXRlLm5vdygpIC0gdG9rZW5TdG9yZS5yZWZyZXNoZWRBdCA8IDM2MDAwMDAgJiYgdG9rZW5TdG9yZS50b2tlbikge1xuICAgIHJldHVybiB0b2tlblN0b3JlLnRva2VuXG4gIH1cbiAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MucG9zdChgJHt1cmx9L2FwaS9hdXRoL2xvZ2luYCwge1xuICAgIHVzZXJuYW1lLFxuICAgIHBhc3N3b3JkXG4gIH0pXG4gIGlmIChyZXMuZGF0YS5jb2RlID09PSAyMDAgJiYgcmVzLmRhdGEubWVzc2FnZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgY29uc3QgdG9rZW4gPSByZXMuZGF0YS5kYXRhLnRva2VuXG4gICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3BpY2dvLXBsdWdpbi1idWlsZGluLWFsaXN0cGxpc3QnOiB7XG4gICAgICAgIHRva2VuLFxuICAgICAgICByZWZyZXNoZWRBdDogRGF0ZS5ub3coKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHRva2VuXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdHZXQgdG9rZW4gZmFpbGVkJylcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAodXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9ucyA9PiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGAke3VybH0vYXBpL2ZzL2Zvcm1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICAgIEF1dGhvcml6YXRpb246IHRva2VuLFxuICAgICAgJ0ZpbGUtUGF0aCc6IGVuY29kZVVSSUNvbXBvbmVudChmaWxlUGF0aClcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBmaWxlOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZVJlc0Vycm9yID0gKGN0eDogSVBpY0dvLCByZXM6IElGdWxsUmVzcG9uc2UpOiB2b2lkID0+IHtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDAgfHwgcmVzLmJvZHkuY29kZSAhPT0gMjAwIHx8IHJlcy5ib2R5Lm1lc3NhZ2UgIT09ICdzdWNjZXNzJykge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcbiAgICAgIHRleHQ6IHJlcy5ib2R5Lm1lc3NhZ2VcbiAgICB9KVxuICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxuICB9XG59XG5cbmNvbnN0IGV4dHJhY3RDb25maWcgPSAoY29uZmlnOiBJQWxpc3RDb25maWcpID0+IHtcbiAgY29uc3QgeyB1cmwsIHRva2VuLCB1c2VybmFtZSwgcGFzc3dvcmQsIHVwbG9hZFBhdGgsIHdlYlBhdGgsIGN1c3RvbVVybCB9ID0gY29uZmlnXG4gIHJldHVybiB7XG4gICAgdXJsOiAodXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpLFxuICAgIHRva2VuOiB0b2tlbiB8fCAnJyxcbiAgICB1c2VybmFtZTogdXNlcm5hbWUgfHwgJycsXG4gICAgcGFzc3dvcmQ6IHBhc3N3b3JkIHx8ICcnLFxuICAgIHVwbG9hZFBhdGg6IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgICAgcGF0aDogdXBsb2FkUGF0aCB8fCAnJyxcbiAgICAgIHN0YXJ0U2xhc2g6IHRydWUsXG4gICAgICBlbmRTbGFzaDogdHJ1ZSxcbiAgICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICAgIH0pLFxuICAgIHdlYlBhdGg6IHdlYlBhdGhcbiAgICAgID8gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgICAgICAgcGF0aDogd2ViUGF0aCB8fCAnJyxcbiAgICAgICAgICBzdGFydFNsYXNoOiB0cnVlLFxuICAgICAgICAgIGVuZFNsYXNoOiB0cnVlLFxuICAgICAgICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiAnJyxcbiAgICBjdXN0b21Vcmw6IChjdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBhbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXN0Q29uZmlnPigncGljQmVkLmFsaXN0cGxpc3QnKVxuICBpZiAoIWFsaXN0Q29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBhbGlzdCBjb25maWchJylcblxuICBjb25zdCB7IHVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB1cGxvYWRQYXRoLCB3ZWJQYXRoLCBjdXN0b21VcmwgfSA9IGV4dHJhY3RDb25maWcoYWxpc3RDb25maWcpXG4gIGxldCB7IHRva2VuIH0gPSBleHRyYWN0Q29uZmlnKGFsaXN0Q29uZmlnKVxuICBpZiAoIXRva2VuKSB7XG4gICAgdG9rZW4gPSBhd2FpdCBnZXRBbGlzdFRva2VuKGN0eCwgdXJsLCB1c2VybmFtZSwgcGFzc3dvcmQpXG4gIH1cbiAgaWYgKCF1cmwgfHwgISh0b2tlbiB8fCAodXNlcm5hbWUgJiYgcGFzc3dvcmQpKSkgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgY2hlY2sgeW91ciBhbGlzdCBjb25maWchJylcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICB9XG4gICAgICBjb25zdCBmdWxsVXBsb2FkUGF0aCA9IGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YFxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKHVybCwgdG9rZW4sIGltZy5maWxlTmFtZSwgZnVsbFVwbG9hZFBhdGgsIGltYWdlKVxuICAgICAgY29uc3QgdXBsb2FkUmVzID0gKGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcbiAgICAgIGhhbmRsZVJlc0Vycm9yKGN0eCwgdXBsb2FkUmVzKVxuICAgICAgY29uc3QgcmVmcmVzaFVybCA9IGAke3VybH0vYXBpL2ZzL2xpc3RgXG4gICAgICBjb25zdCBnZXRJbmZvVXJsID0gYCR7dXJsfS9hcGkvZnMvZ2V0YFxuICAgICAgY29uc3QgcmVmcmVzaFJlcyA9IChhd2FpdCBjdHgucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB1cmw6IHJlZnJlc2hVcmwsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0b2tlbixcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICBwZXJfcGFnZTogMSxcbiAgICAgICAgICByZWZyZXNoOiB0cnVlLFxuICAgICAgICAgIHBhdGg6IHBhdGguZGlybmFtZShmdWxsVXBsb2FkUGF0aClcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICAgIH0pKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcbiAgICAgIGhhbmRsZVJlc0Vycm9yKGN0eCwgcmVmcmVzaFJlcylcbiAgICAgIGNvbnN0IGdldEluZm9SZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgdXJsOiBnZXRJbmZvVXJsLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogdG9rZW4sXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgICAgIHBhdGg6IGZ1bGxVcGxvYWRQYXRoLFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyX3BhZ2U6IDEsXG4gICAgICAgICAgcmVmcmVzaDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgICAgfSkpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaGFuZGxlUmVzRXJyb3IoY3R4LCBnZXRJbmZvUmVzKVxuICAgICAgY29uc3Qgc2lnbiA9IGdldEluZm9SZXMuYm9keS5kYXRhLnNpZ25cbiAgICAgIGNvbnN0IGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChgJHt3ZWJQYXRoIHx8IHVwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YClcbiAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21VcmwgfHwgdXJsfS9kJHtlbmNvZGVkUGF0aH1gXG4gICAgICBpbWcuaW1nVXJsICs9IHNpZ24gPyBgP3NpZ249JHtzaWdufWAgOiAnJ1xuICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpc3RDb25maWc+KCdwaWNCZWQuYWxpc3RwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd1cmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVBMT0FEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9VUExPQURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9XRUJfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1dFQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLmFsaXN0cGxpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElBbGl5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBnZXRDdXJyZW50VVRDRGF0ZSA9ICgpOiBzdHJpbmcgPT4gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXG5cbi8vIGdlbmVyYXRlIE9TUyBzaWduYXR1cmVcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkYXRlID0gZ2V0Q3VycmVudFVUQ0RhdGUoKVxuICBjb25zdCBtaW1lVHlwZSA9IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgY29uc3Qgc2lnblN0cmluZyA9IGBQVVRcXG5cXG4ke21pbWVUeXBlfVxcbiR7ZGF0ZX1cXG4vJHtvcHRpb25zLmJ1Y2tldH0vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXG4gIHJldHVybiBgT1NTICR7b3B0aW9ucy5hY2Nlc3NLZXlJZH06JHtzaWduYXR1cmV9YFxufVxuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChcbiAgb3B0aW9uczogSUFsaXl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gIGltYWdlOiBCdWZmZXJcbik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGBodHRwczovLyR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVQYXRoKGAke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWApfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb21gLFxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxuICAgICAgRGF0ZTogZ2V0Q3VycmVudFVUQ0RhdGUoKSxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWFnZSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGFsaVl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJylcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGFsaVl1biBPU1MgY29uZmlnXCIpXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoeyBwYXRoOiBhbGlZdW5PcHRpb25zLnBhdGggfSlcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IGN1c3RvbVVybCA9IChhbGlZdW5PcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICAgIGNvbnN0IHBhdGggPSBhbGlZdW5PcHRpb25zLnBhdGhcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCBvcHRpb25VcmwgPSBhbGlZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke2FsaVl1bk9wdGlvbnMuYnVja2V0fS4ke2FsaVl1bk9wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleUlkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlTZWNyZXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYnVja2V0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FyZWEnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29wdGlvbnMnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5hbGl5dW4sIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVUQnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgRmlsZVR5cGUgZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSdcbmltcG9ydCB7IEh0dHBzUHJveHlBZ2VudCwgSHR0cFByb3h5QWdlbnQgfSBmcm9tICdocGFnZW50J1xuaW1wb3J0IHsgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcblxuY2xhc3MgRmlsZU5hbWVHZW5lcmF0b3Ige1xuICBkYXRlOiBEYXRlXG4gIGluZm86IElJbWdJbmZvXG5cbiAgc3RhdGljIGZpZWxkcyA9IFtcbiAgICAneWVhcicsIC8vIOW9k+WJjeaXpeacnyAtIOW5tFxuICAgICdtb250aCcsIC8vIOW9k+WJjeaXpeacnyAtIOaciFxuICAgICdkYXknLCAvLyDlvZPliY3ml6XmnJ8gLSDml6VcbiAgICAnZnVsbE5hbWUnLCAvLyDmlofku7blkI0sIOWMheWQq+aJqeWxleWQjVxuICAgICdmaWxlTmFtZScsIC8vIOaWh+S7tuWQjSwg5LiN5YyF5ZCr5omp5bGV5ZCNXG4gICAgJ2V4dE5hbWUnLCAvLyDmianlsZXlkI1cbiAgICAnbWQ1JywgLy8gbWQ1XG4gICAgJ21kNUI2NCcsIC8vIG1kNSBiYXNlNjRcbiAgICAnbWQ1QjY0U2hvcnQnLCAvLyBtZDUgYmFzZTY0IHNob3J0XG4gICAgJ3NoYTEnLCAvLyBzaGExXG4gICAgJ3NoYTI1NicsIC8vIHNoYTI1NlxuICAgICd0aW1lc3RhbXAnLCAvLyDlvZPliY3ml7bpl7TmiLMsIOenklxuICAgICd0aW1lc3RhbXBNUycgLy8g5b2T5YmN5pe26Ze05oizLCDmr6vnp5JcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKGluZm86IElJbWdJbmZvKSB7XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKVxuICAgIHRoaXMuaW5mbyA9IGluZm9cbiAgfVxuXG4gIHB1YmxpYyB5ZWFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfWBcbiAgfVxuXG4gIHB1YmxpYyBtb250aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBkYXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBmdWxsTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uZmlsZU5hbWVcbiAgfVxuXG4gIHB1YmxpYyBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5pbmZvLmZpbGVOYW1lID8/ICcnKS5yZXBsYWNlKHRoaXMuaW5mby5leHRuYW1lID8/ICcnLCAnJylcbiAgfVxuXG4gIHB1YmxpYyBleHROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJykucmVwbGFjZSgnLicsICcnKVxuICB9XG5cbiAgcHVibGljIG1kNSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoJ2hleCcpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0b1xuICAgICAgLmNyZWF0ZUhhc2goJ21kNScpXG4gICAgICAudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKVxuICAgICAgLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAucmVwbGFjZSgvPSskLywgJycpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0U2hvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvXG4gICAgICAuY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAgIC51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpXG4gICAgICAuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIC5zbGljZSgwLCA3KVxuICB9XG5cbiAgcHVibGljIHNoYTEoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdCgnaGV4JylcbiAgfVxuXG4gIHB1YmxpYyBzaGEyNTYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KCdoZXgnKVxuICB9XG5cbiAgcHVibGljIHRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXG4gIH1cblxuICBwdWJsaWMgdGltZXN0YW1wTVMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygpXG4gIH1cblxuICBwcml2YXRlIGltZ0J1ZmZlcigpOiBzdHJpbmcgfCBCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgPyB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgOiB0aGlzLmluZm8uYnVmZmVyXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGgoaW5mbzogSUltZ0luZm8sIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghZm9ybWF0KSB7XG4gICAgcmV0dXJuIGluZm8uZmlsZU5hbWUhXG4gIH1cblxuICBjb25zdCBmaWxlTmFtZUdlbmVyYXRvciA9IG5ldyBGaWxlTmFtZUdlbmVyYXRvcihpbmZvKVxuXG4gIGxldCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBmb3JtYXRcblxuICBmb3IgKGNvbnN0IGtleSBvZiBGaWxlTmFtZUdlbmVyYXRvci5maWVsZHMpIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYHske2tleX19YCwgJ2cnKVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHMtbWlncmF0ZSgyNTMyKSBGSVhNRTogT2JqZWN0IGlzIHBvc3NpYmx5ICd1bmRlZmluZWQnLlxuICAgIGZvcm1hdFBhdGggPSBmb3JtYXRQYXRoLnJlcGxhY2UocmUsIGZpbGVOYW1lR2VuZXJhdG9yW2tleV0oKSlcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRQYXRoXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SW5mbyhpbmZvOiBJSW1nSW5mbyk6IFByb21pc2U8e1xuICBib2R5PzogQnVmZmVyXG4gIGNvbnRlbnRUeXBlPzogc3RyaW5nXG4gIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xufT4ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBib2R5PzogQnVmZmVyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmdcbiAgICBjb250ZW50RW5jb2Rpbmc/OiBzdHJpbmdcbiAgfSA9IHt9XG5cbiAgaWYgKGluZm8uYmFzZTY0SW1hZ2UpIHtcbiAgICBjb25zdCBib2R5ID0gaW5mby5iYXNlNjRJbWFnZS5yZXBsYWNlKC9eZGF0YTpbL1xcd10rO2Jhc2U2NCwvLCAnJylcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBpbmZvLmJhc2U2NEltYWdlLm1hdGNoKC9bXjpdXFx3K1xcL1tcXHctK1xcZC5dKyg/PTt8LCkvKT8uWzBdXG4gICAgcmVzdWx0LmJvZHkgPSBCdWZmZXIuZnJvbShib2R5LCAnYmFzZTY0JylcbiAgICByZXN1bHQuY29udGVudEVuY29kaW5nID0gJ2Jhc2U2NCdcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5mby5leHRuYW1lKSB7XG4gICAgICByZXN1bHQuY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoaW5mby5leHRuYW1lKSFcbiAgICB9XG4gICAgcmVzdWx0LmJvZHkgPSBpbmZvLmJ1ZmZlclxuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gZGV0ZWN0IGZyb20gYnVmZmVyXG4gIGlmICghcmVzdWx0LmNvbnRlbnRUeXBlKSB7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBhd2FpdCBGaWxlVHlwZS5mcm9tQnVmZmVyKHJlc3VsdC5ib2R5ISlcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBmaWxlVHlwZT8ubWltZVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBmb3JtYXRIdHRwUHJveHlVUkwodXJsID0gJycpOiBzdHJpbmcge1xuICBpZiAoIXVybCkgcmV0dXJuICcnXG5cbiAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSkge1xuICAgIGNvbnN0IFtob3N0LCBwb3J0XSA9IHVybC5zcGxpdCgnOicpXG4gICAgcmV0dXJuIGBodHRwOi8vJHtob3N0LnJlcGxhY2UoJzEyNy4wLjAuMScsICdsb2NhbGhvc3QnKX06JHtwb3J0fWBcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IG5ldyBVUkwodXJsKVxuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWUucmVwbGFjZSgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcpfToke3BvcnR9YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3h5QWdlbnQoXG4gIHByb3h5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNzbEVuYWJsZWQ6IGJvb2xlYW4sXG4gIHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhblxuKTogSHR0cFByb3h5QWdlbnQgfCBIdHRwc1Byb3h5QWdlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBmb3JtYXRlZFByb3h5ID0gZm9ybWF0SHR0cFByb3h5VVJMKHByb3h5KVxuICBpZiAoIWZvcm1hdGVkUHJveHkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBBZ2VudCA9IHNzbEVuYWJsZWQgPyBIdHRwc1Byb3h5QWdlbnQgOiBIdHRwUHJveHlBZ2VudFxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICBrZWVwQWxpdmVNc2VjczogMTAwMCxcbiAgICBzY2hlZHVsaW5nOiAnbGlmbycgYXMgJ2xpZm8nIHwgJ2ZpZm8nIHwgdW5kZWZpbmVkLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZCxcbiAgICBwcm94eTogZm9ybWF0ZWRQcm94eVxuICB9XG5cbiAgcmV0dXJuIG5ldyBBZ2VudChvcHRpb25zKVxufVxuIiwiaW1wb3J0IHtcbiAgUzNDbGllbnRDb25maWcsXG4gIFMzQ2xpZW50LFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kT3V0cHV0XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMydcbmltcG9ydCB7IGdldFNpZ25lZFVybCB9IGZyb20gJ0Bhd3Mtc2RrL3MzLXJlcXVlc3QtcHJlc2lnbmVyJ1xuaW1wb3J0IHsgTm9kZUh0dHBIYW5kbGVyLCBOb2RlSHR0cEhhbmRsZXJPcHRpb25zIH0gZnJvbSAnQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlcidcblxuaW1wb3J0IHVybCBmcm9tICd1cmwnXG5pbXBvcnQgeyBIdHRwUHJveHlBZ2VudCwgSHR0cHNQcm94eUFnZW50IH0gZnJvbSAnaHBhZ2VudCdcbmltcG9ydCB7IElBd3NTM1BMaXN0VXNlckNvbmZpZywgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IGV4dHJhY3RJbmZvLCBnZXRQcm94eUFnZW50IH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBJVXBsb2FkUmVzdWx0IHtcbiAga2V5OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgaW1nVVJMOiBzdHJpbmdcbiAgdmVyc2lvbklkPzogc3RyaW5nXG4gIGVUYWc/OiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlUzNDbGllbnQob3B0czogSUF3c1MzUExpc3RVc2VyQ29uZmlnKTogUzNDbGllbnQge1xuICBsZXQgc3NsRW5hYmxlZCA9IHRydWVcbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IHVybC5VUkwob3B0cy5lbmRwb2ludCEpXG4gICAgc3NsRW5hYmxlZCA9IHUucHJvdG9jb2wgPT09ICdodHRwczonXG4gIH0gY2F0Y2gge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICB9XG5cbiAgY29uc3QgaHR0cEhhbmRsZXJPcHRzOiBOb2RlSHR0cEhhbmRsZXJPcHRpb25zID0ge31cbiAgaWYgKHNzbEVuYWJsZWQpIHtcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cHNBZ2VudCA9IGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgdHJ1ZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBzUHJveHlBZ2VudFxuICB9IGVsc2Uge1xuICAgIGh0dHBIYW5kbGVyT3B0cy5odHRwQWdlbnQgPSBnZXRQcm94eUFnZW50KG9wdHMucHJveHksIGZhbHNlLCBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA/PyBmYWxzZSkgYXMgSHR0cFByb3h5QWdlbnRcbiAgfVxuXG4gIGNvbnN0IGNsaWVudE9wdGlvbnM6IFMzQ2xpZW50Q29uZmlnID0ge1xuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24gfHwgJ2F1dG8nLFxuICAgIGVuZHBvaW50OiBvcHRzLmVuZHBvaW50IHx8IHVuZGVmaW5lZCxcbiAgICBjcmVkZW50aWFsczoge1xuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMuYWNjZXNzS2V5SUQsXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IG9wdHMuc2VjcmV0QWNjZXNzS2V5XG4gICAgfSxcbiAgICB0bHM6IHNzbEVuYWJsZWQsXG4gICAgZm9yY2VQYXRoU3R5bGU6IG9wdHMucGF0aFN0eWxlQWNjZXNzLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBuZXcgTm9kZUh0dHBIYW5kbGVyKGh0dHBIYW5kbGVyT3B0cylcbiAgfVxuXG4gIHJldHVybiBuZXcgUzNDbGllbnQoY2xpZW50T3B0aW9ucylcbn1cblxuaW50ZXJmYWNlIElDcmVhdGVVcGxvYWRUYXNrT3B0cyB7XG4gIGNsaWVudDogYW55XG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgaXRlbTogSUltZ0luZm9cbiAgYWNsOiBzdHJpbmdcbiAgdXJsUHJlZml4Pzogc3RyaW5nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFRhc2sob3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzKTogUHJvbWlzZTxJVXBsb2FkUmVzdWx0PiB7XG4gIGlmICghb3B0cy5pdGVtLmJ1ZmZlciAmJiAhb3B0cy5pdGVtLmJhc2U2NEltYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmRlZmluZWQgaW1hZ2UnKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgeyBib2R5LCBjb250ZW50VHlwZSwgY29udGVudEVuY29kaW5nIH0gPSBhd2FpdCBleHRyYWN0SW5mbyhvcHRzLml0ZW0pXG5cbiAgICBjb25zdCBjb21tYW5kID0gbmV3IFB1dE9iamVjdENvbW1hbmQoe1xuICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IG9wdHMucGF0aCxcbiAgICAgIEFDTDogb3B0cy5hY2wsXG4gICAgICBCb2R5OiBib2R5LFxuICAgICAgQ29udGVudFR5cGU6IGNvbnRlbnRUeXBlLFxuICAgICAgQ29udGVudEVuY29kaW5nOiBjb250ZW50RW5jb2RpbmdcbiAgICB9KVxuXG4gICAgY29uc3Qgb3V0cHV0OiBQdXRPYmplY3RDb21tYW5kT3V0cHV0ID0gYXdhaXQgb3B0cy5jbGllbnQuc2VuZChjb21tYW5kKVxuXG4gICAgbGV0IHVybDogc3RyaW5nXG4gICAgaWYgKCFvcHRzLnVybFByZWZpeCkge1xuICAgICAgdXJsID0gYXdhaXQgZ2V0RmlsZVVSTChvcHRzLCBvdXRwdXQuRVRhZyEsIG91dHB1dC5WZXJzaW9uSWQhKVxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSBgJHtvcHRzLnVybFByZWZpeH0vJHtvcHRzLnBhdGh9YFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBrZXk6IG9wdHMucGF0aCxcbiAgICAgIHVybCxcbiAgICAgIGltZ1VSTDogdXJsLFxuICAgICAgdmVyc2lvbklkOiBvdXRwdXQuVmVyc2lvbklkLFxuICAgICAgZVRhZzogb3V0cHV0LkVUYWdcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVVSTChvcHRzOiBJQ3JlYXRlVXBsb2FkVGFza09wdHMsIGVUYWc6IHN0cmluZywgdmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzaWduZWRVcmwgPSBhd2FpdCBnZXRTaWduZWRVcmwoXG4gICAgb3B0cy5jbGllbnQsXG4gICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xuICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IG9wdHMucGF0aCxcbiAgICAgIElmTWF0Y2g6IGVUYWcsXG4gICAgICBWZXJzaW9uSWQ6IHZlcnNpb25JZFxuICAgIH0pLFxuICAgIHsgZXhwaXJlc0luOiAzNjAwIH1cbiAgKVxuICBjb25zdCB1cmxPYmplY3QgPSBuZXcgdXJsLlVSTChzaWduZWRVcmwpXG4gIHVybE9iamVjdC5zZWFyY2ggPSAnJ1xuICByZXR1cm4gdXJsT2JqZWN0LmhyZWZcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjcmVhdGVTM0NsaWVudCxcbiAgY3JlYXRlVXBsb2FkVGFza1xufVxuIiwiaW1wb3J0IHVwbG9hZGVyIGZyb20gJy4vczMvdXBsb2FkZXInXG5cbmltcG9ydCB7IGZvcm1hdFBhdGggfSBmcm9tICcuL3MzL3V0aWxzJ1xuaW1wb3J0IHsgSUF3c1MzUExpc3RVc2VyQ29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5mdW5jdGlvbiBmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwoZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4oZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnOiBJQXdzUzNQTGlzdFVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuYXdzLXMzLXBsaXN0JylcbiAgaWYgKCF1c2VyQ29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGF3cyBzMyB1cGxvYWRlciBjb25maWdcIilcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPSBmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwodXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpXG4gICAgbGV0IHVybFByZWZpeCA9IHVzZXJDb25maWcudXJsUHJlZml4XG4gICAgaWYgKHVybFByZWZpeCkge1xuICAgICAgdXJsUHJlZml4ID0gdXJsUHJlZml4LnJlcGxhY2UoL1xcLz8kLywgJycpXG4gICAgICBpZiAodXNlckNvbmZpZy5wYXRoU3R5bGVBY2Nlc3MgJiYgIWRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkge1xuICAgICAgICB1cmxQcmVmaXggKz0gJy8nICsgdXNlckNvbmZpZy5idWNrZXROYW1lXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNsaWVudCA9IHVwbG9hZGVyLmNyZWF0ZVMzQ2xpZW50KHVzZXJDb25maWcpXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBjb25zdCB0YXNrID0gYXdhaXQgdXBsb2FkZXIuY3JlYXRlVXBsb2FkVGFzayh7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgYnVja2V0TmFtZTogdXNlckNvbmZpZy5idWNrZXROYW1lLFxuICAgICAgICBwYXRoOiBmb3JtYXRQYXRoKGltZywgdXNlckNvbmZpZy51cGxvYWRQYXRoKSxcbiAgICAgICAgaXRlbTogaW1nLFxuICAgICAgICBhY2w6IHVzZXJDb25maWcuYWNsIHx8ICdwdWJsaWMtcmVhZCcsXG4gICAgICAgIHVybFByZWZpeFxuICAgICAgfSlcbiAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICBpbWcuaW1nVXJsID0gdGFzay5pbWdVUkxcbiAgICAgIGltZy51cmwgPSB0YXNrLnVybFxuICAgIH1cblxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXG4gICAgICB0ZXh0OiAnJ1xuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgZGVmYXVsdENvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0ge1xuICAgIGFjY2Vzc0tleUlEOiAnJyxcbiAgICBzZWNyZXRBY2Nlc3NLZXk6ICcnLFxuICAgIGJ1Y2tldE5hbWU6ICcnLFxuICAgIHVwbG9hZFBhdGg6ICd7eWVhcn0ve21vbnRofS97bWQ1fS57ZXh0TmFtZX0nLFxuICAgIHBhdGhTdHlsZUFjY2VzczogZmFsc2UsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcbiAgICBhY2w6ICdwdWJsaWMtcmVhZCdcbiAgfVxuICBsZXQgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUF3c1MzUExpc3RVc2VyQ29uZmlnPigncGljQmVkLmF3cy1zMy1wbGlzdCcpIHx8IHt9XG4gIHVzZXJDb25maWcgPSB7IC4uLmRlZmF1bHRDb25maWcsIC4uLnVzZXJDb25maWcgfVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SUQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SUQsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0QWNjZXNzS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEFjY2Vzc0tleSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXROYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldE5hbWUsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXBsb2FkUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlZ2lvbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWdpb24sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUdJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT04nKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwcm94eScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXJsUHJlZml4JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybFByZWZpeCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aFN0eWxlQWNjZXNzJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzIHx8IGZhbHNlLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZWplY3RVbmF1dGhvcml6ZWQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWplY3RVbmF1dGhvcml6ZWQgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjbCcsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjbCB8fCAncHVibGljLXJlYWQnLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICAncHJpdmF0ZScsXG4gICAgICAgICdwdWJsaWMtcmVhZCcsXG4gICAgICAgICdwdWJsaWMtcmVhZC13cml0ZScsXG4gICAgICAgICdhdXRoZW50aWNhdGVkLXJlYWQnLFxuICAgICAgICAnYXdzLWV4ZWMtcmVhZCcsXG4gICAgICAgICdidWNrZXQtb3duZXItcmVhZCcsXG4gICAgICAgICdidWNrZXQtb3duZXItZnVsbC1jb250cm9sJ1xuICAgICAgXSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0wnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXNbJ2F3cy1zMy1wbGlzdCddLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJR2l0aHViQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhKU09OIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuZnVuY3Rpb24gYnVpbGRHaXRodWJBcGlVcmwocmVwbzogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGV4dHJhOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gIHJldHVybiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7ZmlsZU5hbWV9YCl9JHtleHRyYX1gXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcsIGRhdGE6IGFueSk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xuICBjb25zdCB7IHRva2VuLCByZXBvIH0gPSBvcHRpb25zXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gbG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgdXJsOiBidWlsZEdpdGh1YkFwaVVybChyZXBvLCBvcHRpb25zLnBhdGgsIGZpbGVOYW1lKSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgICAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGVcbiAgICB9LFxuICAgIGJvZHk6IGRhdGEsXG4gICAganNvbjogdHJ1ZVxuICB9IGFzIGNvbnN0XG59XG5cbmNvbnN0IGdldE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZyk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xuICBjb25zdCB7IHRva2VuLCByZXBvLCBicmFuY2ggfSA9IG9wdGlvbnNcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIHVybDogYnVpbGRHaXRodWJBcGlVcmwocmVwbywgb3B0aW9ucy5wYXRoLCBmaWxlTmFtZSwgYD9yZWY9JHticmFuY2h9YCksXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnXG4gICAgfSxcbiAgICBqc29uOiB0cnVlXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgZ2l0aHViT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKVxuICBpZiAoIWdpdGh1Yk9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgZ2l0aHViIGNvbmZpZ1wiKVxuXG4gIGNvbnN0IHVwbG9hZFBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogZ2l0aHViT3B0aW9ucy5wYXRoIH0pXG4gIGdpdGh1Yk9wdGlvbnMucGF0aCA9IHVwbG9hZFBhdGhcbiAgZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgPSAoZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0xpc3QnLFxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXG4gICAgICAgICAgY29udGVudDogYmFzZTY0SW1hZ2UsXG4gICAgICAgICAgcGF0aDogdXBsb2FkUGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgZ2l0aHViT3B0aW9ucywgZGF0YSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBib2R5OiB7XG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmxcbiAgICAgICAgICAgICAgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxuICAgICAgICAgICAgICA6IGJvZHkuY29udGVudC5kb3dubG9hZF91cmxcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIGlmIChlcnIuc3RhdHVzQ29kZSAhPT0gNDIyKSB0aHJvdyBlcnJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCByZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3QoZ2V0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMpKSkgYXMgYW55XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlcykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbWcuaGFzaCA9IHJlcy5zaGFcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBnaXRodWJPcHRpb25zLmN1c3RvbVVybFxuICAgICAgICAgICAgICA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgICAgICAgIDogcmVzLmRvd25sb2FkX3VybFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAncmVwbycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2JyYW5jaCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndG9rZW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuZ2l0aHViLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElJbWd1ckNvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+XG4gIGFjY2Vzc1Rva2VuID8gKGFjY2Vzc1Rva2VuLnN0YXJ0c1dpdGgoJ0JlYXJlcicpID8gYWNjZXNzVG9rZW4gOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCkgOiAnJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChcbiAgY3R4OiBJUGljR28sXG4gIG9wdGlvbnM6IElJbWd1ckNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgaW1nQmFzZTY0OiBzdHJpbmdcbik6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkIHx8ICcnXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGZvcm1hdEFjY2Vzc1Rva2VuKG9wdGlvbnMuYWNjZXNzVG9rZW4gfHwgJycpXG4gIGNvbnN0IGFsYnVtID0gb3B0aW9ucy5hbGJ1bSB8fCAnJ1xuICBsZXQgYXV0aG9yaXphdGlvblxuICBpZiAodXNlcm5hbWUgJiYgYWNjZXNzVG9rZW4pIHtcbiAgICBhdXRob3JpemF0aW9uID0gYWNjZXNzVG9rZW5cbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xuICAgIGF1dGhvcml6YXRpb24gPSBgQ2xpZW50LUlEICR7Y2xpZW50SWR9YFxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxuICB9XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICdodHRwczovL2FwaS5pbWd1ci5jb20vMy9pbWFnZScsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICBIb3N0OiAnYXBpLmltZ3VyLmNvbScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXG4gICAgICB0eXBlOiAnYmFzZTY0JyxcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXG4gICAgfVxuICB9XG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xuICAgIGxldCBpbml0UGFnZXMgPSAwXG4gICAgbGV0IHJlc1xuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IGdldEFsYnVtSGFzaE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGBodHRwczovL2FwaS5pbWd1ci5jb20vMy9hY2NvdW50LyR7dXNlcm5hbWV9L2FsYnVtcy8ke2luaXRQYWdlc31gLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxuICAgICAgICB9LFxuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGdldEFsYnVtSGFzaE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XG4gICAgICB9XG4gICAgICByZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3QoZ2V0QWxidW1IYXNoT3B0aW9ucykpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICB9XG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWxidW1MaXN0KSB7XG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBhbGJ1bSkge1xuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbml0UGFnZXMrK1xuICAgIH0gd2hpbGUgKHJlcy5ib2R5LmRhdGEubGVuZ3RoID4gMClcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucy5mb3JtRGF0YS5hbGJ1bSA9IGFsYnVtSGFzaFxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxuICB9XG4gIHJldHVybiByZXF1ZXN0T3B0aW9uc1xufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXG4gIGlmICghaW1ndXJPcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGltZ3VyIGNvbmZpZ1wiKVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnMoY3R4LCBpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXG4gICAgICB0ZXh0OiAnaHR0cDovL2RvY3MuaW1ndXIuY29tL2FwaS9lcnJuby8nXG4gICAgfSlcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdjbGllbnRJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2Vzc1Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhbGJ1bScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncHJveHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuaW1ndXIsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUxvY2FsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBsb2NhbENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJylcbiAgaWYgKCFsb2NhbENvbmZpZykgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgbG9jYWwgY29uZmlnIScpXG5cbiAgY29uc3QgdXBsb2FkUGF0aCA9IGxvY2FsQ29uZmlnLnBhdGggfHwgJydcbiAgY29uc3QgY3VzdG9tVXJsID0gKGxvY2FsQ29uZmlnLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICBjb25zdCB3ZWJQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgcGF0aDogbG9jYWxDb25maWcud2ViUGF0aD8ucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gIH0pXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICdsb2NhbCcpXG4gICAgICAgIGNvbnN0IGZpbGVJbWdUZW1wUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBjb25zdCBmaWxlVXBsb2FkUGF0aCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVVcGxvYWRQYXRoKSlcbiAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZUltZ1RlbXBQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlVXBsb2FkUGF0aCwgaW1hZ2UpXG4gICAgICAgIGZzLmNvcHlGaWxlU3luYyhmaWxlVXBsb2FkUGF0aCwgZmlsZUltZ1RlbXBQYXRoKVxuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGlmIChjdXN0b21VcmwpIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7d2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgaW1nLmhhc2ggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9sb2NhbC8ke2VuY29kZVBhdGgoaW1nLmZpbGVOYW1lKS5yZXBsYWNlKC9eXFwvLywgJycpfWBcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHVwbG9hZCBpbWFnZScpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3ZWJQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMubG9jYWwsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2hlbGxvZGszNC9waWNnby1wbHVnaW4tbGFua29uZ1xuLy8gTElDRU5TRTogTUlUXG5cbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcbmltcG9ydCB7IElMc2t5Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElNR1RZUEUge1xuICBpbWdVcmw/OiBzdHJpbmdcbiAgdHlwZT86IHN0cmluZ1xuICBrZXk/OiBzdHJpbmdcbiAgaWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVjJGT1JNREFUQSB7XG4gIGZpbGU6IHtcbiAgICB2YWx1ZTogQnVmZmVyXG4gICAgb3B0aW9uczoge1xuICAgICAgZmlsZW5hbWU6IHN0cmluZ1xuICAgIH1cbiAgfVxuICBzc2w6IHN0cmluZ1xuICBzdHJhdGVneV9pZD86IHN0cmluZ1xuICBhbGJ1bV9pZD86IHN0cmluZ1xuICBwZXJtaXNzaW9uPzogbnVtYmVyXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElMc2t5Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbWFnZTogQnVmZmVyKTogYW55ID0+IHtcbiAgbGV0IGhvc3QgPSBvcHRpb25zLmhvc3RcbiAgaG9zdCA9IGhvc3QucmVwbGFjZSgvXFwvJC8sICcnKVxuICBjb25zdCBpc1YyID0gb3B0aW9ucy52ZXJzaW9uID09PSAnVjInXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlblxuXG4gIGNvbnN0IHYxSGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxuICAgIENvbm5lY3Rpb246ICdrZWVwLWFsaXZlJyxcbiAgICB0b2tlbjogdG9rZW4gfHwgdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgdjFGb3JtRGF0YSA9IHtcbiAgICBpbWFnZToge1xuICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXG4gICAgICB9XG4gICAgfSxcbiAgICBzc2w6ICd0cnVlJ1xuICB9XG5cbiAgY29uc3QgdjJIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxuICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIEF1dGhvcml6YXRpb246IHRva2VuIHx8IHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IHN0cmF0ZWd5SWQgPSBvcHRpb25zLnN0cmF0ZWd5SWRcbiAgY29uc3QgYWxidW1JZCA9IG9wdGlvbnMuYWxidW1JZFxuICBsZXQgcGVybWlzc2lvbjogYW55ID0gb3B0aW9ucy5wZXJtaXNzaW9uLnZhbHVlXG4gIGlmIChwZXJtaXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBwZXJtaXNzaW9uID0gb3B0aW9ucy5wZXJtaXNzaW9uXG4gIH1cbiAgY29uc3QgdjJGb3JtRGF0YTogSVYyRk9STURBVEEgPSB7XG4gICAgZmlsZToge1xuICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXG4gICAgICB9XG4gICAgfSxcbiAgICBzc2w6ICd0cnVlJyxcbiAgICBzdHJhdGVneV9pZDogc3RyYXRlZ3lJZCxcbiAgICBhbGJ1bV9pZDogYWxidW1JZCxcbiAgICBwZXJtaXNzaW9uXG4gIH1cbiAgaWYgKCFzdHJhdGVneUlkKSB7XG4gICAgZGVsZXRlIHYyRm9ybURhdGEuc3RyYXRlZ3lfaWRcbiAgfVxuICBpZiAoIWFsYnVtSWQpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5hbGJ1bV9pZFxuICB9XG4gIGlmICghKHBlcm1pc3Npb24gPT09IDAgfHwgcGVybWlzc2lvbiA9PT0gMSkpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5wZXJtaXNzaW9uXG4gIH1cblxuICBjb25zdCByZXF1ZXN0QWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGlzVjIgPyBgJHtob3N0fS9hcGkvdjEvdXBsb2FkYCA6IGAke2hvc3R9L2FwaS91cGxvYWRgLFxuICAgIGFnZW50OiByZXF1ZXN0QWdlbnQsXG4gICAgaGVhZGVyczogaXNWMiA/IHYySGVhZGVycyA6IHYxSGVhZGVycyxcbiAgICBmb3JtRGF0YTogaXNWMiA/IHYyRm9ybURhdGEgOiB2MUZvcm1EYXRhXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgbHNreU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpXG4gIGlmICghbHNreU9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgbHNreSB1cGxvYWRlciBjb25maWdcIilcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlciFcbiAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgIH1cbiAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMobHNreU9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXG4gICAgbGV0IGJvZHkgPSAoYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZykpIGFzIGFueVxuICAgIGJvZHkgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keVxuICAgIGNvbnN0IGlzVjIgPSBsc2t5T3B0aW9ucy52ZXJzaW9uID09PSAnVjInXG4gICAgY29uc3QgY29uZGl0aW9uID0gaXNWMiA/IGJvZHkuc3RhdHVzID09PSB0cnVlIDogYm9keS5jb2RlID09PSAyMDBcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgaW1nLmltZ1VybCA9IGlzVjIgPyBib2R5LmRhdGEubGlua3MudXJsIDogYm9keS5kYXRhLnVybFxuICAgICAgaWYgKGlzVjIpIHtcbiAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEua2V5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiAndXBsb2FkIGZhaWxlZCcsXG4gICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxuICAgICAgfSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxza3lDb25maWc+KCdwaWNCZWQubHNreXBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy52ZXJzaW9uIHx8ICdWMScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04nKVxuICAgICAgfSxcbiAgICAgIGNob2ljZXM6IFsnVjEnLCAnVjInXSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0cmF0ZWd5SWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3RyYXRlZ3lJZCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWxidW1JZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbGJ1bUlkLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9BTEJVTV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwZXJtaXNzaW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGVybWlzc2lvbiB8fCAncHJpdmF0ZShkZWZhdWx0KScsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHJpdmF0ZShkZWZhdWx0KScsXG4gICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwdWJsaWMnLFxuICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT04nKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMubHNreXBsaXN0LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCB7IElQaWNMaXN0Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElQaWNMaXN0Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcbiAgY29uc3QgeyBob3N0ID0gJzEyNy4wLjAuMScsIHBvcnQgPSAnJywgcGljYmVkID0gJycsIGNvbmZpZ05hbWUgPSAnRGVmYXVsdCcsIHNlcnZlcktleSA9ICcnIH0gPSBvcHRpb25zXG4gIGNvbnN0IGlzSXAgPSBob3N0Lm1hdGNoKC8oXFxkKylcXC4oXFxkKylcXC4oXFxkKylcXC4oXFxkKykvKVxuICBjb25zdCBwcm90b2NvbCA9IGhvc3Quc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSA/ICdodHRwczovLycgOiAnaHR0cDovLydcbiAgY29uc3QgZm9ybWF0SG9zdCA9IGhvc3QucmVwbGFjZSgvKGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcLykvLCAnJylcbiAgY29uc3QgZGVmYXVsdFBvcnQgPSBwb3J0IHx8ICczNjY3NydcbiAgY29uc3QgZW5kcG9pbnQgPSBpc0lwXG4gICAgPyBgJHtwcm90b2NvbH0ke2Zvcm1hdEhvc3R9OiR7ZGVmYXVsdFBvcnR9YFxuICAgIDogYCR7cHJvdG9jb2x9JHtmb3JtYXRIb3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gXG4gIGNvbnN0IHVybCA9IGAke2VuZHBvaW50fS91cGxvYWQ/Y29uZmlnTmFtZT0ke2NvbmZpZ05hbWV9JHtwaWNiZWQgPyBgJnBpY2JlZD0ke3BpY2JlZH1gIDogJyd9JHtzZXJ2ZXJLZXkgPyBgJmtleT0ke3NlcnZlcktleX1gIDogJyd9YFxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgfSxcbiAgICBmb3JtRGF0YToge1xuICAgICAgZmlsZToge1xuICAgICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgY29udGVudFR5cGU6IGxvb2t1cChmaWxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgcGljbGlzdE9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKVxuICBpZiAoIXBpY2xpc3RPcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBQaWNMaXN0IGNvbmZpZ1wiKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocGljbGlzdE9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4XG4gICAgICAgICAgLnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5Py5zdWNjZXNzKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IHJlcy5ib2R5LnJlc3VsdFswXVxuICAgICAgICAgIGltZy5mdWxsUmVzdWx0ID0gcmVzLmJvZHkuZnVsbFJlc3VsdCA/IHJlcy5ib2R5LmZ1bGxSZXN1bHRbMF0gOiAnJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9ydCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAzNjY3NyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BpY2JlZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BJQ0JFRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUElDQkVEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBpY2JlZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2NvbmZpZ05hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9DT05GSUdOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9DT05GSUdOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNvbmZpZ05hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZXJ2ZXJLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9LRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0tFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZXJ2ZXJLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnBpY2xpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHFpbml1IGZyb20gJ3Fpbml1J1xuaW1wb3J0IHsgSVBsdWdpbkNvbmZpZywgSVFpbml1Q29uZmlnLCBJUGljR28sIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzIH0gZnJvbSAnLi91dGlscydcblxuZnVuY3Rpb24gcG9zdE9wdGlvbnMob3B0aW9uczogSVFpbml1Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBpbWdCYXNlNjQ6IHN0cmluZyk6IElPbGRSZXFPcHRpb25zIHtcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcbiAgY29uc3QgYmFzZTY0RmlsZU5hbWUgPSBCdWZmZXIuZnJvbShwYXRoICsgZmlsZU5hbWUsICd1dGYtOCcpXG4gICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogYGh0dHA6Ly91cGxvYWQke2FyZWF9LnFpbml1cC5jb20vcHV0YjY0Ly0xL2tleS8ke2Jhc2U2NEZpbGVOYW1lfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYFVwVG9rZW4gJHt0b2tlbn1gLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICB9LFxuICAgIGJvZHk6IGltZ0Jhc2U2NFxuICB9XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEFyZWEoYXJlYTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW4ocWluaXVPcHRpb25zOiBhbnkpOiBzdHJpbmcge1xuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XG4gIGNvbnN0IHNlY3JldEtleSA9IHFpbml1T3B0aW9ucy5zZWNyZXRLZXlcbiAgY29uc3QgbWFjID0gbmV3IHFpbml1LmF1dGguZGlnZXN0Lk1hYyhhY2Nlc3NLZXksIHNlY3JldEtleSlcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBzY29wZTogcWluaXVPcHRpb25zLmJ1Y2tldFxuICB9XG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcbiAgcmV0dXJuIHB1dFBvbGljeS51cGxvYWRUb2tlbihtYWMpXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHFpbml1T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JylcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIHFpbml1IGNvbmZpZ1wiKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhxaW5pdU9wdGlvbnMsIGltZy5maWxlTmFtZSwgZ2V0VG9rZW4ocWluaXVPcHRpb25zKSwgYmFzZTY0SW1hZ2UpXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgaWYgKGJvZHk/LmtleSkge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBxaW5pdU9wdGlvbnMudXJsXG4gICAgICAgICAgY29uc3QgdXJsT3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zIHx8ICcnXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7Ym9keS5rZXkgYXMgc3RyaW5nfSR7dXJsT3B0aW9uc31gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgICBib2R5OiBib2R5Lm1zZ1xuICAgICAgICAgIH0pXG4gICAgICAgICAgY3R4LmxvZy5lcnJvcigncWluaXUgZXJyb3InLCBib2R5KVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGlmIChlcnIubWVzc2FnZSAhPT0gJ1VwbG9hZCBmYWlsZWQnKSB7XG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXG4gICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlLmJvZHlcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVycm9yLmVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FyZWEnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5xaW5pdSwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBOb2RlU1NILCBDb25maWcgfSBmcm9tICdub2RlLXNzaC1uby1jcHUtZmVhdHVyZXMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNsYXNzIFNTSENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBTU0hDbGllbnRcbiAgcHJpdmF0ZSBjbGllbnQgPSBuZXcgTm9kZVNTSCgpXG4gIGlzQ29ubmVjdGVkID0gZmFsc2VcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFNTSENsaWVudCB7XG4gICAgaWYgKCFTU0hDbGllbnQuaW5zdGFuY2UpIHtcbiAgICAgIFNTSENsaWVudC5pbnN0YW5jZSA9IG5ldyBTU0hDbGllbnQoKVxuICAgIH1cbiAgICByZXR1cm4gU1NIQ2xpZW50Lmluc3RhbmNlXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBwcml2YXRlS2V5LCBwYXNzcGhyYXNlIH0gPSBjb25maWdcbiAgICBjb25zdCBsb2dpbkluZm86IENvbmZpZyA9IHByaXZhdGVLZXlcbiAgICAgID8ge1xuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgIHByaXZhdGVLZXlQYXRoOiBwcml2YXRlS2V5LFxuICAgICAgICAgIHBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfHwgdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIDogeyB1c2VybmFtZSwgcGFzc3dvcmQgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5jb25uZWN0KHtcbiAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgcG9ydDogTnVtYmVyKHBvcnQpIHx8IDIyLFxuICAgICAgICAuLi5sb2dpbkluZm9cbiAgICAgIH0pXG4gICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGxvYWQobG9jYWw6IHN0cmluZywgcmVtb3RlOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0ggY2xpZW50IGlzIG5vdCBjb25uZWN0ZWQnKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmVtb3RlID0gU1NIQ2xpZW50LmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXG4gICAgICBhd2FpdCB0aGlzLm1rZGlyKHBhdGguZGlybmFtZShyZW1vdGUpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgY29uZmlnKVxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucHV0RmlsZShsb2NhbCwgcmVtb3RlKVxuICAgICAgY29uc3QgZmlsZU1vZGUgPSBjb25maWcuZmlsZU1vZGUgfHwgJzA2NDQnXG4gICAgICBpZiAoZmlsZU1vZGUgIT09ICcwNjQ0Jykge1xuICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoYGNobW9kICR7ZmlsZU1vZGV9IFwiJHtyZW1vdGV9XCJgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWtkaXIoZGlyUGF0aDogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2Z0cCBjbGllbnQgaXMgbm90IGNvbm5lY3RlZCcpXG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdG9yeU1vZGUgPSBjb25maWcuZGlyTW9kZSB8fCAnMDc1NSdcbiAgICBpZiAoZGlyZWN0b3J5TW9kZSAhPT0gJzA3NTUnKSB7XG4gICAgICBjb25zdCBkaXJzID0gZGlyUGF0aC5zcGxpdCgnLycpXG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJ1xuICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICBpZiAoZGlyKSB7XG4gICAgICAgICAgY3VycmVudFBhdGggKz0gYC8ke2Rpcn1gXG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYG1rZGlyIFwiJHtjdXJyZW50UGF0aH1cIiAmJiBjaG1vZCAke2RpcmVjdG9yeU1vZGV9IFwiJHtjdXJyZW50UGF0aH1cImBcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGBjZCAvICYmIG1rZGlyIC1wIFwiJHtkaXJQYXRofVwiYFxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hvd24ocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZW1vdGUgPSBTU0hDbGllbnQuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcbiAgICBjb25zdCBbX3VzZXIsIF9ncm91cF0gPSBncm91cCA/IFt1c2VyLCBncm91cF0gOiB1c2VyLmluY2x1ZGVzKCc6JykgPyB1c2VyLnNwbGl0KCc6JykgOiBbdXNlciwgdXNlcl1cblxuICAgIGF3YWl0IHRoaXMuZXhlYyhgY2hvd24gJHtfdXNlcn06JHtfZ3JvdXB9IFwiJHtyZW1vdGV9XCJgKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjKHNjcmlwdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHRoaXMuY2xpZW50LmV4ZWNDb21tYW5kKHNjcmlwdClcbiAgICByZXR1cm4gZXhlY1Jlc3VsdC5jb2RlID09PSAwXG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbGllbnQuZGlzcG9zZSgpXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU1NIQ2xpZW50XG4iLCJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYywgbW92ZVN5bmMsIHJlbW92ZVN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNmdHBQbGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgU1NIQ2xpZW50IGZyb20gJy4uLy4uL3V0aWxzL3NzaENsaWVudCdcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3Qgc2Z0cHBsaXN0Q29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpXG4gIGlmICghc2Z0cHBsaXN0Q29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc2Z0cHBsaXN0IGNvbmZpZyEnKVxuICB9XG4gIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gTnVtYmVyKHNmdHBwbGlzdENvbmZpZy5wb3J0KSB8fCAyMlxuICBpZiAoc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPCAwIHx8IHNmdHBwbGlzdENvbmZpZy5wb3J0ID4gNjU1MzUpIHtcbiAgICBzZnRwcGxpc3RDb25maWcucG9ydCA9IDIyXG4gIH1cbiAgc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCxcbiAgICByb290VG9FbXB0eTogZmFsc2VcbiAgfSlcbiAgY29uc3Qgd2ViUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3NmdHBwbGlzdCcpXG4gICAgICAgIGVuc3VyZURpclN5bmMoaW1nVGVtcFBhdGgpXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZSh0ZW1wRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgaW1hZ2UpXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFNTSENsaWVudC5nZXRJbnN0YW5jZSgpXG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KHNmdHBwbGlzdENvbmZpZylcbiAgICAgICAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGguam9pbihgLyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9YC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJyksIGltZy5maWxlTmFtZSlcbiAgICAgICAgYXdhaXQgY2xpZW50LnVwbG9hZCh0ZW1wRmlsZVBhdGgsIHJlbW90ZVBhdGgsIHNmdHBwbGlzdENvbmZpZylcbiAgICAgICAgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyICYmIChhd2FpdCBjbGllbnQuY2hvd24ocmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyKSlcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBjb25zdCBiYXNlVXJsID0gc2Z0cHBsaXN0Q29uZmlnLmN1c3RvbVVybCB8fCBzZnRwcGxpc3RDb25maWcuaG9zdFxuICAgICAgICBpZiAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgpIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGggPT09ICcvJyA/ICcnIDogd2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGltZ1RlbXBGaWxlUGF0aCkpXG4gICAgICAgIHJlbW92ZVN5bmMoaW1nVGVtcEZpbGVQYXRoKVxuICAgICAgICBtb3ZlU3luYyh0ZW1wRmlsZVBhdGgsIHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKSlcbiAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvc2Z0cHBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxuICAgICAgICBjbGllbnQuY2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9ydCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3ByaXZhdGVLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcml2YXRlS2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3BocmFzZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cGxvYWRQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZmlsZVVzZXInLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlVXNlciB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2ZpbGVNb2RlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZmlsZU1vZGUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuc2Z0cHBsaXN0LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTbW1zQ29uZmlnLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xuICBsZXQgZG9tYWluID0gYmFja3VwRG9tYWluIHx8ICdzbS5tcydcbiAgZG9tYWluID0gZG9tYWluLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGBodHRwczovLyR7ZG9tYWlufS9hcGkvdjIvdXBsb2FkYCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgICBBdXRob3JpemF0aW9uOiBhcGlUb2tlblxuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIHNtZmlsZToge1xuICAgICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNzbDogJ3RydWUnXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxuICBpZiAoIXNtbXNDb25maWcpIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXG5cbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgfVxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgaW1hZ2UsIHNtbXNDb25maWc/LnRva2VuLCBzbW1zQ29uZmlnPy5iYWNrdXBEb21haW4pXG5cbiAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZylcbiAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgIGlmIChib2R5LmNvZGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEudXJsXG4gICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmhhc2hcbiAgICAgIH0gZWxzZSBpZiAoYm9keS5jb2RlID09PSAnaW1hZ2VfcmVwZWF0ZWQnICYmIHR5cGVvZiBib2R5LmltYWdlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcbiAgICAgICAgY29uc3QgdXBsb2FkSGlzdG9yeSA9IGF3YWl0IGF4aW9zLmdldCgnaHR0cHM6Ly9zbS5tcy9hcGkvdjIvdXBsb2FkX2hpc3RvcnknLCB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogc21tc0NvbmZpZy50b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHVwbG9hZEhpc3RvcnkuZGF0YS5jb2RlID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICBjb25zdCBpbWFnZXMgPSB1cGxvYWRIaXN0b3J5LmRhdGEuZGF0YVxuICAgICAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgaW1hZ2VzKSB7XG4gICAgICAgICAgICBpZiAoaW1hZ2UudXJsID09PSBib2R5LmltYWdlcykge1xuICAgICAgICAgICAgICBpbWcuaGFzaCA9IGltYWdlLmhhc2hcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBib2R5Lm1lc3NhZ2VcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2JhY2t1cERvbWFpbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJhY2t1cERvbWFpbiB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuc21tcywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVRjeXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaWduYXR1cmUge1xuICBzaWduYXR1cmU6IHN0cmluZ1xuICBhcHBJZDogc3RyaW5nXG4gIGJ1Y2tldDogc3RyaW5nXG4gIHNpZ25UaW1lOiBzdHJpbmdcbn1cblxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogSVNpZ25hdHVyZSA9PiB7XG4gIGNvbnN0IHNlY3JldElkID0gb3B0aW9ucy5zZWNyZXRJZFxuICBjb25zdCBzZWNyZXRLZXkgPSBvcHRpb25zLnNlY3JldEtleVxuICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWRcbiAgY29uc3QgYnVja2V0ID0gb3B0aW9ucy5idWNrZXRcbiAgbGV0IHNpZ25hdHVyZVxuICBsZXQgc2lnblRpbWU6IHN0cmluZyA9ICcnXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xuICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwKVxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgLSAxXG4gICAgY29uc3QgZXhwaXJlZCA9IGN1cnJlbnQgKyAzNjAwXG5cbiAgICBjb25zdCBtdWx0aVNpZ25hdHVyZSA9IGBhPSR7YXBwSWR9JmI9JHtidWNrZXR9Jms9JHtzZWNyZXRJZH0mZT0ke2V4cGlyZWR9JnQ9JHtjdXJyZW50fSZyPSR7cmFuZG9tfSZmPWBcblxuICAgIGNvbnN0IHNpZ25IZXhLZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKG11bHRpU2lnbmF0dXJlKS5kaWdlc3QoKVxuICAgIGNvbnN0IHRlbXBTdHJpbmcgPSBCdWZmZXIuY29uY2F0KFtzaWduSGV4S2V5LCBCdWZmZXIuZnJvbShtdWx0aVNpZ25hdHVyZSldKVxuICAgIHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlbXBTdHJpbmcpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICB9IGVsc2Uge1xuICAgIC8vIGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNzc3OCNzaWduYXR1cmVcbiAgICBjb25zdCB0b2RheSA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxuICAgIGNvbnN0IHRvbW9ycm93ID0gdG9kYXkgKyA4NjQwMFxuICAgIHNpZ25UaW1lID0gYCR7dG9kYXl9OyR7dG9tb3Jyb3d9YFxuICAgIGNvbnN0IHNpZ25LZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKHNpZ25UaW1lKS5kaWdlc3QoJ2hleCcpXG4gICAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8gb3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcbiAgICBjb25zdCBodHRwU3RyaW5nID0gYHB1dFxcbi8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfVxcblxcbmhvc3Q9JHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH1cXG5gXG4gICAgY29uc3Qgc2hhMWVkSHR0cFN0cmluZyA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGh0dHBTdHJpbmcpLmRpZ2VzdCgnaGV4JylcbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBgc2hhMVxcbiR7c2lnblRpbWV9XFxuJHtzaGExZWRIdHRwU3RyaW5nfVxcbmBcbiAgICBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNpZ25LZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24pLmRpZ2VzdCgnaGV4JylcbiAgfVxuICByZXR1cm4ge1xuICAgIHNpZ25hdHVyZSxcbiAgICBhcHBJZCxcbiAgICBidWNrZXQsXG4gICAgc2lnblRpbWVcbiAgfVxufVxuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChcbiAgb3B0aW9uczogSVRjeXVuQ29uZmlnLFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBzaWduYXR1cmU6IElTaWduYXR1cmUsXG4gIGltYWdlOiBCdWZmZXIsXG4gIHZlcnNpb246IHN0cmluZ1xuKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcbiAgY29uc3QgYXJlYSA9IG9wdGlvbnMuYXJlYVxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xuICAgIHJldHVybiB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogYGh0dHA6Ly8ke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tL2ZpbGVzL3YyLyR7c2lnbmF0dXJlLmFwcElkfS8ke3NpZ25hdHVyZS5idWNrZXR9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZmlsZU5hbWV9YCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgSG9zdDogYCR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb21gLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUuc2lnbmF0dXJlLFxuICAgICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgICAnVXNlci1BZ2VudCc6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcbiAgICAgIH0sXG4gICAgICBmb3JtRGF0YToge1xuICAgICAgICBvcDogJ3VwbG9hZCcsXG4gICAgICAgIGZpbGVjb250ZW50OiBpbWFnZVxuICAgICAgfSxcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICB1cmw6IGBodHRwOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH1gLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxuICAgICAgICBjb250ZW50VHlwZTogbG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXG4gICAgICB9LFxuICAgICAgYm9keTogaW1hZ2UsXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxuICBpZiAoIXRjWXVuT3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWdcIilcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IGN1c3RvbVVybCA9ICh0Y1l1bk9wdGlvbnMuY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gICAgY29uc3QgcGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgICAgcGF0aDogdGNZdW5PcHRpb25zLnBhdGhcbiAgICB9KVxuICAgIHRjWXVuT3B0aW9ucy5wYXRoID0gcGF0aFxuICAgIGNvbnN0IHVzZVY0ID0gIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlLCBjdHguR1VJX1ZFUlNJT04gfHwgY3R4LlZFUlNJT04pXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eFxuICAgICAgICAgIC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXG4gICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICBtc2c6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0FVVEhfRkFJTEVEJyksXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBsZXQgYm9keVxuICAgICAgICBpZiAodXNlVjQgJiYgdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IHJlc1xuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xuICAgICAgICAgIGlmIChib2R5Py5ib2R5Py5lcnIpIHtcbiAgICAgICAgICAgIHRocm93IGJvZHkuYm9keS5lcnJcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHk/LmJvZHk/Lm1zZyB8fCBib2R5Py5ib2R5Py5tZXNzYWdlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25VcmwgPSB0Y1l1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xuICAgICAgICBjb25zdCBzbGltID0gdGNZdW5PcHRpb25zLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF0Y1l1bk9wdGlvbnMuc2xpbVxuICAgICAgICBpZiAodXNlVjQgJiYgYm9keS5tZXNzYWdlID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtib2R5LmRhdGEuc291cmNlX3VybCBhcyBzdHJpbmd9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghdXNlVjQgJiYgYm9keSAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgPyB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7dGNZdW5PcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke3RjWXVuT3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5ib2R5Lm1zZylcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2xpbSkge1xuICAgICAgICAgIGlmIChvcHRpb25VcmwpIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgKz0gJyZpbWFnZVNsaW0nXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgKz0gJz9pbWFnZVNsaW0nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBpZiAoIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShlcnIuZXJyb3IpXG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICAgIGNvZGU6IGJvZHkuY29kZSBhcyBzdHJpbmdcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0ZXh0OiAnaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NDMyJ1xuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAndmVyc2lvbicsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJylcbiAgICAgIH0sXG4gICAgICBhbGlhczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJyksXG4gICAgICBjaG9pY2VzOiBbJ3Y0JywgJ3Y1J10sXG4gICAgICBkZWZhdWx0OiAndjUnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0SWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldElkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVknKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhcHBJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXBwSWQgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhcmVhJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzbGltJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2xpbSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhIXVzZXJDb25maWcuc2xpbSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IGNvbmZpcm1UZXh0KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0nKVxuICAgICAgfSxcbiAgICAgIGdldCBjYW5jZWxUZXh0KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IHRpcHMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQJylcbiAgICAgIH1cbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnRjeXVuLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMsIHJlbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgUmVhZFN0cmVhbSB9IGZyb20gJ2ZzJ1xuXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElUZWxlZ3JhcGhDb25maWcsIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAob3B0aW9uczogSVRlbGVncmFwaENvbmZpZywgaW1hZ2U6IFJlYWRTdHJlYW0pOiBQcm9taXNlPElPbGRSZXFPcHRpb25zPiA9PiB7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICdodHRwczovL3RlbGVncmEucGgvdXBsb2FkJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgfSxcbiAgICBmb3JtRGF0YToge1xuICAgICAgZmlsZTogaW1hZ2VcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcbiAgfVxuICByZXR1cm4gcmVxdWVzdE9wdGlvbnNcbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgbGV0IHRnT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVRlbGVncmFwaENvbmZpZz4oJ3BpY0JlZC50ZWxlZ3JhcGhwbGlzdCcpXG4gIGlmICghdGdPcHRpb25zKSB7XG4gICAgdGdPcHRpb25zID0ge31cbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcbiAgICAgICAgZW5zdXJlRGlyU3luYyh1cGxvYWRUZW1wUGF0aClcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKHVwbG9hZFRlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBvc3RPcHRpb25zKHRnT3B0aW9ucywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0ZW1wRmlsZVBhdGgpKVxuICAgICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzKSA6IHJlc1xuICAgICAgICByZW1vdmUodGVtcEZpbGVQYXRoKVxuICAgICAgICBpZiAoYm9keT8uWzBdPy5zcmMpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vdGVsZWdyYS5waCR7Ym9keVswXS5zcmN9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpLFxuICAgICAgdGV4dDogJydcbiAgICB9KVxuICAgIHRocm93IGVycj8ucmVzcG9uc2U/LmRhdGEgfHwgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVRlbGVncmFwaENvbmZpZz4oJ3BpY0JlZC50ZWxlZ3JhcGhwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdwcm94eScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy50ZWxlZ3JhcGhwbGlzdCwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URUxFR1JBUEgnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IHNhZmVQYXJzZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcblxuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVXB5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcbiAgY29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLnBhc3N3b3JkXG4gIGNvbnN0IG1kNVBhc3N3b3JkID0gTUQ1KHBhc3N3b3JkKVxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXG4gIGNvbnN0IHVyaSA9IGAvJHtvcHRpb25zLmJ1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcbiAgY29uc3Qgc2lnbiA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgbWQ1UGFzc3dvcmQpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCdiYXNlNjQnKVxuICByZXR1cm4gYFVQWVVOICR7b3BlcmF0b3J9OiR7c2lnbn1gXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKFxuICBvcHRpb25zOiBJVXB5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICBpbWFnZTogQnVmZmVyXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXG4gIGxldCBlbmRwb2ludCA9IChvcHRpb25zLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nKS5yZXBsYWNlKC9cXC8rJC9nLCAnJylcbiAgaWYgKCFlbmRwb2ludC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICBlbmRwb2ludCA9IGBodHRwczovLyR7ZW5kcG9pbnR9YFxuICB9XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGAke2VuZHBvaW50fS8ke2J1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcbiAgICAgIERhdGU6IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWFnZSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIE1ENShjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoJ2hleCcpXG59XG5cbmNvbnN0IGdldEFudGlMZWVjaFBhcmFtID0gKFxuICBhbnRpTGVlY2hUb2tlbjogc3RyaW5nLFxuICBleHBpcmVUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IElVcHl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMucGF0aCB8fCAnJ30ke2ZpbGVOYW1lfWAucmVwbGFjZSgvJTJGL2csICcvJykucmVwbGFjZSgvXlxcLysvZywgJy8nKVxuICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcbiAgY29uc3QgZXhwaXJlID0gZXhwaXJlVGltZSA/IG5vdyArIHBhcnNlSW50KGV4cGlyZVRpbWUudG9TdHJpbmcoKSwgMTApIDogbm93ICsgMTgwMFxuICBjb25zdCBzaWduID0gTUQ1KGAke2FudGlMZWVjaFRva2VufSYke2V4cGlyZX0mJHt1cml9YClcbiAgY29uc3QgdXB0ID0gYCR7c2lnbi5zdWJzdHJpbmcoMTIsIDIwKX0ke2V4cGlyZX1gXG4gIHJldHVybiBgX3VwdD0ke3VwdH1gXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHVweXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJylcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgdXBZdW4gY29uZmlnXCIpXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBjb25zdCBwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7IHBhdGg6IHVweXVuT3B0aW9ucy5wYXRoIH0pXG4gICAgdXB5dW5PcHRpb25zLnBhdGggPSBwYXRoXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gdXB5dW5PcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHt1cHl1bk9wdGlvbnMudXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke3N1ZmZpeH1gXG4gICAgICAgICAgaWYgKHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbikge1xuICAgICAgICAgICAgY29uc3QgdXB0ID0gZ2V0QW50aUxlZWNoUGFyYW0oXG4gICAgICAgICAgICAgIHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbixcbiAgICAgICAgICAgICAgdXB5dW5PcHRpb25zLmV4cGlyZVRpbWUsXG4gICAgICAgICAgICAgIHVweXVuT3B0aW9ucyxcbiAgICAgICAgICAgICAgaW1nLmZpbGVOYW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gaW1nLmltZ1VybC5pbmNsdWRlcygnPycpID8gYCR7aW1nLmltZ1VybH0mJHt1cHR9YCA6IGAke2ltZy5pbWdVcmx9PyR7dXB0fWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5tZXNzYWdlID09PSAnVXBsb2FkIGZhaWxlZCcpIHtcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBzYWZlUGFyc2U8eyBjb2RlOiBzdHJpbmcgfT4oZXJyLmVycm9yKVxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XG4gICAgICAgICAgY29kZTogdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keS5jb2RlIDogYm9keVxuICAgICAgICB9KSxcbiAgICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLnVweXVuLmNvbS9hcGkvZXJybm8vJ1xuICAgICAgfSlcbiAgICB9XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcGVyYXRvcicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wZXJhdG9yIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FudGlMZWVjaFRva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFudGlMZWVjaFRva2VuIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZXhwaXJlVGltZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5leHBpcmVUaW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCB8fCAnaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMudXB5dW4sIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU4nKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBXZWJEQVZDbGllbnQsIFdlYkRBVkNsaWVudE9wdGlvbnMsIEF1dGhUeXBlLCBjcmVhdGVDbGllbnQgfSBmcm9tICd3ZWJkYXYnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVdlYmRhdlBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcbiAgaWYgKCF3ZWJkYXZwbGlzdE9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnXCIpXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC98XFwvKyQvZywgJycpXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5zc2xFbmFibGVkID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICBjb25zdCBhdXRoVHlwZSA9IHdlYmRhdnBsaXN0T3B0aW9ucy5hdXRoVHlwZSB8fCAnYmFzaWMnXG4gIGNvbnN0IHdlYnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiB3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCxcbiAgICByb290VG9FbXB0eTogZmFsc2VcbiAgfSlcbiAgY29uc3Qgc3VmZml4ID0gd2ViZGF2cGxpc3RPcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5jdXN0b21VcmxcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnRPcHRpb25zOiBXZWJEQVZDbGllbnRPcHRpb25zID0ge1xuICAgICAgICAgIHVzZXJuYW1lOiB3ZWJkYXZwbGlzdE9wdGlvbnMudXNlcm5hbWUsXG4gICAgICAgICAgcGFzc3dvcmQ6IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXNzd29yZCxcbiAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiA0ICogMTAyNCAqIDEwMjQgKiAxMDI0LFxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjRcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0aFR5cGUgPT09ICdkaWdlc3QnKSB7XG4gICAgICAgICAgY2xpZW50T3B0aW9ucy5hdXRoVHlwZSA9IEF1dGhUeXBlLkRpZ2VzdFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWVudDogV2ViREFWQ2xpZW50ID0gY3JlYXRlQ2xpZW50KHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0LCBjbGllbnRPcHRpb25zKVxuICAgICAgICBjb25zdCBwYXRoVG9DcmVhdGUgPSB1cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IHVwbG9hZFBhdGhcbiAgICAgICAgaWYgKHBhdGhUb0NyZWF0ZSkge1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5jcmVhdGVEaXJlY3RvcnkocGF0aFRvQ3JlYXRlLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wdXRGaWxlQ29udGVudHMoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgaW1hZ2UsIHtcbiAgICAgICAgICBvdmVyd3JpdGU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICd3ZWJkYXZwbGlzdCcpXG4gICAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoaW1nVGVtcEZpbGVQYXRoKSlcbiAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGltZ1RlbXBGaWxlUGF0aCwgaW1hZ2UpXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IGN1c3RvbVVybCB8fCB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxuICAgICAgICAgIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHt3ZWJwYXRofSR7aW1nLmZpbGVOYW1lfWApLnJlcGxhY2UoL15cXC8rL2csICcnKX0ke3N1ZmZpeH1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKS5yZXBsYWNlKC9eXFwvKy9nLCAnJyl9JHtzdWZmaXh9YFxuICAgICAgICAgIH1cbiAgICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS93ZWJkYXZwbGlzdC8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzc2xFbmFibGVkJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3NsRW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRScpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3ZWJwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2F1dGhUeXBlJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRScpXG4gICAgICB9LFxuICAgICAgY2hvaWNlczogWydiYXNpYycsICdkaWdlc3QnXSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXV0aFR5cGUgfHwgJ2Jhc2ljJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29wdGlvbnMnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy53ZWJkYXZwbGlzdCwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCBhZHZhbmNlZHBsaXN0VXBsb2FkZXIgZnJvbSAnLi9hZHZhbmNlZHBsaXN0J1xuaW1wb3J0IGFsaXN0VXBsb2FkZXIgZnJvbSAnLi9hbGlzdCdcbmltcG9ydCBhbGlZdW5VcGxvYWRlciBmcm9tICcuL2FsaXl1bidcbmltcG9ydCBhd3NzM3BsaXN0VXBsb2FkZXIgZnJvbSAnLi9hd3NzM3BsaXN0J1xuaW1wb3J0IGdpdGh1YlVwbG9hZGVyIGZyb20gJy4vZ2l0aHViJ1xuaW1wb3J0IGltZ3VyVXBsb2FkZXIgZnJvbSAnLi9pbWd1cidcbmltcG9ydCBsb2NhbFVwbG9hZGVyIGZyb20gJy4vbG9jYWwnXG5pbXBvcnQgbHNreVVwbG9hZGVyIGZyb20gJy4vbHNreSdcbmltcG9ydCBwaWNsaXN0VXBsb2FkZXIgZnJvbSAnLi9waWNsaXN0J1xuaW1wb3J0IHFpbml1VXBsb2FkZXIgZnJvbSAnLi9xaW5pdSdcbmltcG9ydCBzZnRwVXBsb2FkZXIgZnJvbSAnLi9zZnRwJ1xuaW1wb3J0IHNtbXNVcGxvYWRlciBmcm9tICcuL3NtbXMnXG5pbXBvcnQgdGNZdW5VcGxvYWRlciBmcm9tICcuL3RjeXVuJ1xuaW1wb3J0IHRlbGVncmFwaFVwbG9hZGVyIGZyb20gJy4vdGVsZWdyYXBoJ1xuaW1wb3J0IHVwWXVuVXBsb2FkZXIgZnJvbSAnLi91cHl1bidcbmltcG9ydCB3ZWJkYXZwbGlzdFVwbG9hZGVyIGZyb20gJy4vd2ViZGF2J1xuXG5jb25zdCBidWlsZEluVXBsb2FkZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyKGN0eDogSVBpY0dvKSB7XG4gICAgICBhZHZhbmNlZHBsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgYWxpc3RVcGxvYWRlcihjdHgpXG4gICAgICBhbGlZdW5VcGxvYWRlcihjdHgpXG4gICAgICBhd3NzM3BsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgZ2l0aHViVXBsb2FkZXIoY3R4KVxuICAgICAgaW1ndXJVcGxvYWRlcihjdHgpXG4gICAgICBsb2NhbFVwbG9hZGVyKGN0eClcbiAgICAgIGxza3lVcGxvYWRlcihjdHgpXG4gICAgICBwaWNsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXG4gICAgICBzZnRwVXBsb2FkZXIoY3R4KVxuICAgICAgc21tc1VwbG9hZGVyKGN0eClcbiAgICAgIHRjWXVuVXBsb2FkZXIoY3R4KVxuICAgICAgdGVsZWdyYXBoVXBsb2FkZXIoY3R4KVxuICAgICAgdXBZdW5VcGxvYWRlcihjdHgpXG4gICAgICB3ZWJkYXZwbGlzdFVwbG9hZGVyKGN0eClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblVwbG9hZGVyc1xuIiwiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuXG5pbXBvcnQgeyBpc1VybCwgZ2V0SW1hZ2VTaXplLCBnZXRGU0ZpbGUsIGdldFVSTEZpbGUgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJUGljR28sIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCBJSW1nSW5mbywgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nIHwgQnVmZmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaXRlbSkpIHtcbiAgICAgICAgaW5mbyA9IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGJ1ZmZlcjogaXRlbSxcbiAgICAgICAgICBmaWxlTmFtZTogJycsXG4gICAgICAgICAgZXh0bmFtZTogJydcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1VybChpdGVtKSkge1xuICAgICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXG4gICAgICAgIGNvbnN0IGV4dG5hbWUgPSBpbmZvLmV4dG5hbWUgfHwgaW1nU2l6ZS5leHRuYW1lIHx8ICcucG5nJ1xuICAgICAgICByZXN1bHRzW2luZGV4XSA9IHtcbiAgICAgICAgICBidWZmZXI6IGluZm8uYnVmZmVyLFxuICAgICAgICAgIGZpbGVOYW1lOiBpbmZvLmZpbGVOYW1lIHx8IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfSR7ZXh0bmFtZX1gLFxuICAgICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXG4gICAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXG4gICAgICB9XG4gICAgfSlcbiAgKVxuICAvLyByZW1vdmUgZW1wdHkgaXRlbVxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxuICByZXR1cm4gY3R4XG59XG5cbmNvbnN0IGdldEltZ1NpemUgPSAoY3R4OiBJUGljR28sIGZpbGU6IEJ1ZmZlciwgcGF0aDogc3RyaW5nIHwgQnVmZmVyKTogSUltZ1NpemUgPT4ge1xuICBjb25zdCBpbWFnZVNpemUgPSBnZXRJbWFnZVNpemUoZmlsZSlcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xuICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN0eC5sb2cud2FybihgY2FuJ3QgZ2V0ICR7cGF0aH0ncyBpbWFnZSBzaXplYClcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LmxvZy53YXJuKFwiY2FuJ3QgZ2V0IGltYWdlIHNpemVcIilcbiAgICB9XG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxuICB9XG4gIHJldHVybiBpbWFnZVNpemVcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBoYW5kbGVcbn1cbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxuICByZXR1cm4gY3R4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaGFuZGxlXG59XG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgb3MgZnJvbSAnb3MnXG5cbmltcG9ydCBtYWNDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbWFjLmFwcGxlc2NyaXB0J1xuaW1wb3J0IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93cy5wczEnXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXG5pbXBvcnQgbGludXhDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbGludXguc2gnXG5pbXBvcnQgd3NsQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dzbC5zaCdcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuL2VudW0nXG5pbXBvcnQgeyBJUGljR28sIElDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiB9IGZyb20gJy4vc3RhdGljJ1xuXG5leHBvcnQgdHlwZSBQbGF0Zm9ybSA9ICdkYXJ3aW4nIHwgJ3dpbjMyJyB8ICd3aW4xMCcgfCAnbGludXgnIHwgJ3dzbCdcblxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXG4gIGlmIChpc1dzbCkgcmV0dXJuICd3c2wnXG4gIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKVswXSA9PT0gJzEwJyA/ICd3aW4xMCcgOiAnd2luMzInXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICdkYXJ3aW4nXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICdsaW51eCdcbiAgfVxufVxuXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50OiB7XG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcbn0gPSB7XG4gIGRhcndpbjogbWFjQ2xpcGJvYXJkU2NyaXB0LFxuICB3aW4zMjogd2luZG93c0NsaXBib2FyZFNjcmlwdCxcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcbiAgbGludXg6IGxpbnV4Q2xpcGJvYXJkU2NyaXB0LFxuICB3c2w6IHdzbENsaXBib2FyZFNjcmlwdFxufVxuXG4vKipcbiAqIHBvd2Vyc2hlbGwgd2lsbCByZXBvcnQgZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBoYXZlIGEgJy5wczEnIGV4dGVuc2lvbixcbiAqIHNvIHdlIHNob3VsZCBrZWVwIHRoZSBleHRlbnNpb24gbmFtZSBjb25zaXN0ZW50IHdpdGggY29ycmVzcG9uZGluZyBzaGVsbFxuICovXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZToge1xuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXG59ID0ge1xuICBkYXJ3aW46ICdtYWMuYXBwbGVzY3JpcHQnLFxuICB3aW4zMjogJ3dpbmRvd3MucHMxJyxcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcbiAgbGludXg6ICdsaW51eC5zaCcsXG4gIHdzbDogJ3dzbC5zaCdcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VGb2xkZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSKVxuICBlbnN1cmVEaXJTeW5jKGltYWdlUGF0aClcbn1cblxuLy8gVGhhbmtzIHRvIHZzLXBpY2dvOiBodHRwczovL2dpdGh1Yi5jb20vU3BhZGVzLVMvdnMtcGljZ28vYmxvYi9tYXN0ZXIvc3JjL2V4dGVuc2lvbi50c1xuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xuICBjcmVhdGVJbWFnZUZvbGRlcihjdHgpXG4gIC8vIGFkZCBhbiBjbGlwYm9hcmQgaW1hZ2UgZm9sZGVyIHRvIGNvbnRyb2wgdGhlIGltYWdlIGNhY2hlIGZpbGVcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4oKHJlc29sdmU6IGFueSwgcmVqZWN0OiBhbnkpOiB2b2lkID0+IHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRQbGF0Zm9ybSgpXG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWVbcGxhdGZvcm1dKVxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhzY3JpcHRQYXRoKSkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzY3JpcHRQYXRoLCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSwgJ3V0ZjgnKVxuICAgIH1cbiAgICBsZXQgZXhlY3V0aW9uXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ29zYXNjcmlwdCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicgfHwgcGxhdGZvcm0gPT09ICd3aW4xMCcpIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xuICAgICAgICAnLW5vcHJvZmlsZScsXG4gICAgICAgICctbm9uaW50ZXJhY3RpdmUnLFxuICAgICAgICAnLW5vbG9nbycsXG4gICAgICAgICctc3RhJyxcbiAgICAgICAgJy1leGVjdXRpb25wb2xpY3knLFxuICAgICAgICAndW5yZXN0cmljdGVkJyxcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlL2lzc3Vlcy8zMlxuICAgICAgICAvLyAnLXdpbmRvd3N0eWxlJywnaGlkZGVuJyxcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxuICAgICAgICAnLWZpbGUnLFxuICAgICAgICBzY3JpcHRQYXRoLFxuICAgICAgICBpbWFnZVBhdGhcbiAgICAgIF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdzaCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxuICAgIH1cblxuICAgIGV4ZWN1dGlvbi5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICAgICAgaWYgKGRhdGEudG9TdHJpbmcoKS50cmltKCkgPT09ICdubyB4Y2xpcCBvciB3bC1jbGlwYm9hcmQnKSB7XG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXG4gICAgICAgICAgICBib2R5OiAnUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJ1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxuXG4gICAgICAvLyBpZiB0aGUgZmlsZVBhdGggaXMgdGhlIHJlYWwgZmlsZSBpbiBzeXN0ZW1cbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcbiAgICAgIGxldCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSBmYWxzZVxuXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXG4gICAgICBpZiAocGF0aC5iYXNlbmFtZShpbWdQYXRoKSAhPT0gcGF0aC5iYXNlbmFtZShpbWFnZVBhdGgpKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIG5vdCBnZW5lcmF0ZSBieSBwaWNnb1xuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xuICAgICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGltZ1BhdGggaXMgaW52YWxpZFxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYENhbid0IGZpbmQgJHtpbWdQYXRofWApKVxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgaW1nUGF0aCxcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXG4iLCJpbXBvcnQgeyBJQ29uZmlnLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcbmltcG9ydCB7IElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXG5cbmNsYXNzIERCIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBwcml2YXRlIHJlYWRvbmx5IGRiOiBKU09OU3RvcmVcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXG5cbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY0JlZCcsIHtcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJyxcbiAgICAgICAgICBzbW1zOiB7XG4gICAgICAgICAgICB0b2tlbjogJydcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljZ29QbHVnaW5zJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWQoZmx1c2g/OiBib29sZWFuKTogSUpTT04ge1xuICAgIHJldHVybiB0aGlzLmRiLnJlYWQoZmx1c2gpXG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcgPSAnJyk6IGFueSB7XG4gICAgdGhpcy5yZWFkKHRydWUpXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVhZCh0cnVlKVxuICAgIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXG4gIH1cblxuICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi5oYXMoa2V5KVxuICB9XG5cbiAgdW5zZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi51bnNldChrZXksIHZhbHVlKVxuICB9XG5cbiAgc2F2ZUNvbmZpZyhjb25maWc6IFBhcnRpYWw8SUNvbmZpZz4pOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxuICAgIH0pXG4gIH1cblxuICByZW1vdmVDb25maWcoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMudW5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgREJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IFpIX0NOID0ge1xuICBVUExPQURfRkFJTEVEOiAn5LiK5Lyg5aSx6LSlJyxcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueS7peWPiue9kee7nCcsXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6ZSZ6K+v56CB77yaJHtjb2Rlfe+8jOivt+aJk+W8gOa1j+iniOWZqOeymOi0tOWcsOWdgOafpeeci+ebuOWFs+WOn+WboCcsXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXG4gIEFVVEhfRkFJTEVEOiAn6K6k6K+B5aSx6LSlJyxcblxuICAvLyBzbW1zXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxuICBQSUNCRURfU01NU19UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9UT0tFTjogJ+ivt+Whq+WGmVRva2VuJyxcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXG5cbiAgLy8gYWR2YW5jZWRwbGlzdFxuICBQSUNCRURfQURWQU5DRURQTElTVDogJ+mrmOe6p+iHquWumuS5iScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0VORFBPSU5UOiAn6K6+5a6a5o6l5Y+j572R5Z2AJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vdXBsb2FkJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EOiAn6K6+5a6a6K+35rGC5pa55rOVJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0Q6ICfor7fpgInmi6nor7fmsYLmlrnms5UnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9GT1JNX0RBVEFfS0VZOiAn6K6+5a6a6KGo5Y2V5Y+C5pWw5ZCNJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9GT1JNX0RBVEFfS0VZOiAn5L6L5aaC77yaZmlsZScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlM6ICforr7lrpror7fmsYLlpLQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlM6ICfkvovlpoLvvJp7XCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQk9EWTogJ+iuvuWumuivt+axguS9kycsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWTogJ+S+i+Wmgu+8mntcImtleVwiOiBcInZhbHVlXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQ1VTVE9NX1BSRUZJWDogJ+iuvuWumuiHquWumuS5ieWJjee8gCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQ1VTVE9NX1BSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSDogJ+iuvuWumui/lOWbnuaVsOaNrlVSTOi3r+W+hCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfUkVTX0RBVEFfUEFUSDogJ+S+i+Wmgu+8mmRhdGEudXJsJyxcblxuICAvLyBsb2NhbFxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLDkuIrkvKAnLFxuICBQSUNCRURfTE9DQUxfUEFUSDogJ+iuvuWumui3r+W+hCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICfkvovlpoIgL3Vzci9sb2NhbC9pbWFnZXMvJyxcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcblxuICAvLyBhbGlzdFxuICBQSUNCRURfQUxJU1RfUExJU1Q6ICdBTGlzdCcsXG4gIFBJQ0JFRF9BTElTVF9VUkw6ICforr7lrppVUkwnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL2FsaXN0LmV4YW1wbGUuY29tJyxcbiAgUElDQkVEX0FMSVNUX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTjogJ+ivt+i+k+WFpVRva2VuKOS4jueUqOaIt+WQjS3lr4bnoIHkuozpgInkuIApJyxcbiAgUElDQkVEX0FMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfor7fovpPlhaXnlKjmiLflkI0o5LiOVG9rZW7kuozpgInkuIApJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfor7fovpPlhaXlr4bnoIEnLFxuICBQSUNCRURfQUxJU1RfVVBMT0FEX1BBVEg6ICforr7lrprkuIrkvKDot6/lvoQnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSDogJ+S+i+Wmgu+8mi90ZXN0JyxcbiAgUElDQkVEX0FMSVNUX1dFQl9QQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEg6ICfnlKjkuo7mi7zmjqXnvZHlnYDot6/lvoQnLFxuICBQSUNCRURfQUxJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gQWxpLWNsb3VkXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+iuvuWummFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWummFjY2Vzc0tleVNlY3JldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIFRlbmNlbnQtY2xvdWRcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICforr7lrppTZWNyZXRJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+iuvuWumkFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6K6+5a6a5o6l5YWl54K5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmnoHmmbrljovnvKknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICflm77niYfmnoHmmbrljovnvKnvvIzor6bmg4Xor7flj4LogINb5paH5qGj6K+05piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg2NDM4KScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn5byA5ZCvJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ+WFs+mXrScsXG5cbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxuICBQSUNCRURfR0lUSFVCX1JFUE86ICforr7lrprku5PlupPlkI0nLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+iuvuWumuWIhuaUr+WQjScsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICforr7lrppBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ+iuvuWumuiuv+mXrue9keWdgCcsXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICforr7lrppDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICforr7lrpphY2Nlc3NUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+iuvuWumuebuOWGjOWQjScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+iuvuWumuS7o+eQhicsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5Lyg5pe25aGr5YaZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG5cbiAgLy8gdXB5dW5cbiAgUElDQkVEX1VQWVVOOiAn5Y+I5ouN5LqRJyxcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+iuvuWumuaTjeS9nOWRmOWvhueggScsXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6K6+5a6a6Ieq5a6a5LmJQVBJ5o6l5YWl54K5JyxcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICforr7lrprpmLLnm5fpk75Ub2tlbicsXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ+iuvuWumui/h+acn+aXtumXtCjnp5IpJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5pON5L2c5ZGY5a+G56CBJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcblxuICAvLyB3ZWJkYXZwbGlzdFxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+iuvuWumuaOpeWPo+e9keWdgCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn5ZCv55SoU1NMJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R5Z2A6Lev5b6EJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+iuvuWumuiupOivgeaWueW8jycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pe25ZCv55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5a+G56CBJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/a2V5PTEyMzQ1NicsXG5cbiAgLy8gc2Z0cHBsaXN0XG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhoXnva5TRlRQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAn6K6+5a6a5Li75py6JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAn6K6+5a6a56uv5Y+jJyxcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICforr7lrprnp4HpkqUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+iuvuWumuengemSpeWvhueggScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ+iuvuWumuaWh+S7tueUqOaItzrnu4QnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ+iuvuWumuaWh+S7tuadg+mZkCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICforr7lrprmlofku7blpLnmnYPpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mjEuMS4xLjMnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiupDIyJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i+k+WFpeengemSpeWvhueggScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaC77yad3d3OmRhdGEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ+S+i+Wmgu+8mjA3NzUnLFxuXG4gIC8vIFBpY0xpc3RcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICforr7lrprlm77luoonLFxuICBQSUNCRURfUElDTElTVF9DT05GSUdOQU1FOiAn6K6+5a6a6YWN572u5ZCNJyxcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAn6K6+5a6a6Ym05p2DS2V5JyxcblxuICAvLyBMc2t5IFByb1xuICBQSUNCRURfTFNLWV9QTElTVDogJ+WFsOepuuWbvuW6iicsXG4gIFBJQ0JFRF9MU0tZX1ZFUlNJT046ICforr7lrprniYjmnKwnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICfkvovlpoJWMScsXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICforr7lrprkuLvmnLonLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tJyxcbiAgUElDQkVEX0xTS1lfVE9LRU46ICforr7lrppUb2tlbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICforr7lrprnrZbnlaVJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQ6ICfkvovlpoLvvJoxJyxcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICforr7lrprnm7jlhoxJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfpgInloavvvIxWMueJiOacrOmZkOWumicsXG4gIFBJQ0JFRF9MU0tZX1BFUk1JU1NJT046ICforr7lrprmnYPpmZAnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfkvovlpoLvvJpwdWJsaWMnLFxuXG4gIC8vIEF3c1MzUGxpc3RcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ+iuvuWumkFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWTogJ+iuvuWumlNlY3JldEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ+iuvuWumlJlZ2lvbicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VQTE9BRFBBVEg6ICforr7lrprkuIrkvKDot6/lvoQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ+iuvuWumuiHquWumuS5ieiKgueCuScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAn6K6+5a6a5Luj55CGJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAn5ZCv55SoczNGb3JjZVBhdGhTdHlsZScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+aLkue7neaXoOaViFRMU+ivgeS5pui/nuaOpScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDTDogJ+iuvuWumuS4iuS8oOi1hOa6kOeahOiuv+mXruetlueVpScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+W8gOWQryBgcGF0aFN0eWxlQWNjZXNzYCDml7bvvIzmmK/lkKbopoHnpoHnlKjmnIDnu4jnlJ/miJBVUkzkuK3mt7vliqAgYnVja2V0IOWJjee8gCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICfkvovlpoLvvJpBS0lBeHh4eHh4eHh4eHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ+S+i+Wmgu+8mnh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ+S+i+Wmgu+8mnRlc3QnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3Qve2Z1bGxOYW1lfScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3MzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pe25ZCv55SoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHml7blkK/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTDogJ+S+i+Wmgu+8mnB1YmxpYy1yZWFkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfpnIDopoHml7blkK/nlKgnLFxuXG4gIEJVSUxESU5fV0FURVJNQVJLOiAn5rC05Y2w6K6+572uJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAn6ZyA6KaB5re75Yqg5rC05Y2w5pe25ZCv55SoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+iuvuWumuawtOWNsOexu+WeiycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+ivt+mAieaLqeawtOWNsOexu+WeiycsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+aYr+WQpuWFqOWxj+awtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pe25ZCv55SoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6K6+5a6a5rC05Y2w6KeS5bqmJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICfor7fovpPlhaXmlbDlrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6K6+5a6a5rC05Y2w5paH5a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6K+36L6T5YWl5rC05Y2w5paH5a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAn6K6+5a6a5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iuvuWumuawtOWNsOebuOWvueS6juWbvueJh+eahOavlOS+iycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAn6K+36L6T5YWlMC0x55qE5bCP5pWwJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6K6+5a6a5rC05Y2w5a2X5L2T6aKc6ImyJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfor7fovpPlhaVyZ2LpopzoibLlgLwnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICforr7lrprmsLTljbDlm77niYfot6/lvoQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWbvueJh+i3r+W+hCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K6+5a6a5rC05Y2w5L2N572uJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+ivt+mAieaLqeawtOWNsOS9jee9ricsXG5cbiAgQlVJTERJTl9SRU5BTUU6ICfph43lkb3lkI3orr7nva4nLFxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICforr7lrprph43lkb3lkI3moLzlvI8nLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKblkK/nlKjph43lkb3lkI0nLFxuXG4gIEJVSUxESU5fQ09NUFJFU1M6ICflm77niYflpITnkIYnLFxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICforr7lrprlm77niYfotKjph48nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+ivt+i+k+WFpTAtMTAw55qE5pW05pWwJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbov5vooYzmoLzlvI/ovazmjaInLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2s5o2i5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6K6+5a6a6L2s5o2i5qC85byPJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfor7fpgInmi6novazmjaLmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6L+b6KGM5Zu+54mH57yp5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57yp5pS+5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+iuvuWumue8qeaUvuWuveW6picsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6K6+5a6a57yp5pS+6auY5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5Tov5vooYznvKnmlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnvKnmlL7ml7blkK/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9rOWbvueJhycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2s5Zu+54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6K6+5a6a57yp5pS+55m+5YiG5q+UJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfor7fovpPlhaXmlbDlrZcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6L+H5bCP5Zu+57yp5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpui/m+ihjOWbvueJh+aXi+i9rCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9rOaXtuWQr+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6K6+5a6a5peL6L2s6KeS5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+ivt+i+k+WFpeaVsOWtl++8jOWPr+S4uui0n+aVsCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuS/oeaBrycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG5L+h5oGv5pe25ZCv55SoJyxcblxuICAvLyBQbHVnaW4gSGFuZGxlclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOF5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOF5aSx6LSlJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijheWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijheWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjeaIluWQiOazleWuieijhei3r+W+hCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi9veaIkOWKnycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246L295aSx6LSlJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246L295aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246L295aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHotKUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nXG59XG5cbmV4cG9ydCB0eXBlIElMb2NhbGVzS2V5ID0ga2V5b2YgdHlwZW9mIFpIX0NOXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxuIiwiaW1wb3J0IHsgWkhfQ04sIElMb2NhbGVzS2V5LCBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IElQaWNHbywgSVN0cmluZ0tleU1hcCwgSUkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzLCB7IHBhdGhFeGlzdHNTeW5jLCBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJ1xuXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXG5cbmltcG9ydCB7IElMb2NhbGUgfSBmcm9tICdAcGljZ28vaTE4bi9kaXN0L3R5cGVzJ1xuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xuaW1wb3J0IHsgWkhfVFcgfSBmcm9tICcuL3poLVRXJ1xuXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcbiAgJ3poLUNOJzogWkhfQ04sXG4gICd6aC1UVyc6IFpIX1RXLFxuICBlbjogRU5cbn1cblxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGkxOG46IEkxOG5cbiAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RBZGFwdGVyOiBPYmplY3RBZGFwdGVyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMub2JqZWN0QWRhcHRlciA9IG5ldyBPYmplY3RBZGFwdGVyKGxhbmd1YWdlTGlzdClcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXG4gICAgaWYgKCFsYW5ndWFnZUxpc3RbbGFuZ3VhZ2VdKSB7XG4gICAgICBsYW5ndWFnZSA9ICd6aC1DTicgLy8gdXNlIGRlZmF1bHRcbiAgICB9XG4gICAgdGhpcy5pMThuID0gbmV3IEkxOG4oe1xuICAgICAgYWRhcHRlcjogdGhpcy5vYmplY3RBZGFwdGVyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxuICAgIH0pXG4gICAgdGhpcy5sb2FkT3V0dGVySTE4bigpXG4gIH1cblxuICBwcml2YXRlIGxvYWRPdXR0ZXJJMThuKCk6IHZvaWQge1xuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSB0aGlzLmdldE91dHRlckkxOG5Gb2xkZXIoKVxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xuICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZVxuICAgIH0pXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGlmIChmaWxlLmlzRmlsZSgpICYmIGZpbGUubmFtZS5lbmRzV2l0aCgnLnltbCcpKSB7XG4gICAgICAgIGNvbnN0IGkxOG5GaWxlUGF0aCA9IHBhdGguam9pbihpMThuRm9sZGVyLCBmaWxlLm5hbWUpXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGkxOG5GaWxlT2JqID0geWFtbC5sb2FkKGkxOG5GaWxlKSBhcyBJTG9jYWxlc1xuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3V0dGVySTE4bkZvbGRlcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ2kxOG4tY2xpJylcbiAgICBpZiAoIXBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XG4gICAgICBlbnN1cmVEaXJTeW5jKGkxOG5Gb2xkZXIpXG4gICAgfVxuICAgIHJldHVybiBpMThuRm9sZGVyXG4gIH1cblxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udHJhbnNsYXRlKGtleSwgYXJncykgfHwga2V5XG4gIH1cblxuICBzZXRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pMThuLnNldExhbmd1YWdlKGxhbmd1YWdlKVxuICAgIHRoaXMuY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcbiAgICB9KVxuICB9XG5cbiAgYWRkTG9jYWxlKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcbiAgICBpZiAoIW9yaWdpbkxvY2FsZXMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBjb25zdCBuZXdMb2NhbGVzID0gbWVyZ2Uob3JpZ2luTG9jYWxlcywgbG9jYWxlcylcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBhZGRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3JpZ2luTG9jYWxlcyA9IHRoaXMub2JqZWN0QWRhcHRlci5nZXRMb2NhbGUobGFuZ3VhZ2UpXG4gICAgaWYgKG9yaWdpbkxvY2FsZXMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBsb2NhbGVzKVxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGdldExhbmd1YWdlTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxhbmd1YWdlTGlzdClcbiAgfVxufVxuXG5leHBvcnQgeyBJMThuTWFuYWdlciB9XG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IFpIX1RXOiBJTG9jYWxlcyA9IHtcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXG4gIENIRUNLX1NFVFRJTkdTOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5piv5ZCm5q2j56K6JyxcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprlj4rntrLot68nLFxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivO+8miR7Y29kZX3vvIzoq4vmiZPplovngI/opr3lmajosrzkuIrlnLDlnYDmn6XnnIvnm7jpl5zljp/lm6AnLFxuICBTRVJWRVJfRVJST1I6ICfkvLrmnI3lmajlh7rpjK/vvIzoq4vph43oqaYnLFxuICBBVVRIX0ZBSUxFRDogJ+iqjeitieWkseaVlycsXG5cbiAgLy8gc21tc1xuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcbiAgUElDQkVEX1NNTVNfVE9LRU46ICfoqK3lrppUb2tlbicsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfVE9LRU46ICfoq4vovLjlhaVUb2tlbicsXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICflgpnnlKjkuIrlgrPntrLlnYAnLFxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxuXG4gIC8vYWR2YW5jZWRwbGlzdFxuICBQSUNCRURfQURWQU5DRURQTElTVDogJ+mrmOe0muiHquWumue+qScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0VORFBPSU5UOiAn6Kit5a6aQVBJ5Li75qmfJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vdXBsb2FkJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EOiAn6Kit5a6a6KuL5rGC5pa55rOVJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0Q6ICfoq4vpgbjmk4foq4vmsYLmlrnms5UnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9GT1JNX0RBVEFfS0VZOiAn6Kit5a6a6KGo5ZauS2V5JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9GT1JNX0RBVEFfS0VZOiAn5L6L5aaC77yaZmlsZScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlM6ICfoqK3lrproq4vmsYLpoK0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlM6ICfkvovlpoLvvJp7XCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQk9EWTogJ+ioreWumuiri+axgumrlCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWTogJ+S+i+Wmgu+8mntcImtleVwiOiBcInZhbHVlXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQ1VTVE9NX1BSRUZJWDogJ+ioreWumuiHquWumue+qeWJjee2tCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQ1VTVE9NX1BSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSDogJ+ioreWumui/lOWbnuaVuOaTmui3r+W+kScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfUkVTX0RBVEFfUEFUSDogJ+S+i+Wmgu+8mmRhdGEudXJsJyxcblxuICAvLyBsb2NhbFxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLAnLFxuICBQSUNCRURfTE9DQUxfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICfkvovlpoIgL3Vzci9sb2NhbC9pbWFnZXMvJyxcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICfoqK3lrprntrLlnYDot6/lvpEnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO57ay6aCB6aGv56S655qE6Lev5b6RJyxcblxuICAvLyBhbGlzdFxuICBQSUNCRURfQUxJU1RfUExJU1Q6ICdBTGlzdCcsXG4gIFBJQ0JFRF9BTElTVF9VUkw6ICfoqK3lrppVUkwnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL2FsaXN0LmV4YW1wbGUuY29tJyxcbiAgUElDQkVEX0FMSVNUX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuKOiIh+eUqOaItuWQjS3lr4bnorzkuozpgbjkuIApJyxcbiAgUElDQkVEX0FMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfoq4vovLjlhaXnlKjmiLblkI0o6IiHVG9rZW7kuozpgbjkuIApJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfoq4vovLjlhaXlr4bnorwnLFxuICBQSUNCRURfQUxJU1RfVVBMT0FEX1BBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSDogJ+S+i+Wmgu+8mi90ZXN0JyxcbiAgUElDQkVEX0FMSVNUX1dFQl9QQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEg6ICfnlKjkuo7ntrLpoIHpoa/npLrnmoTot6/lvpEnLFxuICBQSUNCRURfQUxJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gQWxpLWNsb3VkXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+ioreWummFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWummFjY2Vzc0tleVNlY3JldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIFRlbmNlbnQtY2xvdWRcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICfoqK3lrppTZWNyZXRJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+ioreWumkFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmpbXmmbrlo5PnuK4nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn6Zec6ZaJJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICfplovllZMnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICflnJbniYfmpbXmmbrlo5PnuK7vvIzoqbPmg4Xoq4vlj4PogINb5paH5qqU6Kqq5piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2LzQ5MjU5KScsXG5cbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+ioreWumuWIhuaUr+WQjeeosScsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICfoqK3lrppBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICfoqK3lrppDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+ioreWumuebuOewv+WQjScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+ioreWumlBST1hZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcblxuICAvLyB1cHl1blxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6Kit5a6a5pON5L2c5ZOhJyxcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6Kit5a6a5pON5L2c5ZOh5a+G56K8JyxcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfVVBZVU5fVVJMOiAn6Kit5a6a5Yqg6YCf57ay5Z2AJyxcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6Kit5a6a6YGO5pyf5pmC6ZaTKOenkiknLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuXG4gIC8vIHdlYmRhdlxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+ioreWumkFQSeS4u+apnycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICfoqK3lrproqo3orYnmlrnlvI8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICfoqK3lrprntrLnq5not6/lvpEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXnlKjmiLblr4bnorwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9dmFsdWUnLFxuXG4gIC8vIHNmdHBwbGlzdFxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YWn572uU0ZUUCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+ioreWumuS4u+apnycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+ioreWumuerr+WPoycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6Kit5a6a56eB6ZGwJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfoqK3lrprnp4HpkbDlr4bnorwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICfoqK3lrprmlofku7bnlKjmiLY657WEJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICfoqK3lrprmlofku7bmrIrpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6Kit5a6a5paH5Lu25aS+5qyK6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5joqo0yMicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovLjlhaXnp4HpkbDlr4bnorwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcblxuICAvLyBQaWNMaXN0XG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAn6Kit5a6a5ZyW5bqKJyxcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+ioreWumumFjee9ruWQjScsXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+ioreWumumRkuasiktleScsXG5cbiAgLy8gTHNreSBQcm9cbiAgUElDQkVEX0xTS1lfUExJU1Q6ICfomK3nqbrlnJbluoonLFxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6Kit5a6a54mI5pysJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAn6KuL6YG45pOH54mI5pysJyxcbiAgUElDQkVEX0xTS1lfSE9TVDogJ+ioreWumuS4u+apnycsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20nLFxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+ioreWumlRva2VuJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuJyxcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICfoqK3lrprnrZbnlaVJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQ6ICfkvovlpoIxJyxcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICfoqK3lrprnm7jlhopJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfkvovlpoIxJyxcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ+ioreWumuS4iuWCs+asiumZkCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ+iri+mBuOaTh+S4iuWCs+asiumZkCcsXG5cbiAgLy8gQXdzUzNQbGlzdFxuICBQSUNCRURfQVdTUzNQTElTVDogJ0FXUyBTMycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6Kit5a6aQWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6Kit5a6aU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6Kit5a6aUmVnaW9uJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UOiAn6Kit5a6a6Ieq5a6a576p56+A6bueJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICfoqK3lrprku6PnkIYnLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICfoqK3lrproh6rlrprnvqnntrLlnYAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1M6ICfplovllZ8gYHBhdGhTdHlsZUFjY2Vzc2AnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfplovllZ8gYHJlamVjdFVuYXV0aG9yaXplZGAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICfoqK3lrppBQ0wnLFxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfplovllZ8gYHBhdGhTdHlsZUFjY2Vzc2Ag5pmC77yM5piv5ZCm6KaB56aB55So5pyA57WC55Sf5oiQVVJM5Lit5re75YqgIGJ1Y2tldCDliY3ntrQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAn5L6L5aaC77yaQUtJQXh4eHh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICfkvovlpoLvvJp4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoLvvJp0ZXN0L3tmdWxsTmFtZX0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QQVRIU1RZTEVBQ0NFU1M6ICfpnIDopoHmmYLllZ/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaZguWVn+eUqCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaC77yacHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+mcgOimgeaZguWVn+eUqCcsXG5cbiAgQlVJTERJTl9XQVRFUk1BUks6ICfmsLTljbDoqK3lrponLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDmmYLllZ/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6Kit5a6a5rC05Y2w6aGe5Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6KuL6YG45pOH5rC05Y2w6aGe5Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDmmYLllZ/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICfoqK3lrprmsLTljbDop5LluqYnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+iri+i8uOWFpeaVuOWtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICfoqK3lrprmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfoq4vovLjlhaXmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICfoqK3lrprmsLTljbDlrZfpq5QnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5a2X6auU5paH5Lu26Lev5b6RJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6Kit5a6a5rC05Y2w5ZyW54mH5q+U5L6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfoq4vovLjlhaUwLTHnmoTmlbjlrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICfoqK3lrprmsLTljbDlrZfpq5TpoY/oibInLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iri+i8uOWFpXJnYumhj+iJsuWAvCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ioreWumuawtOWNsOWclueJh+i3r+W+kScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5ZyW54mH6Lev5b6RJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICfoqK3lrprmsLTljbDkvY3nva4nLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6KuL6YG45pOH5rC05Y2w5L2N572uJyxcblxuICBCVUlMRElOX1JFTkFNRTogJ+mHjeWRveWQjeioreWumicsXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+ioreWumumHjeWRveWQjeagvOW8jycsXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWVn+eUqOmHjeWRveWQjScsXG5cbiAgQlVJTERJTl9DT01QUkVTUzogJ+WclueJh+iZleeQhuioreWumicsXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+ioreWumuWclueJh+izqumHjycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMC0xMDDnmoTmlbTmlbgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpumAsuihjOagvOW8j+i9ieaPmycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovYnmj5vmmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+iri+mBuOaTh+i9ieaPm+agvOW8jycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbpgLLooYzlnJbniYfnuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6Kit5a6a57iu5pS+5a+s5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOmAsuihjOe4ruaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAn5piv5ZCm5Z6C55u057+76L2J5ZyW54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovYnlnJbniYcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICfoqK3lrprnuK7mlL7nmb7liIbmr5QnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+iri+i8uOWFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7PpgY7lsI/lnJbnuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6YCy6KGM5ZyW54mH5peL6L2JJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2J5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6KuL6Ly45YWl5pW45a2X77yM5Y+v54K66LKg5pW4JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG6LOH6KiKJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxuXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo53lpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246LyJ5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovInlpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovInlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosSdcbn1cbiIsImltcG9ydCB7IElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXG5leHBvcnQgY29uc3QgRU46IElMb2NhbGVzID0ge1xuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXG4gIENIRUNLX1NFVFRJTkdTOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MnLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ1BsZWFzZSBjaGVjayB5b3VyIHNldHRpbmdzIGFuZCBuZXR3b3JrJyxcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxuICBTRVJWRVJfRVJST1I6ICdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLFxuICBBVVRIX0ZBSUxFRDogJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcsXG5cbiAgLy8gc21tc1xuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOOiAnUGxlYXNlIGVudGVyIHRoZSB0b2tlbicsXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICdFeC4gc21tcy5hcHAnLFxuXG4gIC8vYWR2YW5jZWRwbGlzdFxuICBQSUNCRURfQURWQU5DRURQTElTVDogJ0FkdmFuY2VkJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAnUGxlYXNlIGVudGVyIHRoZSBlbmRwb2ludCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FVEhPRDogJ1NldCBNZXRob2QnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX01FVEhPRDogJ1BsZWFzZSBzZWxlY3QgdGhlIHJlcXVlc3QgbWV0aG9kJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfRk9STV9EQVRBX0tFWTogJ1NldCBGb3JtRGF0YSBLZXknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0ZPUk1fREFUQV9LRVk6ICdQbGVhc2UgZW50ZXIgdGhlIEZvcm1EYXRhIGtleScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlM6ICdTZXQgSGVhZGVycycsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfSEVBREVSUzogJ3N1Y2ggYXMge1wiQ29udGVudC1UeXBlXCI6IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwifScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0JPRFk6ICdTZXQgQm9keScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWTogJ3N1Y2ggYXMge1wia2V5XCI6IFwidmFsdWVcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01fUFJFRklYOiAnU2V0IEN1c3RvbSBQcmVmaXgnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0NVU1RPTV9QUkVGSVg6ICdzdWNoIGFzIGh0dHBzOi8vZXhhbXBsZS5jb20vJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSDogJ1NldCBSZXNwb25zZSBEYXRhIFBhdGgnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU19EQVRBX1BBVEg6ICdzdWNoIGFzIGRhdGEudXJsJyxcbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAnTG9jYWwnLFxuICBQSUNCRURfTE9DQUxfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ0V4LiAvVXNlcnMvbmFtZS9QaWN0dXJlcy8nLFxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAnU2V0IFdlYiBQYXRoJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdXJsIHBhdGgnLFxuXG4gIC8vIGFsaXN0XG4gIFBJQ0JFRF9BTElTVF9QTElTVDogJ0FMaXN0JyxcbiAgUElDQkVEX0FMSVNUX1VSTDogJ1NldCBVUkwnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly9hbGlzdC5leGFtcGxlLmNvbScsXG4gIFBJQ0JFRF9BTElTVF9UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1RPS0VOOiAnUGxlYXNlIGVudGVyIHRoZSB0b2tlbihjaG9vc2Ugb25lIG9mIGVpdGhlciB1c2VybmFtZS1wYXNzd29yZCBvciB0b2tlbiknLFxuICBQSUNCRURfQUxJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ1BsZWFzZSBlbnRlciB0aGUgdXNlcm5hbWUoY2hvb3NlIG9uZSBvZiBlaXRoZXIgdXNlcm5hbWUtcGFzc3dvcmQgb3IgdG9rZW4pJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgZW50ZXIgdGhlIHBhc3N3b3JkJyxcbiAgUElDQkVEX0FMSVNUX1VQTE9BRF9QQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVBMT0FEX1BBVEg6ICdFeC4gL3Rlc3QvJyxcbiAgUElDQkVEX0FMSVNUX1dFQl9QQVRIOiAnU2V0IFdlYiBQYXRoJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHVybCBwYXRoJyxcbiAgUElDQkVEX0FMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIEFsaS1jbG91ZFxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICdTZXQgYWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAnU2V0IGFjY2Vzc0tleVNlY3JldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICdTZXQgQXJlYScsXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ0V4LiBvc3MtY24tYmVpamluZycsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAnRXguID94LW9zcy1wcm9jZXNzPXh4eCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBUZW5jZW50LWNsb3VkXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICdUZW5jZW50IENsb3VkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ1NldCBTZWNyZXRJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICdTZXQgQXJlYScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ0V4LiAxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gYXAtYmVpamluZycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwOi8vdGVzdC5jb20nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAnU2V0IEltYWdlU2xpbScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6XG4gICAgJ0ltYWdlIGV4dHJlbWVseSBpbnRlbGxpZ2VudCBjb21wcmVzc2lvbiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBbZG9jdW1lbnQgZGVzY3JpcHRpb25dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODY0MzgpJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICdPUEVOJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ0NMT1NFJyxcbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAnU2V0IFJlcG8gTmFtZScsXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAnRXguIHVzZXJuYW1lL3JlcG8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gcWluaXVcbiAgUElDQkVEX1FJTklVOiAnUWluaXUnLFxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICdTZXQgU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ1NldCBVUkwnLFxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAnRXguIHowJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAnRXguIGh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuXG4gIC8vIHRlbGVncmFwaFxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcblxuICAvLyBpbWd1clxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ1NldCBDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICdTZXQgQWNjZXNzIFRva2VuJyxcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAnU2V0IEFsYnVtIE5hbWUnLFxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICdTZXQgUHJveHknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgYXMgYW5vbnltb3VzJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAnRXguIHRlc3QnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ0V4LiBodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxuXG4gIC8vIHVweXVuXG4gIFBJQ0JFRF9VUFlVTjogJ1VweXVuJyxcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfVVBZVU5fRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICdTZXQgT3BlcmF0b3InLFxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICdTZXQgT3BlcmF0b3IgUGFzc3dvcmQnLFxuICBQSUNCRURfVVBZVU5fUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX1VQWVVOX1VSTDogJ1NldCBVUkwnLFxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICdTZXQgQW50aS1MZWVjaCBUb2tlbicsXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ1NldCBFeHBpcmUgVGltZShzZWNvbmRzKScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAnRXguIG1lJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgb3BlcmF0b3IgcGFzc3dvcmQnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICdFeC4gaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICdFeC4gIWltZ3NsaW0nLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcblxuICAvLyB3ZWJkYXZcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAnU2V0IEF1dGggVHlwZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAnRXguIG1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSB0aGUgVVJMIG9mIHRoZSBpbWFnZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/a2V5PXZhbHVlJyxcblxuICAvLyBzZnRwcGxpc3RcbiAgUElDQkVEX1NGVFBQTElTVDogJ1NGVFAgQnVpbGRpbicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ1NldCBIb3N0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ1NldCBQcml2YXRlIEtleScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnU2V0IFByaXZhdGUgS2V5IFBhc3NwaHJhc2UnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICdTZXQgVXBsb2FkIFBhdGgnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICdTZXQgRmlsZSBVc2VyOkdyb3VwJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICdTZXQgRmlsZSBNb2RlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ1NldCBEaXJlY3RvcnkgTW9kZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIDEuMS4xLjMnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ0RlZmF1bHQgMjInLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ0V4LiAvVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ1BsZWFzZSB0eXBlIHRoZSBwcml2YXRlIGtleSBwYXNzcGhyYXNlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSB0aGUgVVJMIG9mIHRoZSBpbWFnZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICdFeC4gd3d3OmRhdGEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAnRXguIDA2NjQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICdFeC4gMDc3NScsXG5cbiAgLy8gUGljTGlzdFxuICBQSUNCRURfUElDTElTVDogJ1BpY0xpc3QnLFxuICBQSUNCRURfUElDTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxuICBQSUNCRURfUElDTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICdTZXQgUGljQmVkJyxcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ1NldCBDb25maWcgTmFtZScsXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ1NldCBLZXknLFxuXG4gIC8vIExza3kgUHJvXG4gIFBJQ0JFRF9MU0tZX1BMSVNUOiAnTHNreScsXG4gIFBJQ0JFRF9MU0tZX1ZFUlNJT046ICdTZXQgVmVyc2lvbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ0V4LiB2MScsXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ0V4LiBodHRwczovL2xza3kuY28nLFxuICBQSUNCRURfTFNLWV9UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICdFeC4geHh4JyxcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICdTZXQgU3RyYXRlZ3kgSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAnRXguIDEnLFxuICBQSUNCRURfTFNLWV9BTEJVTV9JRDogJ1NldCBBbGJ1bSBJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICdPcHRpb25hbCwgb25seSBmb3IgVjInLFxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAnU2V0IFBlcm1pc3NvbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ0V4LiBwdWJsaWMnLFxuXG4gIC8vIEF3c1MzUGxpc3RcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ1NldCBBY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICdTZXQgU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ1NldCBSZWdpb24nLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9QUk9YWTogJ1NldCBQcm94eScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAnU2V0IFBhdGhTdHlsZUFjY2VzcycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ1NldCBSZWplY3RVbmF1dGhvcml6ZWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICdTZXQgQUNMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOlxuICAgICd3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQsIHdoZXRoZXIgdG8gZGlzYWJsZSBhZGRpbmcgYnVja2V0IHByZWZpeCB0byB1cmwnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAnRXguIHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ0V4LiB4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ0V4LiB0ZXN0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICdFeC4gdXMtZWFzdC0xJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3Qve2Z1bGxOYW1lfScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAnRW5hYmxlIHdoZW4gYHBhdGhTdHlsZUFjY2Vzc2AgaXMgcmVxdWlyZWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ0VuYWJsZSB3aGVuIHJlamVjdGluZyBpbnZhbGlkIFRMUyBjZXJ0aWZpY2F0ZSBjb25uZWN0aW9uIGlzIHJlcXVpcmVkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICdFeC4gcHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQnLFxuXG4gIEJVSUxESU5fUkVOQU1FOiAnUmVuYW1lIFNldHRpbmdzJyxcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAnU2V0IHJlbmFtZSBmb3JtYXQnLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICdFbmFibGUgcmVuYW1lJyxcblxuICBCVUlMRElOX1dBVEVSTUFSSzogJ1dhdGVybWFyayBTZXR0aW5ncycsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICdTZXQgd2F0ZXJtYXJrIHR5cGUnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdFbmFibGUgd2hlbiBmdWxsLXNjcmVlbiB3YXRlcm1hcmsgaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAnU2V0IHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGZvbnQgZmlsZSBwYXRoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAnU2V0IHdhdGVybWFyayBmb250IGNvbG9yJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXG5cbiAgQlVJTERJTl9DT01QUkVTUzogJ1Byb2Nlc3NpbmcgU2V0dGluZ3MnLFxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICdTZXQgaW1hZ2UgcXVhbGl0eScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAwLTEwMCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAnV2hldGhlciB0byBwZXJmb3JtIGZvcm1hdCBjb252ZXJzaW9uJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ0VuYWJsZSB3aGVuIGZvcm1hdCBjb252ZXJzaW9uIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICdQbGVhc2Ugc2VsZWN0IGNvbnZlcnNpb24gZm9ybWF0JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ1NldCByZXNpemluZyB3aWR0aCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlIGJ5IHBlcmNlbnRhZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIHZlcnRpY2FsbHknLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxPUDogJ1doZXRoZXIgdG8gZmxpcCB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5JyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICdXaGV0aGVyIHRvIHNraXAgcmVzaXppbmcgb2Ygc21hbGwgaW1hZ2VzJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ0VuYWJsZSB3aGVuIGltYWdlIHJvdGF0aW9uIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICdTZXQgcm90YXRpb24gYW5nbGUnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ1doZXRoZXIgdG8gcmVtb3ZlIEVYSUYgaW5mb3JtYXRpb24nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAnRW5hYmxlIHdoZW4gcmVtb3ZpbmcgRVhJRiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCcsXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjpcbiAgICAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6XG4gICAgJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSBvciB2YWxpZCBpbnN0YWxsYXRpb24gcGF0aCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOlxuICAgICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcbn1cbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcbmltcG9ydCB7IHJlbW92ZSwgZW5zdXJlRmlsZVN5bmMsIHBhdGhFeGlzdHNTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBnZXQsIHNldCwgdW5zZXQgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBDb21tYW5kZXIgfSBmcm9tICcuLi9saWIvQ29tbWFuZGVyJ1xuaW1wb3J0IHsgTGlmZWN5Y2xlUGx1Z2lucywgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuLi9saWIvTGlmZWN5Y2xlUGx1Z2lucydcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXG5pbXBvcnQgeyBQbHVnaW5IYW5kbGVyIH0gZnJvbSAnLi4vbGliL1BsdWdpbkhhbmRsZXInXG5pbXBvcnQgeyBQbHVnaW5Mb2FkZXIgfSBmcm9tICcuLi9saWIvUGx1Z2luTG9hZGVyJ1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xuXG5pbXBvcnQgeyBMaWZlY3ljbGUgfSBmcm9tICcuL0xpZmVjeWNsZSdcblxuaW1wb3J0IGJ1aWxkSW5VcGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcbmltcG9ydCBidWlsZEluVHJhbnNmb3JtZXJzIGZyb20gJy4uL3BsdWdpbnMvdHJhbnNmb3JtZXInXG5cbmltcG9ydCBnZXRDbGlwYm9hcmRJbWFnZSBmcm9tICcuLi91dGlscy9nZXRDbGlwYm9hcmRJbWFnZSdcblxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IERCIGZyb20gJy4uL3V0aWxzL2RiJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCwgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXG5cbmltcG9ydCB7IEkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vaTE4bidcblxuaW1wb3J0IHtcbiAgSUhlbHBlcixcbiAgSUltZ0luZm8sXG4gIElDb25maWcsXG4gIElQaWNHbyxcbiAgSVN0cmluZ0tleU1hcCxcbiAgSVBsdWdpbkxvYWRlcixcbiAgSUkxOG5NYW5hZ2VyLFxuICBJUGljR29QbHVnaW4sXG4gIElQaWNHb1BsdWdpbkludGVyZmFjZSxcbiAgSVJlcXVlc3Rcbn0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBQaWNHbyBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElQaWNHbyB7XG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcbiAgcHJpdmF0ZSBsaWZlY3ljbGUhOiBMaWZlY3ljbGVcbiAgcHJpdmF0ZSBkYiE6IERCXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxuICBjb25maWdQYXRoOiBzdHJpbmdcbiAgYmFzZURpciE6IHN0cmluZ1xuICBoZWxwZXIhOiBJSGVscGVyXG4gIGxvZzogTG9nZ2VyXG4gIGNtZDogQ29tbWFuZGVyXG4gIG91dHB1dDogSUltZ0luZm9bXVxuICBpbnB1dDogYW55W11cbiAgcmF3SW5wdXQ6IGFueVtdXG4gIHByb2Nlc3NlZElucHV0OiBhbnlbXVxuICBwbHVnaW5IYW5kbGVyOiBQbHVnaW5IYW5kbGVyXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xuICAgKlxuICAgKiB1c2UgcmVxdWVzdCBpbnN0ZWFkXG4gICAqL1xuICBSZXF1ZXN0ITogUmVxdWVzdFxuICBpMThuITogSUkxOG5NYW5hZ2VyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cbiAgR1VJX1ZFUlNJT04/OiBzdHJpbmdcblxuICBnZXQgcGx1Z2luTG9hZGVyKCk6IElQbHVnaW5Mb2FkZXIge1xuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ1BhdGg6IHN0cmluZyA9ICcnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhcbiAgICB0aGlzLmlucHV0ID0gW11cbiAgICB0aGlzLnJhd0lucHV0ID0gW11cbiAgICB0aGlzLnByb2Nlc3NlZElucHV0ID0gW11cbiAgICB0aGlzLm91dHB1dCA9IFtdXG4gICAgdGhpcy5oZWxwZXIgPSB7XG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXG4gICAgICB1cGxvYWRlcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3VwbG9hZGVyJyksXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcbiAgICAgIGFmdGVyVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2FmdGVyVXBsb2FkUGx1Z2lucycpXG4gICAgfVxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxuICAgIHRoaXMubG9nID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXG4gICAgdGhpcy5pbml0Q29uZmlnKClcbiAgICB0aGlzLmluaXQoKVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSB0aGlzLmNvbmZpZ1BhdGggfHwgcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNsaXN0L2NvbmZpZy5qc29uJylcbiAgICBpZiAocGF0aC5leHRuYW1lKHRoaXMuY29uZmlnUGF0aCkudG9VcHBlckNhc2UoKSAhPT0gJy5KU09OJykge1xuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcbiAgICAgIHRocm93IEVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcbiAgICB9XG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcbiAgICBpZiAoIXBhdGhFeGlzdHNTeW5jKHRoaXMuY29uZmlnUGF0aCkpIHtcbiAgICAgIGVuc3VyZUZpbGVTeW5jKGAke3RoaXMuY29uZmlnUGF0aH1gKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYi5yZWFkKHRydWUpIGFzIElDb25maWdcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgLy8gaW5pdCAxOG4gYXQgZmlyc3RcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxuICAgICAgdGhpcy5SZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpcylcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlciA9IG5ldyBQbHVnaW5Mb2FkZXIodGhpcylcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgncGljZ28nKVxuICAgICAgYnVpbGRJblVwbG9hZGVycygpLnJlZ2lzdGVyKHRoaXMpXG4gICAgICBidWlsZEluVHJhbnNmb3JtZXJzKCkucmVnaXN0ZXIodGhpcylcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCcnKVxuICAgICAgLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXG4gICAgICB0aGlzLmxpZmVjeWNsZSA9IG5ldyBMaWZlY3ljbGUodGhpcylcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXG4gICAgICB0aGlzLmxvZy5lcnJvcihlKVxuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBlYXNpbHkgbWFubnVhbGx5IGxvYWQgYSBwbHVnaW5cbiAgICogaWYgcHJvdmlkZSBwbHVnaW4gbmFtZSwgd2lsbCByZWdpc3RlciBwbHVnaW4gYnkgbmFtZVxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXG4gICAqL1xuICB1c2UocGx1Z2luOiBJUGljR29QbHVnaW4sIG5hbWU/OiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2Uge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIVxuICAgIH1cbiAgICByZXR1cm4gcGx1Z2luKHRoaXMpXG4gIH1cblxuICByZWdpc3RlckNvbW1hbmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggIT09ICcnKSB7XG4gICAgICB0aGlzLmNtZC5pbml0KClcbiAgICAgIHRoaXMuY21kLmxvYWRDb21tYW5kcygpXG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZmlnPFQ+KG5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIHVua25vd24gYXMgVFxuICAgIH1cbiAgICByZXR1cm4gZ2V0KHRoaXMuX2NvbmZpZywgbmFtZSlcbiAgfVxuXG4gIHNhdmVDb25maWcoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLmRiLnNhdmVDb25maWcoY29uZmlnKVxuICB9XG5cbiAgcmVtb3ZlQ29uZmlnKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXG4gICAgdGhpcy5kYi51bnNldChrZXksIHByb3BOYW1lKVxuICB9XG5cbiAgc2V0Q29uZmlnKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke25hbWV9IGNhbid0IGJlIG1vZGlmaWVkYClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXG4gICAgICB9XG4gICAgICBzZXQodGhpcy5fY29uZmlnLCBuYW1lLCBjb25maWdbbmFtZV0pXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XG4gICAgICAgIGNvbmZpZ05hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBjb25maWdbbmFtZV1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHVuc2V0Q29uZmlnKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXG4gIH1cblxuICBnZXQgcmVxdWVzdCgpOiBJUmVxdWVzdFsncmVxdWVzdCddIHtcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXG4gIH1cblxuICBhc3luYyB1cGxvYWQoaW5wdXQ/OiBhbnlbXSk6IFByb21pc2U8SUltZ0luZm9bXSB8IEVycm9yPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdObyBjb25maWcgZmlsZSBmb3VuZCwgcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlnIGZpbGUgcGF0aCcpXG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxuICAgICAgICBjb25zdCBjbGVhbnVwID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICByZW1vdmUoaW1nUGF0aCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCBjbGVhbnVwKVxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjbGVhbnVwKVxuICAgICAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0pXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQpXG4gICAgICByZXR1cm4gb3V0cHV0XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkUmV0dXJuQ3R4KGlucHV0PzogYW55W10sIHNraXBQcm9jZXNzID0gZmFsc2UpOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignTm8gY29uZmlnIGZpbGUgZm91bmQsIHBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZyBmaWxlIHBhdGgnKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxuICAgICAgICBjb25zdCBjbGVhbnVwID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICByZW1vdmUoaW1nUGF0aCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCBjbGVhbnVwKVxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjbGVhbnVwKVxuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0sIHNraXBQcm9jZXNzKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQsIHNraXBQcm9jZXNzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgSW1nRnJvbVBhdGggZnJvbSAnLi9wYXRoJ1xuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXG5cbmNvbnN0IGJ1aWxkSW5UcmFuc2Zvcm1lcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgcmVnaXN0ZXIoY3R4OiBJUGljR28pIHtcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ3BhdGgnLCBJbWdGcm9tUGF0aClcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5UcmFuc2Zvcm1lcnNcbiJdLCJuYW1lcyI6WyJjcmVhdGVDb21tYW5kIiwiY21kIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxpYXMiLCJhY3Rpb24iLCJvcHRpb25zIiwicHJvZ3JhbSIsInByb3h5Iiwib3B0aW9uIiwicmVnaXN0cnkiLCJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwicGx1Z2lucyIsImluc3RhbGwiLCJjYXRjaCIsImUiLCJsb2ciLCJlcnJvciIsInVuaW5zdGFsbCIsInVwZGF0ZSIsImNvbmZpZyIsInJhbmRvbVN0cmluZ0dlbmVyYXRvciIsImxlbmd0aCIsImNoYXJzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiam9pbiIsImZvcm1hdEhlbHBlciIsIm51bSIsInRvU3RyaW5nIiwiZ2V0TWQ1IiwiaW5wdXQiLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwiZGlnZXN0IiwicmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIiwib2xkTmFtZSIsImN1c3RvbUZvcm1hdCIsImFmZml4RmlsZU5hbWUiLCJmaWxlQnVmZmVyIiwibm93IiwiRGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsImZpbGViYXNlbmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImV4dG5hbWUiLCJjb252ZXJzaW9uTWFwIiwic2xpY2UiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwicGFkU3RhcnQiLCJ1dWlkdjQiLCJ2NCIsInJlcGxhY2UiLCJnZXRUaW1lIiwidW5kZWZpbmVkIiwiT2JqZWN0Iiwia2V5cyIsInNvbWUiLCJpdGVtIiwiaW5jbHVkZXMiLCJleHQiLCJuZXdOYW1lIiwicmVkdWNlIiwiYWNjIiwiY3VyIiwiUmVnRXhwIiwiXyIsImdyb3VwMSIsInBhcnNlSW50IiwiX3Jlc3VsdCIsImtleSIsImNvdW50IiwibWF4IiwiZGlybmFtZSIsInNwbGl0Iiwic2VwIiwiYSIsImIiLCJpc1VybCIsInVybCIsInRlc3QiLCJpc1VybEVuY29kZSIsImRlY29kZVVSSSIsImhhbmRsZVVybEVuY29kZSIsImVuY29kZVVSSSIsImdldEltYWdlU2l6ZSIsImZpbGUiLCJ3aWR0aCIsImhlaWdodCIsInR5cGUiLCJpbWFnZVNpemUiLCJyZWFsIiwiZ2V0RlNGaWxlIiwiYXN5bmMiLCJmaWxlUGF0aCIsImZpbGVOYW1lIiwiYnVmZmVyIiwicmVhZEZpbGUiLCJzdWNjZXNzIiwiX2EiLCJyZWFzb24iLCJnZXRVUkxGaWxlIiwidGltZW91dElkIiwicmVxdWVzdEZuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXMiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcCIsImRhdGEiLCJjbGVhclRpbWVvdXQiLCJ1cmxQYXRoIiwiVVJMIiwicGF0aG5hbWUiLCJzZWFyY2hQYXJhbXMiLCJnZXQiLCJzdGFydHNXaXRoIiwibWVzc2FnZSIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJnZXRQbHVnaW5OYW1lVHlwZSIsIm5hbWUiLCJpc1NpbXBsZU5hbWUiLCJuYW1lT3JQYXRoIiwiaXNBYnNvbHV0ZSIsInBsdWdpblBhdGgiLCJwcm9jZXNzIiwiY3dkIiwiZnMiLCJleGlzdHNTeW5jIiwiaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lIiwic2NvcGUiLCJnZXRQcm9jZXNzUGx1Z2luTmFtZSIsImxvZ2dlciIsImNvbnNvbGUiLCJoYW5kbGVVbml4U3R5bGVQYXRoIiwid2FybiIsImdldE5vcm1hbFBsdWdpbk5hbWUiLCJyZW1vdmVQbHVnaW5WZXJzaW9uIiwicGFja2FnZUpTT05QYXRoIiwicG9zaXgiLCJwa2ciLCJyZWFkSlNPTlN5bmMiLCJwYXRoU3RyIiwicmVnIiwibWF0Y2hBcnIiLCJtYXRjaCIsImNvbmZpZ0JsYWNrTGlzdCIsImlzQ29uZmlnS2V5SW5CbGFja0xpc3QiLCJibGFja0l0ZW0iLCJpc0lucHV0Q29uZmlnVmFsaWQiLCJpc0FycmF5Iiwic2FmZVBhcnNlIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiZm9yY2VOdW1iZXIiLCJpc05hTiIsIk51bWJlciIsImlzRGV2IiwiZW52IiwiTk9ERV9FTlYiLCJkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoIiwiX19kaXJuYW1lIiwiQWRkV2F0ZXJtYXJrIiwiaW1nIiwid2F0ZXJtYXJrVHlwZSIsImRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCIsImlzRnVsbFNjcmVlbldhdGVybWFyayIsIndhdGVybWFya0RlZ3JlZSIsInRleHQiLCJ3YXRlcm1hcmtGb250UGF0aCIsIndhdGVybWFya1NjYWxlUmF0aW8iLCJ3YXRlcm1hcmtDb2xvciIsIndhdGVybWFya0ltYWdlUGF0aCIsInBvc2l0aW9uIiwiaW1hZ2UiLCJzaGFycCIsImFuaW1hdGVkIiwiaW1nV2lkdGgiLCJtZXRhZGF0YSIsIndhdGVybWFyayIsInRvQnVmZmVyIiwiY29sb3IiLCJmb250RmFtaWx5IiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImZpbGwiLCJ0ZXh0U1ZHIiwiVGV4dFRvU1ZHIiwibG9hZFN5bmMiLCJnZXRTVkciLCJCdWZmZXIiLCJ0ZXh0MlNWRyIsIndhdGVybWFya1dpZHRoIiwid2F0ZXJtYXJrSGVpZ2h0IiwiZ2V0U2l6ZSIsIndhdGVybWFya1Jlc2l6ZVdpZHRoIiwid2F0ZXJtYXJrUmVzaXplSGVpZ2h0IiwicmVzaXplIiwiZml0Iiwicm90YXRlIiwiYmFja2dyb3VuZCIsInIiLCJnIiwiYWxwaGEiLCJjcmVhdGVXYXRlcm1hcmsiLCJjb21wb3NpdGUiLCJncmF2aXR5IiwidGlsZSIsInZhbGlkUGFyYW0iLCJwYXJhbXMiLCJldmVyeSIsInBhcmFtIiwiYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QiLCJpbWFnZUZvcm1hdExpc3QiLCJ2YWxpZE91dHB1dEZvcm1hdCIsImZvcm1hdCIsImltYWdlQWRkV2F0ZXJNYXJrIiwid2F0ZXJtYXJrVGV4dCIsIndhdGVybWFya1Bvc2l0aW9uIiwiZm9ybWF0T3B0aW9ucyIsImZvcm1hdENvbnZlcnRPYmoiLCJxdWFsaXR5IiwiaXNDb252ZXJ0IiwiY29udmVydEZvcm1hdCIsImlzUmVTaXplIiwicmVTaXplSGVpZ2h0IiwicmVTaXplV2lkdGgiLCJza2lwUmVTaXplT2ZTbWFsbEltZyIsImlzUmVTaXplQnlQZXJjZW50IiwicmVTaXplUGVyY2VudCIsImlzUm90YXRlIiwiaXNGbGlwIiwiaXNGbG9wIiwicm90YXRlRGVncmVlIiwicGljQmVkIiwiaW1hZ2VDb21wcmVzcyIsInJhd0Zvcm1hdCIsIm5vcm1hbGl6ZUltYWdlRXh0IiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0Iiwicm91bmQiLCJzY2FsZVJhdGlvIiwiZmxpcCIsImZsb3AiLCJuZXdGb3JtYXQiLCJnZXRDb252ZXJ0ZWRGb3JtYXQiLCJ0b0Zvcm1hdCIsIm1vempwZWciLCJ0b0xvd2VyQ2FzZSIsImlzTmVlZEFkZFdhdGVybWFyayIsIndhdGVybWFya09wdGlvbnMiLCJmaWxlRXh0IiwiaXNBZGRXYXRlcm1hcmsiLCJpc05lZWRDb21wcmVzcyIsImNvbXByZXNzT3B0aW9ucyIsInJlbW92ZUV4aWYiLCJ1cGxvYWQiLCJhcmd1bWVudHMiLCJpbnB1dExpc3QiLCJmaWx0ZXIiLCJleGlzdCIsImNvbXByZXNzIiwidXNlckNvbmZpZyIsImdldENvbmZpZyIsInByZWZpeCIsImkxOG4iLCJ0cmFuc2xhdGUiLCJyZXF1aXJlZCIsImRlZmF1bHQiLCJjaG9pY2VzIiwiaXNSZW1vdmVFeGlmIiwicmVuYW1lIiwiZW5hYmxlIiwidXBsb2FkZXJUcmFuc2xhdG9ycyIsImFkdmFuY2VkcGxpc3QiLCJhbGlzdHBsaXN0IiwiYWxpeXVuIiwiZ2l0aHViIiwiaW1ndXIiLCJsb2NhbCIsImxza3lwbGlzdCIsInBpY2xpc3QiLCJxaW5pdSIsInNmdHBwbGlzdCIsInNtbXMiLCJ0Y3l1biIsInRlbGVncmFwaHBsaXN0IiwidXB5dW4iLCJ3ZWJkYXZwbGlzdCIsImhhbmRsZUNvbmZpZyIsInByb21wdHMiLCJtb2R1bGUiLCJhbnN3ZXIiLCJpbnF1aXJlciIsInByb21wdCIsImNvbmZpZ05hbWUiLCJzYXZlQ29uZmlnIiwic2V0dGluZyIsInZhbHVlIiwiYnVpbGRpbiIsImhlbHBlciIsImdldElkTGlzdCIsInBsdWdpbkxvYWRlciIsImdldFBsdWdpbiIsImdldEZ1bGxMaXN0IiwiX2IiLCJwbHVnaW4iLCJpbmZvIiwiYXJndiIsInVzZSIsInVwbG9hZGVyIiwidHJhbnNmb3JtZXIiLCJwdXNoIiwiZm9yRWFjaCIsInBpY2dvUGx1Z2lucyIsInNldENvbmZpZyIsImdlbmVyYXRlIiwib3B0cyIsImdldE9wdGlvbnMiLCJ0bXAiLCJzb3VyY2UiLCJhbnN3ZXJzIiwiX2ZpbGVzIiwiZ2xvYmJ5IiwiZG90IiwiZ2xvYiIsImZpbHRlcnMiLCJmaWxlcyIsInJlbmRlciIsIndyaXRlRmlsZVRyZWUiLCJkZXN0IiwiY29tcGxldGUiLCJjb21wbGV0ZU1lc3NhZ2UiLCJleHAiLCJmbiIsIkZ1bmN0aW9uIiwic3RyaW5naWZ5IiwidGVtcGxhdGVQYXRoIiwib3B0aW9uc1BhdGgiLCJyZXF1aXJlIiwiZmlsZVRyZWUiLCJyZWFkRmlsZVN5bmMiLCJjb250ZW50IiwiZWpzUmVuZGVyIiwiaXNCdWZmZXIiLCJkaXIiLCJlbnN1cmVEaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsInJ1biIsIm9mZmxpbmUiLCJ0ZW1wbGF0ZSIsImhhc1NsYXNoIiwiZG93bmxvYWRBbmRHZW5lcmF0ZSIsInN5bmMiLCJkb3dubG9hZCIsImNsb25lIiwiZXJyIiwiaW5pdCIsInByb2plY3QiLCJpblBsYWNlIiwiaG9tZWRpciIsIm9rIiwib24iLCJjaGFsayIsImdyYXkiLCJsYW5nIiwibGlzdCIsImdldExhbmd1YWdlTGlzdCIsInNldExhbmd1YWdlIiwiTGlmZWN5Y2xlUGx1Z2lucyIsImNvbnN0cnVjdG9yIiwidGhpcyIsIk1hcCIsInBsdWdpbklkTWFwIiwicmVnaXN0ZXIiLCJpZCIsIlR5cGVFcnJvciIsImhhcyIsInNldCIsImN1cnJlbnRQbHVnaW4iLCJ1bnJlZ2lzdGVyIiwicGx1Z2luTmFtZSIsInBsdWdpbkxpc3QiLCJkZWxldGUiLCJnZXROYW1lIiwiZ2V0TGlzdCIsInZhbHVlcyIsInNldEN1cnJlbnRQbHVnaW5OYW1lIiwiQ29tbWFuZGVyIiwiQ29tbWFuZCIsInZlcnNpb24iLCJkZWJ1ZyIsInNpbGVudCIsImFyZ3MiLCJleGl0IiwiY3VycmVudFBsdWdpbk5hbWUiLCJsb2FkQ29tbWFuZHMiLCJJTG9nVHlwZSIsIklCdWlsZEluRXZlbnQiLCJJQnVzRXZlbnQiLCJMb2dnZXIiLCJsZXZlbCIsImhhbmRsZUxvZyIsIm1zZyIsImxvZ0xldmVsIiwiY2hlY2tMb2dMZXZlbCIsImxvZ0hlYWRlciIsInRvVXBwZXJDYXNlIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJsb2dGaWxlU2l6ZUxpbWl0IiwieWVsbG93IiwicmVjcmVhdGVMb2dGaWxlIiwidW5zaGlmdCIsImhhbmRsZVdyaXRlTG9nIiwibG9nRmlsZVNpemUiLCJzdGF0U3luYyIsInNpemUiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJkYXlqcyIsIkVycm9yIiwidXRpbCIsInN0YWNrIiwiYXBwZW5kRmlsZVN5bmMiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJoYXNQbHVnaW4iLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwiZnVsbE5hbWUiLCJwa2dOYW1lTGlzdCIsImV4ZWNDb21tYW5kIiwiY29kZSIsImVtaXQiLCJ0aXRsZSIsImJvZHkiLCJyZWdpc3RlclBsdWdpbiIsInVucmVnaXN0ZXJQbHVnaW4iLCJtb2R1bGVzIiwid2hlcmUiLCJjb25jYXQiLCJucG0iLCJzcGF3biIsImFzc2lnbiIsIm91dHB1dCIsInN0ZG91dCIsInBpcGUiLCJzdGRlcnIiLCJGQUlMRUQiLCJQbHVnaW5Mb2FkZXIiLCJmdWxsTGlzdCIsIlNldCIsInBsdWdpbk1hcCIsInBhY2thZ2VQYXRoIiwicmVwb3NpdG9yeSIsImxpY2Vuc2UiLCJyZXNvbHZlUGx1Z2luIiwiYmFzZWRpciIsImxvYWQiLCJwbHVnaW5EaXIiLCJqc29uIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJOT1RJRklDQVRJT04iLCJiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsImFmdGVyVXBsb2FkUGx1Z2lucyIsInJlbW92ZUNvbmZpZyIsImV2ZW50QnVzIiwiRXZlbnRFbWl0dGVyIiwiaHR0cHNBZ2VudCIsImh0dHBzIiwiQWdlbnQiLCJtYXhWZXJzaW9uIiwibWluVmVyc2lvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsImFwcGVuZEZvcm1EYXRhIiwiZm9ybSIsImFwcGVuZCIsInJlc3BvbnNlSW50ZXJjZXB0b3IiLCJyZXNwb25zZSIsInN0YXR1c0NvZGUiLCJzdGF0dXMiLCJyZXNwb25zZUVycm9ySGFuZGxlciIsImVycm9yT2JqIiwiX2MiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIlJlcXVlc3QiLCJDT05GSUdfQ0hBTkdFIiwiaGFuZGxlUHJveHkiLCJwcm94eU9wdGlvbnMiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicHJvdG9jb2wiLCJoZWFkZXJzIiwibWF4Qm9keUxlbmd0aCIsIkluZmluaXR5IiwibWF4Q29udGVudExlbmd0aCIsImh0dHBzT3Zlckh0dHAiLCJpbnN0YW5jZSIsImF4aW9zIiwiY3JlYXRlIiwiaW50ZXJjZXB0b3JzIiwib3B0IiwiX19pc09sZE9wdGlvbnMiLCJGb3JtRGF0YSIsImZvcm1EYXRhIiwiZ2V0SGVhZGVycyIsInFzIiwicmVxdWVzdEludGVyY2VwdG9yIiwib2JqIiwiY29udGVudFR5cGUiLCJDb250ZW50VHlwZSIsIkxpZmVjeWNsZSIsInN1cGVyIiwidHRmUGF0aCIsImVtcHR5RGlyU3luYyIsImhlbHBHZXRPcHRpb24iLCJza2lwUHJvY2VzcyIsImNvbmZpZ1BhdGgiLCJyYXdJbnB1dCIsInByb2Nlc3NlZElucHV0IiwiVkVSU0lPTiIsIkdVSV9WRVJTSU9OIiwiYmluZCIsInVuc2V0Q29uZmlnIiwidXBsb2FkUmV0dXJuQ3R4IiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJsaXN0ZW5lcnMiLCJyYXdMaXN0ZW5lcnMiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0IiwicmF3SW5wdXRQYXRoIiwiY2xvbmVEZWVwIiwiZG9VcGxvYWQiLCJhZnRlclVwbG9hZCIsInByZXByb2Nlc3MiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsImJ1aWxkSW5SZW5hbWUiLCJiZWZvcmVVcGxvYWQiLCJVUExPQURfUFJPR1JFU1MiLCJCRUZPUkVfVFJBTlNGT1JNIiwidGVtcEZpbGVQYXRoIiwiYWxsU2V0dGxlZCIsImluZGV4IiwiaXRlbUlzVXJsIiwidHJhbnNmb3JtZWRCdWZmZXIiLCJpc1NraXAiLCJleHRlbnRpb24iLCJkb3dubG9hZFRURiIsImhlaWNSZXN1bHQiLCJoZWljQ29udmVydCIsInRlbXBIZWljQ29udmVydEZpbGUiLCJuZXdFeHQiLCJ0ZW1wRmlsZSIsInJlbmFtZUNvbmZpZyIsImJhc2U2NEltYWdlIiwiaGFuZGxlUGx1Z2lucyIsImN1cnJlbnRUcmFuc2Zvcm1lciIsIkJFRk9SRV9VUExPQUQiLCJvdXRwdXRJbWciLCJBRlRFUl9VUExPQUQiLCJpc0VuY29kZU91dHB1dFVSTCIsImkiLCJpbWdVcmwiLCJGSU5JU0hFRCIsImxpZmVDeWNsZVBsdWdpbnMiLCJwbHVnaW5OYW1lcyIsImxpZmVDeWNsZU5hbWUiLCJhbGwiLCJmb3JtYXRQYXRoSGVscGVyIiwic3RhcnRTbGFzaCIsImVuZFNsYXNoIiwicm9vdFRvRW1wdHkiLCJjbGVhblBhdGgiLCJlbmNvZGVQYXRoIiwicCIsImVuY29kZVVSSUNvbXBvbmVudCIsImJ1aWxkSW5VcGxvYWRlck5hbWVzIiwicG9zdE9wdGlvbnMiLCJlbmRwb2ludCIsImZvcm1EYXRhS2V5IiwiZmlsZW5hbWUiLCJhZHZhbmNlZHBsaXN0Q29uZmlnIiwiaW1nTGlzdCIsInBvc3RDb25maWciLCJpbWFnZVVybCIsInJlc0RhdGFQYXRoIiwiY3VzdG9tUHJlZml4IiwidG9rZW4iLCJBdXRob3JpemF0aW9uIiwiaGFuZGxlUmVzRXJyb3IiLCJleHRyYWN0Q29uZmlnIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInVwbG9hZFBhdGgiLCJ3ZWJQYXRoIiwiY3VzdG9tVXJsIiwiYWxpc3RDb25maWciLCJ0b2tlblN0b3JlIiwicmVmcmVzaGVkQXQiLCJwb3N0IiwiZ2V0QWxpc3RUb2tlbiIsImZ1bGxVcGxvYWRQYXRoIiwidXBsb2FkUmVzIiwicmVmcmVzaFVybCIsImdldEluZm9VcmwiLCJyZWZyZXNoUmVzIiwicGFnZSIsInBlcl9wYWdlIiwicmVmcmVzaCIsImdldEluZm9SZXMiLCJzaWduIiwiZW5jb2RlZFBhdGgiLCJnZXRDdXJyZW50VVRDRGF0ZSIsInRvVVRDU3RyaW5nIiwiZ2VuZXJhdGVTaWduYXR1cmUiLCJkYXRlIiwic2lnblN0cmluZyIsImxvb2t1cCIsImJ1Y2tldCIsInNpZ25hdHVyZSIsImNyZWF0ZUhtYWMiLCJhY2Nlc3NLZXlTZWNyZXQiLCJhY2Nlc3NLZXlJZCIsImFyZWEiLCJIb3N0IiwiYWxpWXVuT3B0aW9ucyIsIm9wdGlvblVybCIsIkZpbGVOYW1lR2VuZXJhdG9yIiwibW9udGgiLCJkYXkiLCJleHROYW1lIiwibWQ1IiwiaW1nQnVmZmVyIiwibWQ1QjY0IiwibWQ1QjY0U2hvcnQiLCJzaGExIiwic2hhMjU2IiwidGltZXN0YW1wIiwidGltZXN0YW1wTVMiLCJmb3JtYXRQYXRoIiwiZmlsZU5hbWVHZW5lcmF0b3IiLCJmaWVsZHMiLCJyZSIsImdldFByb3h5QWdlbnQiLCJzc2xFbmFibGVkIiwiZm9ybWF0ZWRQcm94eSIsImZvcm1hdEh0dHBQcm94eVVSTCIsIkh0dHBzUHJveHlBZ2VudCIsIkh0dHBQcm94eUFnZW50Iiwia2VlcEFsaXZlIiwia2VlcEFsaXZlTXNlY3MiLCJzY2hlZHVsaW5nIiwiY3JlYXRlUzNDbGllbnQiLCJodHRwSGFuZGxlck9wdHMiLCJodHRwQWdlbnQiLCJjbGllbnRPcHRpb25zIiwicmVnaW9uIiwiY3JlZGVudGlhbHMiLCJhY2Nlc3NLZXlJRCIsInNlY3JldEFjY2Vzc0tleSIsInRscyIsImZvcmNlUGF0aFN0eWxlIiwicGF0aFN0eWxlQWNjZXNzIiwicmVxdWVzdEhhbmRsZXIiLCJOb2RlSHR0cEhhbmRsZXIiLCJTM0NsaWVudCIsImNyZWF0ZVVwbG9hZFRhc2siLCJjb250ZW50RW5jb2RpbmciLCJtaW1lIiwiZ2V0VHlwZSIsImZpbGVUeXBlIiwiRmlsZVR5cGUiLCJmcm9tQnVmZmVyIiwiZXh0cmFjdEluZm8iLCJQdXRPYmplY3RDb21tYW5kIiwiQnVja2V0IiwiYnVja2V0TmFtZSIsIktleSIsIkFDTCIsImFjbCIsIkJvZHkiLCJDb250ZW50RW5jb2RpbmciLCJjbGllbnQiLCJzZW5kIiwidXJsUHJlZml4IiwiZVRhZyIsInZlcnNpb25JZCIsInNpZ25lZFVybCIsImdldFNpZ25lZFVybCIsIkdldE9iamVjdENvbW1hbmQiLCJJZk1hdGNoIiwiVmVyc2lvbklkIiwiZXhwaXJlc0luIiwidXJsT2JqZWN0Iiwic2VhcmNoIiwiaHJlZiIsImdldEZpbGVVUkwiLCJFVGFnIiwiaW1nVVJMIiwiZm9ybWF0RGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMIiwiZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMIiwiQm9vbGVhbiIsInRhc2siLCJidWlsZEdpdGh1YkFwaVVybCIsInJlcG8iLCJleHRyYSIsImJyYW5jaCIsImdpdGh1Yk9wdGlvbnMiLCJkb3dubG9hZF91cmwiLCJoYXNoIiwic2hhIiwiaW1nQmFzZTY0IiwiY2xpZW50SWQiLCJhY2Nlc3NUb2tlbiIsImZvcm1hdEFjY2Vzc1Rva2VuIiwiYWxidW0iLCJhdXRob3JpemF0aW9uIiwicmVxdWVzdE9wdGlvbnMiLCJpbml0UGFnZXMiLCJhbGJ1bUhhc2giLCJnZXRBbGJ1bUhhc2hPcHRpb25zIiwidGltZW91dCIsImFsYnVtTGlzdCIsImltZ3VyT3B0aW9ucyIsImxpbmsiLCJkZWxldGVoYXNoIiwibG9jYWxDb25maWciLCJpbWdUZW1wUGF0aCIsImZpbGVJbWdUZW1wUGF0aCIsImZpbGVVcGxvYWRQYXRoIiwiY29weUZpbGVTeW5jIiwiZ2FsbGVyeVBhdGgiLCJpc1YyIiwidjFIZWFkZXJzIiwiQ29ubmVjdGlvbiIsInYxRm9ybURhdGEiLCJzc2wiLCJ2MkhlYWRlcnMiLCJBY2NlcHQiLCJzdHJhdGVneUlkIiwiYWxidW1JZCIsInBlcm1pc3Npb24iLCJ2MkZvcm1EYXRhIiwic3RyYXRlZ3lfaWQiLCJhbGJ1bV9pZCIsImFnZW50IiwibHNreU9wdGlvbnMiLCJsaW5rcyIsInBpY2JlZCIsInNlcnZlcktleSIsImlzSXAiLCJmb3JtYXRIb3N0IiwicGljbGlzdE9wdGlvbnMiLCJmdWxsUmVzdWx0Iiwic2VsZWN0QXJlYSIsImdldFRva2VuIiwicWluaXVPcHRpb25zIiwiYWNjZXNzS2V5Iiwic2VjcmV0S2V5IiwibWFjIiwiYXV0aCIsIk1hYyIsInJzIiwiUHV0UG9saWN5IiwidXBsb2FkVG9rZW4iLCJiYXNlVXJsIiwidXJsT3B0aW9ucyIsIlNTSENsaWVudCIsIk5vZGVTU0giLCJpc0Nvbm5lY3RlZCIsInN0YXRpYyIsInByaXZhdGVLZXkiLCJwYXNzcGhyYXNlIiwibG9naW5JbmZvIiwicHJpdmF0ZUtleVBhdGgiLCJjb25uZWN0IiwicmVtb3RlIiwiY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4IiwibWtkaXIiLCJwdXRGaWxlIiwiZmlsZU1vZGUiLCJleGVjIiwiZGlyUGF0aCIsImRpcmVjdG9yeU1vZGUiLCJkaXJNb2RlIiwiZGlycyIsImN1cnJlbnRQYXRoIiwic2NyaXB0IiwidXNlciIsImdyb3VwIiwiX3VzZXIiLCJfZ3JvdXAiLCJjbG9zZSIsImRpc3Bvc2UiLCJzZnRwcGxpc3RDb25maWciLCJ1cGxvYWRUZW1wUGF0aCIsImdldEluc3RhbmNlIiwicmVtb3RlUGF0aCIsImZpbGVVc2VyIiwiY2hvd24iLCJpbWdUZW1wRmlsZVBhdGgiLCJyZW1vdmVTeW5jIiwibW92ZVN5bmMiLCJhcGlUb2tlbiIsImJhY2t1cERvbWFpbiIsImRvbWFpbiIsInNtZmlsZSIsInNtbXNDb25maWciLCJpbWFnZXMiLCJ1cGxvYWRIaXN0b3J5Iiwic2VjcmV0SWQiLCJhcHBJZCIsInNpZ25UaW1lIiwidG9kYXkiLCJzaWduS2V5IiwiaHR0cFN0cmluZyIsInN0cmluZ1RvU2lnbiIsImN1cnJlbnQiLCJtdWx0aVNpZ25hdHVyZSIsInNpZ25IZXhLZXkiLCJ0ZW1wU3RyaW5nIiwib3AiLCJmaWxlY29udGVudCIsInRjWXVuT3B0aW9ucyIsInVzZVY0Iiwic2xpbSIsInNvdXJjZV91cmwiLCJjb25maXJtVGV4dCIsImNhbmNlbFRleHQiLCJ0aXBzIiwidGdPcHRpb25zIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlbW92ZSIsInNyYyIsIm9wZXJhdG9yIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJnZXRBbnRpTGVlY2hQYXJhbSIsImFudGlMZWVjaFRva2VuIiwiZXhwaXJlVGltZSIsInVyaSIsImV4cGlyZSIsInN1YnN0cmluZyIsInVweXVuT3B0aW9ucyIsInN1ZmZpeCIsInVwdCIsIndlYmRhdnBsaXN0T3B0aW9ucyIsImF1dGhUeXBlIiwid2VicGF0aCIsIkF1dGhUeXBlIiwiRGlnZXN0IiwiY3JlYXRlQ2xpZW50IiwicGF0aFRvQ3JlYXRlIiwiY3JlYXRlRGlyZWN0b3J5IiwicmVjdXJzaXZlIiwicHV0RmlsZUNvbnRlbnRzIiwib3ZlcndyaXRlIiwiYnVpbGRJblVwbG9hZGVycyIsImFkdmFuY2VkcGxpc3RVcGxvYWRlciIsImFsaXN0VXBsb2FkZXIiLCJhbGlZdW5VcGxvYWRlciIsImF3c3MzcGxpc3RVcGxvYWRlciIsImdpdGh1YlVwbG9hZGVyIiwiaW1ndXJVcGxvYWRlciIsImxvY2FsVXBsb2FkZXIiLCJsc2t5VXBsb2FkZXIiLCJwaWNsaXN0VXBsb2FkZXIiLCJxaW5pdVVwbG9hZGVyIiwic2Z0cFVwbG9hZGVyIiwic21tc1VwbG9hZGVyIiwidGNZdW5VcGxvYWRlciIsInRlbGVncmFwaFVwbG9hZGVyIiwidXBZdW5VcGxvYWRlciIsIndlYmRhdnBsaXN0VXBsb2FkZXIiLCJnZXRJbWdTaXplIiwiSW1nRnJvbVBhdGgiLCJyZXN1bHRzIiwiaW1nU2l6ZSIsIkltZ0Zyb21CYXNlNjQiLCJwbGF0Zm9ybTJTY3JpcHRDb250ZW50IiwiZGFyd2luIiwid2luMzIiLCJ3aW4xMCIsImxpbnV4Iiwid3NsIiwicGxhdGZvcm0yU2NyaXB0RmlsZW5hbWUiLCJnZXRDbGlwYm9hcmRJbWFnZSIsImltYWdlUGF0aCIsImNyZWF0ZUltYWdlRm9sZGVyIiwicGxhdGZvcm0iLCJpc1dzbCIsIm9zIiwicmVsZWFzZSIsImdldEN1cnJlbnRQbGF0Zm9ybSIsInNjcmlwdFBhdGgiLCJleGVjdXRpb24iLCJ0cmltIiwiaW1nUGF0aCIsInNob3VsZEtlZXBBZnRlclVwbG9hZGluZyIsIkRCIiwiZGIiLCJKU09OU3RvcmUiLCJyZWFkIiwiZmx1c2giLCJ1bnNldCIsImxhbmd1YWdlTGlzdCIsIlVQTE9BRF9GQUlMRUQiLCJDSEVDS19TRVRUSU5HUyIsIkNIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLIiwiVVBMT0FEX0ZBSUxFRF9SRUFTT04iLCJTRVJWRVJfRVJST1IiLCJBVVRIX0ZBSUxFRCIsIlBJQ0JFRF9TTU1TIiwiUElDQkVEX1NNTVNfVE9LRU4iLCJQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOIiwiUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfRU5EUE9JTlQiLCJQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0VORFBPSU5UIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0QiLCJQSUNCRURfQURWQU5DRURQTElTVF9GT1JNX0RBVEFfS0VZIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9GT1JNX0RBVEFfS0VZIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfSEVBREVSUyIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfSEVBREVSUyIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX0JPRFkiLCJQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0JPRFkiLCJQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01fUFJFRklYIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9DVVNUT01fUFJFRklYIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfUkVTX0RBVEFfUEFUSCIsIlBJQ0JFRF9MT0NBTCIsIlBJQ0JFRF9MT0NBTF9QQVRIIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9MT0NBTF9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfV0VCUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgiLCJQSUNCRURfQUxJU1RfUExJU1QiLCJQSUNCRURfQUxJU1RfVVJMIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMIiwiUElDQkVEX0FMSVNUX1RPS0VOIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfQUxJU1RfVVNFUk5BTUUiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9BTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX0FMSVNUX1VQTE9BRF9QQVRIIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVVBMT0FEX1BBVEgiLCJQSUNCRURfQUxJU1RfV0VCX1BBVEgiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9XRUJfUEFUSCIsIlBJQ0JFRF9BTElTVF9DVVNUT01VUkwiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfQUxJQ0xPVUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUIiwiUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9BTElDTE9VRF9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwiLCJQSUNCRURfR0lUSFVCIiwiUElDQkVEX0dJVEhVQl9UT0tFTiIsIlBJQ0JFRF9HSVRIVUJfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9DVVNUT01VUkwiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfUUlOSVUiLCJQSUNCRURfUUlOSVVfQUNDRVNTS0VZIiwiUElDQkVEX1FJTklVX1NFQ1JFVEtFWSIsIlBJQ0JFRF9RSU5JVV9CVUNLRVQiLCJQSUNCRURfUUlOSVVfUEFUSCIsIlBJQ0JFRF9RSU5JVV9VUkwiLCJQSUNCRURfUUlOSVVfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1FJTklVX01FU1NBR0VfVVJMIiwiUElDQkVEX1RFTEVHUkFQSCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfQUxCVU0iLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9FTkRQT0lOVCIsIlBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOIiwiUElDQkVEX1VQWVVOX0VYUElSRV9USU1FIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfV0VCREFWUExJU1QiLCJQSUNCRURfV0VCREFWUExJU1RfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfU0ZUUFBMSVNUIiwiUElDQkVEX1NGVFBQTElTVF9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUiLCJQSUNCRURfUElDTElTVCIsIlBJQ0JFRF9QSUNMSVNUX0hPU1QiLCJQSUNCRURfUElDTElTVF9QT1JUIiwiUElDQkVEX1BJQ0xJU1RfUElDQkVEIiwiUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRSIsIlBJQ0JFRF9QSUNMSVNUX0tFWSIsIlBJQ0JFRF9MU0tZX1BMSVNUIiwiUElDQkVEX0xTS1lfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX0hPU1QiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1QiLCJQSUNCRURfTFNLWV9UT0tFTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9BTEJVTV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9QRVJNSVNTSU9OIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OIiwiUElDQkVEX0FXU1MzUExJU1QiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9SRUdJT04iLCJQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9QUk9YWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMIiwiQlVJTERJTl9XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9SRU5BTUUiLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTIiwiQlVJTERJTl9DT01QUkVTU19RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNGTElQIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMT1AiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUciLCJCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEIiwiZW4iLCJJMThuTWFuYWdlciIsIm9iamVjdEFkYXB0ZXIiLCJPYmplY3RBZGFwdGVyIiwibGFuZ3VhZ2UiLCJJMThuIiwiYWRhcHRlciIsImRlZmF1bHRMYW5ndWFnZSIsImxvYWRPdXR0ZXJJMThuIiwiaTE4bkZvbGRlciIsImdldE91dHRlckkxOG5Gb2xkZXIiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJpc0ZpbGUiLCJlbmRzV2l0aCIsImkxOG5GaWxlUGF0aCIsImkxOG5GaWxlIiwiaTE4bkZpbGVPYmoiLCJ5YW1sIiwicGF0aEV4aXN0c1N5bmMiLCJhZGRMb2NhbGUiLCJsb2NhbGVzIiwib3JpZ2luTG9jYWxlcyIsImdldExvY2FsZSIsIm5ld0xvY2FsZXMiLCJtZXJnZSIsInNldExvY2FsZSIsImFkZExhbmd1YWdlIiwiUGljR28iLCJfcGx1Z2luTG9hZGVyIiwiaW5pdENvbmZpZ1BhdGgiLCJpbml0Q29uZmlnIiwiZW5zdXJlRmlsZVN5bmMiLCJfY29uZmlnIiwibGlmZWN5Y2xlIiwicmVnaXN0ZXJDb21tYW5kcyIsInByb3BOYW1lIiwic3RhcnQiLCJjbGVhbnVwIl0sIm1hcHBpbmdzIjoic3hDQUlBLE1BQU1BLEdBQWdCLENBQ3BCQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNB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
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("events"),t=require("fs-extra"),r=require("lodash"),n=require("os"),a=require("path"),i=require("commander"),s=require("inquirer"),E=require("image-size"),o=require("url"),l=require("text-to-svg"),I=require("sharp"),S=require("crypto"),_=require("uuid"),u=require("chalk"),P=require("download-git-repo"),c=require("rimraf"),A=require("minimatch"),p=require("globby"),C=require("ejs"),D=require("dayjs"),T=require("util"),d=require("cross-spawn"),g=require("resolve"),L=require("axios"),f=require("form-data"),m=require("https"),h=require("tunnel"),B=require("heic-convert"),N=require("mime-types"),U=require("@aws-sdk/client-s3"),R=require("@aws-sdk/s3-request-presigner"),O=require("@smithy/node-http-handler"),M=require("file-type"),y=require("mime"),G=require("hpagent"),b=require("qiniu"),x=require("node-ssh-no-cpu-features"),w=require("webdav"),W=require("child_process"),K=require("is-wsl"),F=require("@picgo/store"),H=require("js-yaml"),$=require("@picgo/i18n");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var k=v(t),Y=v(n),q=v(a),V=v(s),j=v(o),z=v(l),X=v(I),Q=v(S),Z=v(u),J=v(P),ee=v(A),te=v(p),re=v(D),ne=v(T),ae=v(L),ie=v(f),se=v(m),Ee=v(B),oe=v(M),le=v(y),Ie=v(b),Se=v(K),_e=v(H);const ue=(e,t,r,n,a,i)=>{let s=e.program.command(t).description(r).alias(n);(null==i?void 0:i.proxy)&&(s=s.option("-p, --proxy <proxy>","Add proxy for installing plugins")),(null==i?void 0:i.registry)&&(s=s.option("-r, --registry <registry>","Choose a registry for installing plugins")),s.action(a)},Pe={handle:e=>{const t=e.cmd;ue(t,"install <plugins...>","install picgo plugin","add",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0}),ue(t,"uninstall <plugins...>","uninstall picgo plugin","rm",(t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),ue(t,"update <plugins...>","update picgo plugin","up",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0})}},ce={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function Ae(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function pe(e){return 1===e.toString().length?`0${e}`:e.toString()}function Ce(e){return Q.default.createHash("md5").update(e).digest("hex")}function De(e,t,r,n){const a=new Date,i=a.getFullYear().toString(),s=q.default.basename(e,q.default.extname(e)),E={"{Y}":()=>i,"{y}":()=>i.slice(2),"{m}":()=>pe(a.getMonth()+1),"{d}":()=>pe(a.getDate()),"{h}":()=>pe(a.getHours()),"{i}":()=>pe(a.getMinutes()),"{s}":()=>pe(a.getSeconds()),"{ms}":()=>a.getMilliseconds().toString().padStart(3,"0"),"{md5}":()=>Ce(n||s),"{md5-16}":()=>Ce(n||s).slice(0,16),"{filename}":()=>r?q.default.basename(r,q.default.extname(r)):s,"{uuid}":()=>_.v4().replace(/-/g,""),"{timestamp}":()=>a.getTime().toString()};if(void 0===t||!Object.keys(E).some((e=>t.includes(e)))&&!t.includes("localFolder:")&&!t.includes("str-"))return e;const o=q.default.extname(e);let l=Object.keys(E).reduce(((e,t)=>e.replace(new RegExp(t,"g"),E[t]())),t)+o;return l=l.replace(/{str-(\d+)}/gi,((e,t)=>Ae(parseInt(t,10)))),l=l.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return q.default.dirname(e).split(q.default.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),l}const Te=e=>/^https?:\/\//.test(e),de=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},ge=e=>(de(e)||(e=encodeURI(e)),e),Le=e=>{try{const{width:t=0,height:r=0,type:n}=E.imageSize(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},fe=async e=>{try{return{extname:q.default.extname(e),fileName:q.default.basename(e),buffer:await t.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},me=async(e,t)=>{let r;e=ge(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")||q.default.extname(i)||""}catch(e){s=q.default.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:q.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])},he=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Be(e)?"simple":"unknown",Be=e=>{if(q.default.isAbsolute(e))return!1;const t=q.default.join(process.cwd(),e);return!k.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Ne=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,Ue=(e,t=console)=>{switch(he(e)){case"normal":case"scope":return e;case"simple":return Ne(e);default:{let r=e;return q.default.isAbsolute(e)&&k.default.existsSync(e)?Oe(r):(r=q.default.join(process.cwd(),e),k.default.existsSync(r)?Oe(r):(t.warn(`Can't find plugin ${e}`),""))}}},Re=(e,r=console)=>{var n;switch(he(e)){case"normal":return Me(e);case"scope":return Me(e,!0);case"simple":return Me(Ne(e));default:{if(!k.default.existsSync(e))return r.warn(`Can't find plugin: ${e}`),"";const a=q.default.posix.join(e,"package.json");if(k.default.existsSync(a)){const e=t.readJSONSync(a)||{};return(null===(n=e.name)||void 0===n?void 0:n.includes("picgo-plugin-"))?e.name:(r.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return r.warn(`Can't find plugin: ${e}`),""}}},Oe=e=>e.split(q.default.sep).join("/"),Me=(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},ye=[],Ge=e=>ye.some((t=>e.startsWith(t))),be=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function xe(e){try{return JSON.parse(e)}catch(t){return e}}const we=(e=0)=>isNaN(Number(e))?0:Number(e),We=()=>"development"===process.env.NODE_ENV;const Ke=q.default.join(__dirname,"assets","piclist.png");async function Fe(e,t,r,n,a,i,s,E,o,l,I){E=!E||E<0||E>1?.15:E;const S=X.default(e,{animated:!0}),{width:_=200}=await S.metadata(),u=await async function(e,t,r,n,a,i,s,E=200,o=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(E*we(a)),u=Math.floor(_*S/I);return await X.default(l).resize(_,u,{fit:"inside"}).rotate(o,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,E,o,l,_,a);return await S.composite([{input:u,gravity:I||"southeast",tile:n}]).toBuffer()}const He=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),$e=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],ve=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],ke=e=>$e.includes(e);async function Ye(e,t,r,n){try{let n=X.default(e,{animated:!0});return n=X.default(await Fe(e,t.watermarkType||"text",r,t.isFullScreenWatermark,we(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,we(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?xe(e.formatConvertObj):e.formatConvertObj;return{quality:we(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:we(e.reSizeHeight),reSizeWidth:we(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:we(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:we(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function Ve(e,t,r,n){t=qe(t);try{if(r=je(r),!ve.includes(r)||"gif"===r)return e;let n=X.default(e,{animated:!0}),a=100;if(He(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(He(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=ze(t,r);e!==r&&(n=n.toFormat(e,{quality:a,mozjpeg:!0}))}else n=r&&ke(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}}const je=e=>e.toLowerCase().replace(".","");function ze(e,t){if(e=qe(e||{}),"gif"===(t=je(t)))return"gif";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],ke(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const Xe=(e,t)=>(t=je(t),!!e&&!!e.isAddWatermark&&ve.includes(t)&&"svg"!==t),Qe=(e,t)=>{if(!ve.includes(je(t))||!e)return!1;const{quality:r,isReSizeByPercent:n,reSizePercent:a,isReSize:i,reSizeHeight:s,reSizeWidth:E,isRotate:o,rotateDegree:l,isConvert:I,convertFormat:S,isFlip:_,isFlop:u}=qe(e);if(He(r)&&r<100)return!0;if(n&&He(a))return!0;if(i&&("number"==typeof s&&s>0||"number"==typeof E&&E>0))return!0;if(o&&l)return!0;if(_||u)return!0;if(I){return t!==(S||"jpg")}return!1},Ze=async(e,t)=>(t=je(t),ve.includes(t)&&"svg"!==t?await X.default(e,{animated:!0}).toBuffer():e);var Je=Object.freeze({__proto__:null,randomStringGenerator:Ae,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${Ae(5)}${q.default.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${Ae(t)}${q.default.extname(e)}`},renameFileNameWithCustomString:De,isUrl:Te,isUrlEncode:de,handleUrlEncode:ge,getImageSize:Le,getFSFile:fe,getURLFile:me,getPluginNameType:he,isSimpleName:Be,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Ne,getProcessPluginName:Ue,getNormalPluginName:Re,handleUnixStylePath:Oe,removePluginVersion:Me,configBlackList:ye,isConfigKeyInBlackList:Ge,isInputConfigValid:be,safeParse:xe,forceNumber:we,isDev:We,AddWatermark:Fe,imageAddWaterMark:Ye,imageCompress:Ve,getConvertedFormat:ze,isNeedAddWatermark:Xe,isNeedCompress:Qe,removeExif:Ze});const et={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>Te(e)?e:q.default.resolve(e))).filter((t=>{const r=k.default.existsSync(t)||Te(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var tt=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 rt=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 nt=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 at=e=>({advancedplist:e.i18n.translate("PICBED_ADVANCEDPLIST"),alistplist:e.i18n.translate("PICBED_ALIST_PLIST"),aliyun:e.i18n.translate("PICBED_ALICLOUD"),"aws-s3-plist":e.i18n.translate("PICBED_AWSS3PLIST"),github:e.i18n.translate("PICBED_GITHUB"),imgur:e.i18n.translate("PICBED_IMGUR"),local:e.i18n.translate("PICBED_LOCAL"),lskyplist:e.i18n.translate("PICBED_LSKY_PLIST"),piclist:e.i18n.translate("PICBED_PICLIST"),qiniu:e.i18n.translate("PICBED_QINIU"),sftpplist:e.i18n.translate("PICBED_SFTPPLIST"),smms:e.i18n.translate("PICBED_SMMS"),tcyun:e.i18n.translate("PICBED_TENCENTCLOUD"),upyun:e.i18n.translate("PICBED_UPYUN"),webdavplist:e.i18n.translate("PICBED_WEBDAVPLIST")}),it=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})},st={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 it(e,tt(e),t,r);else if("watermark"===r)await it(e,rt(e),t,r);else if("rename"===r)await it(e,nt(e),t,r);else{const r=[{type:"list",name:"buildin",choices:[{name:e.i18n.translate("BUILDIN_COMPRESS"),value:"compress"},{name:e.i18n.translate("BUILDIN_WATERMARK"),value:"watermark"},{name:e.i18n.translate("BUILDIN_RENAME"),value:"rename"}],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await it(e,tt(e),t,n.buildin):"watermark"===n.buildin?await it(e,rt(e),t,n.buildin):"rename"===n.buildin&&await it(e,nt(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 it(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList().map((t=>({name:at(e)[t]||t,value:t}))),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 it(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 it(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 it(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)}))}))}},Et={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().map((t=>({name:at(e)[t]||t,value:t}))),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 saved successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},ot={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},lt=async(e,t)=>{try{const r=St(t.tmp),n=q.default.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await te.default(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{ee.default(t,e,{dot:!0})&&(n=t)})),!n||It(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=_t(i,n,a);ut(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)}},It=(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}},St=e=>{const t=q.default.join(e,"index.js");if(k.default.existsSync(t)){return require(t)}return{}},_t=(e,t,r)=>{const n={};return e.forEach((e=>{const a=k.default.readFileSync(q.default.join(t,e),"utf8"),i=C.render(a,r);(Buffer.isBuffer(i)||/[^\s]/.test(i))&&(n[e]=i)})),n},ut=(e,r)=>{Object.keys(r).forEach((n=>{const a=q.default.join(e,n);t.ensureDirSync(q.default.dirname(a)),k.default.writeFileSync(a,r[n])}))},Pt=(e,t)=>{t.offline?k.default.existsSync(t.template)?lt(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,ct(e,t))},ct=(e,t)=>{k.default.existsSync(t.tmp)&&c.sync(t.tmp),e.log.info("Template files are downloading..."),J.default(t.template,t.tmp,{clone:t.clone},(r=>{r?e.log.error(r):(e.log.success("Template files are downloaded!"),lt(e,t).catch((t=>{e.log.error(t)})))}))},At={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,E=q.default.resolve(r||"."),o=a.clone||!1,l=a.offline||!1,I=q.default.join(n.homedir(),".piclist/templates",t.replace(/[/:]/g,"-"));a.offline&&(t=I);const S={template:t,project:r,hasSlash:i,inPlace:s,dest:E,clone:o,tmp:I,offline:l};s||k.default.existsSync(E)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&Pt(e,S)})):Pt(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()}))}},pt={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 Ct{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),Ct.currentPlugin&&(this.pluginIdMap.has(Ct.currentPlugin)?null===(r=this.pluginIdMap.get(Ct.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(Ct.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)=>{Ct.currentPlugin=e};class Tt{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new i.Command,this.inquirer=V.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.9.6","-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",Pe),e.cmd.register("config",ce),e.cmd.register("setting",st),e.cmd.register("upload",et),e.cmd.register("use",Et),e.cmd.register("proxy",ot),e.cmd.register("init",At),e.cmd.register("i18n",pt)}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=Ct.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,gt,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"}(gt||(gt={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(Lt||(Lt={}));class ft{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")||q.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*we(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),t.createFileSync(e))}handleWriteLog(e,t,...r){try{let n=`${re.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${ne.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){We()&&this.handleLog(dt.info,...e)}}class mt{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>ht(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=>ht(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=>ht(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 E,o;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=d.spawn("npm",l,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(E=e.stdout)||void 0===E||E.on("data",(e=>{t+=e})).pipe(process.stdout),null===(o=e.stderr)||void 0===o||o.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(gt.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(gt.FAILED,e)}}))}}const ht=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=Ue(t,e.log);if(!n)return r;const a=Re(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r};class Bt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=q.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 g.sync(t,{basedir:e.baseDir})}catch(r){return q.default.join(e.baseDir,"node_modules",t)}}load(){const e=q.default.join(this.ctx.baseDir,"node_modules/");if(!k.default.existsSync(e))return!1;const r=q.default.join(this.ctx.baseDir,"package.json"),n=t.readJSONSync(r),a=Object.keys(n.dependencies||{}),i=Object.keys(n.devDependencies||{}),s=a.concat(i).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 s)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(gt.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=q.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 Nt=new e.EventEmitter,Ut=new se.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function Rt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Ot(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Mt(e){var t,r,n,a,i,s,E;const o={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===(E=null==e?void 0:e.response)||void 0===E?void 0:E.data)||""}};return Promise.reject(o)}class yt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Nt.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=h.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=Ut;const r=ae.default.create(this.options);r.interceptors.response.use(Ot,Mt);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=h.httpsOverHttp({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new ie.default;for(const r in e.formData)Rt(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 Gt extends e.EventEmitter{constructor(e){super(),this.ctx=e,this.ttfPath=q.default.join(e.baseDir,"assets","simhei.ttf"),t.ensureDirSync(q.default.join(e.baseDir,"imgTemp"));e.getConfig("settings.enableSecondUploader")||!1||t.emptyDirSync(q.default.join(e.baseDir,"piclistTemp"))}async downloadTTF(){try{if(t.ensureDirSync(q.default.dirname(this.ttfPath)),k.default.existsSync(this.ttfPath)&&k.default.statSync(this.ttfPath).size>0)return!0;this.ctx.log.info("Download ttf file.");const e=await ae.default.get("https://release.piclist.cn/simhei.ttf",{responseType:"arraybuffer"});return k.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file successfully."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}helpGetOption(e){const t=e.getConfig("buildIn.compress"),r=e.getConfig("buildIn.watermark"),n=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms";return!e.helper.uploader.get(n)&&t?t.picBed="smms":t&&(t.picBed=n),{compressOptions:t,watermarkOptions:r}}async start(e,t=!1){const n=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],processedInput:[],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),uploadReturnCtx:e.uploadReturnCtx.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.");return n.input=e,n.output=[],n.rawInputPath=[],n.rawInput=r.cloneDeep(e),t?(n.log.info("Skip process."),n.output=e,await this.doUpload(n),n.input=n.rawInput,await this.afterUpload(n),n):(await this.preprocess(n),await this.beforeTransform(n),await this.doTransform(n),await this.buildInRename(n),await this.beforeUpload(n),n.processedInput=r.cloneDeep(n.output),await this.doUpload(n),n.input=n.rawInput,await this.afterUpload(n),n)}catch(e){if(n.log.warn(gt.FAILED),n.emit(gt.UPLOAD_PROGRESS,-1),n.emit(gt.FAILED,e),n.log.error(e),n.getConfig("debug"))throw e;return n}}async preprocess(e){const{compressOptions:t,watermarkOptions:r}=this.helpGetOption(e);if(e.emit(gt.UPLOAD_PROGRESS,0),e.emit(gt.BEFORE_TRANSFORM,e),e.log.info("Before transform"),t||r){const n=q.default.join(e.baseDir,"piclistTemp");await Promise.allSettled(e.input.map((async(a,i)=>{const s=Te(a),E=s?await me(a,e):{success:!1};if(s&&(!E.success||!E.buffer))return;let o,l=!1;e.rawInputPath[i]=a;const I=s?E.extname||"":q.default.extname(a),S=s?E.buffer:k.default.readFileSync(a);if(Xe(r,I)){if(!(null==r?void 0:r.watermarkFontPath)&&"image"!==(null==r?void 0:r.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),l=!0)}l||(e.log.info("Add watermark to image"),o=await Ye(S,r,this.ttfPath,e.log))}if(Qe(t,I))if(e.log.info("Compress or convert image"),s||".heic"!==I&&".heif"!==I)o=await Ve(null!=o?o:S,t,I,e.log);else{const r=await Ee.default({buffer:S,format:"JPEG",quality:1}),i=q.default.join(n,`${q.default.basename(a,I)}.jpg`);k.default.writeFileSync(i,Buffer.from(r)),o=await Ve(k.default.readFileSync(i),t,".jpg",e.log)}if(!o&&(null==t?void 0:t.isRemoveExif)&&(e.log.info("Remove exif info."),o=await Ze(S,I)),o){let r=(null==t?void 0:t.isConvert)?ze(t,I):I;r=r.startsWith(".")?r:`.${r}`;const l=s?q.default.join(n,`${E.fileName?`${q.default.basename(E.fileName,q.default.extname(E.fileName))}`:(new Date).getTime()}${r}`):q.default.join(n,`${q.default.basename(a,I)}${r}`);e.rawInputPath[i]=q.default.join(q.default.dirname(a),s?q.default.basename(l):`${q.default.basename(a,I)}${r}`),k.default.writeFileSync(l,o),e.input[i]=l}})))}else for(const t of e.input)e.rawInputPath.push(t);return e}async buildInRename(e){const t=e.getConfig("buildIn.rename")||{};if(t.enable){const r=t.format||"{filename}";e.output=e.output.map(((t,n)=>{let a=t.fileName;return r&&(a=De(e.rawInputPath[n],r,void 0,t.base64Image?t.base64Image:t.buffer),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),t.fileName=a,t}))}return e}async beforeTransform(e){return await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(gt.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(gt.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(gt.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(gt.AFTER_UPLOAD,e),e.emit(gt.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?ge(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(gt.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}}function bt({path:e,startSlash:t=!1,endSlash:r=!0,rootToEmpty:n=!0}){const a=null==e?void 0:e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");return a?`${t?"/":""}${a}${r?"/":""}`:n?"":"/"}function xt(e){return e.replace(/\/{2,}/g,"/").split("/").map((e=>encodeURIComponent(e))).join("/")}const wt="advancedplist",Wt="alistplist",Kt="aliyun",Ft="aws-s3-plist",Ht="github",$t="imgur",vt="local",kt="lskyplist",Yt="piclist",qt="qiniu",Vt="sftpplist",jt="smms",zt="tcyun",Xt="upyun",Qt="webdavplist",Zt=(e,t,r,n,a,i,s)=>({method:n.toUpperCase(),url:r,headers:Object.assign(Object.assign({},{contentType:"multipart/form-data","User-Agent":"PicList"}),a),formData:Object.assign({[s]:{value:e,options:{filename:t}}},i),json:!0}),Jt=async e=>{const t=e.getConfig("picBed.advancedplist");if(!t)throw new Error("Can not find advancedplist 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=Zt(r,n.fileName,t.endpoint,t.method,JSON.parse(t.headers||"{}"),JSON.parse(t.body||"{}"),t.formDataKey||"file");let i=await e.request(a);i="string"==typeof i?JSON.parse(i):i;let s=i;const E=t.resDataPath||"data.url";for(const e of E.split(".")){if(!s||"object"!=typeof s||!(e in s)){s=void 0;break}s=s[e]}if(!s||"string"!=typeof s)throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:i.message}),new Error(i.message);delete n.base64Image,delete n.buffer,t.customPrefix&&(n.imgUrl=t.customPrefix+s),n.imgUrl=s}return e},er=e=>{const t=e.getConfig("picBed.advancedplist")||{};return[{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT")},default:t.endpoint||"",required:!0},{name:"method",type:"list",choices:["POST","PUT","GET"],get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_METHOD")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_METHOD")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_METHOD")},default:t.method||"POST",required:!1},{name:"formDataKey",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_FORM_DATA_KEY")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_FORM_DATA_KEY")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY")},default:t.formDataKey||"file",required:!1},{name:"headers",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_HEADERS")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_HEADERS")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_HEADERS")},default:t.headers||"{}",required:!1},{name:"body",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_BODY")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_BODY")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_BODY")},default:t.body||"{}",required:!1},{name:"customPrefix",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_CUSTOM_PREFIX")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_CUSTOM_PREFIX")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX")},default:t.customPrefix||"",required:!1},{name:"resDataPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ADVANCEDPLIST_RES_DATA_PATH")},get alias(){return e.i18n.translate("PICBED_ADVANCEDPLIST_RES_DATA_PATH")},get message(){return e.i18n.translate("PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH")},default:t.resDataPath||"data.url",required:!1}]};const tr=(e,t,r,n,a)=>({method:"PUT",url:`${e}/api/fs/form`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:t,"File-Path":encodeURIComponent(n)},formData:{file:{value:a,options:{filename:r}}},resolveWithFullResponse:!0}),rr=(e,t)=>{if(200!==t.statusCode||200!==t.body.code||"success"!==t.body.message)throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:t.body.message}),new Error(t.body.message)},nr=e=>{const{url:t,token:r,username:n,password:a,uploadPath:i,webPath:s,customUrl:E}=e;return{url:(t||"").replace(/\/$/,""),token:r||"",username:n||"",password:a||"",uploadPath:bt({path:i||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}),webPath:s?bt({path:s||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}):"",customUrl:(E||"").replace(/\/$/,"")}},ar=async e=>{const t=e.getConfig("picBed.alistplist");if(!t)throw new Error("Can not find alist config!");const{url:r,username:n,password:a,uploadPath:i,webPath:s,customUrl:E}=nr(t);let{token:o}=nr(t);if(o||(o=await(async(e,t,r,n)=>{const a=e.getConfig("picgo-plugin-buildin-alistplist");if(a&&a.refreshedAt&&Date.now()-a.refreshedAt<36e5&&a.token)return a.token;const i=await ae.default.post(`${t}/api/auth/login`,{username:r,password:n});if(200===i.data.code&&"success"===i.data.message){const t=i.data.data.token;return e.saveConfig({"picgo-plugin-buildin-alistplist":{token:t,refreshedAt:Date.now()}}),t}throw new Error("Get token failed")})(e,r,n,a)),!r||!(o||n&&a))throw new Error("Please check your alist config!");const l=e.output;for(const t of l)if(t.fileName&&t.buffer){let n=t.buffer;!n&&t.base64Image&&(n=Buffer.from(t.base64Image,"base64"));const a=`${i}${t.fileName}`,l=tr(r,o,t.fileName,a,n),I=await e.request(l);rr(e,I);const S=`${r}/api/fs/list`,_=`${r}/api/fs/get`,u=await e.request({method:"POST",url:S,headers:{Authorization:o,"Content-Type":"application/json"},body:{password:"",page:1,per_page:1,refresh:!0,path:q.default.dirname(a)},resolveWithFullResponse:!0});rr(e,u);const P=await e.request({method:"POST",url:_,headers:{Authorization:o,"Content-Type":"application/json"},body:{password:"",path:a,page:1,per_page:1,refresh:!0},resolveWithFullResponse:!0});rr(e,P);const c=P.body.data.sign,A=xt(`${s||i}${t.fileName}`);t.imgUrl=`${E||r}/d${A}`,t.imgUrl+=c?`?sign=${c}`:"",delete t.base64Image,delete t.buffer}return e},ir=e=>{const t=e.getConfig("picBed.alistplist")||{};return[{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_URL")},get alias(){return e.i18n.translate("PICBED_ALIST_URL")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_URL")},default:t.url||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_TOKEN")},get alias(){return e.i18n.translate("PICBED_ALIST_TOKEN")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_TOKEN")},default:t.token||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_ALIST_USERNAME")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_ALIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_PASSWORD")},default:t.password||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_UPLOAD_PATH")},get alias(){return e.i18n.translate("PICBED_ALIST_UPLOAD_PATH")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_UPLOAD_PATH")},default:t.uploadPath||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_WEB_PATH")},get alias(){return e.i18n.translate("PICBED_ALIST_WEB_PATH")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_WEB_PATH")},default:t.webPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};const sr=()=>(new Date).toUTCString(),Er=(e,t)=>{const r=sr(),n=`PUT\n\n${N.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}`},or=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${xt(`${e.path}${t}`)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:sr(),"Content-Type":N.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),lr=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=bt({path:t.path});try{const r=e.output,n=(t.customUrl||"").replace(/\/$/,""),a=t.path;for(const i of r)if(i.fileName&&i.buffer){const r=Er(t,i.fileName);let s=i.buffer;!s&&i.base64Image&&(s=Buffer.from(i.base64Image,"base64"));const E=or(t,i.fileName,r,s);if(200!==(await e.request(E)).statusCode)throw new Error("Upload failed");{delete i.base64Image,delete i.buffer;const e=t.options||"";i.imgUrl=n?`${n}/${xt(`${a}${i.fileName}`)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${xt(`${a}${i.fileName}`)}${e}`}}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ir=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}]};class Sr{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 _r(e,t){if(!t)return e.fileName;const r=new Sr(e);let n=t;for(const e of Sr.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function ur(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?G.HttpsProxyAgent:G.HttpProxyAgent)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}Sr.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var Pr={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new j.default.URL(e.endpoint).protocol}catch(e){}const a={};n?a.httpsAgent=ur(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):a.httpAgent=ur(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 O.NodeHttpHandler(a)};return new U.S3Client(i)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)throw new Error("undefined image");try{const{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=le.default.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await oe.default.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item),a=new U.PutObjectCommand({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n}),i=await e.client.send(a);let s;return s=e.urlPrefix?`${e.urlPrefix}/${e.path}`:await async function(e,t,r){const n=await R.getSignedUrl(e.client,new U.GetObjectCommand({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),a=new j.default.URL(n);return a.search="",a.href}(e,i.ETag,i.VersionId),{key:e.path,url:s,imgURL:s,versionId:i.VersionId,eTag:i.ETag}}catch(e){return Promise.reject(e)}}};function cr(e){return"string"==typeof e?"true"===e.toLowerCase():Boolean(e)}const Ar=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find aws s3 uploader config");try{const r=cr(t.disableBucketPrefixToURL);let n=t.urlPrefix;n&&(n=n.replace(/\/?$/,""),t.pathStyleAccess&&!r&&(n+="/"+t.bucketName));const a=Pr.createS3Client(t),i=e.output;for(const e of i){const r=await Pr.createUploadTask({client:a,bucketName:t.bucketName,path:_r(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:n});delete e.buffer,delete e.base64Image,e.imgUrl=r.imgURL,e.url=r.url}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),t}},pr=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:!1,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||!1,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:"list",default:t.acl||"public-read",choices:["private","public-read","public-read-write","authenticated-read","aws-exec-read","bucket-owner-read","bucket-owner-full-control"],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:"confirm",default:cr(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")}}]};function Cr(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${xt(`${t}${r}`)}${n}`}const Dr=(e,t,r)=>{const{token:n,repo:a}=t,i=N.lookup(e)||"application/octet-stream";return{method:"PUT",url:Cr(a,t.path,e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":i},body:r,json:!0}},Tr=(e,t)=>{const{token:r,repo:n,branch:a}=t;return{method:"GET",url:Cr(n,t.path,e,`?ref=${a}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},dr=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");const r=bt({path:t.path});t.path=r,t.customUrl=(t.customUrl||"").replace(/\/$/,"");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){const n=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:n,path:r+encodeURI(a.fileName)},s=Dr(a.fileName,t,i);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=t.customUrl?`${t.customUrl}/${xt(`${r}${a.fileName}`)}`:n.content.download_url,a.hash=n.content.sha}catch(n){if(422!==n.statusCode)throw n;delete a.base64Image,delete a.buffer;const i=await e.request(Tr(a.fileName,t));if(!Object.keys(i).length)throw n;a.hash=i.sha,a.imgUrl=t.customUrl?`${t.customUrl}/${xt(`${r}${a.fileName}`)}`:i.download_url}}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},gr=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}]};const Lr=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),E=t.album||"";let o;if(i&&s)o=s;else{if(!a)throw new Error("clientId or accessToken is required");o=`Client-ID ${a}`}const l={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:o,"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&&E){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:o},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===E){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},fr=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 Lr(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(gt.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}},mr=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 hr=async e=>{var r;const n=e.getConfig("picBed.local");if(!n)throw new Error("Can not find local config!");const a=n.path||"",i=(n.customUrl||"").replace(/\/$/,""),s=bt({path:null===(r=n.webPath)||void 0===r?void 0:r.replace(/\\/g,"/")}),E=e.output;for(const r of E)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));try{const E=q.default.join(e.baseDir,"imgTemp","local"),o=q.default.join(E,r.fileName),l=q.default.join(a,r.fileName);t.ensureDirSync(q.default.dirname(l)),t.ensureDirSync(q.default.dirname(o)),k.default.writeFileSync(l,n),k.default.copyFileSync(l,o),delete r.base64Image,delete r.buffer,r.imgUrl=i?`${i}/${xt(`${s}${r.fileName}`)}`:q.default.join(a,r.fileName),r.hash=q.default.join(a,r.fileName),r.galleryPath=`http://localhost:36699/local/${xt(r.fileName).replace(/^\//,"")}`}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}return e},Br=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")}}]};const Nr=(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},E={image:{value:r,options:{filename:t}},ssl:"true"},o={"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 se.default.Agent({rejectUnauthorized:!1}),headers:a?o:s,formData:a?_:E}},Ur=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Nr(t,n.fileName,r);let i=await e.request(a);i="string"==typeof i?JSON.parse(i):i;const s="V2"===t.version;if(!(s?!0===i.status:200===i.code))throw e.emit(gt.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},Rr=e=>{const 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")}}]};const Or=(e,t,r)=>{const{host:n="127.0.0.1",port:a="",picbed:i="",configName:s="Default",serverKey:E=""}=e,o=n.match(/(\d+)\.(\d+)\.(\d+)\.(\d+)/),l=n.startsWith("https://")?"https://":"http://",I=n.replace(/(http:\/\/|https:\/\/)/,"");return{method:"POST",url:`${o?`${l}${I}:${a||"36677"}`:`${l}${I}${a?`:${a}`:""}`}/upload?configName=${s}${i?`&picbed=${i}`:""}${E?`&key=${E}`:""}`,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:N.lookup(t)}}},resolveWithFullResponse:!0}},Mr=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=Or(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?s.body.fullResult[0]:""}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},yr=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}]};function Gr(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":N.lookup(t)||"application/octet-stream"},body:n}}function br(e){const t=e.accessKey,r=e.secretKey,n=new Ie.default.auth.digest.Mac(t,r),a={scope:e.bucket};return new Ie.default.rs.PutPolicy(a).uploadToken(n)}const xr=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=Gr(t,n.fileName,br(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(gt.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(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},wr=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}]};class Wr{constructor(){this.client=new x.NodeSSH,this.isConnected=!1}static getInstance(){return Wr.instance||(Wr.instance=new Wr),Wr.instance}static changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{host:t,port:r,username:n,password:a,privateKey:i,passphrase:s}=e,E=i?{username:n,privateKeyPath:i,passphrase:s||void 0}:{username:n,password:a};try{await this.client.connect(Object.assign({host:t,port:Number(r)||22},E)),this.isConnected=!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this.isConnected)throw new Error("SSH client is not connected");try{t=Wr.changeWinStylePathToUnix(t),await this.mkdir(q.default.dirname(t).replace(/^\/+|\/+$/g,""),r),await this.client.putFile(e,t);const n=r.fileMode||"0644";"0644"!==n&&await this.exec(`chmod ${n} "${t}"`)}catch(e){throw new Error(e)}}async mkdir(e,t){if(!this.client.isConnected())throw new Error("sftp client is not connected");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=Wr.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t];await this.exec(`chown ${n}:${a} "${e}"`)}async exec(e){return 0===(await this.client.execCommand(e)).code}close(){this.client.dispose(),this.isConnected=!1}}const Kr=async e=>{const r=e.getConfig("picBed.sftpplist");if(!r)throw new Error("Can not find sftpplist config!");r.port=Number(r.port)||22,(r.port<0||r.port>65535)&&(r.port=22),r.uploadPath=bt({path:r.uploadPath,rootToEmpty:!1});const n=bt({path:r.webPath,rootToEmpty:!1});try{const a=e.output;for(const i of a)if(i.fileName&&i.buffer){let a=i.buffer;!a&&i.base64Image&&(a=Buffer.from(i.base64Image,"base64"));const s=q.default.join(e.baseDir,"uploadTemp"),E=q.default.join(e.baseDir,"imgTemp","sftpplist");t.ensureDirSync(E);const o=q.default.join(s,i.fileName);t.ensureDirSync(q.default.dirname(o)),k.default.writeFileSync(o,a);const l=Wr.getInstance();await l.connect(r);const I=q.default.join(`/${r.uploadPath}`.replace(/\/\/+/g,"/"),i.fileName);await l.upload(o,I,r),r.fileUser&&await l.chown(I,r.fileUser),delete i.base64Image,delete i.buffer;const S=r.customUrl||r.host;r.webPath?i.imgUrl=`${S}/${xt(`${"/"===n?"":n}${i.fileName}`)}`:i.imgUrl=`${S}/${xt(`${"/"===r.uploadPath?"":r.uploadPath}${i.fileName}`)}`;const _=q.default.join(E,i.fileName);t.ensureDirSync(q.default.dirname(_)),t.removeSync(_),t.moveSync(o,q.default.join(E,i.fileName)),i.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(i.fileName)}`,l.close()}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Fr=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 Hr=(e,t,r,n="")=>{let a=n||"sm.ms";return a=a.replace(/^https?:\/\//,"").replace(/\/$/,""),{method:"POST",url:`https://${a}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}},$r=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=Hr(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain),i=await e.request(a),s=JSON.parse(i);if("success"===s.code)delete n.base64Image,delete n.buffer,n.imgUrl=s.data.url,n.hash=s.data.hash;else{if("image_repeated"!==s.code||"string"!=typeof s.images)throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.message}),new Error(s.message);{delete n.base64Image,delete n.buffer,n.imgUrl=s.images;const e=await ae.default.get("https://sm.ms/api/v2/upload_history",{headers:{Authorization:t.token}});if("success"===e.data.code){const t=e.data.data;for(const e of t)if(e.url===s.images){n.hash=e.hash;break}}}}}return e},vr=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const kr=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,E="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);E=`${r};${r+86400}`;const a=Q.default.createHmac("sha1",n).update(E).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,o=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,l=`sha1\n${E}\n${Q.default.createHash("sha1").update(o).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,E=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,o=Q.default.createHmac("sha1",n).update(E).digest(),l=Buffer.concat([o,Buffer.from(E)]);s=Buffer.from(l).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:E}},Yr=(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}/${xt(`${s}${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:N.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}},qr=async e=>{var t,r,n;const a=e.getConfig("picBed.tcyun");if(!a)throw new Error("Can't find tencent COS config");try{const i=e.output,s=(a.customUrl||"").replace(/\/$/,""),E=bt({path:a.path});a.path=E;const o=!a.version||"v4"===a.version;for(const l of i)if(l.fileName&&l.buffer){const i=kr(a,l.fileName);if(!i)return!1;let I=l.buffer;!I&&l.base64Image&&(I=Buffer.from(l.base64Image,"base64"));const S=Yr(a,l.fileName,i,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=o&&"string"==typeof _?JSON.parse(_):_,400===u.statusCode)throw(null===(t=null==u?void 0:u.body)||void 0===t?void 0:t.err)?u.body.err:new Error((null===(r=null==u?void 0:u.body)||void 0===r?void 0:r.msg)||(null===(n=null==u?void 0:u.body)||void 0===n?void 0:n.message));const P=a.options||"",c=void 0!==a.slim&&!!a.slim;if(o&&"SUCCESS"===u.message)delete l.base64Image,delete l.buffer,l.imgUrl=s?`${s}/${xt(`${E}${l.fileName}`)}${P}`:`${u.data.source_url}${P}`;else{if(o||!u||200!==u.statusCode)throw new Error(_.body.msg);if(delete l.base64Image,delete l.buffer,s)l.imgUrl=`${s}/${xt(`${E}${l.fileName}`)}${P}`;else{const e=a.endpoint?a.endpoint:`cos.${a.area}.myqcloud.com`;l.imgUrl=`https://${a.bucket}.${e}/${xt(`${E}${l.fileName}`)}${P}`}}c&&(l.imgUrl+=P?"&imageSlim":"?imageSlim")}return e}catch(t){if(!a.version||"v4"===a.version)try{const r=JSON.parse(t.error);e.emit(gt.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}},Vr=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")}}]};const jr=(e,t)=>{const r=e.path||"",n=e.operator,a=Xr(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${xt(`${r}${t}`)}`}&${i}`;return`UPYUN ${n}:${Q.default.createHmac("sha1",a).update(s).digest("base64")}`},zr=(e,t,r,n)=>{const a=e.bucket,i=e.path;let s=(e.endpoint||"https://v0.api.upyun.com").replace(/\/+$/g,"");return s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${a}/${xt(`${i}${t}`)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":N.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function Xr(e){return Q.default.createHash("md5").update(e).digest("hex")}const Qr=(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=${`${Xr(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},Zr=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=bt({path:t.path});t.path=n;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=jr(t,a.fileName),s=zr(t,a.fileName,i,r),E=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}/${xt(`${n}${a.fileName}`)}${E}`,t.antiLeechToken){const e=Qr(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(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=xe(t.error);e.emit(gt.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}},Jr=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 en=async e=>{const r=e.getConfig("picBed.webdavplist");if(!r)throw new Error("Can't find webdavplist config");r.host=r.host.replace(/^https?:\/\/|\/+$/g,""),r.host=(r.sslEnabled?"https://":"http://")+r.host,r.path=bt({path:r.path,rootToEmpty:!1});const n=r.authType||"basic",a=bt({path:r.webpath,rootToEmpty:!1}),i=r.options||"";try{const s=e.output,E=r.customUrl,o=r.path;for(const l of s)if(l.fileName&&l.buffer){let s=l.buffer;!s&&l.base64Image&&(s=Buffer.from(l.base64Image,"base64"));const I={username:r.username,password:r.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===n&&(I.authType=w.AuthType.Digest);const S=w.createClient(r.host,I),_="/"===o?"":o;_&&await S.createDirectory(_,{recursive:!0});if(!await S.putFileContents(`${o}${l.fileName}`.replace(/^\/+|\/+$/g,""),s,{overwrite:!0}))throw new Error("Upload failed");{const n=q.default.join(e.baseDir,"imgTemp","webdavplist"),I=q.default.join(n,l.fileName);t.ensureDirSync(q.default.dirname(I)),k.default.writeFileSync(I,s),delete l.base64Image,delete l.buffer;const S=E||r.host;r.webpath?l.imgUrl=`${S}/${xt(`${a}${l.fileName}`).replace(/^\/+/g,"")}${i}`:l.imgUrl=`${S}/${xt(`${o}${l.fileName}`).replace(/^\/+/g,"")}${i}`,l.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(l.fileName)}`}}return e}catch(t){throw e.emit(gt.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},tn=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 rn=()=>({register(e){!function(e){e.helper.uploader.register(wt,{get name(){return e.i18n.translate("PICBED_ADVANCEDPLIST")},handle:Jt,config:er})}(e),function(e){e.helper.uploader.register(Wt,{get name(){return e.i18n.translate("PICBED_ALIST_PLIST")},handle:ar,config:ir})}(e),function(e){e.helper.uploader.register(Kt,{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:lr,config:Ir})}(e),function(e){e.helper.uploader.register(Ft,{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:Ar,config:pr})}(e),function(e){e.helper.uploader.register(Ht,{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:dr,config:gr})}(e),function(e){e.helper.uploader.register($t,{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:fr,config:mr})}(e),function(e){e.helper.uploader.register(vt,{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:hr,config:Br})}(e),function(e){e.helper.uploader.register(kt,{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:Ur,config:Rr})}(e),function(e){e.helper.uploader.register(Yt,{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:Mr,config:yr})}(e),function(e){e.helper.uploader.register(qt,{get name(){return e.i18n.translate("PICBED_QINIU")},handle:xr,config:wr})}(e),function(e){e.helper.uploader.register(Vt,{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Kr,config:Fr})}(e),function(e){e.helper.uploader.register(jt,{get name(){return e.i18n.translate("PICBED_SMMS")},handle:$r,config:vr})}(e),function(e){e.helper.uploader.register(zt,{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:qr,config:Vr})}(e),function(e){e.helper.uploader.register(Xt,{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Zr,config:Jr})}(e),function(e){e.helper.uploader.register(Qt,{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:en,config:tn})}(e)}}),nn=(e,t,r)=>{const n=Le(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 an={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:""}:Te(r)?await me(r,e):await fe(r),a.success&&a.buffer){const i=nn(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${re.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 sn={handle:async e=>(e.output.push(...e.input),e)};const En={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 ($null -eq $img) {\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 ($null -eq $img) {\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 ($null -ne $file) {\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'},on={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const ln=async e=>{!function(e){const r=q.default.join(e.baseDir,"piclist-clipboard-images");t.ensureDirSync(r)}(e);const r=q.default.join(e.baseDir,"piclist-clipboard-images",`${re.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((t,n)=>{const a=(()=>{const e=process.platform;return Se.default?"wsl":"win32"===e?"10"===Y.default.release().split(".")[0]?"win10":"win32":"darwin"===e?"darwin":"linux"})(),i=q.default.join(e.baseDir,on[a]);let s;k.default.existsSync(i)||k.default.writeFileSync(i,En[a],"utf8"),s="darwin"===a?W.spawn("osascript",[i,r]):"win32"===a||"win10"===a?W.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",i,r]):W.spawn("sh",[i,r]),s.stdout.on("data",(i=>{if("linux"===a&&"no xclip or wl-clipboard"===i.toString().trim())return e.emit(gt.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 E=!1;if(q.default.basename(s)!==q.default.basename(r)&&k.default.existsSync(s)&&(E=!0),"no image"!==s&&!k.default.existsSync(s))return n(new Error(`Can't find ${s}`));t({imgPath:s,shouldKeepAfterUploading:E})}))}))};class In{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",smms:{token:""}})}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])}))}}const Sn={"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_MESSAGE_TOKEN:"请填写Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ADVANCEDPLIST:"高级自定义",PICBED_ADVANCEDPLIST_ENDPOINT:"设定接口网址",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"例如:https://example.com/upload",PICBED_ADVANCEDPLIST_METHOD:"设定请求方法",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"请选择请求方法",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"设定表单参数名",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"例如:file",PICBED_ADVANCEDPLIST_HEADERS:"设定请求头",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'例如:{"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"设定请求体",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'例如:{"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"设定自定义前缀",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"例如:https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"设定返回数据URL路径",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"例如:data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"设定URL",PICBED_ALIST_MESSAGE_URL:"例如:https://alist.example.com",PICBED_ALIST_TOKEN:"设定Token",PICBED_ALIST_MESSAGE_TOKEN:"请输入Token(与用户名-密码二选一)",PICBED_ALIST_USERNAME:"设定用户名",PICBED_ALIST_MESSAGE_USERNAME:"请输入用户名(与Token二选一)",PICBED_ALIST_PASSWORD:"设定密码",PICBED_ALIST_MESSAGE_PASSWORD:"请输入密码",PICBED_ALIST_UPLOAD_PATH:"设定上传路径",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如:/test",PICBED_ALIST_WEB_PATH:"设定网站路径",PICBED_ALIST_MESSAGE_WEB_PATH:"用于拼接网址路径",PICBED_ALIST_CUSTOMURL:"设定自定义域名",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如:https://test.com",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_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:"兰空图床",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:"水印设置",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:"重命名设置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS:"图片处理",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_MESSAGE_TOKEN:"請輸入Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_ADVANCEDPLIST:"高級自定義",PICBED_ADVANCEDPLIST_ENDPOINT:"設定API主機",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"例如:https://example.com/upload",PICBED_ADVANCEDPLIST_METHOD:"設定請求方法",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"請選擇請求方法",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"設定表單Key",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"例如:file",PICBED_ADVANCEDPLIST_HEADERS:"設定請求頭",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'例如:{"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"設定請求體",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'例如:{"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"設定自定義前綴",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"例如:https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"設定返回數據路徑",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"例如:data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"設定URL",PICBED_ALIST_MESSAGE_URL:"例如:https://alist.example.com",PICBED_ALIST_TOKEN:"設定Token",PICBED_ALIST_MESSAGE_TOKEN:"請輸入Token(與用戶名-密碼二選一)",PICBED_ALIST_USERNAME:"設定用戶名",PICBED_ALIST_MESSAGE_USERNAME:"請輸入用戶名(與Token二選一)",PICBED_ALIST_PASSWORD:"設定密碼",PICBED_ALIST_MESSAGE_PASSWORD:"請輸入密碼",PICBED_ALIST_UPLOAD_PATH:"設定上傳路徑",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如:/test",PICBED_ALIST_WEB_PATH:"設定網址路徑",PICBED_ALIST_MESSAGE_WEB_PATH:"用于網頁顯示的路徑",PICBED_ALIST_CUSTOMURL:"設定自訂網址",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如:https://test.com",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_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:"蘭空圖床",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:"水印設定",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:"重命名設定",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS:"圖片處理設定",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_MESSAGE_TOKEN:"Please enter the token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_ADVANCEDPLIST:"Advanced",PICBED_ADVANCEDPLIST_ENDPOINT:"Set Endpoint",PICBED_ADVANCEDPLIST_MESSAGE_ENDPOINT:"Please enter the endpoint",PICBED_ADVANCEDPLIST_METHOD:"Set Method",PICBED_ADVANCEDPLIST_MESSAGE_METHOD:"Please select the request method",PICBED_ADVANCEDPLIST_FORM_DATA_KEY:"Set FormData Key",PICBED_ADVANCEDPLIST_MESSAGE_FORM_DATA_KEY:"Please enter the FormData key",PICBED_ADVANCEDPLIST_HEADERS:"Set Headers",PICBED_ADVANCEDPLIST_MESSAGE_HEADERS:'such as {"Content-Type": "multipart/form-data"}',PICBED_ADVANCEDPLIST_BODY:"Set Body",PICBED_ADVANCEDPLIST_MESSAGE_BODY:'such as {"key": "value"}',PICBED_ADVANCEDPLIST_CUSTOM_PREFIX:"Set Custom Prefix",PICBED_ADVANCEDPLIST_MESSAGE_CUSTOM_PREFIX:"such as https://example.com/",PICBED_ADVANCEDPLIST_RES_DATA_PATH:"Set Response Data Path",PICBED_ADVANCEDPLIST_MESSAGE_RES_DATA_PATH:"such as data.url",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_ALIST_PLIST:"AList",PICBED_ALIST_URL:"Set URL",PICBED_ALIST_MESSAGE_URL:"Ex. https://alist.example.com",PICBED_ALIST_TOKEN:"Set Token",PICBED_ALIST_MESSAGE_TOKEN:"Please enter the token(choose one of either username-password or token)",PICBED_ALIST_USERNAME:"Set Username",PICBED_ALIST_MESSAGE_USERNAME:"Please enter the username(choose one of either username-password or token)",PICBED_ALIST_PASSWORD:"Set Password",PICBED_ALIST_MESSAGE_PASSWORD:"Please enter the password",PICBED_ALIST_UPLOAD_PATH:"Set Upload Path",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"Ex. /test/",PICBED_ALIST_WEB_PATH:"Set Web Path",PICBED_ALIST_MESSAGE_WEB_PATH:"Used to generate url path",PICBED_ALIST_CUSTOMURL:"Set Custom URL",PICBED_ALIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",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_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:"Rename Settings",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK:"Watermark Settings",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:"Processing Settings",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 _n{constructor(e){this.ctx=e,this.objectAdapter=new $.ObjectAdapter(Sn);let t=this.ctx.getConfig("settings.language")||"zh-CN";Sn[t]||(t="zh-CN"),this.i18n=new $.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=q.default.join(e,t.name),n=k.default.readFileSync(r,"utf8");try{const e=_e.default.load(n);Sn[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=q.default.join(this.ctx.baseDir,"i18n-cli");return t.pathExistsSync(e)||t.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 n=this.objectAdapter.getLocale(e);if(!n)return!1;const a=r.merge(n,t);return this.objectAdapter.setLocale(e,a),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),Sn[e]=t,!0)}getLanguageList(){return Object.keys(Sn)}}class un extends e.EventEmitter{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.9.6",this.configPath=e,this.input=[],this.rawInput=[],this.processedInput=[],this.output=[],this.helper={transformer:new Ct("transformer"),uploader:new Ct("uploader"),beforeTransformPlugins:new Ct("beforeTransformPlugins"),beforeUploadPlugins:new Ct("beforeUploadPlugins"),afterUploadPlugins:new Ct("afterUploadPlugins")},this.initConfigPath(),this.log=new ft(this),this.cmd=new Tt(this),this.pluginHandler=new mt(this),this.initConfig(),this.init()}initConfigPath(){if(this.configPath=this.configPath||q.default.join(n.homedir(),".piclist/config.json"),".JSON"!==q.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=q.default.dirname(this.configPath),t.pathExistsSync(this.configPath)||t.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new In(this),this._config=this.db.read(!0)}init(){try{this.i18n=new _n(this),this.Request=new yt(this),this._pluginLoader=new Bt(this),Dt("picgo"),rn().register(this),{register(e){e.helper.transformer.register("path",an),e.helper.transformer.register("base64",sn)}}.register(this),Dt(""),this._pluginLoader.load(),this.lifecycle=new Gt(this)}catch(e){throw this.emit(gt.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){return t?(this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t)):e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?r.get(this._config,e):(this._config=this.db.read(!0),this._config)}saveConfig(e){be(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&&(Ge(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){be(e)?Object.keys(e).forEach((t=>{Ge(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),r.set(this._config,t,e[t]),Nt.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&&(Ge(e)?this.log.warn(`the config.${e} can't be unset`):r.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:r}=await ln(this),n=()=>{r||t.remove(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");{this.once(gt.FAILED,n),this.once(gt.FINISHED,n);const{output:t}=await this.lifecycle.start([e]);return t}}catch(e){throw this.emit(gt.FAILED,e),e}}async uploadReturnCtx(e,r=!1){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),this;if(void 0!==e&&0!==e.length)return await this.lifecycle.start(e,r);try{const{imgPath:e,shouldKeepAfterUploading:n}=await ln(this),a=()=>{n||t.remove(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");return this.once(gt.FAILED,a),this.once(gt.FINISHED,a),await this.lifecycle.start([e],r)}catch(e){throw this.emit(gt.FAILED,e),e}}}exports.Commander=Tt,exports.Lifecycle=Gt,exports.LifecyclePlugins=Ct,exports.Logger=ft,exports.PicGo=un,exports.PicGoUtils=Je,exports.PluginHandler=mt,exports.PluginLoader=Bt,exports.Request=yt;
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL2V2ZW50QnVzLnRzIiwiLi4vc3JjL2xpYi9SZXF1ZXN0LnRzIiwiLi4vc3JjL2NvcmUvTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUNvbnRleHQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91dGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FkdmFuY2VkcGxpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGlzdC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3MzL3V0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXBsb2FkZXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hd3NzM3BsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9sb2NhbC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2xza3kudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9waWNsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NtbXMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW5kZXgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9wYXRoLnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvYmFzZTY0LnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9pMThuL3poLUNOLnRzIiwiLi4vc3JjL2kxOG4vaW5kZXgudHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxudHlwZSBhY3Rpb25GdW5jID0gKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHZvaWRcblxuY29uc3QgY3JlYXRlQ29tbWFuZCA9IChcbiAgY21kOiBhbnksXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgYWxpYXM6IHN0cmluZyxcbiAgYWN0aW9uOiBhY3Rpb25GdW5jLFxuICBvcHRpb25zPzogeyBwcm94eTogYm9vbGVhbjsgcmVnaXN0cnk6IGJvb2xlYW4gfVxuKTogdm9pZCA9PiB7XG4gIGxldCBwcm9ncmFtID0gY21kLnByb2dyYW0uY29tbWFuZChjb21tYW5kKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxpYXMoYWxpYXMpXG4gIGlmIChvcHRpb25zPy5wcm94eSkge1xuICAgIHByb2dyYW0gPSBwcm9ncmFtLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXG4gIH1cbiAgaWYgKG9wdGlvbnM/LnJlZ2lzdHJ5KSB7XG4gICAgcHJvZ3JhbSA9IHByb2dyYW0ub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxuICB9XG4gIHByb2dyYW0uYWN0aW9uKGFjdGlvbilcbn1cblxuY29uc3QgcGx1Z2luSGFuZGxlcjogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY3JlYXRlQ29tbWFuZChcbiAgICAgIGNtZCxcbiAgICAgICdpbnN0YWxsIDxwbHVnaW5zLi4uPicsXG4gICAgICAnaW5zdGFsbCBwaWNnbyBwbHVnaW4nLFxuICAgICAgJ2FkZCcsXG4gICAgICAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IHByb3h5LCByZWdpc3RyeSB9ID0gcHJvZ3JhbVxuICAgICAgICBjb25zdCBvcHRpb25zID0geyBwcm94eSwgcmVnaXN0cnkgfVxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB7IHByb3h5OiB0cnVlLCByZWdpc3RyeTogdHJ1ZSB9XG4gICAgKVxuICAgIGNyZWF0ZUNvbW1hbmQoY21kLCAndW5pbnN0YWxsIDxwbHVnaW5zLi4uPicsICd1bmluc3RhbGwgcGljZ28gcGx1Z2luJywgJ3JtJywgKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBjdHgucGx1Z2luSGFuZGxlci51bmluc3RhbGwocGx1Z2lucykuY2F0Y2goZSA9PiB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIH0pXG4gICAgfSlcbiAgICBjcmVhdGVDb21tYW5kKFxuICAgICAgY21kLFxuICAgICAgJ3VwZGF0ZSA8cGx1Z2lucy4uLj4nLFxuICAgICAgJ3VwZGF0ZSBwaWNnbyBwbHVnaW4nLFxuICAgICAgJ3VwJyxcbiAgICAgIChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHByb3h5LCByZWdpc3RyeSB9XG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVwZGF0ZShwbHVnaW5zLCBvcHRpb25zKS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgeyBwcm94eTogdHJ1ZSwgcmVnaXN0cnk6IHRydWUgfVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbS5vcHRpb24oJy1jLCAtLWNvbmZpZyA8cGF0aD4nLCAnc2V0IGNvbmZpZyBwYXRoJylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb25maWdcbiIsImltcG9ydCBmcywgeyByZWFkRmlsZSwgcmVhZEpTT05TeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgaW1hZ2VTaXplIH0gZnJvbSAnaW1hZ2Utc2l6ZSdcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcbmltcG9ydCBUZXh0VG9TVkcgZnJvbSAndGV4dC10by1zdmcnXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5cbmltcG9ydCB7XG4gIElJbWdTaXplLFxuICBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyxcbiAgSVBsdWdpbk5hbWVUeXBlLFxuICBJTG9nZ2VyLFxuICBJUGljR28sXG4gIElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcbn0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSdcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSlcbiAgICAubWFwKCgpID0+IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKSlcbiAgICAuam9pbignJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFRpbWVzdGFtcChvbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7TWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCl9JHtyYW5kb21TdHJpbmdHZW5lcmF0b3IoNSl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoUmFuZG9tU3RyaW5nKG9sZE5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIgPSA1KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3JhbmRvbVN0cmluZ0dlbmVyYXRvcihsZW5ndGgpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVscGVyKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIG51bS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtudW19YCA6IG51bS50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIGdldE1kNShpbnB1dDogY3J5cHRvLkJpbmFyeUxpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShpbnB1dCkuZGlnZXN0KCdoZXgnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nKFxuICBvbGROYW1lOiBzdHJpbmcsXG4gIGN1c3RvbUZvcm1hdDogc3RyaW5nLFxuICBhZmZpeEZpbGVOYW1lPzogc3RyaW5nLFxuICBmaWxlQnVmZmVyPzogY3J5cHRvLkJpbmFyeUxpa2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKClcbiAgY29uc3QgZmlsZWJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpXG4gIGNvbnN0IGNvbnZlcnNpb25NYXA6IFJlY29yZDxzdHJpbmcsICgpID0+IHN0cmluZz4gPSB7XG4gICAgJ3tZfSc6ICgpID0+IHllYXIsXG4gICAgJ3t5fSc6ICgpID0+IHllYXIuc2xpY2UoMiksXG4gICAgJ3ttfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0TW9udGgoKSArIDEpLFxuICAgICd7ZH0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldERhdGUoKSksXG4gICAgJ3tofSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0SG91cnMoKSksXG4gICAgJ3tpfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0TWludXRlcygpKSxcbiAgICAne3N9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRTZWNvbmRzKCkpLFxuICAgICd7bXN9JzogKCkgPT4gbm93LmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKSxcbiAgICAne21kNX0nOiAoKSA9PiBnZXRNZDUoZmlsZUJ1ZmZlciB8fCBmaWxlYmFzZW5hbWUpLFxuICAgICd7bWQ1LTE2fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSkuc2xpY2UoMCwgMTYpLFxuICAgICd7ZmlsZW5hbWV9JzogKCkgPT4gKGFmZml4RmlsZU5hbWUgPyBwYXRoLmJhc2VuYW1lKGFmZml4RmlsZU5hbWUsIHBhdGguZXh0bmFtZShhZmZpeEZpbGVOYW1lKSkgOiBmaWxlYmFzZW5hbWUpLFxuICAgICd7dXVpZH0nOiAoKSA9PiB1dWlkdjQoKS5yZXBsYWNlKC8tL2csICcnKSxcbiAgICAne3RpbWVzdGFtcH0nOiAoKSA9PiBub3cuZ2V0VGltZSgpLnRvU3RyaW5nKClcbiAgfVxuICBpZiAoXG4gICAgY3VzdG9tRm9ybWF0ID09PSB1bmRlZmluZWQgfHxcbiAgICAoIU9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnNvbWUoaXRlbSA9PiBjdXN0b21Gb3JtYXQuaW5jbHVkZXMoaXRlbSkpICYmXG4gICAgICAhY3VzdG9tRm9ybWF0LmluY2x1ZGVzKCdsb2NhbEZvbGRlcjonKSAmJlxuICAgICAgIWN1c3RvbUZvcm1hdC5pbmNsdWRlcygnc3RyLScpKVxuICApIHtcbiAgICByZXR1cm4gb2xkTmFtZVxuICB9XG4gIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShvbGROYW1lKVxuICBsZXQgbmV3TmFtZSA9XG4gICAgT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkucmVkdWNlKChhY2MsIGN1cikgPT4ge1xuICAgICAgcmV0dXJuIGFjYy5yZXBsYWNlKG5ldyBSZWdFeHAoY3VyLCAnZycpLCBjb252ZXJzaW9uTWFwW2N1cl0oKSlcbiAgICB9LCBjdXN0b21Gb3JtYXQpICsgZXh0XG4gIGNvbnN0IHN0clJlZ2V4ID0gL3tzdHItKFxcZCspfS9naVxuICBuZXdOYW1lID0gbmV3TmFtZS5yZXBsYWNlKHN0clJlZ2V4LCAoXywgZ3JvdXAxKSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoZ3JvdXAxLCAxMClcbiAgICByZXR1cm4gcmFuZG9tU3RyaW5nR2VuZXJhdG9yKGxlbmd0aClcbiAgfSlcbiAgbmV3TmFtZSA9IG5ld05hbWUucmVwbGFjZSgveyhsb2NhbEZvbGRlcjo/KFxcZCspPyl9L2dpLCAoX3Jlc3VsdCwga2V5LCBjb3VudCkgPT4ge1xuICAgIGNvdW50ID0gTWF0aC5tYXgoMSwgY291bnQgfHwgMClcbiAgICBjb25zdCBwYXRocyA9IHBhdGguZGlybmFtZShvbGROYW1lKS5zcGxpdChwYXRoLnNlcClcbiAgICBrZXkgPSBwYXRocy5zbGljZSgwIC0gY291bnQpLnJlZHVjZSgoYSwgYikgPT4gYCR7YX0vJHtifWApXG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKC86L2csICcnKVxuICB9KVxuICByZXR1cm4gbmV3TmFtZVxufVxuXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IC9eaHR0cHM/OlxcL1xcLy8udGVzdCh1cmwpXG5cbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB1cmwgPSB1cmwgfHwgJydcbiAgdHJ5IHtcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XG4gICAgcmV0dXJuIHVybCAhPT0gZGVjb2RlVVJJKHVybClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFpc1VybEVuY29kZSh1cmwpKSB7XG4gICAgdXJsID0gZW5jb2RlVVJJKHVybClcbiAgfVxuICByZXR1cm4gdXJsXG59XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVNpemUgPSAoZmlsZTogQnVmZmVyKTogSUltZ1NpemUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCB0eXBlIH0gPSBpbWFnZVNpemUoZmlsZSlcbiAgICBjb25zdCBleHRuYW1lID0gdHlwZSA/IGAuJHt0eXBlfWAgOiAnLnBuZydcbiAgICByZXR1cm4ge1xuICAgICAgcmVhbDogdHJ1ZSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZXh0bmFtZVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGZhbGxiYWNrIHRvIDIwMCAqIDIwMFxuICAgIHJldHVybiB7XG4gICAgICByZWFsOiBmYWxzZSxcbiAgICAgIHdpZHRoOiAyMDAsXG4gICAgICBoZWlnaHQ6IDIwMCxcbiAgICAgIGV4dG5hbWU6ICcucG5nJ1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0RlNGaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4dG5hbWU6IHBhdGguZXh0bmFtZShmaWxlUGF0aCksXG4gICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXG4gICAgICBidWZmZXI6IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKSxcbiAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7XG4gICAgICByZWFzb246IGByZWFkIGZpbGUgJHtmaWxlUGF0aH0gZXJyb3JgLFxuICAgICAgc3VjY2VzczogZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFVSTEZpbGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4gPT4ge1xuICB1cmwgPSBoYW5kbGVVcmxFbmNvZGUodXJsKVxuICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dFxuICBjb25zdCByZXF1ZXN0Rm4gPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4XG4gICAgICAgICAgLnJlcXVlc3Qoe1xuICAgICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihyZXNwID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEgYXMgQnVmZmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgICAgY29uc3QgdXJsUGF0aCA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgICAgICBsZXQgZXh0bmFtZSA9ICcnXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTCh1cmwpLnNlYXJjaFBhcmFtc1xuICAgICAgICAgIGV4dG5hbWUgPSB1cmxQYXJhbXMuZ2V0KCd3eF9mbXQnKSB8fCBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBleHRuYW1lID0gcGF0aC5leHRuYW1lKHVybFBhdGgpIHx8ICcnXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleHRuYW1lLnN0YXJ0c1dpdGgoJy4nKSAmJiBleHRuYW1lKSB7XG4gICAgICAgICAgZXh0bmFtZSA9IGAuJHtleHRuYW1lfWBcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBidWZmZXI6IHJlcyxcbiAgICAgICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZSh1cmxQYXRoKSxcbiAgICAgICAgICBleHRuYW1lLFxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IGVycm9yLCAke2Vycm9yPy5tZXNzYWdlID8/ICcnfWBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KSgpLmNhdGNoKHJlamVjdClcbiAgfSlcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gdGltZW91dGBcbiAgICAgIH0pXG4gICAgfSwgMzAwMDApXG4gIH0pXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RGbiwgdGltZW91dFByb21pc2VdKVxufVxuXG4vKipcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nJ3MgdHlwZVxuICogZm9yIGV4YW1wbGVcbiAqIDEuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBzY29wZVxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBub3JtYWxcbiAqIDMuIHh4eCAtPiBzaW1wbGVcbiAqIDQuIG5vdCBleGlzdHMgb3IgaXMgYSBwYXRoIC0+IHVua25vd25cbiAqIEBwYXJhbSBuYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5OYW1lVHlwZSA9IChuYW1lOiBzdHJpbmcpOiBJUGx1Z2luTmFtZVR5cGUgPT4ge1xuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuICdzY29wZSdcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3BpY2dvLXBsdWdpbi0nKSkge1xuICAgIHJldHVybiAnbm9ybWFsJ1xuICB9IGVsc2UgaWYgKGlzU2ltcGxlTmFtZShuYW1lKSkge1xuICAgIHJldHVybiAnc2ltcGxlJ1xuICB9XG4gIHJldHVybiAndW5rbm93bidcbn1cblxuLyoqXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbXBsZSBwbHVnaW4gbmFtZSBvciBub3RcbiAqIGZvciBleGFtcGxlXG4gKiAxLiB4eHggLT4gdHJ1ZVxuICogMi4gL1Vzci94eC94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gZmFsc2VcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbk5hbWVPclBhdGhcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2ltcGxlTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAobmFtZU9yUGF0aC5pbmNsdWRlcygnLycpIHx8IG5hbWVPclBhdGguaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogc3RyZWFtbGluZSB0aGUgZnVsbCBwbHVnaW4gbmFtZSB0byBhIHNpbXBsZSBvbmVcbiAqIGZvciBleGFtcGxlOlxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiB4eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXl5eSAtPiB5eXlcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbkZ1bGxOYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVTdHJlYW1saW5lUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLCAnJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9waWNnby1wbHVnaW4tLywgJycpXG4gIH1cbn1cblxuLyoqXG4gKiBjb21wbGV0ZSBwbHVnaW4gbmFtZSB0byBmdWxsIG5hbWVcbiAqIGZvciBleGFtcGxlOlxuICogMS4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWUgcGx1Z2luU2ltcGxlTmFtZVxuICogQHBhcmFtIHNjb3BlIHBsdWdpblNjb3BlXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nLCBzY29wZSA9ICcnKTogc3RyaW5nID0+XG4gIHNjb3BlID8gYEAke3Njb3BlfS9waWNnby1wbHVnaW4tJHtuYW1lfWAgOiBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXG5cbi8qKlxuICogaGFuZGxlIGluc3RhbGwvdW5pbnN0YWxsL3VwZGF0ZSBwbHVnaW4gbmFtZSBvciBwYXRoXG4gKiBmb3IgZXhhbXBsZVxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiAzLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNC4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4veHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiA1LiAvYWJzb2x1dGVQYXRoLy4uLi9waWNnby1wbHVnaW4teHh4IC0+IC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHhcbiAqIEBwYXJhbSBuYW1lT3JQYXRoIHBsdWdpbk5hbWUgb3IgcGx1Z2luUGF0aFxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIgfCBDb25zb2xlID0gY29uc29sZSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xuICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgY2FzZSAnc2NvcGUnOlxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgcmV0dXJuIGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZShuYW1lT3JQYXRoKVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIG5vdywgdGhlIHBsdWdpbk5hbWVUeXBlIGlzIHVua25vdyBoZXJlXG4gICAgICAvLyAxLiBjaGVjayBpZiBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICBsZXQgcGx1Z2luUGF0aCA9IG5hbWVPclBhdGhcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkgJiYgZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxuICAgICAgfVxuICAgICAgLy8gMi4gY2hlY2sgaWYgaXMgYSByZWxhdGl2ZSBwYXRoXG4gICAgICBwbHVnaW5QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIG5hbWVPclBhdGgpXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlVW5peFN0eWxlUGF0aChwbHVnaW5QYXRoKVxuICAgICAgfVxuICAgICAgLy8gMy4gaW52YWxpZCBuYW1lT3JQYXRoXG4gICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW4gJHtuYW1lT3JQYXRofWApXG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBnZXQgdGhlIG5vcm1hbCBwbHVnaW4gbmFtZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDMuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDQuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNS4gYW4gZXhjZXB0aW9uOiBbcGFja2FnZS5qc29uJ3MgbmFtZV0gIT09IFtmb2xkZXIgbmFtZV1cbiAqIHRoZW4gdXNlIFtwYWNrYWdlLmpzb24ncyBuYW1lXSwgdXN1YWxseSBtYXRjaCB0aGUgc2NvcGUgcGFja2FnZS5cbiAqIDYuIGlmIHBsdWdpbiBuYW1lIGhhcyB2ZXJzaW9uOiBwaWNnby1wbHVnaW4teHh4QHgueC54IHRoZW4gcmVtb3ZlIHRoZSB2ZXJzaW9uXG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxuICovXG5leHBvcnQgY29uc3QgZ2V0Tm9ybWFsUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XG4gICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgIHJldHVybiByZW1vdmVQbHVnaW5WZXJzaW9uKG5hbWVPclBhdGgpXG4gICAgY2FzZSAnc2NvcGUnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aCwgdHJ1ZSlcbiAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24oaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpKVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIG5vdywgdGhlIG5hbWVPclBhdGggbXVzdCBiZSBwYXRoXG4gICAgICAvLyB0aGUgbmFtZU9yUGF0aCBoZXJlIHdpbGwgYmUgZW5zdXJlZCB3aXRoIHVuaXggc3R5bGVcbiAgICAgIC8vIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZSBjYXVzZSBucG0gdXNpbmcgdGhlIG5hbWUgaW4gcGFja2FnZS5qc29uJ3MgbmFtZSBmaWxlZFxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXG4gICAgICAgIHJldHVybiAnJ1xuICAgICAgfVxuICAgICAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gcGF0aC5wb3NpeC5qb2luKG5hbWVPclBhdGgsICdwYWNrYWdlLmpzb24nKVxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKU09OUGF0aCkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luOiAke25hbWVPclBhdGh9YClcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwa2cgPSByZWFkSlNPTlN5bmMocGFja2FnZUpTT05QYXRoKSB8fCB7fVxuICAgICAgICBpZiAoIXBrZy5uYW1lPy5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgVGhlIHBsdWdpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkIGlzICR7KHBrZy5uYW1lIGFzIHN0cmluZykgfHwgJ2VtcHR5J30sIG5lZWQgdG8gaW5jbHVkZSB0aGUgcHJlZml4OiBwaWNnby1wbHVnaW4tYFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4gJydcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGtnLm5hbWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBoYW5kbGUgdHJhbnNmb3JtIHRoZSBwYXRoIHRvIHVuaXggc3R5bGVcbiAqIGZvciBleGFtcGxlXG4gKiAxLiBDOlxcXFx4eHhcXFxceHh4IC0+IEM6L3h4eC94eHhcbiAqIDIuIC94eHgveHh4IC0+IC94eHgveHh4XG4gKiBAcGFyYW0gcGF0aFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlVW5peFN0eWxlUGF0aCA9IChwYXRoU3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYXRoQXJyID0gcGF0aFN0ci5zcGxpdChwYXRoLnNlcClcbiAgcmV0dXJuIHBhdGhBcnIuam9pbignLycpXG59XG5cbi8qKlxuICogcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uIHdoZW4gcmVnaXN0ZXIgcGx1Z2luIG5hbWVcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4QDEuMC4wIC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWVPclBhdGhcbiAqIEBwYXJhbSBzY29wZVxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlUGx1Z2luVmVyc2lvbiA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIHNjb3BlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5hbWVPclBhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgIHJldHVybiBuYW1lT3JQYXRoXG4gIH0gZWxzZSB7XG4gICAgbGV0IHJlZyA9IC8oLitcXC8pPyhwaWNnby1wbHVnaW4tXFx3KykoQC4rKSovXG4gICAgLy8gaWYgaXMgYSBzY29wZSBwa2dcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIHJlZyA9IC8oLitcXC8pPyheQFteL10rXFwvcGljZ28tcGx1Z2luLVxcdyspKEAuKykqL1xuICAgIH1cbiAgICBjb25zdCBtYXRjaEFyciA9IG5hbWVPclBhdGgubWF0Y2gocmVnKVxuICAgIGlmICghbWF0Y2hBcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignY2FuIG5vdCByZW1vdmUgcGx1Z2luIHZlcnNpb24nKVxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1hdGNoQXJyWzJdXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogdGhlIGNvbmZpZyBibGFjayBpdGVtIGxpc3Qgd2hpY2ggd29uJ3QgYmUgc2V0dGVkXG4gKiBvbmx5IGNhbiBiZSBnb3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpZ0JsYWNrTGlzdCA9IFtdXG5cbi8qKlxuICogY2hlY2sgc29tZSBjb25maWcga2V5IGlzIGluIGJsYWNrTGlzdFxuICogQHBhcmFtIGtleVxuICovXG5leHBvcnQgY29uc3QgaXNDb25maWdLZXlJbkJsYWNrTGlzdCA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gY29uZmlnQmxhY2tMaXN0LnNvbWUoYmxhY2tJdGVtID0+IGtleS5zdGFydHNXaXRoKGJsYWNrSXRlbSkpXG59XG5cbi8qKlxuICogY2hlY2sgdGhlIGlucHV0IGNvbmZpZyBpcyB2YWxpZFxuICogY29uZmlnIG11c3QgYmUgb2JqZWN0IHN1Y2ggYXMgeyB4eHg6ICd4eHgnIH1cbiAqICYmIGNhbid0IGJlIGFycmF5XG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNJbnB1dENvbmZpZ1ZhbGlkID0gKGNvbmZpZzogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShjb25maWcpICYmIE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2U8VD4oc3RyOiBzdHJpbmcpOiBUIHwgc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmb3JjZU51bWJlciA9IChudW06IHN0cmluZyB8IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xuICByZXR1cm4gaXNOYU4oTnVtYmVyKG51bSkpID8gMCA6IE51bWJlcihudW0pXG59XG5cbmV4cG9ydCBjb25zdCBpc0RldiA9ICgpOiBib29sZWFuID0+IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG5cbmFzeW5jIGZ1bmN0aW9uIHRleHQyU1ZHKFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgdGV4dD86IHN0cmluZyxcbiAgY29sb3I/OiBzdHJpbmcsXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmdcbik6IFByb21pc2U8QnVmZmVyPiB7XG4gIHRleHQgPSAhdGV4dCA/ICfmtYvor5UnIDogdGV4dFxuICBmb250RmFtaWx5ID0gIWZvbnRGYW1pbHkgPyBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGggOiBmb250RmFtaWx5XG4gIGNvbG9yID0gIWNvbG9yID8gJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknIDogY29sb3JcbiAgY29uc3QgdGV4dDJTVkcgPSBUZXh0VG9TVkcubG9hZFN5bmMoZm9udEZhbWlseSlcbiAgY29uc3Qgb3B0aW9uczogVGV4dFRvU1ZHLkdlbmVyYXRpb25PcHRpb25zID0ge1xuICAgIGFuY2hvcjogJ3RvcCcsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgZmlsbDogY29sb3JcbiAgICB9XG4gIH1cbiAgY29uc3QgdGV4dFNWRyA9IHRleHQyU1ZHLmdldFNWRyh0ZXh0LCBvcHRpb25zKVxuICByZXR1cm4gQnVmZmVyLmZyb20odGV4dFNWRylcbn1cblxuY29uc3QgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdhc3NldHMnLCAncGljbGlzdC5wbmcnKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQWRkV2F0ZXJtYXJrKFxuICBpbWc6IEJ1ZmZlcixcbiAgd2F0ZXJtYXJrVHlwZTogJ3RleHQnIHwgJ2ltYWdlJyxcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXG4gIGlzRnVsbFNjcmVlbldhdGVybWFyaz86IGJvb2xlYW4sXG4gIHdhdGVybWFya0RlZ3JlZT86IG51bWJlcixcbiAgdGV4dD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXG4gIHBvc2l0aW9uPzogc2hhcnAuR3Jhdml0eVxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbyA9XG4gICAgIXdhdGVybWFya1NjYWxlUmF0aW8gfHwgd2F0ZXJtYXJrU2NhbGVSYXRpbyA8IDAgfHwgd2F0ZXJtYXJrU2NhbGVSYXRpbyA+IDEgPyAwLjE1IDogd2F0ZXJtYXJrU2NhbGVSYXRpb1xuICBjb25zdCBpbWFnZSA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICBjb25zdCB7IHdpZHRoOiBpbWdXaWR0aCA9IDIwMCB9ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKVxuICBjb25zdCB3YXRlcm1hcmsgPSBhd2FpdCBjcmVhdGVXYXRlcm1hcmsoXG4gICAgd2F0ZXJtYXJrVHlwZSxcbiAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXG4gICAgdGV4dCxcbiAgICB3YXRlcm1hcmtGb250UGF0aCxcbiAgICB3YXRlcm1hcmtTY2FsZVJhdGlvLFxuICAgIHdhdGVybWFya0NvbG9yLFxuICAgIHdhdGVybWFya0ltYWdlUGF0aCxcbiAgICBpbWdXaWR0aCxcbiAgICB3YXRlcm1hcmtEZWdyZWVcbiAgKVxuICByZXR1cm4gYXdhaXQgaW1hZ2VcbiAgICAuY29tcG9zaXRlKFtcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHdhdGVybWFyayxcbiAgICAgICAgZ3Jhdml0eTogcG9zaXRpb24gfHwgJ3NvdXRoZWFzdCcsXG4gICAgICAgIHRpbGU6IGlzRnVsbFNjcmVlbldhdGVybWFya1xuICAgICAgfVxuICAgIF0pXG4gICAgLnRvQnVmZmVyKClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2F0ZXJtYXJrKFxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgdGV4dD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXG4gIHdhdGVybWFya1NjYWxlUmF0aW8/OiBudW1iZXIsXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXG4gIGltZ1dpZHRoOiBudW1iZXIgPSAyMDAsXG4gIHdhdGVybWFya0RlZ3JlZTogbnVtYmVyID0gMFxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IHdhdGVybWFyazogYW55XG4gIGlmICh3YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSB7XG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoID0gd2F0ZXJtYXJrSW1hZ2VQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGhcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCBzaGFycCh3YXRlcm1hcmtJbWFnZVBhdGgpLnRvQnVmZmVyKClcbiAgfSBlbHNlIHtcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCB0ZXh0MlNWRyhcbiAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICAgIHRleHQsXG4gICAgICB3YXRlcm1hcmtDb2xvcixcbiAgICAgIHdhdGVybWFya0ZvbnRQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aFxuICAgIClcbiAgfVxuICBjb25zdCB7IHdpZHRoOiB3YXRlcm1hcmtXaWR0aCwgaGVpZ2h0OiB3YXRlcm1hcmtIZWlnaHQgfSA9IGF3YWl0IGdldFNpemUod2F0ZXJtYXJrKVxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVXaWR0aCA9IE1hdGguZmxvb3IoaW1nV2lkdGggKiBmb3JjZU51bWJlcih3YXRlcm1hcmtTY2FsZVJhdGlvKSlcbiAgY29uc3Qgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0ID0gTWF0aC5mbG9vcigod2F0ZXJtYXJrUmVzaXplV2lkdGggKiB3YXRlcm1hcmtIZWlnaHQpIC8gd2F0ZXJtYXJrV2lkdGgpXG4gIHJldHVybiBhd2FpdCBzaGFycCh3YXRlcm1hcmspXG4gICAgLnJlc2l6ZSh3YXRlcm1hcmtSZXNpemVXaWR0aCwgd2F0ZXJtYXJrUmVzaXplSGVpZ2h0LCB7XG4gICAgICBmaXQ6ICdpbnNpZGUnXG4gICAgfSlcbiAgICAucm90YXRlKHdhdGVybWFya0RlZ3JlZSwge1xuICAgICAgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9XG4gICAgfSlcbiAgICAudG9CdWZmZXIoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTaXplKGltYWdlOiBCdWZmZXIpOiBQcm9taXNlPHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHNoYXJwKGltYWdlKS5tZXRhZGF0YSgpXG4gIHJldHVybiB7IHdpZHRoOiB3aWR0aCB8fCAyMDAsIGhlaWdodDogaGVpZ2h0IHx8IDIwMCB9XG59XG5cbmNvbnN0IHZhbGlkUGFyYW0gPSAoLi4ucGFyYW1zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gcGFyYW1zLmV2ZXJ5KHBhcmFtID0+IHtcbiAgICBpZiAocGFyYW0gPT09IHVuZGVmaW5lZCB8fCBwYXJhbSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHJldHVybiBwYXJhbSAhPT0gJydcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJykgcmV0dXJuIHBhcmFtID4gMFxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmtleXMocGFyYW0pLmxlbmd0aCA+IDBcbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxufVxuXG4vKipcbiAqIOi9rOaNouWQjuWPr+S7pei+k+WHuueahOagvOW8j+WIl+ihqFxuICovXG5jb25zdCBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCA9IFtcbiAgJ2F2aWYnLFxuICAnZHonLFxuICAnZml0cycsXG4gICdnaWYnLFxuICAnaGVpZicsXG4gICdpbnB1dCcsXG4gICdqcGVnJyxcbiAgJ2pwZycsXG4gICdqcDInLFxuICAnanhsJyxcbiAgJ21hZ2ljaycsXG4gICdvcGVuc2xpZGUnLFxuICAncGRmJyxcbiAgJ3BuZycsXG4gICdwcG0nLFxuICAncmF3JyxcbiAgJ3N2ZycsXG4gICd0aWZmJyxcbiAgJ3RpZicsXG4gICd2JyxcbiAgJ3dlYnAnXG5dXG5cbi8qKlxuICog5Y+v5Lul5aSE55CG55qE5Zu+54mH5qC85byP5YiX6KGoXG4gKi9cbmNvbnN0IGltYWdlRm9ybWF0TGlzdCA9IFtcbiAgJ2pwZycsXG4gICdqcGVnJyxcbiAgJ3BuZycsXG4gICd3ZWJwJyxcbiAgJ2JtcCcsXG4gICd0aWZmJyxcbiAgJ3RpZicsXG4gICdzdmcnLFxuICAnaWNvJyxcbiAgJ2F2aWYnLFxuICAnaGVpZicsXG4gICdoZWljJyxcbiAgJ2dpZidcbl1cblxuY29uc3QgdmFsaWRPdXRwdXRGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuID0+IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0LmluY2x1ZGVzKGZvcm1hdClcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQWRkV2F0ZXJNYXJrKFxuICBpbWc6IEJ1ZmZlcixcbiAgb3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgbG9nZ2VyOiBJTG9nZ2VyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICB0cnkge1xuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcbiAgICBpbWFnZSA9IHNoYXJwKFxuICAgICAgYXdhaXQgQWRkV2F0ZXJtYXJrKFxuICAgICAgICBpbWcsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCcsXG4gICAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICAgICAgb3B0aW9ucy5pc0Z1bGxTY3JlZW5XYXRlcm1hcmssXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrRGVncmVlKSxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtUZXh0LFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya1NjYWxlUmF0aW8pLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0NvbG9yLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya0ltYWdlUGF0aCxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtQb3NpdGlvblxuICAgICAgKSxcbiAgICAgIHsgYW5pbWF0ZWQ6IHRydWUgfVxuICAgIClcbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBhZGQgd2F0ZXJtYXJrIGVycm9yOiAke2Vycm9yfWApXG4gICAgcmV0dXJuIGltZ1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE9wdGlvbnMob3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMpOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnRPYmogPVxuICAgIHR5cGVvZiBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmogPT09ICdzdHJpbmcnID8gc2FmZVBhcnNlKG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaikgOiBvcHRpb25zLmZvcm1hdENvbnZlcnRPYmpcbiAgcmV0dXJuIHtcbiAgICBxdWFsaXR5OiBmb3JjZU51bWJlcihvcHRpb25zLnF1YWxpdHkpLFxuICAgIGlzQ29udmVydDogb3B0aW9ucy5pc0NvbnZlcnQgfHwgZmFsc2UsXG4gICAgY29udmVydEZvcm1hdDogb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnLFxuICAgIGlzUmVTaXplOiBvcHRpb25zLmlzUmVTaXplIHx8IGZhbHNlLFxuICAgIHJlU2l6ZUhlaWdodDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVIZWlnaHQpLFxuICAgIHJlU2l6ZVdpZHRoOiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVdpZHRoKSxcbiAgICBza2lwUmVTaXplT2ZTbWFsbEltZzogb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZSxcbiAgICBpc1JlU2l6ZUJ5UGVyY2VudDogb3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZSxcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxuICAgIGlzUm90YXRlOiBvcHRpb25zLmlzUm90YXRlIHx8IGZhbHNlLFxuICAgIGlzRmxpcDogb3B0aW9ucy5pc0ZsaXAgfHwgZmFsc2UsXG4gICAgaXNGbG9wOiBvcHRpb25zLmlzRmxvcCB8fCBmYWxzZSxcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcbiAgICBwaWNCZWQ6IG9wdGlvbnMucGljQmVkIHx8ICdzbW1zJyxcbiAgICBmb3JtYXRDb252ZXJ0T2JqOiBmb3JtYXRDb252ZXJ0T2JqIHx8IHt9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQ29tcHJlc3MoXG4gIGltZzogQnVmZmVyLFxuICBvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcbiAgcmF3Rm9ybWF0OiBzdHJpbmcsXG4gIGxvZ2dlcjogSUxvZ2dlclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucylcbiAgdHJ5IHtcbiAgICByYXdGb3JtYXQgPSBub3JtYWxpemVJbWFnZUV4dChyYXdGb3JtYXQpXG4gICAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMocmF3Rm9ybWF0KSB8fCByYXdGb3JtYXQgPT09ICdnaWYnKSByZXR1cm4gaW1nXG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICAgIGxldCBxdWFsaXR5ID0gMTAwXG4gICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5xdWFsaXR5KSAmJiBvcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XG4gICAgICBxdWFsaXR5ID0gb3B0aW9ucy5xdWFsaXR5IVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCkge1xuICAgICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5yZVNpemVQZXJjZW50KSkge1xuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXG4gICAgICAgICAgICBNYXRoLnJvdW5kKChpbWFnZVdpZHRoICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISkgLyAxMDApLFxuICAgICAgICAgICAgTWF0aC5yb3VuZCgoaW1hZ2VIZWlnaHQgKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhKSAvIDEwMCksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpdDogJ2luc2lkZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaXNSZVNpemUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDAgJiZcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGggPiAwXG4gICAgICApIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUob3B0aW9ucy5yZVNpemVXaWR0aCwgb3B0aW9ucy5yZVNpemVIZWlnaHQsIHtcbiAgICAgICAgICBmaXQ6ICdmaWxsJ1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDAgJiZcbiAgICAgICAgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAwKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPCBpbWFnZUhlaWdodCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZUhlaWdodCAvIGltYWdlSGVpZ2h0XG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBzY2FsZVJhdGlvKSwgb3B0aW9ucy5yZVNpemVIZWlnaHQsIHtcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMCAmJlxuICAgICAgICAodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gMClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IChvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nICYmIG9wdGlvbnMucmVTaXplV2lkdGggPCBpbWFnZVdpZHRoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVSYXRpbyA9IG9wdGlvbnMucmVTaXplV2lkdGggLyBpbWFnZVdpZHRoXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShvcHRpb25zLnJlU2l6ZVdpZHRoLCBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogc2NhbGVSYXRpbyksIHtcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcbiAgICAgIGltYWdlID0gaW1hZ2Uucm90YXRlKG9wdGlvbnMucm90YXRlRGVncmVlLCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYWxwaGE6IDAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNGbGlwKSB7XG4gICAgICBpbWFnZSA9IGltYWdlLmZsaXAoKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc0Zsb3ApIHtcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxvcCgpXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzQ29udmVydCkge1xuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gZ2V0Q29udmVydGVkRm9ybWF0KG9wdGlvbnMsIHJhd0Zvcm1hdCkgYXMgYW55XG4gICAgICBpZiAobmV3Rm9ybWF0ICE9PSByYXdGb3JtYXQpIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChuZXdGb3JtYXQsIHtcbiAgICAgICAgICBxdWFsaXR5LFxuICAgICAgICAgIG1vempwZWc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQocmF3Rm9ybWF0IGFzIGFueSwge1xuICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdCgnanBnJywge1xuICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgaW1hZ2UudG9CdWZmZXIoKVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBwcm9jZXNzIGVycm9yOiAke2Vycm9yfWApXG4gICAgcmV0dXJuIGltZ1xuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlRXh0ID0gKGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZEZvcm1hdChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgcmF3Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zIHx8IHt9KVxuICByYXdGb3JtYXQgPSBub3JtYWxpemVJbWFnZUV4dChyYXdGb3JtYXQpXG4gIGlmIChyYXdGb3JtYXQgPT09ICdnaWYnKSByZXR1cm4gJ2dpZidcbiAgbGV0IG5ld0Zvcm1hdCA9IG9wdGlvbnM/LmNvbnZlcnRGb3JtYXQgfHwgJ2pwZydcbiAgaWYgKG9wdGlvbnM/LmZvcm1hdENvbnZlcnRPYmogJiYgT2JqZWN0LmtleXMob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZm9ybWF0Q29udmVydE9iaiA9IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxuICAgIGNvbnN0IGZvcm1hdENvbnZlcnRPYmpLZXlzID0gT2JqZWN0LmtleXMoZm9ybWF0Q29udmVydE9iailcbiAgICBpZiAoZm9ybWF0Q29udmVydE9iaktleXMuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xuICAgICAgbmV3Rm9ybWF0ID0gZm9ybWF0Q29udmVydE9ialtyYXdGb3JtYXRdXG4gICAgICBpZiAoIXZhbGlkT3V0cHV0Rm9ybWF0KG5ld0Zvcm1hdCkpIHtcbiAgICAgICAgbmV3Rm9ybWF0ID0gJ2pwZydcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnM/LnBpY0JlZCA9PT0gJ2ltZ3VyJyAmJiBuZXdGb3JtYXQgPT09ICd3ZWJwJykge1xuICAgIG5ld0Zvcm1hdCA9ICdqcGcnXG4gIH1cbiAgcmV0dXJuIG5ld0Zvcm1hdFxufVxuXG5leHBvcnQgY29uc3QgaXNOZWVkQWRkV2F0ZXJtYXJrID0gKFxuICB3YXRlcm1hcmtPcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIGZpbGVFeHQ6IHN0cmluZ1xuKTogYm9vbGVhbiA9PiB7XG4gIGZpbGVFeHQgPSBub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KVxuICByZXR1cm4gKFxuICAgICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpICYmIGZpbGVFeHQgIT09ICdzdmcnXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGlzTmVlZENvbXByZXNzID0gKGNvbXByZXNzT3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQsIGZpbGVFeHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KSkgfHwgIWNvbXByZXNzT3B0aW9ucykgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qge1xuICAgIHF1YWxpdHksXG4gICAgaXNSZVNpemVCeVBlcmNlbnQsXG4gICAgcmVTaXplUGVyY2VudCxcbiAgICBpc1JlU2l6ZSxcbiAgICByZVNpemVIZWlnaHQsXG4gICAgcmVTaXplV2lkdGgsXG4gICAgaXNSb3RhdGUsXG4gICAgcm90YXRlRGVncmVlLFxuICAgIGlzQ29udmVydCxcbiAgICBjb252ZXJ0Rm9ybWF0LFxuICAgIGlzRmxpcCxcbiAgICBpc0Zsb3BcbiAgfSA9IGZvcm1hdE9wdGlvbnMoY29tcHJlc3NPcHRpb25zKVxuXG4gIGlmICh2YWxpZFBhcmFtKHF1YWxpdHkpICYmIHF1YWxpdHkhIDwgMTAwKSByZXR1cm4gdHJ1ZVxuICBpZiAoaXNSZVNpemVCeVBlcmNlbnQgJiYgdmFsaWRQYXJhbShyZVNpemVQZXJjZW50KSkgcmV0dXJuIHRydWVcbiAgaWYgKFxuICAgIGlzUmVTaXplICYmXG4gICAgKCh0eXBlb2YgcmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiByZVNpemVIZWlnaHQgPiAwKSB8fCAodHlwZW9mIHJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiByZVNpemVXaWR0aCA+IDApKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1JvdGF0ZSAmJiByb3RhdGVEZWdyZWUpIHJldHVybiB0cnVlXG4gIGlmIChpc0ZsaXAgfHwgaXNGbG9wKSByZXR1cm4gdHJ1ZVxuICBpZiAoaXNDb252ZXJ0KSB7XG4gICAgY29uc3QgbmV3Rm9ybWF0ID0gY29udmVydEZvcm1hdCB8fCAnanBnJ1xuICAgIHJldHVybiBmaWxlRXh0ICE9PSBuZXdGb3JtYXRcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4aWYgPSBhc3luYyAoaW1nOiBCdWZmZXIsIGZpbGVFeHQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiA9PiB7XG4gIGZpbGVFeHQgPSBub3JtYWxpemVJbWFnZUV4dChmaWxlRXh0KVxuICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhmaWxlRXh0KSB8fCBmaWxlRXh0ID09PSAnc3ZnJykgcmV0dXJuIGltZ1xuICByZXR1cm4gYXdhaXQgc2hhcnAoaW1nLCB7XG4gICAgYW5pbWF0ZWQ6IHRydWVcbiAgfSkudG9CdWZmZXIoKVxufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IGlzVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHVwbG9hZDogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjdHguY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGxvYWQsIGdvIGdvIGdvJylcbiAgICAgIC5hcmd1bWVudHMoJ1tpbnB1dC4uLl0nKVxuICAgICAgLmFsaWFzKCd1JylcbiAgICAgIC5hY3Rpb24oKGlucHV0OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dExpc3QgPSBpbnB1dFxuICAgICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXG4gICAgICAgICAgICAgIGlmICghZXhpc3QpIHtcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYCR7aXRlbX0gZG9lcyBub3QgZXhpc3QuYClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZXhpc3RcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXG4gICAgICAgIH0pKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3F1YWxpdHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzQ29udmVydCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQ29udmVydCB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2NvbnZlcnRGb3JtYXQnLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgICdhdmlmJyxcbiAgICAgICAgJ2R6JyxcbiAgICAgICAgJ2ZpdHMnLFxuICAgICAgICAnZ2lmJyxcbiAgICAgICAgJ2hlaWYnLFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAnanBlZycsXG4gICAgICAgICdqcGcnLFxuICAgICAgICAnanAyJyxcbiAgICAgICAgJ2p4bCcsXG4gICAgICAgICdtYWdpY2snLFxuICAgICAgICAnb3BlbnNsaWRlJyxcbiAgICAgICAgJ3BkZicsXG4gICAgICAgICdwbmcnLFxuICAgICAgICAncHBtJyxcbiAgICAgICAgJ3JhdycsXG4gICAgICAgICdzdmcnLFxuICAgICAgICAndGlmZicsXG4gICAgICAgICd0aWYnLFxuICAgICAgICAndicsXG4gICAgICAgICd3ZWJwJ1xuICAgICAgXSxcbiAgICAgIGRlZmF1bHQ6ICdqcGcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNSZVNpemUnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemUgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZVNpemVXaWR0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVTaXplSGVpZ2h0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZUhlaWdodCB8fCA1MDBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdza2lwUmVTaXplT2ZTbWFsbEltZycsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzUmVTaXplQnlQZXJjZW50JyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVTaXplUGVyY2VudCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVBlcmNlbnQgfHwgNTBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc0ZsaXAnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxJUCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0ZsaXAgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc0Zsb3AnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTE9QJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Zsb3AgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc1JvdGF0ZScsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JPVEFURScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JPVEFURScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JvdGF0ZSB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JvdGF0ZURlZ3JlZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yb3RhdGVEZWdyZWUgfHwgOTBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc1JlbW92ZUV4aWYnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlbW92ZUV4aWYgfHwgZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpZ1xufVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaXNBZGRXYXRlcm1hcmsnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0FkZFdhdGVybWFyayB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya1R5cGUnLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFsndGV4dCcsICdpbWFnZSddLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUeXBlIHx8ICd0ZXh0J1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzRnVsbFNjcmVlbldhdGVybWFyaycsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRGVncmVlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUZXh0IHx8ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRm9udFBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtGb250UGF0aCB8fCAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya1NjYWxlUmF0aW8nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtTY2FsZVJhdGlvIHx8IDAuMTVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtDb2xvcicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0NvbG9yIHx8ICdyZ2JhKDIwNCwgMjA0LCAyMDQsIDAuNDUpJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya0ltYWdlUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ltYWdlUGF0aCB8fCAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya1Bvc2l0aW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgJ25vcnRoJyxcbiAgICAgICAgJ25vcnRoZWFzdCcsXG4gICAgICAgICdzb3V0aGVhc3QnLFxuICAgICAgICAnc291dGgnLFxuICAgICAgICAnc291dGh3ZXN0JyxcbiAgICAgICAgJ25vcnRod2VzdCcsXG4gICAgICAgICd3ZXN0JyxcbiAgICAgICAgJ2Vhc3QnLFxuICAgICAgICAnY2VudGVyJyxcbiAgICAgICAgJ2NlbnRyZSdcbiAgICAgIF0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1Bvc2l0aW9uIHx8ICdzb3V0aGVhc3QnXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb25maWdcbn1cbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxhbnk+KCdidWlsZEluLnJlbmFtZScpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdmb3JtYXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9GT1JNQVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5hYmxlJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9FTkFCTEUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0VOQUJMRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmFibGUgfHwgZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpZ1xufVxuIiwiaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgSVBpY0dvLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCB1cGxvYWRlclRyYW5zbGF0b3JzID0gKGN0eDogSVBpY0dvKSA9PiB7XG4gIHJldHVybiB7XG4gICAgYWR2YW5jZWRwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1QnKSxcbiAgICBhbGlzdHBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUExJU1QnKSxcbiAgICBhbGl5dW46IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRCcpLFxuICAgICdhd3MtczMtcGxpc3QnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVCcpLFxuICAgIGdpdGh1YjogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpLFxuICAgIGltZ3VyOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKSxcbiAgICBsb2NhbDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMJyksXG4gICAgbHNreXBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QTElTVCcpLFxuICAgIHBpY2xpc3Q6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUJyksXG4gICAgcWluaXU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpLFxuICAgIHNmdHBwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpLFxuICAgIHNtbXM6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJyksXG4gICAgdGN5dW46IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKSxcbiAgICB1cHl1bjogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJyksXG4gICAgd2ViZGF2cGxpc3Q6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpXG4gIH0gYXMgSVN0cmluZ0tleU1hcDxhbnk+XG59XG4iLCJpbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCBjb21wcmVzcyBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci9jb21wcmVzcydcbmltcG9ydCB3YXRlcm1hcmsgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrJ1xuaW1wb3J0IHJlbmFtZSBmcm9tICcuLi9iZWZvcmV1cGxvYWQvYnVpbGRJblJlbmFtZSdcbmltcG9ydCB7IHVwbG9hZGVyVHJhbnNsYXRvcnMgfSBmcm9tICcuL3V0aWxzJ1xuXG4vLyBoYW5kbGUgbW9kdWxlcyBjb25maWcgLT4gc2F2ZSB0byBwaWNnbyBjb25maWcgZmlsZVxuY29uc3QgaGFuZGxlQ29uZmlnID0gYXN5bmMgKGN0eDogSVBpY0dvLCBwcm9tcHRzOiBJUGx1Z2luQ29uZmlnW10sIG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQocHJvbXB0cylcbiAgY29uc3QgY29uZmlnTmFtZSA9XG4gICAgbW9kdWxlID09PSAndXBsb2FkZXInXG4gICAgICA/IGBwaWNCZWQuJHtuYW1lfWBcbiAgICAgIDogbW9kdWxlID09PSAndHJhbnNmb3JtZXInXG4gICAgICAgID8gYHRyYW5zZm9ybWVyLiR7bmFtZX1gXG4gICAgICAgIDogbW9kdWxlID09PSAnYnVpbGRpbidcbiAgICAgICAgICA/IGBidWlsZEluLiR7bmFtZX1gXG4gICAgICAgICAgOiBuYW1lXG4gIGN0eC5zYXZlQ29uZmlnKHtcbiAgICBbY29uZmlnTmFtZV06IGFuc3dlclxuICB9KVxuICBpZiAobW9kdWxlID09PSAndXBsb2FkZXInKSB7XG4gICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3BpY0JlZC5jdXJyZW50JzogbmFtZSxcbiAgICAgICdwaWNCZWQudXBsb2FkZXInOiBuYW1lXG4gICAgfSlcbiAgfSBlbHNlIGlmIChtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcicpIHtcbiAgICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgICAncGljQmVkLnRyYW5zZm9ybWVyJzogbmFtZVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3Qgc2V0dGluZyA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCdzZXQnKVxuICAgICAgLmFsaWFzKCdjb25maWcnKVxuICAgICAgLmFyZ3VtZW50cygnPG1vZHVsZT4gW25hbWVdJylcbiAgICAgIC5kZXNjcmlwdGlvbignY29uZmlndXJlIGNvbmZpZyBvZiBwaWNnbyBtb2R1bGVzLCB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcbiAgICAgICAgICAgIC8vIGF3YWl0IGN0eC5wbHVnaW5Mb2FkZXIubG9hZCgpXG4gICAgICAgICAgICAvLyBpZiBhIG1vZHVsZSBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2J1aWxkaW4nOlxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnY29tcHJlc3MnKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3dhdGVybWFyaycpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHdhdGVybWFyay5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3JlbmFtZScpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHJlbmFtZS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdidWlsZGluJyxcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1MnKSwgdmFsdWU6ICdjb21wcmVzcycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUksnKSwgdmFsdWU6ICd3YXRlcm1hcmsnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FJyksIHZhbHVlOiAncmVuYW1lJyB9XG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgYnVpbGRpbiBtb2R1bGUnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcbiAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ2NvbXByZXNzJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICd3YXRlcm1hcmsnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHdhdGVybWFyay5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdyZW5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHJlbmFtZS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSAndXBsb2FkZXInOlxuICAgICAgICAgICAgICBjYXNlICd0cmFuc2Zvcm1lcic6XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KG5hbWUpXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihgTm8gJHttb2R1bGV9IG5hbWVkICR7bmFtZX1gKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7bW9kdWxlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlclttb2R1bGVdLmdldElkTGlzdCgpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB1cGxvYWRlclRyYW5zbGF0b3JzKGN0eClbaXRlbV0gfHwgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2hvb3NlIGEobikgJHttb2R1bGV9YFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQoYW5zd2VyW21vZHVsZV0pXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbT8uY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyW21vZHVsZV0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3BsdWdpbic6XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghbmFtZS5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKT8uY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhLmNvbmZpZyEoY3R4KSwgJ3BsdWdpbicsIG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYE5vIHBsdWdpbiBuYW1lZCAke25hbWV9YClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbicsXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBwbHVnaW4nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcbiAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKT8uY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhcbiAgICAgICAgICAgICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICAgICAgICAgICAgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbikhLmNvbmZpZyEoY3R4KSxcbiAgICAgICAgICAgICAgICAgICAgICAncGx1Z2luJyxcbiAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIucGx1Z2luXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcbiAgICAgICAgICAgIGlmIChtb2R1bGUgPT09ICdwbHVnaW4nKSB7XG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhcIklmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGNvbmZpZywgcGxlYXNlIHJ1biAncGljZ28gdXNlIHBsdWdpbnMnXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldHRpbmdcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiwgVW5kZWZpbmFibGUsIElDTElDb25maWdzLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyB1cGxvYWRlclRyYW5zbGF0b3JzIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgdXNlOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ3VzZScpXG4gICAgICAuYXJndW1lbnRzKCdbbW9kdWxlXScpXG4gICAgICAuZGVzY3JpcHRpb24oJ3VzZSBtb2R1bGVzIG9mIHBpY2dvJylcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcHJvbXB0czogYW55W10gPSBbXVxuICAgICAgICAgICAgY29uc3QgY29uZmlnOiBJQ0xJQ29uZmlncyA9IHtcbiAgICAgICAgICAgICAgdXBsb2FkZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3VwbG9hZGVyJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIGFuIHVwbG9hZGVyJyxcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnVwbG9hZGVyLmdldElkTGlzdCgpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB1cGxvYWRlclRyYW5zbGF0b3JzKGN0eClbaXRlbV0gfHwgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNmb3JtZXInLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYSB0cmFuc2Zvcm1lcicsXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXRJZExpc3QoKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbnMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgcGx1Z2lucycsXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgIGN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke2l0ZW19YClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGFuIG9wdGlvbiBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZ1ttb2R1bGVdKSB7XG4gICAgICAgICAgICAgICAgcHJvbXB0cy5wdXNoKGNvbmZpZ1ttb2R1bGVdKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lucycpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByb21wdHMgPSBPYmplY3Qua2V5cyhjb25maWcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBjb25maWdbaXRlbV0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcblxuICAgICAgICAgICAgLy8gaGFuZGxlIGZvciBwbHVnaW5zIG9wdGlvbiBmcm9tIEFycmF5IHRvIG9iamVjdFxuICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSBjdHguZ2V0Q29uZmlnPElTdHJpbmdLZXlNYXA8Ym9vbGVhbj4+KCdwaWNnb1BsdWdpbnMnKVxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwbHVnaW5zKS5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSB0cnVlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHBsdWdpbnNcbiAgICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgICAgICAgICAgIHBpY2dvUGx1Z2luczogcGx1Z2luc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHVwbG9hZGVyICYgdHJhbnNmb3JtZXJcbiAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICAgICAgICAgJ3BpY0JlZC5jdXJyZW50JzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcbiAgICAgICAgICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXG4gICAgICAgICAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBhbnN3ZXIudHJhbnNmb3JtZXIgfHwgJ3BhdGgnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgc2F2ZWQgc3VjY2Vzc2Z1bGx5IScpXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHByb3h5OiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbS5vcHRpb24oJy1wLCAtLXByb3h5IDx1cmw+JywgJ3NldCBwcm94eSBmb3IgdXBsb2FkaW5nJywgKHByb3h5OiBzdHJpbmcpID0+IHtcbiAgICAgIGN0eC5zZXRDb25maWcoe1xuICAgICAgICAncGljQmVkLnByb3h5JzogcHJveHlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwcm94eVxuIiwiaW1wb3J0IG1hdGNoIGZyb20gJ21pbmltYXRjaCdcblxuaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZ2xvYmJ5IGZyb20gJ2dsb2JieSdcbmltcG9ydCB7IHJlbmRlciBhcyBlanNSZW5kZXIgfSBmcm9tICdlanMnXG5cbmltcG9ydCB7IElQaWNHbywgSU9wdGlvbnMsIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xuXG4vKipcbiAqIEdlbmVyYXRlIHRlbXBsYXRlIGZpbGVzIHRvIGRlc3RpbmF0aW9uIGZpbGVzLlxuICogQHBhcmFtIHtQaWNHb30gY3R4XG4gKiBAcGFyYW0ge0lPcHRpb25zfSBvcHRpb25zXG4gKi9cbmNvbnN0IGdlbmVyYXRlID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3B0cyA9IGdldE9wdGlvbnMob3B0aW9ucy50bXApXG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKG9wdGlvbnMudG1wLCAndGVtcGxhdGUnKVxuICAgIGxldCBhbnN3ZXJzID0ge31cbiAgICBpZiAob3B0cy5wcm9tcHRzICYmIG9wdHMucHJvbXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICBhbnN3ZXJzID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQob3B0cy5wcm9tcHRzKVxuICAgIH1cbiAgICBsZXQgX2ZpbGVzOiBzdHJpbmdbXSA9IGF3YWl0IGdsb2JieShbJyoqLyonXSwgeyBjd2Q6IHNvdXJjZSwgZG90OiB0cnVlIH0pIC8vIGdldCBmaWxlcycgbmFtZSBhcnJheVxuICAgIF9maWxlcyA9IF9maWxlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGdsb2IgPSAnJ1xuICAgICAgT2JqZWN0LmtleXMob3B0cy5maWx0ZXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAobWF0Y2goaXRlbSwga2V5LCB7IGRvdDogdHJ1ZSB9KSkge1xuICAgICAgICAgIGdsb2IgPSBpdGVtXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAoZ2xvYikge1xuICAgICAgICAvLyBmaW5kIGEgZmlsdGVyIGV4cHJlc3Npb25cbiAgICAgICAgcmV0dXJuIGZpbHRlcnMoY3R4LCBvcHRzLmZpbHRlcnNbZ2xvYl0sIGFuc3dlcnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gICAgaWYgKF9maWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGN0eC5sb2cud2FybignVGVtcGxhdGUgZmlsZXMgbm90IGZvdW5kIScpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgZmlsZXMgPSByZW5kZXIoX2ZpbGVzLCBzb3VyY2UsIGFuc3dlcnMpXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxuICAgIGlmICh0eXBlb2Ygb3B0cy5jb21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0cy5jb21wbGV0ZSh7IGFuc3dlcnMsIG9wdGlvbnMsIGZpbGVzOiBfZmlsZXMsIGN0eCB9KVxuICAgIH1cbiAgICBpZiAob3B0cy5jb21wbGV0ZU1lc3NhZ2UpIHtcbiAgICAgIGN0eC5sb2cuc3VjY2VzcyhvcHRzLmNvbXBsZXRlTWVzc2FnZSlcbiAgICB9XG4gICAgY3R4LmxvZy5zdWNjZXNzKCdEb25lIScpXG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlsdGVycycgcmVzdWx0XG4gKiBAcGFyYW0gY3R4IFBpY0dvXG4gKiBAcGFyYW0gZXhwIGNvbmRpdGlvbiBleHByZXNzaW9uXG4gKiBAcGFyYW0gZGF0YSBvcHRpb25zIGRhdGFcbiAqL1xuY29uc3QgZmlsdGVycyA9IChjdHg6IElQaWNHbywgZXhwOiBhbnksIGRhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXBsdXMtb3BlcmFuZHMsIG5vLW5ldy1mdW5jLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgJ3dpdGggKGRhdGEpIHsgcmV0dXJuICcgKyBleHAgKyAnfScpXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGRhdGEpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjdHgubG9nLmVycm9yKGBFcnJvciB3aGVuIGV2YWx1YXRpbmcgZmlsdGVyIGNvbmRpdGlvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGVtcGxhdGUgb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlUGF0aFxuICovXG5jb25zdCBnZXRPcHRpb25zID0gKHRlbXBsYXRlUGF0aDogc3RyaW5nKTogYW55ID0+IHtcbiAgY29uc3Qgb3B0aW9uc1BhdGggPSBwYXRoLmpvaW4odGVtcGxhdGVQYXRoLCAnaW5kZXguanMnKVxuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zUGF0aCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1aXJlKG9wdGlvbnNQYXRoKVxuICAgIHJldHVybiBvcHRpb25zXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXIgZmlsZXMgdG8gYSB2aXJ0dWFsIHRyZWUgb2JqZWN0XG4gKiBAcGFyYW0ge2FycmF5fSBmaWxlc1xuICovXG5jb25zdCByZW5kZXIgPSAoZmlsZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55ID0+IHtcbiAgY29uc3QgZmlsZVRyZWU6IElGaWxlVHJlZSA9IHt9XG4gIGZpbGVzLmZvckVhY2goKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihzb3VyY2UsIGZpbGVQYXRoKSwgJ3V0ZjgnKVxuICAgIGNvbnN0IGNvbnRlbnQgPSBlanNSZW5kZXIoZmlsZSwgb3B0aW9ucylcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpIHx8IC9bXlxcc10vLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGZpbGVUcmVlW2ZpbGVQYXRoXSA9IGNvbnRlbnRcbiAgICB9XG4gIH0pXG4gIHJldHVybiBmaWxlVHJlZVxufVxuXG4vKipcbiAqIFdyaXRlIHJlbmRlcmVkIGZpbGVzJyBjb250ZW50IHRvIHJlYWwgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGRpclxuICogQHBhcmFtIHtvYmplY3R9IGZpbGVzXG4gKi9cbmNvbnN0IHdyaXRlRmlsZVRyZWUgPSAoZGlyOiBzdHJpbmcsIGZpbGVzOiBhbnkpOiB2b2lkID0+IHtcbiAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSlcbiAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShmaWxlUGF0aCkpXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZmlsZXNbbmFtZV0pXG4gIH0pXG59XG5cbmV4cG9ydCB7IGZpbHRlcnMsIGdlbmVyYXRlLCByZW5kZXIsIHdyaXRlRmlsZVRyZWUgfVxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IGRvd25sb2FkIGZyb20gJ2Rvd25sb2FkLWdpdC1yZXBvJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IHN5bmMgfSBmcm9tICdyaW1yYWYnXG5cbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5pdFV0aWxzJ1xuaW1wb3J0IHsgSU9wdGlvbnMsIElQbHVnaW4sIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBydW4gPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XG4gIGlmIChvcHRpb25zLm9mZmxpbmUpIHtcbiAgICAvLyBvZmZsaW5lIG1vZGVcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zLnRlbXBsYXRlKSkge1xuICAgICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaChlID0+IHtcbiAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LmxvZy5lcnJvcihgTG9jYWwgdGVtcGxhdGUgJHtvcHRpb25zLnRlbXBsYXRlfSBub3QgZm91bmRgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBvbmxpbmUgbW9kZVxuICAgIG9wdGlvbnMudGVtcGxhdGUgPSAhb3B0aW9ucy5oYXNTbGFzaFxuICAgICAgPyAnUGljR28vcGljZ28tdGVtcGxhdGUtJyArIG9wdGlvbnMudGVtcGxhdGUgLy8gb2ZmaWNpYWwgdGVtcGxhdGVcbiAgICAgIDogb3B0aW9ucy50ZW1wbGF0ZVxuICAgIGRvd25sb2FkQW5kR2VuZXJhdGUoY3R4LCBvcHRpb25zKVxuICB9XG59XG5cbi8qKlxuICogZG93bmxvYWQgdGVtcGxhdGUgJiBnZW5lcmF0ZVxuICogQHBhcmFtIHsgUGljR28gfSBjdHhcbiAqIEBwYXJhbSB7IElPcHRpb25zIH0gb3B0aW9uc1xuICovXG5jb25zdCBkb3dubG9hZEFuZEdlbmVyYXRlID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zLnRtcCkpIHtcbiAgICBzeW5jKG9wdGlvbnMudG1wKVxuICB9XG4gIGN0eC5sb2cuaW5mbygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkaW5nLi4uJylcbiAgZG93bmxvYWQob3B0aW9ucy50ZW1wbGF0ZSwgb3B0aW9ucy50bXAsIHsgY2xvbmU6IG9wdGlvbnMuY2xvbmUgfSwgKGVycjogRXJyb3IpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjdHgubG9nLmVycm9yKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGVkIScpXG4gICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaChlID0+IHtcbiAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICB9KVxuICB9KVxufVxuXG5jb25zdCBpbml0OiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2luaXQnKVxuICAgICAgLmFyZ3VtZW50cygnPHRlbXBsYXRlPiBbcHJvamVjdF0nKVxuICAgICAgLm9wdGlvbignLS1jbG9uZScsICd1c2UgZ2l0IGNsb25lJylcbiAgICAgIC5vcHRpb24oJy0tb2ZmbGluZScsICd1c2UgY2FjaGVkIHRlbXBsYXRlJylcbiAgICAgIC5kZXNjcmlwdGlvbihcImNyZWF0ZSBwaWNnbyBwbHVnaW4ncyBkZXZlbG9wbWVudCB0ZW1wbGF0ZXNcIilcbiAgICAgIC5hY3Rpb24oKHRlbXBsYXRlOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcHJvZ3JhbTogYW55KSA9PiB7XG4gICAgICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIFRoYW5rcyB0byB2dWUtY2xpIGluaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtY2xpL2Jsb2IvbWFzdGVyL2Jpbi92dWUtaW5pdFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBoYXNTbGFzaCA9IHRlbXBsYXRlLmluY2x1ZGVzKCcvJylcbiAgICAgICAgICAgIGNvbnN0IGluUGxhY2UgPSAhcHJvamVjdCB8fCBwcm9qZWN0ID09PSAnLidcbiAgICAgICAgICAgIGNvbnN0IGRlc3QgPSBwYXRoLnJlc29sdmUocHJvamVjdCB8fCAnLicpXG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHByb2dyYW0uY2xvbmUgfHwgZmFsc2VcbiAgICAgICAgICAgIGNvbnN0IG9mZmxpbmUgPSBwcm9ncmFtLm9mZmxpbmUgfHwgZmFsc2VcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IHBhdGguam9pbihob21lZGlyKCksICcucGljbGlzdC90ZW1wbGF0ZXMnLCB0ZW1wbGF0ZS5yZXBsYWNlKC9bLzpdL2csICctJykpIC8vIGZvciBjYWNoaW5nIHRlbXBsYXRlXG5cbiAgICAgICAgICAgIGlmIChwcm9ncmFtLm9mZmxpbmUpIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0bXBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICAgIGhhc1NsYXNoLFxuICAgICAgICAgICAgICBpblBsYWNlLFxuICAgICAgICAgICAgICBkZXN0LFxuICAgICAgICAgICAgICBjbG9uZSxcbiAgICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgICBvZmZsaW5lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHByb2plY3QgaXMgZW1wdHkgb3IgZXhpc3RcbiAgICAgICAgICAgIGlmIChpblBsYWNlIHx8IGZzLmV4aXN0c1N5bmMoZGVzdCkpIHtcbiAgICAgICAgICAgICAgYXdhaXQgY3R4LmNtZC5pbnF1aXJlclxuICAgICAgICAgICAgICAgIC5wcm9tcHQoW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGluUGxhY2UgPyAnR2VuZXJhdGUgcHJvamVjdCBpbiBjdXJyZW50IGRpcmVjdG9yeT8nIDogJ1RhcmdldCBkaXJlY3RvcnkgZXhpc3RzLiBDb250aW51ZT8nLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnb2snXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAudGhlbigoYW5zd2VyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIub2spIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcHJvamVjdCBpcyBnaXZlblxuICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XG4gICAgICAgICAgICAgIHRocm93IGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIC5vbignLS1oZWxwJywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygpXG4gICAgICAgIGNvbnNvbGUubG9nKCdFeGFtcGxlczonKVxuICAgICAgICBjb25zb2xlLmxvZygpXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCB3aXRoIGFuIG9mZmljaWFsIHRlbXBsYXRlJykpXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCBwbHVnaW4gbXktcHJvamVjdCcpXG4gICAgICAgIGNvbnNvbGUubG9nKClcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHN0cmFpZ2h0IGZyb20gYSBnaXRodWIgdGVtcGxhdGUnKSlcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHVzZXJuYW1lL3JlcG8gbXktcHJvamVjdCcpXG4gICAgICAgIGNvbnNvbGUubG9nKClcbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdFxuIiwiaW1wb3J0IHsgSVBsdWdpbiwgSVBpY0dvLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IGkxOG46IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgnaTE4bicpXG4gICAgICAuYXJndW1lbnRzKCdbbGFuZ10nKVxuICAgICAgLmRlc2NyaXB0aW9uKCdjaGFuZ2UgbGFuZ3VhZ2UsIHpoLUNOLCB6aC1UVywgZW4nKVxuICAgICAgLmFjdGlvbihhc3luYyAobGFuZzogc3RyaW5nID0gJycpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGN0eC5pMThuLmdldExhbmd1YWdlTGlzdCgpXG4gICAgICAgIGlmICghbGFuZykge1xuICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgbmFtZTogJ2kxOG4nLFxuICAgICAgICAgICAgICBjaG9pY2VzOiBsaXN0LFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgbGFuZ3VhZ2UnLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxzdHJpbmc+Pihwcm9tcHRzKVxuICAgICAgICAgIGxhbmcgPSBhbnN3ZXIuaTE4blxuICAgICAgICB9XG4gICAgICAgIGlmICghbGlzdC5pbmNsdWRlcyhsYW5nKSkge1xuICAgICAgICAgIGN0eC5sb2cud2FybignTm8gc3VjaCBsYW5ndWFnZScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3R4LmkxOG4uc2V0TGFuZ3VhZ2UobGFuZylcbiAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoYExhbmd1YWdlIHNldCB0byAke2xhbmd9YClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpMThuXG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlUGx1Z2lucyBpbXBsZW1lbnRzIElMaWZlY3ljbGVQbHVnaW5zIHtcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBsdWdpblxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBsdWdpbnNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdDogTWFwPHN0cmluZywgSVBsdWdpbj5cbiAgLyoqXG4gICAqIFRoZSBtYXAgb2YgcGx1Z2luIGlkXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT5cblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXG4gICAgdGhpcy5wbHVnaW5JZE1hcCA9IG5ldyBNYXAoKVxuICB9XG5cbiAgcmVnaXN0ZXIoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignaWQgaXMgcmVxdWlyZWQhJylcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5oYW5kbGUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbi5oYW5kbGUgbXVzdCBiZSBhIGZ1bmN0aW9uIScpXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxuXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxuXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKT8ucHVzaChpZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbiwgW2lkXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWVcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXG4gIH1cblxuICBnZXRMaXN0KCk6IElQbHVnaW5bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXG4gIH1cblxuICBnZXRJZExpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcbiAgTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luID0gbmFtZVxufVxuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBsdWdpbk5hbWUgPSAoKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIHJldHVybiBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW5cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlUGx1Z2luc1xuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInXG5pbXBvcnQgaW5xdWlyZXIsIHsgSW5xdWlyZXIgfSBmcm9tICdpbnF1aXJlcidcblxuaW1wb3J0IGNvbW1hbmRlcnMgZnJvbSAnLi4vcGx1Z2lucy9jb21tYW5kZXInXG5pbXBvcnQgeyBnZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcblxuaW1wb3J0IHsgSVBsdWdpbiwgSUNvbW1hbmRlciwgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kZXIgaW1wbGVtZW50cyBJQ29tbWFuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lID0gJ2NvbW1hbmRlcidcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ID0gbmV3IE1hcDxzdHJpbmcsIElQbHVnaW4+KClcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG5cbiAgcHJvZ3JhbTogQ29tbWFuZFxuICBpbnF1aXJlcjogSW5xdWlyZXJcblxuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcbiAgICB0aGlzLmlucXVpcmVyID0gaW5xdWlyZXJcbiAgICB0aGlzLmN0eCA9IGN0eFxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWVcbiAgfVxuXG4gIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmFtXG4gICAgICAudmVyc2lvbihwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicpXG4gICAgICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdkZWJ1ZyBtb2RlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xuICAgICAgICAgIGRlYnVnOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignLXMsIC0tc2lsZW50JywgJ3NpbGVudCBtb2RlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIC5vbignY29tbWFuZDoqJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgY29tbWFuZDogJHt0aGlzLnByb2dyYW0uYXJncy5qb2luKCcgJyl9XFxuU2VlIC0taGVscCBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy5gXG4gICAgICAgIClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICB9KVxuXG4gICAgLy8gYnVpbHQtaW4gY29tbWFuZHNcbiAgICBjb21tYW5kZXJzKHRoaXMuY3R4KVxuICB9XG5cbiAgcmVnaXN0ZXIoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignbmFtZSBpcyByZXF1aXJlZCEnKVxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBwbHVnaW4gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcbiAgICBjb25zdCBjdXJyZW50UGx1Z2luTmFtZSA9IGdldEN1cnJlbnRQbHVnaW5OYW1lKClcbiAgICBpZiAoY3VycmVudFBsdWdpbk5hbWUgIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhjdXJyZW50UGx1Z2luTmFtZSkpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoY3VycmVudFBsdWdpbk5hbWUpPy5wdXNoKGlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoY3VycmVudFBsdWdpbk5hbWUsIFtpZF0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5yZWdpc3RlcihwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGxvYWRDb21tYW5kcygpOiB2b2lkIHtcbiAgICB0aGlzLmdldExpc3QoKS5mb3JFYWNoKChpdGVtOiBJUGx1Z2luKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpdGVtLmhhbmRsZSh0aGlzLmN0eClcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcbiAgfVxuXG4gIGdldExpc3QoKTogSVBsdWdpbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cbiAgfVxuXG4gIGdldElkTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1hbmRlclxuIiwiaW1wb3J0IHBsdWdpbkhhbmRsZXIgZnJvbSAnLi9wbHVnaW5IYW5kbGVyJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZydcbmltcG9ydCB1cGxvYWQgZnJvbSAnLi91cGxvYWQnXG5pbXBvcnQgc2V0dGluZyBmcm9tICcuL3NldHRpbmcnXG5pbXBvcnQgdXNlIGZyb20gJy4vdXNlJ1xuaW1wb3J0IHByb3h5IGZyb20gJy4vcHJveHknXG5pbXBvcnQgaW5pdCBmcm9tICcuL2luaXQnXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nXG5cbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCAoY3R4OiBJUGljR28pOiB2b2lkID0+IHtcbiAgY3R4LmNtZC5yZWdpc3RlcigncGx1Z2luSGFuZGxlcicsIHBsdWdpbkhhbmRsZXIpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2NvbmZpZycsIGNvbmZpZylcbiAgY3R4LmNtZC5yZWdpc3Rlcignc2V0dGluZycsIHNldHRpbmcpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VwbG9hZCcsIHVwbG9hZClcbiAgY3R4LmNtZC5yZWdpc3RlcigndXNlJywgdXNlKVxuICBjdHguY21kLnJlZ2lzdGVyKCdwcm94eScsIHByb3h5KVxuICBjdHguY21kLnJlZ2lzdGVyKCdpbml0JywgaW5pdClcbiAgY3R4LmNtZC5yZWdpc3RlcignaTE4bicsIGkxOG4pXG59XG4iLCJleHBvcnQgZW51bSBJTG9nVHlwZSB7XG4gIHN1Y2Nlc3MgPSAnc3VjY2VzcycsXG4gIGluZm8gPSAnaW5mbycsXG4gIHdhcm4gPSAnd2FybicsXG4gIGVycm9yID0gJ2Vycm9yJ1xufVxuXG4vKipcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgYnkgdXNlcnNcbiAqL1xuZXhwb3J0IGVudW0gSUJ1aWxkSW5FdmVudCB7XG4gIFVQTE9BRF9QUk9HUkVTUyA9ICd1cGxvYWRQcm9ncmVzcycsXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxuICBCRUZPUkVfVFJBTlNGT1JNID0gJ2JlZm9yZVRyYW5zZm9ybScsXG4gIEJFRk9SRV9VUExPQUQgPSAnYmVmb3JlVXBsb2FkJyxcbiAgQUZURVJfVVBMT0FEID0gJ2FmdGVyVXBsb2FkJyxcbiAgRklOSVNIRUQgPSAnZmluaXNoZWQnLFxuICBJTlNUQUxMID0gJ2luc3RhbGwnLFxuICBVTklOU1RBTEwgPSAndW5pbnN0YWxsJyxcbiAgVVBEQVRFID0gJ3VwZGF0ZScsXG4gIE5PVElGSUNBVElPTiA9ICdub3RpZmljYXRpb24nXG59XG5cbi8qKlxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBvbmx5IGJ5IHBpY2dvXG4gKi9cbmV4cG9ydCBlbnVtIElCdXNFdmVudCB7XG4gIENPTkZJR19DSEFOR0UgPSAnQ09ORklHX0NIQU5HRSdcbn1cbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBmcywgeyBjcmVhdGVGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnXG5cbmltcG9ydCB7IElMb2dUeXBlIH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2dBcmd2VHlwZSwgSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yLCBVbmRlZmluYWJsZSwgSUxvZ0NvbG9yLCBJTG9nZ2VyLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGZvcmNlTnVtYmVyLCBpc0RldiB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGxldmVsID0ge1xuICAgIFtJTG9nVHlwZS5zdWNjZXNzXTogJ2dyZWVuJyxcbiAgICBbSUxvZ1R5cGUuaW5mb106ICdibHVlJyxcbiAgICBbSUxvZ1R5cGUud2Fybl06ICd5ZWxsb3cnLFxuICAgIFtJTG9nVHlwZS5lcnJvcl06ICdyZWQnXG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHByaXZhdGUgbG9nTGV2ZWwhOiBzdHJpbmcgfCBzdHJpbmdbXVxuICBwcml2YXRlIGxvZ1BhdGghOiBzdHJpbmdcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMb2codHlwZTogSUxvZ1R5cGUsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0xldmVsID0gdGhpcy5jdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sb2dMZXZlbCcpXG4gICAgaWYgKCF0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NpbGVudCcpICYmIHRoaXMuY2hlY2tMb2dMZXZlbCh0eXBlLCB0aGlzLmxvZ0xldmVsKSkge1xuICAgICAgY29uc3QgbG9nSGVhZGVyID0gY2hhbGtbdGhpcy5sZXZlbFt0eXBlXSBhcyBJTG9nQ29sb3JdKGBbUGljTGlzdCAke3R5cGUudG9VcHBlckNhc2UoKX1dOmApXG4gICAgICBjb25zb2xlLmxvZyhsb2dIZWFkZXIsIC4uLm1zZylcbiAgICAgIHRoaXMubG9nUGF0aCA9XG4gICAgICAgIHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MubG9nUGF0aCcpIHx8IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnLi9waWNsaXN0LmxvZycpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNoZWNrTG9nRmlsZUlzTGFyZ2UodGhpcy5sb2dQYXRoKVxuICAgICAgICAgIGlmIChyZXN1bHQuaXNMYXJnZSkge1xuICAgICAgICAgICAgY29uc3Qgd2FybmluZ01zZyA9IGBMb2cgZmlsZSBpcyB0b28gbGFyZ2UgKD4gJHtyZXN1bHQubG9nRmlsZVNpemVMaW1pdCEgLyAxMDI0IC8gMTAyNCB8fCAnMTAnfSBNQiksIHJlY3JlYXRlIGxvZyBmaWxlYFxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdbUGljTGlzdCBXQVJOXTonKSwgd2FybmluZ01zZylcbiAgICAgICAgICAgIHRoaXMucmVjcmVhdGVMb2dGaWxlKHRoaXMubG9nUGF0aClcbiAgICAgICAgICAgIG1zZy51bnNoaWZ0KHdhcm5pbmdNc2cpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaGFuZGxlV3JpdGVMb2codGhpcy5sb2dQYXRoLCB0eXBlLCAuLi5tc2cpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gY2hlY2tpbmcgbG9nIGZpbGUgc2l6ZScsIGUpXG4gICAgICAgIH1cbiAgICAgIH0sIDApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0xvZ0ZpbGVJc0xhcmdlKGxvZ1BhdGg6IHN0cmluZyk6IHtcbiAgICBpc0xhcmdlOiBib29sZWFuXG4gICAgbG9nRmlsZVNpemU/OiBudW1iZXJcbiAgICBsb2dGaWxlU2l6ZUxpbWl0PzogbnVtYmVyXG4gIH0ge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZSA9IGZzLnN0YXRTeW5jKGxvZ1BhdGgpLnNpemVcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplTGltaXQgPVxuICAgICAgICBmb3JjZU51bWJlcih0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8bnVtYmVyPj4oJ3NldHRpbmdzLmxvZ0ZpbGVTaXplTGltaXQnKSB8fCAxMCkgKiAxMDI0ICogMTAyNCAvLyAxMCBNQiBkZWZhdWx0XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0xhcmdlOiBsb2dGaWxlU2l6ZSA+IGxvZ0ZpbGVTaXplTGltaXQsXG4gICAgICAgIGxvZ0ZpbGVTaXplLFxuICAgICAgICBsb2dGaWxlU2l6ZUxpbWl0XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGlzTGFyZ2U6IGZhbHNlIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVjcmVhdGVMb2dGaWxlKGxvZ1BhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGxvZ1BhdGgpXG4gICAgICBjcmVhdGVGaWxlU3luYyhsb2dQYXRoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlV3JpdGVMb2cobG9nUGF0aDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbGV0IGxvZyA9IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyl9IFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV0gYFxuICAgICAgbXNnLmZvckVhY2goKGl0ZW06IElMb2dBcmd2VHlwZVdpdGhFcnJvcikgPT4ge1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yICYmIHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBsb2cgKz0gYFxcbi0tLS0tLUVycm9yIFN0YWNrIEJlZ2luLS0tLS0tXFxuJHt1dGlsLmZvcm1hdChpdGVtPy5zdGFjayl9XFxuLS0tLS0tLUVycm9yIFN0YWNrIEVuZC0tLS0tLS0gYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtLCBudWxsLCAyKVxuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cgKz0gYCR7aXRlbSBhcyBzdHJpbmd9IGBcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGxvZyArPSAnXFxuJ1xuICAgICAgZnMuYXBwZW5kRmlsZVN5bmMobG9nUGF0aCwgbG9nKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiB3cml0aW5nIGxvZyBmaWxlJywgZSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTG9nTGV2ZWwodHlwZTogc3RyaW5nLCBsZXZlbDogdW5kZWZpbmVkIHwgc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBpZiAobGV2ZWwgPT09IHVuZGVmaW5lZCB8fCBsZXZlbCA9PT0gJ2FsbCcpIHJldHVybiB0cnVlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGV2ZWwpKSB7XG4gICAgICByZXR1cm4gbGV2ZWwuc29tZSgoaXRlbTogc3RyaW5nKSA9PiBpdGVtID09PSB0eXBlIHx8IGl0ZW0gPT09ICdhbGwnKVxuICAgIH1cbiAgICByZXR1cm4gdHlwZSA9PT0gbGV2ZWxcbiAgfVxuXG4gIHN1Y2Nlc3MoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLnN1Y2Nlc3MsIC4uLm1zZylcbiAgfVxuXG4gIGluZm8oLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcbiAgfVxuXG4gIGVycm9yKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5lcnJvciwgLi4ubXNnKVxuICB9XG5cbiAgd2FybiguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUud2FybiwgLi4ubXNnKVxuICB9XG5cbiAgZGVidWcoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xuICAgIGlmIChpc0RldigpKSB7XG4gICAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ2dlclxuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjcm9zcy1zcGF3bidcbmltcG9ydCB7XG4gIElSZXN1bHQsXG4gIElQcm9jZXNzRW52LFxuICBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCxcbiAgSVBsdWdpbkhhbmRsZXIsXG4gIElQbHVnaW5IYW5kbGVyT3B0aW9ucyxcbiAgVW5kZWZpbmFibGUsXG4gIElQaWNHbyxcbiAgSVBsdWdpbkhhbmRsZXJSZXN1bHRcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGdldFByb2Nlc3NQbHVnaW5OYW1lLCBnZXROb3JtYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi9pMThuL3poLUNOJ1xuXG5leHBvcnQgY2xhc3MgUGx1Z2luSGFuZGxlciBpbXBsZW1lbnRzIElQbHVnaW5IYW5kbGVyIHtcbiAgLy8gVGhhbmtzIHRvIGZlZmxvdyAtPiBodHRwczovL2dpdGh1Yi5jb20vZmVmbG93L2ZlZmxvdy9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvaW5zdGFsbC9wbHVnaW4uanNcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gIH1cblxuICBhc3luYyBpbnN0YWxsKFxuICAgIHBsdWdpbnM6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LFxuICAgIGVudj86IElQcm9jZXNzRW52XG4gICk6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcbiAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIC8vIGRldGVjdCBpZiBoYXMgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICAgICAgLy8gb3Igd2lsbCBjYXVzZSBlcnJvclxuICAgICAgICBpZiAodGhpcy5jdHgucGx1Z2luTG9hZGVyLmhhc1BsdWdpbihpdGVtLnBrZ05hbWUpKSB7XG4gICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKGl0ZW0ucGtnTmFtZSlcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2VzcyhgUGljTGlzdCBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcbiAgICAgICAgaWYgKCFpdGVtLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSlcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxuICAgIGlmIChmdWxsTmFtZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcbiAgICAgIC8vIDEuIGluc3RhbGwgcmVtb3RlIHBhY2FnZVxuICAgICAgLy8gMi4gaW5zdGFsbCBsb2NhbCBwYWNhZ2VcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcbiAgICAgICAgcGtnTmFtZUxpc3QuZm9yRWFjaCgocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluc3RhbGxlZFBsdWdpbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsRmFpbGVkJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpLFxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbChwbHVnaW5zOiBzdHJpbmdbXSk6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcbiAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc3VjY2VzcylcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdW5pbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgcGtnTmFtZUxpc3Q6XG4gICAgICAvLyBucG0gdW5pbnN0YWxsIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcbiAgICAgICAgcGtnTmFtZUxpc3QuZm9yRWFjaCgocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MnKSlcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MnKSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgcGx1Z2luczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sXG4gICAgZW52PzogSVByb2Nlc3NFbnZcbiAgKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyB1cGRhdGUgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcbiAgICAgIC8vIG5wbSB1cGRhdGUgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTJykpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTJyksXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT04nLCB7XG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEJylcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjQ29tbWFuZChcbiAgICBjbWQ6IHN0cmluZyxcbiAgICBtb2R1bGVzOiBzdHJpbmdbXSxcbiAgICB3aGVyZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LFxuICAgIGVudjogSVByb2Nlc3NFbnYgPSB7fVxuICApOiBQcm9taXNlPElSZXN1bHQ+IHtcbiAgICAvLyBvcHRpb25zIGZpcnN0XG4gICAgY29uc3QgcmVnaXN0cnkgPSBvcHRpb25zLnJlZ2lzdHJ5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucmVnaXN0cnknKVxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmU6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgbGV0IGFyZ3MgPSBbY21kXS5jb25jYXQobW9kdWxlcykuY29uY2F0KCctLWNvbG9yPWFsd2F5cycpLmNvbmNhdCgnLS1zYXZlJylcbiAgICAgIGlmIChyZWdpc3RyeSkge1xuICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoYC0tcmVnaXN0cnk9JHtyZWdpc3RyeX1gKVxuICAgICAgfVxuICAgICAgaWYgKHByb3h5KSB7XG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1wcm94eT0ke3Byb3h5fWApXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBucG0gPSBzcGF3bignbnBtJywgYXJncywge1xuICAgICAgICAgIGN3ZDogd2hlcmUsXG4gICAgICAgICAgZW52OiBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwgZW52KVxuICAgICAgICB9KVxuXG4gICAgICAgIGxldCBvdXRwdXQgPSAnJ1xuICAgICAgICBucG0uc3Rkb3V0XG4gICAgICAgICAgPy5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIG91dHB1dCArPSBkYXRhXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZShwcm9jZXNzLnN0ZG91dClcblxuICAgICAgICBucG0uc3RkZXJyXG4gICAgICAgICAgPy5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIG91dHB1dCArPSBkYXRhXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZShwcm9jZXNzLnN0ZGVycilcblxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmICghY29kZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IDAsIGRhdGE6IG91dHB1dCB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZSwgZGF0YTogb3V0cHV0IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAvLyBmb3IgdXNlcnMgd2hvIGhhdmVuJ3QgaW5zdGFsbGVkIG5vZGUuanNcbiAgICAgICAgbnBtLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcbiAgICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCAnTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogdHJhbnNmb3JtIHRoZSBpbnB1dCBwbHVnaW4gbmFtZSBvciBwYXRoIHN0cmluZyB0byB2YWxpZCByZXN1bHRcbiAqIEBwYXJhbSBjdHhcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXG4gKi9cbmNvbnN0IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzID0gKGN0eDogSVBpY0dvLCBuYW1lT3JQYXRoOiBzdHJpbmcpOiBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCA9PiB7XG4gIGNvbnN0IHJlcyA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBmdWxsTmFtZTogJycsXG4gICAgcGtnTmFtZTogJydcbiAgfVxuICBjb25zdCByZXN1bHQgPSBnZXRQcm9jZXNzUGx1Z2luTmFtZShuYW1lT3JQYXRoLCBjdHgubG9nKVxuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiByZXNcbiAgfVxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXG4gIC8vIG9yIHNvbWUgZXJyb3Igd2lsbCBsb2cgdHdpY2VcbiAgY29uc3QgcGtnTmFtZSA9IGdldE5vcm1hbFBsdWdpbk5hbWUocmVzdWx0LCBjdHgubG9nKVxuICBpZiAoIXBrZ05hbWUpIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiB0cnVlLFxuICAgIGZ1bGxOYW1lOiByZXN1bHQsXG4gICAgcGtnTmFtZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkhhbmRsZXJcbiIsImltcG9ydCBmcywgeyByZWFkSlNPTlN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBzeW5jIH0gZnJvbSAncmVzb2x2ZSdcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGljR29QbHVnaW4sIElQbHVnaW5Mb2FkZXIsIElQaWNHb1BsdWdpbkludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXG5cbi8qKlxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkxvYWRlciBpbXBsZW1lbnRzIElQbHVnaW5Mb2FkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHByaXZhdGUgbGlzdDogc3RyaW5nW10gPSBbXVxuICBwcml2YXRlIHJlYWRvbmx5IGZ1bGxMaXN0ID0gbmV3IFNldDxzdHJpbmc+KClcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5NYXAgPSBuZXcgTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPigpXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICB0aGlzLmluaXQoKVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBrZyA9IHtcbiAgICAgICAgbmFtZTogJ3BpY2dvLXBsdWdpbnMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ3BpY2dvLXBsdWdpbnMnLFxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL0t1aW5nc21pbGUvUGljTGlzdC1Db3JlJyxcbiAgICAgICAgbGljZW5zZTogJ01JVCdcbiAgICAgIH1cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGFja2FnZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBrZyksICd1dGY4JylcbiAgICB9XG4gIH1cblxuICAvLyBnZXQgcGx1Z2luIGVudHJ5XG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbihjdHg6IElQaWNHbywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHN5bmMobmFtZSwgeyBiYXNlZGlyOiBjdHguYmFzZURpciB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHBhdGguam9pbihjdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcycsIG5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gbG9hZCBhbGwgdGhpcmQgcGFydHkgcGx1Z2luXG4gIGxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGx1Z2luRGlyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMvJylcbiAgICAvLyBUaGFua3MgdG8gaGV4byAtPiBodHRwczovL2dpdGh1Yi5jb20vaGV4b2pzL2hleG8vYmxvYi9tYXN0ZXIvbGliL2hleG8vbG9hZF9wbHVnaW5zLmpzXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAncGFja2FnZS5qc29uJylcbiAgICBjb25zdCBqc29uID0gcmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxuICAgIGNvbnN0IGRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRlcGVuZGVuY2llcyB8fCB7fSlcbiAgICBjb25zdCBkZXZEZXBzID0gT2JqZWN0LmtleXMoanNvbi5kZXZEZXBlbmRlbmNpZXMgfHwge30pXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIS9ecGljZ28tcGx1Z2luLXxeQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkgcmV0dXJuIGZhbHNlXG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5yZXNvbHZlUGx1Z2luKHRoaXMuY3R4LCBuYW1lKVxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcbiAgICB9KVxuICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmVnaXN0ZXJQbHVnaW4obmFtZTogc3RyaW5nLCBwbHVnaW4/OiBJUGljR29QbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxuICAgIHRyeSB7XG4gICAgICAvLyByZWdpc3RlciBsb2NhbCBwbHVnaW5cbiAgICAgIGlmICghcGx1Z2luKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHRydWUgfHxcbiAgICAgICAgICB0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxuICAgICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXG4gICAgICAgICAgY29uc3QgcGx1Z2luID0gYHBpY2dvUGx1Z2luc1ske25hbWV9XWBcbiAgICAgICAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXG4gICAgICAgIC8vICYmIHdvbid0IHdyaXRlIGNvbmZpZyB0byBmaWxlc1xuICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxuICAgICAgICBjb25zdCBwbHVnaW5JbnRlcmZhY2UgPSBwbHVnaW4odGhpcy5jdHgpXG4gICAgICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW5JbnRlcmZhY2UpXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcbiAgICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcbiAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgdGl0bGU6IGBQbHVnaW4gJHtuYW1lfSBMb2FkIEVycm9yYCxcbiAgICAgICAgYm9keTogZVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyUGx1Z2luKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxuICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxuICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIudHJhbnNmb3JtZXIudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVUcmFuc2Zvcm1QbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguY21kLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXG4gIH1cblxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcbiAgZ2V0UGx1Z2luKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMucGx1Z2luTWFwLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTWFwLmdldChuYW1lKVxuICAgIH1cbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcbiAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luKVxuICAgIHJldHVybiBwbHVnaW5cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXG4gICAqL1xuICBnZXRMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5saXN0XG4gIH1cblxuICBoYXNQbHVnaW4obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZnVsbExpc3QuaGFzKG5hbWUpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxuICAgKi9cbiAgZ2V0RnVsbExpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5mdWxsTGlzdF1cbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luTG9hZGVyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5cbmNvbnN0IGV2ZW50QnVzID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbmV4cG9ydCB7IGV2ZW50QnVzIH1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCB0eXBlIHsgQXhpb3NSZXF1ZXN0Q29uZmlnLCBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJ1xuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuaW1wb3J0IHsgaHR0cHNPdmVySHR0cCB9IGZyb20gJ3R1bm5lbCdcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcblxuaW1wb3J0IHR5cGUge1xuICBJUGljR28sXG4gIFVuZGVmaW5hYmxlLFxuICBJQ29uZmlnQ2hhbmdlUGF5bG9hZCxcbiAgSUNvbmZpZyxcbiAgSVJlcXVlc3RDb25maWcsXG4gIElPbGRSZXFPcHRpb25zLFxuICBJUmVzcG9uc2UsXG4gIElGdWxsUmVzcG9uc2UsXG4gIElSZXF1ZXN0XG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXG5cbmNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICBtYXhWZXJzaW9uOiAnVExTdjEuMicsXG4gIG1pblZlcnNpb246ICdUTFN2MS4yJyxcbiAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxufSlcblxuLy8gdGhhbmtzIGZvciBodHRwczovL2dpdGh1Yi5kZXYvcmVxdWVzdC9yZXF1ZXN0L2Jsb2IvbWFzdGVyL2luZGV4LmpzXG5mdW5jdGlvbiBhcHBlbmRGb3JtRGF0YShmb3JtOiBGb3JtRGF0YSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZGF0YSAmJiAnb3B0aW9ucycgaW4gZGF0YSkge1xuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YS52YWx1ZSwgZGF0YS5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9uczogSU9sZFJlcU9wdGlvbnMgfCBBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1JlcXVlc3RDb25maWcgJiB7XG4gIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxufSB7XG4gIGxldCBfX2lzT2xkT3B0aW9ucyA9IGZhbHNlXG4gIGNvbnN0IG9wdDogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gJiB7XG4gICAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXG4gIH0gPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB1cmw6IChvcHRpb25zLnVybCBhcyBzdHJpbmcpIHx8ICcnLFxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICB9XG4gIC8vIHVzZXIgcmVxdWVzdCBjb25maWcgcHJveHlcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcbiAgICBsZXQgcHJveHlPcHRpb25zID0gb3B0aW9ucy5wcm94eVxuICAgIGlmICh0eXBlb2YgcHJveHlPcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJveHlPcHRpb25zID0gbmV3IFVSTChvcHRpb25zLnByb3h5KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwcm94eU9wdGlvbnMgPSBmYWxzZVxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxuICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICB9XG4gICAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcbiAgICB9XG4gICAgaWYgKHByb3h5T3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXG4gICAgICAgIG9wdC5odHRwc0FnZW50ID0gaHR0cHNPdmVySHR0cCh7XG4gICAgICAgICAgcHJveHk6IHtcbiAgICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucz8uaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnM/LnBvcnQsIDEwKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdC5wcm94eSA9IHtcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQsIDEwKSxcbiAgICAgICAgICBwcm90b2NvbDogJ2h0dHAnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCdmb3JtRGF0YScgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBvcHRpb25zLmZvcm1EYXRhW2tleV1cbiAgICAgIGFwcGVuZEZvcm1EYXRhKGZvcm0sIGtleSwgZGF0YSlcbiAgICB9XG4gICAgb3B0LmRhdGEgPSBmb3JtXG4gICAgb3B0LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKG9wdC5oZWFkZXJzIHx8IHt9LCBmb3JtLmdldEhlYWRlcnMoKSlcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgb2xkIG9wdGlvblxuICAgIGRlbGV0ZSBvcHQuZm9ybURhdGFcbiAgfVxuICBpZiAoJ2JvZHknIGluIG9wdGlvbnMpIHtcbiAgICBvcHQuZGF0YSA9IG9wdGlvbnMuYm9keVxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBvbGQgb3B0aW9uc1xuICAgIGRlbGV0ZSBvcHQuYm9keVxuICB9XG4gIGlmICgncXMnIGluIG9wdGlvbnMpIHtcbiAgICBvcHQucGFyYW1zID0gb3B0aW9ucy5xc1xuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICB9XG4gIG9wdC5fX2lzT2xkT3B0aW9ucyA9IF9faXNPbGRPcHRpb25zXG4gIHJldHVybiBvcHRcbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VJbnRlcmNlcHRvcihyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IElGdWxsUmVzcG9uc2Uge1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3BvbnNlLFxuICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICBib2R5OiByZXNwb25zZS5kYXRhXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VFcnJvckhhbmRsZXIoZXJyb3I6IGFueSkge1xuICBjb25zdCBlcnJvck9iaiA9IHtcbiAgICBtZXRob2Q6IGVycm9yPy5jb25maWc/Lm1ldGhvZD8udG9VcHBlckNhc2UoKSB8fCAnJyxcbiAgICB1cmw6IGVycm9yPy5jb25maWc/LnVybCB8fCAnJyxcbiAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxuICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICcnLFxuICAgIHN0YWNrOiBlcnJvcj8uc3RhY2sgfHwge30sXG4gICAgcmVzcG9uc2U6IHtcbiAgICAgIHN0YXR1czogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcbiAgICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXG4gICAgICBib2R5OiBlcnJvcj8ucmVzcG9uc2U/LmRhdGEgfHwgJydcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yT2JqKVxufVxuXG5leHBvcnQgY2xhc3MgUmVxdWVzdCBpbXBsZW1lbnRzIElSZXF1ZXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBwcml2YXRlIHByb3h5OiBVbmRlZmluYWJsZTxzdHJpbmc+ID0gJydcbiAgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gPSB7fVxuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy5pbml0KClcbiAgICBldmVudEJ1cy5vbihJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwgKGRhdGE6IElDb25maWdDaGFuZ2VQYXlsb2FkPHN0cmluZyB8IElDb25maWdbJ3BpY0JlZCddPikgPT4ge1xuICAgICAgc3dpdGNoIChkYXRhLmNvbmZpZ05hbWUpIHtcbiAgICAgICAgY2FzZSAncGljQmVkJzpcbiAgICAgICAgICBpZiAoKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pPy5wcm94eSkge1xuICAgICAgICAgICAgdGhpcy5wcm94eSA9IChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKS5wcm94eVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdwaWNCZWQucHJveHknOlxuICAgICAgICAgIHRoaXMucHJveHkgPSBkYXRhLnZhbHVlIGFzIHN0cmluZ1xuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBwcm94eSA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnByb3h5JylcbiAgICBpZiAocHJveHkpIHtcbiAgICAgIHRoaXMucHJveHkgPSBwcm94eVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUHJveHkoKTogQXhpb3NSZXF1ZXN0Q29uZmlnWydwcm94eSddIHwgZmFsc2Uge1xuICAgIGlmICh0aGlzLnByb3h5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKHRoaXMucHJveHkpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0IHx8ICcwJywgMTApLFxuICAgICAgICAgIHByb3RvY29sOiBwcm94eU9wdGlvbnMucHJvdG9jb2xcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vICM2NCBkeW5hbWljIGdldCBwcm94eSB2YWx1ZVxuICByZXF1ZXN0PFxuICAgIFQsXG4gICAgVSBleHRlbmRzIElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgSU9sZFJlcU9wdGlvbnNcbiAgICAgID8gSU9sZFJlcU9wdGlvbnNcbiAgICAgIDogSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBBeGlvc1JlcXVlc3RDb25maWdcbiAgICAgICAgPyBBeGlvc1JlcXVlc3RDb25maWdcbiAgICAgICAgOiBuZXZlclxuICA+KG9wdGlvbnM6IFUpOiBQcm9taXNlPElSZXNwb25zZTxULCBVPj4ge1xuICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IHRoaXMuaGFuZGxlUHJveHkoKVxuICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gICAgdGhpcy5vcHRpb25zLm1heEJvZHlMZW5ndGggPSBJbmZpbml0eVxuICAgIHRoaXMub3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoID0gSW5maW5pdHlcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb3h5ICYmIG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IGh0dHBzT3Zlckh0dHAoe1xuICAgICAgICBwcm94eToge1xuICAgICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5wcm94eS5ob3N0LFxuICAgICAgICAgIHBvcnQ6IHRoaXMub3B0aW9ucy5wcm94eS5wb3J0XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLm9wdGlvbnMucHJveHkgPSBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IGh0dHBzQWdlbnRcbiAgICB9XG4gICAgLy8gIU5PVElDRSB0aGlzLm9wdGlvbnMgIT09IG9wdGlvbnNcbiAgICAvLyB0aGlzLm9wdGlvbnMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uc1xuICAgIGNvbnN0IGluc3RhbmNlID0gYXhpb3MuY3JlYXRlKHRoaXMub3B0aW9ucylcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHJlc3BvbnNlSW50ZXJjZXB0b3IsIHJlc3BvbnNlRXJyb3JIYW5kbGVyKVxuXG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIG9sZCByZXF1ZXN0IG9wdGlvbnMgdG8gbmV3IG9wdGlvbnNcbiAgICBjb25zdCBvcHQgPSByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9ucylcblxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShmdW5jdGlvbiAob2JqKSB7XG4gICAgICAvLyBoYW5kbGUgQ29udGVudC1UeXBlXG4gICAgICBsZXQgY29udGVudFR5cGUgPSAnJ1xuICAgICAgaWYgKG9iaj8uaGVhZGVycz8uY29udGVudFR5cGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5jb250ZW50VHlwZSBhcyBzdHJpbmdcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uQ29udGVudFR5cGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5Db250ZW50VHlwZSBhcyBzdHJpbmdcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXSBhcyBzdHJpbmdcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgfVxuICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSAnJyAmJiBvYmouaGVhZGVycykge1xuICAgICAgICBvYmouaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBjb250ZW50VHlwZVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialxuICAgIH0pXG4gICAgaWYgKCdyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZScgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdCkudGhlbihyZXMgPT4ge1xuICAgICAgICAvLyB1c2Ugb2xkIHJlcXVlc3Qgb3B0aW9uIGZvcm1hdFxuICAgICAgICBpZiAob3B0Ll9faXNPbGRPcHRpb25zKSB7XG4gICAgICAgICAgaWYgKCdqc29uJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZXMuZGF0YVxuICAgICAgICB9XG4gICAgICB9KSBhcyBQcm9taXNlPElSZXNwb25zZTxULCBVPj5cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdFxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xuaW1wb3J0IGZzLCB7IGVtcHR5RGlyU3luYywgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IGhlaWNDb252ZXJ0IGZyb20gJ2hlaWMtY29udmVydCdcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7XG4gIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyxcbiAgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXG4gIElMaWZlY3ljbGVQbHVnaW5zLFxuICBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyxcbiAgSVBpY0dvLFxuICBJUGx1Z2luLFxuICBVbmRlZmluYWJsZSxcbiAgSUltZ0luZm9cbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQge1xuICBnZXRVUkxGaWxlLFxuICBoYW5kbGVVcmxFbmNvZGUsXG4gIGltYWdlQ29tcHJlc3MsXG4gIGlzVXJsLFxuICBpc05lZWRDb21wcmVzcyxcbiAgaXNOZWVkQWRkV2F0ZXJtYXJrLFxuICBpbWFnZUFkZFdhdGVyTWFyayxcbiAgcmVtb3ZlRXhpZixcbiAgcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nLFxuICBnZXRDb252ZXJ0ZWRGb3JtYXRcbn0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi4vdXRpbHMvY3JlYXRlQ29udGV4dCdcblxuY29uc3Qgd2F0ZXJtYXJrTXNnID0gJ0FkZCB3YXRlcm1hcmsgdG8gaW1hZ2UnXG5jb25zdCBjb21wcmVzc01zZyA9ICdDb21wcmVzcyBvciBjb252ZXJ0IGltYWdlJ1xuXG5jb25zdCB0dGZGaWxlTGluayA9ICdodHRwczovL3JlbGVhc2UucGljbGlzdC5jbi9zaW1oZWkudHRmJ1xuXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICB0dGZQYXRoOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMudHRmUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2Fzc2V0cycsICdzaW1oZWkudHRmJylcbiAgICBlbnN1cmVEaXJTeW5jKHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnKSlcbiAgICBjb25zdCBlbmFibGVTZWNvbmRVcGxvYWRlciA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8Ym9vbGVhbj4+KCdzZXR0aW5ncy5lbmFibGVTZWNvbmRVcGxvYWRlcicpIHx8IGZhbHNlXG4gICAgaWYgKCFlbmFibGVTZWNvbmRVcGxvYWRlcikge1xuICAgICAgZW1wdHlEaXJTeW5jKHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJykpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb3dubG9hZFRURigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKSlcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHRoaXMudHRmUGF0aCkgJiYgZnMuc3RhdFN5bmModGhpcy50dGZQYXRoKS5zaXplID4gMCkgcmV0dXJuIHRydWVcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZS4nKVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHR0ZkZpbGVMaW5rLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxuICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnR0ZlBhdGgsIHJlcy5kYXRhKVxuICAgICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlIHN1Y2Nlc3NmdWxseS4nKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLicpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhlbHBHZXRPcHRpb24oY3R4OiBJUGljR28pOiB7XG4gICAgY29tcHJlc3NPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz5cbiAgICB3YXRlcm1hcmtPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+XG4gIH0ge1xuICAgIGNvbnN0IGNvbXByZXNzT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+PignYnVpbGRJbi5jb21wcmVzcycpXG4gICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPj4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8XG4gICAgICAnc21tcydcbiAgICBjb25zdCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXG4gICAgaWYgKCF1cGxvYWRlciAmJiBjb21wcmVzc09wdGlvbnMpIHtcbiAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSAnc21tcydcbiAgICB9IGVsc2UgaWYgKGNvbXByZXNzT3B0aW9ucykge1xuICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9IHR5cGVcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXByZXNzT3B0aW9ucyxcbiAgICAgIHdhdGVybWFya09wdGlvbnNcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydChpbnB1dDogYW55W10sIHNraXBQcm9jZXNzID0gZmFsc2UpOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIC8vIGVuc3VyZSBldmVyeSB1cGxvYWQgcHJvY2VzcyBoYXMgYW4gdW5pcXVlIGNvbnRleHRcbiAgICBjb25zdCBjdHggPSBjcmVhdGVDb250ZXh0KHRoaXMuY3R4KVxuICAgIHRyeSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgYW4gYXJyYXkuJylcbiAgICAgIGN0eC5pbnB1dCA9IGlucHV0XG4gICAgICBjdHgub3V0cHV0ID0gW10gYXMgSUltZ0luZm9bXVxuICAgICAgY3R4LnJhd0lucHV0UGF0aCA9IFtdIGFzIHN0cmluZ1tdXG4gICAgICBjdHgucmF3SW5wdXQgPSBjbG9uZURlZXAoaW5wdXQpXG4gICAgICBpZiAoc2tpcFByb2Nlc3MpIHtcbiAgICAgICAgY3R4LmxvZy5pbmZvKCdTa2lwIHByb2Nlc3MuJylcbiAgICAgICAgY3R4Lm91dHB1dCA9IGlucHV0XG4gICAgICAgIGF3YWl0IHRoaXMuZG9VcGxvYWQoY3R4KVxuICAgICAgICBjdHguaW5wdXQgPSBjdHgucmF3SW5wdXRcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlclVwbG9hZChjdHgpXG4gICAgICAgIHJldHVybiBjdHhcbiAgICAgIH1cbiAgICAgIC8vIGxpZmVjeWNsZSBtYWluXG4gICAgICBhd2FpdCB0aGlzLnByZXByb2Nlc3MoY3R4KVxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVUcmFuc2Zvcm0oY3R4KVxuICAgICAgYXdhaXQgdGhpcy5kb1RyYW5zZm9ybShjdHgpXG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkSW5SZW5hbWUoY3R4KVxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVVcGxvYWQoY3R4KVxuICAgICAgY3R4LnByb2Nlc3NlZElucHV0ID0gY2xvbmVEZWVwKGN0eC5vdXRwdXQpXG4gICAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcbiAgICAgIGN0eC5pbnB1dCA9IGN0eC5yYXdJbnB1dFxuICAgICAgYXdhaXQgdGhpcy5hZnRlclVwbG9hZChjdHgpXG4gICAgICByZXR1cm4gY3R4XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjdHgubG9nLndhcm4oSUJ1aWxkSW5FdmVudC5GQUlMRUQpXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdHhcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXByb2Nlc3MoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGNvbnN0IHsgY29tcHJlc3NPcHRpb25zLCB3YXRlcm1hcmtPcHRpb25zIH0gPSB0aGlzLmhlbHBHZXRPcHRpb24oY3R4KVxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAwKVxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHRyYW5zZm9ybScpXG4gICAgaWYgKGNvbXByZXNzT3B0aW9ucyB8fCB3YXRlcm1hcmtPcHRpb25zKSB7XG4gICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbUlzVXJsID0gaXNVcmwoaXRlbSlcbiAgICAgICAgICBjb25zdCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyA9IGl0ZW1Jc1VybCA/IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KSA6IHsgc3VjY2VzczogZmFsc2UgfVxuICAgICAgICAgIGlmIChpdGVtSXNVcmwgJiYgKCFpbmZvLnN1Y2Nlc3MgfHwgIWluZm8uYnVmZmVyKSkgcmV0dXJuXG5cbiAgICAgICAgICBsZXQgdHJhbnNmb3JtZWRCdWZmZXI6IFVuZGVmaW5hYmxlPEJ1ZmZlcj5cbiAgICAgICAgICBsZXQgaXNTa2lwID0gZmFsc2VcbiAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBpdGVtXG4gICAgICAgICAgY29uc3QgZXh0ZW50aW9uID0gaXRlbUlzVXJsID8gaW5mby5leHRuYW1lIHx8ICcnIDogcGF0aC5leHRuYW1lKGl0ZW0pXG4gICAgICAgICAgY29uc3QgZmlsZUJ1ZmZlcjogQnVmZmVyID0gaXRlbUlzVXJsID8gaW5mby5idWZmZXIhIDogZnMucmVhZEZpbGVTeW5jKGl0ZW0pXG4gICAgICAgICAgaWYgKGlzTmVlZEFkZFdhdGVybWFyayh3YXRlcm1hcmtPcHRpb25zLCBleHRlbnRpb24pKSB7XG4gICAgICAgICAgICBpZiAoISh3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtGb250UGF0aCB8fCB3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFRURlJldCA9IGF3YWl0IHRoaXMuZG93bmxvYWRUVEYoKVxuICAgICAgICAgICAgICBpZiAoIWRvd25sb2FkVFRGUmV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXG4gICAgICAgICAgICAgICAgaXNTa2lwID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzU2tpcCkge1xuICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGZpbGVCdWZmZXIsIHdhdGVybWFya09wdGlvbnMhLCB0aGlzLnR0ZlBhdGgsIGN0eC5sb2cpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc05lZWRDb21wcmVzcyhjb21wcmVzc09wdGlvbnMsIGV4dGVudGlvbikpIHtcbiAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcbiAgICAgICAgICAgIGlmICghaXRlbUlzVXJsICYmIChleHRlbnRpb24gPT09ICcuaGVpYycgfHwgZXh0ZW50aW9uID09PSAnLmhlaWYnKSkge1xuICAgICAgICAgICAgICBjb25zdCBoZWljUmVzdWx0ID0gYXdhaXQgaGVpY0NvbnZlcnQoe1xuICAgICAgICAgICAgICAgIGJ1ZmZlcjogZmlsZUJ1ZmZlcixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6ICdKUEVHJyxcbiAgICAgICAgICAgICAgICBxdWFsaXR5OiAxXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBIZWljQ29udmVydEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIGV4dGVudGlvbil9LmpwZ2ApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEhlaWNDb252ZXJ0RmlsZSwgQnVmZmVyLmZyb20oaGVpY1Jlc3VsdCkpXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VDb21wcmVzcyhcbiAgICAgICAgICAgICAgICBmcy5yZWFkRmlsZVN5bmModGVtcEhlaWNDb252ZXJ0RmlsZSksXG4gICAgICAgICAgICAgICAgY29tcHJlc3NPcHRpb25zISxcbiAgICAgICAgICAgICAgICAnLmpwZycsXG4gICAgICAgICAgICAgICAgY3R4LmxvZ1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQ29tcHJlc3MoXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPz8gZmlsZUJ1ZmZlcixcbiAgICAgICAgICAgICAgICBjb21wcmVzc09wdGlvbnMhLFxuICAgICAgICAgICAgICAgIGV4dGVudGlvbixcbiAgICAgICAgICAgICAgICBjdHgubG9nXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xuICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdSZW1vdmUgZXhpZiBpbmZvLicpXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IHJlbW92ZUV4aWYoZmlsZUJ1ZmZlciwgZXh0ZW50aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHJhbnNmb3JtZWRCdWZmZXIpIHtcbiAgICAgICAgICAgIGxldCBuZXdFeHQgPSBjb21wcmVzc09wdGlvbnM/LmlzQ29udmVydCA/IGdldENvbnZlcnRlZEZvcm1hdChjb21wcmVzc09wdGlvbnMsIGV4dGVudGlvbikgOiBleHRlbnRpb25cbiAgICAgICAgICAgIG5ld0V4dCA9IG5ld0V4dC5zdGFydHNXaXRoKCcuJykgPyBuZXdFeHQgOiBgLiR7bmV3RXh0fWBcbiAgICAgICAgICAgIGNvbnN0IHRlbXBGaWxlID0gaXRlbUlzVXJsXG4gICAgICAgICAgICAgID8gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgdGVtcEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgYCR7XG4gICAgICAgICAgICAgICAgICAgIGluZm8uZmlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGAke3BhdGguYmFzZW5hbWUoaW5mby5maWxlTmFtZSwgcGF0aC5leHRuYW1lKGluZm8uZmlsZU5hbWUpKX1gXG4gICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgfSR7bmV3RXh0fWBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBleHRlbnRpb24pfSR7bmV3RXh0fWApXG4gICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgIHBhdGguZGlybmFtZShpdGVtKSxcbiAgICAgICAgICAgICAgaXRlbUlzVXJsID8gcGF0aC5iYXNlbmFtZSh0ZW1wRmlsZSkgOiBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIGV4dGVudGlvbil9JHtuZXdFeHR9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZSwgdHJhbnNmb3JtZWRCdWZmZXIpXG4gICAgICAgICAgICBjdHguaW5wdXRbaW5kZXhdID0gdGVtcEZpbGVcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjdHguaW5wdXQpIHtcbiAgICAgICAgY3R4LnJhd0lucHV0UGF0aCEucHVzaChpdGVtKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkSW5SZW5hbWUoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGNvbnN0IHJlbmFtZUNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxuICAgIGlmIChyZW5hbWVDb25maWcuZW5hYmxlKSB7XG4gICAgICBjb25zdCBmb3JtYXQgPSByZW5hbWVDb25maWcuZm9ybWF0IHx8ICd7ZmlsZW5hbWV9J1xuICAgICAgY3R4Lm91dHB1dCA9IGN0eC5vdXRwdXQubWFwKChpdGVtOiBJSW1nSW5mbywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgZmlsZU5hbWUgPSBpdGVtLmZpbGVOYW1lXG4gICAgICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICBmaWxlTmFtZSA9IHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyhcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSxcbiAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGl0ZW0uYmFzZTY0SW1hZ2UgPyBpdGVtLmJhc2U2NEltYWdlIDogaXRlbS5idWZmZXJcbiAgICAgICAgICApXG4gICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcbiAgICAgICAgICBpZiAoZmlsZU5hbWUuc2xpY2UoLTEpID09PSAnLycpIHtcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUgKyBpbmRleC50b1N0cmluZygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZW0uZmlsZU5hbWUgPSBmaWxlTmFtZVxuICAgICAgICByZXR1cm4gaXRlbVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVUcmFuc2Zvcm0oY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRvVHJhbnNmb3JtKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMzApXG4gICAgY29uc3QgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXG4gICAgbGV0IHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQodHlwZSlcbiAgICBpZiAoIXRyYW5zZm9ybWVyKSB7XG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdwYXRoJ1xuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHRyYW5zZm9ybWVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdHJhbnNmb3JtZXIgLSBwYXRoYClcbiAgICB9XG4gICAgY3R4LmxvZy5pbmZvKGBUcmFuc2Zvcm1pbmcuLi4gQ3VycmVudCB0cmFuc2Zvcm1lciBpcyBbJHtjdXJyZW50VHJhbnNmb3JtZXJ9XWApXG4gICAgYXdhaXQgdHJhbnNmb3JtZXI/LmhhbmRsZShjdHgpXG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB1cGxvYWQnKVxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1VQTE9BRCwgY3R4KVxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRvVXBsb2FkKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBsZXQgdHlwZSA9XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fFxuICAgICAgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fFxuICAgICAgJ3NtbXMnXG4gICAgbGV0IHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQodHlwZSlcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxuICAgIGlmICghdXBsb2FkZXIpIHtcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB1cGxvYWRlciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHVwbG9hZGVyIC0gc21tc2ApXG4gICAgICB0eXBlID0gJ3NtbXMnXG4gICAgICBjdXJyZW50VHJhbnNmb3JtZXIgPSAnc21tcydcbiAgICAgIHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQoJ3NtbXMnKVxuICAgIH1cbiAgICBjdHgubG9nLmluZm8oYFVwbG9hZGluZy4uLiBDdXJyZW50IHVwbG9hZGVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcbiAgICBhd2FpdCB1cGxvYWRlcj8uaGFuZGxlKGN0eClcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XG4gICAgICBvdXRwdXRJbWcudHlwZSA9IHR5cGVcbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMTAwKVxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucywgY3R4KVxuICAgIGxldCBtc2cgPSAnJ1xuICAgIGNvbnN0IGxlbmd0aCA9IGN0eC5vdXRwdXQubGVuZ3RoXG4gICAgY29uc3QgaXNFbmNvZGVPdXRwdXRVUkwgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPGJvb2xlYW4+Pignc2V0dGluZ3MuZW5jb2RlT3V0cHV0VVJMJykgPT09IHRydWVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodHlwZW9mIGN0eC5vdXRwdXRbaV0uaW1nVXJsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBtc2cgKz0gaXNFbmNvZGVPdXRwdXRVUkwgPyBoYW5kbGVVcmxFbmNvZGUoY3R4Lm91dHB1dFtpXS5pbWdVcmwhKSA6IGN0eC5vdXRwdXRbaV0uaW1nVXJsIVxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG1zZyArPSAnXFxuJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWxldGUgY3R4Lm91dHB1dFtpXS5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYnVmZmVyXG4gICAgfVxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRklOSVNIRUQsIGN0eClcbiAgICBjdHgubG9nLnN1Y2Nlc3MoYFxcbiR7bXNnfWApXG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zKGxpZmVDeWNsZVBsdWdpbnM6IElMaWZlY3ljbGVQbHVnaW5zLCBjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXG4gICAgY29uc3QgcGx1Z2luTmFtZXMgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldElkTGlzdCgpXG4gICAgY29uc3QgbGlmZUN5Y2xlTmFtZSA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TmFtZSgpXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwbHVnaW5zLm1hcChhc3luYyAocGx1Z2luOiBJUGx1Z2luLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3R4LmxvZy5pbmZvKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gcnVubmluZ2ApXG4gICAgICAgICAgYXdhaXQgcGx1Z2luLmhhbmRsZShjdHgpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gZXJyb3JgKVxuICAgICAgICAgIHRocm93IGVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICAgcmV0dXJuIGN0eFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXG5cbi8qKlxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXG4gKiBAcGFyYW0gY3R4XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcbiAgcmV0dXJuIHtcbiAgICBjb25maWdQYXRoOiBjdHguY29uZmlnUGF0aCxcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcbiAgICBsb2c6IGN0eC5sb2csXG4gICAgY21kOiBjdHguY21kLFxuICAgIG91dHB1dDogW10sXG4gICAgaW5wdXQ6IFtdLFxuICAgIHJhd0lucHV0OiBbXSxcbiAgICBwcm9jZXNzZWRJbnB1dDogW10sXG4gICAgcGx1Z2luTG9hZGVyOiBjdHgucGx1Z2luTG9hZGVyLFxuICAgIHBsdWdpbkhhbmRsZXI6IGN0eC5wbHVnaW5IYW5kbGVyLFxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxuICAgIGhlbHBlcjogY3R4LmhlbHBlcixcbiAgICBWRVJTSU9OOiBjdHguVkVSU0lPTixcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxuICAgIHJlcXVlc3Q6IGN0eC5yZXF1ZXN0LFxuICAgIGkxOG46IGN0eC5pMThuLFxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXG4gICAgc2F2ZUNvbmZpZzogY3R4LnNhdmVDb25maWcuYmluZChjdHgpLFxuICAgIHJlbW92ZUNvbmZpZzogY3R4LnJlbW92ZUNvbmZpZy5iaW5kKGN0eCksXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcbiAgICB1bnNldENvbmZpZzogY3R4LnVuc2V0Q29uZmlnLmJpbmQoY3R4KSxcbiAgICB1cGxvYWQ6IGN0eC51cGxvYWQuYmluZChjdHgpLFxuICAgIHVwbG9hZFJldHVybkN0eDogY3R4LnVwbG9hZFJldHVybkN0eC5iaW5kKGN0eCksXG4gICAgYWRkTGlzdGVuZXI6IGN0eC5hZGRMaXN0ZW5lci5iaW5kKGN0eCksXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXG4gICAgb25jZTogY3R4Lm9uY2UuYmluZChjdHgpLFxuICAgIHJlbW92ZUxpc3RlbmVyOiBjdHgucmVtb3ZlTGlzdGVuZXIuYmluZChjdHgpLFxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiBjdHgucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICBzZXRNYXhMaXN0ZW5lcnM6IGN0eC5zZXRNYXhMaXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgbGlzdGVuZXJzOiBjdHgubGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICByYXdMaXN0ZW5lcnM6IGN0eC5yYXdMaXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcbiAgICBsaXN0ZW5lckNvdW50OiBjdHgubGlzdGVuZXJDb3VudC5iaW5kKGN0eCksXG4gICAgcHJlcGVuZExpc3RlbmVyOiBjdHgucHJlcGVuZExpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXG4gICAgZXZlbnROYW1lczogY3R4LmV2ZW50TmFtZXMuYmluZChjdHgpXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXRoSGVscGVyKHtcbiAgcGF0aCxcbiAgc3RhcnRTbGFzaCA9IGZhbHNlLFxuICBlbmRTbGFzaCA9IHRydWUsXG4gIHJvb3RUb0VtcHR5ID0gdHJ1ZVxufToge1xuICBwYXRoPzogc3RyaW5nXG4gIHN0YXJ0U2xhc2g/OiBib29sZWFuXG4gIGVuZFNsYXNoPzogYm9vbGVhblxuICByb290VG9FbXB0eT86IGJvb2xlYW5cbn0pOiBzdHJpbmcge1xuICBjb25zdCBjbGVhblBhdGggPSBwYXRoPy5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpXG4gIGlmICghY2xlYW5QYXRoKSB7XG4gICAgcmV0dXJuIHJvb3RUb0VtcHR5ID8gJycgOiAnLydcbiAgfVxuICByZXR1cm4gYCR7c3RhcnRTbGFzaCA/ICcvJyA6ICcnfSR7Y2xlYW5QYXRofSR7ZW5kU2xhc2ggPyAnLycgOiAnJ31gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoXG4gICAgLnJlcGxhY2UoL1xcL3syLH0vZywgJy8nKVxuICAgIC5zcGxpdCgnLycpXG4gICAgLm1hcChwID0+IGVuY29kZVVSSUNvbXBvbmVudChwKSlcbiAgICAuam9pbignLycpXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEluVXBsb2FkZXJOYW1lcyA9IHtcbiAgYWR2YW5jZWRwbGlzdDogJ2FkdmFuY2VkcGxpc3QnLFxuICBhbGlzdHBsaXN0OiAnYWxpc3RwbGlzdCcsXG4gIGFsaXl1bjogJ2FsaXl1bicsXG4gICdhd3MtczMtcGxpc3QnOiAnYXdzLXMzLXBsaXN0JyxcbiAgZ2l0aHViOiAnZ2l0aHViJyxcbiAgaW1ndXI6ICdpbWd1cicsXG4gIGxvY2FsOiAnbG9jYWwnLFxuICBsc2t5cGxpc3Q6ICdsc2t5cGxpc3QnLFxuICBwaWNsaXN0OiAncGljbGlzdCcsXG4gIHFpbml1OiAncWluaXUnLFxuICBzZnRwcGxpc3Q6ICdzZnRwcGxpc3QnLFxuICBzbW1zOiAnc21tcycsXG4gIHRjeXVuOiAndGN5dW4nLFxuICB1cHl1bjogJ3VweXVuJyxcbiAgd2ViZGF2cGxpc3Q6ICd3ZWJkYXZwbGlzdCdcbn1cbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElBZHZhbmNlZFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIGltYWdlOiBCdWZmZXIsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIGVuZHBvaW50OiBzdHJpbmcsXG4gIG1ldGhvZDogYW55LFxuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBib2R5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBmb3JtRGF0YUtleTogc3RyaW5nXG4pOiBJT2xkUmVxT3B0aW9ucyA9PiB7XG4gIGNvbnN0IGRlZmF1bHRIZWFkZXJzID0ge1xuICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCdcbiAgfVxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgdXJsOiBlbmRwb2ludCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5kZWZhdWx0SGVhZGVycyxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBbZm9ybURhdGFLZXldOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLi4uYm9keVxuICAgIH0sXG4gICAganNvbjogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGFkdmFuY2VkcGxpc3RDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBZHZhbmNlZFBsaXN0Q29uZmlnPigncGljQmVkLmFkdmFuY2VkcGxpc3QnKVxuICBpZiAoIWFkdmFuY2VkcGxpc3RDb25maWcpIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIGFkdmFuY2VkcGxpc3QgY29uZmlnJylcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICB9XG4gICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoXG4gICAgICAgIGltYWdlLFxuICAgICAgICBpbWcuZmlsZU5hbWUsXG4gICAgICAgIGFkdmFuY2VkcGxpc3RDb25maWcuZW5kcG9pbnQsXG4gICAgICAgIGFkdmFuY2VkcGxpc3RDb25maWcubWV0aG9kLFxuICAgICAgICBKU09OLnBhcnNlKGFkdmFuY2VkcGxpc3RDb25maWcuaGVhZGVycyB8fCAne30nKSxcbiAgICAgICAgSlNPTi5wYXJzZShhZHZhbmNlZHBsaXN0Q29uZmlnLmJvZHkgfHwgJ3t9JyksXG4gICAgICAgIGFkdmFuY2VkcGxpc3RDb25maWcuZm9ybURhdGFLZXkgfHwgJ2ZpbGUnXG4gICAgICApXG5cbiAgICAgIGxldCBib2R5ID0gKGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpKSBhcyBhbnlcbiAgICAgIGJvZHkgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keVxuICAgICAgbGV0IGltYWdlVXJsID0gYm9keVxuICAgICAgY29uc3QgcmVzRGF0YVBhdGggPSBhZHZhbmNlZHBsaXN0Q29uZmlnLnJlc0RhdGFQYXRoIHx8ICdkYXRhLnVybCdcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc0RhdGFQYXRoLnNwbGl0KCcuJykpIHtcbiAgICAgICAgaWYgKGltYWdlVXJsICYmIHR5cGVvZiBpbWFnZVVybCA9PT0gJ29iamVjdCcgJiYga2V5IGluIGltYWdlVXJsKSB7XG4gICAgICAgICAgaW1hZ2VVcmwgPSBpbWFnZVVybFtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1hZ2VVcmwgPSB1bmRlZmluZWRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW1hZ2VVcmwgJiYgdHlwZW9mIGltYWdlVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGlmIChhZHZhbmNlZHBsaXN0Q29uZmlnLmN1c3RvbVByZWZpeCkge1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBhZHZhbmNlZHBsaXN0Q29uZmlnLmN1c3RvbVByZWZpeCArIGltYWdlVXJsXG4gICAgICAgIH1cbiAgICAgICAgaW1nLmltZ1VybCA9IGltYWdlVXJsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFkdmFuY2VkUGxpc3RDb25maWc+KCdwaWNCZWQuYWR2YW5jZWRwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdlbmRwb2ludCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdtZXRob2QnLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgY2hvaWNlczogWydQT1NUJywgJ1BVVCcsICdHRVQnXSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVRIT0QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX01FVEhPRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX01FVEhPRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5tZXRob2QgfHwgJ1BPU1QnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZm9ybURhdGFLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9GT1JNX0RBVEFfS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9GT1JNX0RBVEFfS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRk9STV9EQVRBX0tFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtRGF0YUtleSB8fCAnZmlsZScsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdoZWFkZXJzJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfSEVBREVSUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfSEVBREVSUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaGVhZGVycyB8fCAne30nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYm9keScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0JPRFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0JPRFknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9CT0RZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJvZHkgfHwgJ3t9JyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVByZWZpeCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0NVU1RPTV9QUkVGSVgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUX0NVU1RPTV9QUkVGSVgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9DVVNUT01fUFJFRklYJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVByZWZpeCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Jlc0RhdGFQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU19EQVRBX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVzRGF0YVBhdGggfHwgJ2RhdGEudXJsJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuYWR2YW5jZWRwbGlzdCwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BRFZBTkNFRFBMSVNUJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUFsaXN0Q29uZmlnLCBJT2xkUmVxT3B0aW9ucywgSUZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbnRlcmZhY2UgSUFsaXN0VG9rZW5TdG9yZSB7XG4gIHRva2VuOiBzdHJpbmdcbiAgcmVmcmVzaGVkQXQ6IG51bWJlclxufVxuXG5jb25zdCBnZXRBbGlzdFRva2VuID0gYXN5bmMgKGN0eDogSVBpY0dvLCB1cmw6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRva2VuU3RvcmUgPSBjdHguZ2V0Q29uZmlnPElBbGlzdFRva2VuU3RvcmU+KCdwaWNnby1wbHVnaW4tYnVpbGRpbi1hbGlzdHBsaXN0JylcbiAgaWYgKHRva2VuU3RvcmUgJiYgdG9rZW5TdG9yZS5yZWZyZXNoZWRBdCAmJiBEYXRlLm5vdygpIC0gdG9rZW5TdG9yZS5yZWZyZXNoZWRBdCA8IDM2MDAwMDAgJiYgdG9rZW5TdG9yZS50b2tlbikge1xuICAgIHJldHVybiB0b2tlblN0b3JlLnRva2VuXG4gIH1cbiAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MucG9zdChgJHt1cmx9L2FwaS9hdXRoL2xvZ2luYCwge1xuICAgIHVzZXJuYW1lLFxuICAgIHBhc3N3b3JkXG4gIH0pXG4gIGlmIChyZXMuZGF0YS5jb2RlID09PSAyMDAgJiYgcmVzLmRhdGEubWVzc2FnZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgY29uc3QgdG9rZW4gPSByZXMuZGF0YS5kYXRhLnRva2VuXG4gICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3BpY2dvLXBsdWdpbi1idWlsZGluLWFsaXN0cGxpc3QnOiB7XG4gICAgICAgIHRva2VuLFxuICAgICAgICByZWZyZXNoZWRBdDogRGF0ZS5ub3coKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHRva2VuXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdHZXQgdG9rZW4gZmFpbGVkJylcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAodXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9ucyA9PiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGAke3VybH0vYXBpL2ZzL2Zvcm1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICAgIEF1dGhvcml6YXRpb246IHRva2VuLFxuICAgICAgJ0ZpbGUtUGF0aCc6IGVuY29kZVVSSUNvbXBvbmVudChmaWxlUGF0aClcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBmaWxlOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZVJlc0Vycm9yID0gKGN0eDogSVBpY0dvLCByZXM6IElGdWxsUmVzcG9uc2UpOiB2b2lkID0+IHtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDAgfHwgcmVzLmJvZHkuY29kZSAhPT0gMjAwIHx8IHJlcy5ib2R5Lm1lc3NhZ2UgIT09ICdzdWNjZXNzJykge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcbiAgICAgIHRleHQ6IHJlcy5ib2R5Lm1lc3NhZ2VcbiAgICB9KVxuICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxuICB9XG59XG5cbmNvbnN0IGV4dHJhY3RDb25maWcgPSAoY29uZmlnOiBJQWxpc3RDb25maWcpID0+IHtcbiAgY29uc3QgeyB1cmwsIHRva2VuLCB1c2VybmFtZSwgcGFzc3dvcmQsIHVwbG9hZFBhdGgsIHdlYlBhdGgsIGN1c3RvbVVybCB9ID0gY29uZmlnXG4gIHJldHVybiB7XG4gICAgdXJsOiAodXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpLFxuICAgIHRva2VuOiB0b2tlbiB8fCAnJyxcbiAgICB1c2VybmFtZTogdXNlcm5hbWUgfHwgJycsXG4gICAgcGFzc3dvcmQ6IHBhc3N3b3JkIHx8ICcnLFxuICAgIHVwbG9hZFBhdGg6IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgICAgcGF0aDogdXBsb2FkUGF0aCB8fCAnJyxcbiAgICAgIHN0YXJ0U2xhc2g6IHRydWUsXG4gICAgICBlbmRTbGFzaDogdHJ1ZSxcbiAgICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICAgIH0pLFxuICAgIHdlYlBhdGg6IHdlYlBhdGhcbiAgICAgID8gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgICAgICAgcGF0aDogd2ViUGF0aCB8fCAnJyxcbiAgICAgICAgICBzdGFydFNsYXNoOiB0cnVlLFxuICAgICAgICAgIGVuZFNsYXNoOiB0cnVlLFxuICAgICAgICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiAnJyxcbiAgICBjdXN0b21Vcmw6IChjdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBhbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXN0Q29uZmlnPigncGljQmVkLmFsaXN0cGxpc3QnKVxuICBpZiAoIWFsaXN0Q29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBhbGlzdCBjb25maWchJylcblxuICBjb25zdCB7IHVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB1cGxvYWRQYXRoLCB3ZWJQYXRoLCBjdXN0b21VcmwgfSA9IGV4dHJhY3RDb25maWcoYWxpc3RDb25maWcpXG4gIGxldCB7IHRva2VuIH0gPSBleHRyYWN0Q29uZmlnKGFsaXN0Q29uZmlnKVxuICBpZiAoIXRva2VuKSB7XG4gICAgdG9rZW4gPSBhd2FpdCBnZXRBbGlzdFRva2VuKGN0eCwgdXJsLCB1c2VybmFtZSwgcGFzc3dvcmQpXG4gIH1cbiAgaWYgKCF1cmwgfHwgISh0b2tlbiB8fCAodXNlcm5hbWUgJiYgcGFzc3dvcmQpKSkgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgY2hlY2sgeW91ciBhbGlzdCBjb25maWchJylcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICB9XG4gICAgICBjb25zdCBmdWxsVXBsb2FkUGF0aCA9IGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YFxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKHVybCwgdG9rZW4sIGltZy5maWxlTmFtZSwgZnVsbFVwbG9hZFBhdGgsIGltYWdlKVxuICAgICAgY29uc3QgdXBsb2FkUmVzID0gKGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcbiAgICAgIGhhbmRsZVJlc0Vycm9yKGN0eCwgdXBsb2FkUmVzKVxuICAgICAgY29uc3QgcmVmcmVzaFVybCA9IGAke3VybH0vYXBpL2ZzL2xpc3RgXG4gICAgICBjb25zdCBnZXRJbmZvVXJsID0gYCR7dXJsfS9hcGkvZnMvZ2V0YFxuICAgICAgY29uc3QgcmVmcmVzaFJlcyA9IChhd2FpdCBjdHgucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB1cmw6IHJlZnJlc2hVcmwsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0b2tlbixcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICBwZXJfcGFnZTogMSxcbiAgICAgICAgICByZWZyZXNoOiB0cnVlLFxuICAgICAgICAgIHBhdGg6IHBhdGguZGlybmFtZShmdWxsVXBsb2FkUGF0aClcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICAgIH0pKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcbiAgICAgIGhhbmRsZVJlc0Vycm9yKGN0eCwgcmVmcmVzaFJlcylcbiAgICAgIGNvbnN0IGdldEluZm9SZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgdXJsOiBnZXRJbmZvVXJsLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogdG9rZW4sXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgICAgIHBhdGg6IGZ1bGxVcGxvYWRQYXRoLFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyX3BhZ2U6IDEsXG4gICAgICAgICAgcmVmcmVzaDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgICAgfSkpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaGFuZGxlUmVzRXJyb3IoY3R4LCBnZXRJbmZvUmVzKVxuICAgICAgY29uc3Qgc2lnbiA9IGdldEluZm9SZXMuYm9keS5kYXRhLnNpZ25cbiAgICAgIGNvbnN0IGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChgJHt3ZWJQYXRoIHx8IHVwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YClcbiAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21VcmwgfHwgdXJsfS9kJHtlbmNvZGVkUGF0aH1gXG4gICAgICBpbWcuaW1nVXJsICs9IHNpZ24gPyBgP3NpZ249JHtzaWdufWAgOiAnJ1xuICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpc3RDb25maWc+KCdwaWNCZWQuYWxpc3RwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd1cmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVBMT0FEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9VUExPQURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9XRUJfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1dFQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLmFsaXN0cGxpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElBbGl5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBnZXRDdXJyZW50VVRDRGF0ZSA9ICgpOiBzdHJpbmcgPT4gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXG5cbi8vIGdlbmVyYXRlIE9TUyBzaWduYXR1cmVcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkYXRlID0gZ2V0Q3VycmVudFVUQ0RhdGUoKVxuICBjb25zdCBtaW1lVHlwZSA9IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgY29uc3Qgc2lnblN0cmluZyA9IGBQVVRcXG5cXG4ke21pbWVUeXBlfVxcbiR7ZGF0ZX1cXG4vJHtvcHRpb25zLmJ1Y2tldH0vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXG4gIHJldHVybiBgT1NTICR7b3B0aW9ucy5hY2Nlc3NLZXlJZH06JHtzaWduYXR1cmV9YFxufVxuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChcbiAgb3B0aW9uczogSUFsaXl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gIGltYWdlOiBCdWZmZXJcbik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGBodHRwczovLyR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVQYXRoKGAke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWApfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb21gLFxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxuICAgICAgRGF0ZTogZ2V0Q3VycmVudFVUQ0RhdGUoKSxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWFnZSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGFsaVl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJylcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGFsaVl1biBPU1MgY29uZmlnXCIpXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoeyBwYXRoOiBhbGlZdW5PcHRpb25zLnBhdGggfSlcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IGN1c3RvbVVybCA9IChhbGlZdW5PcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICAgIGNvbnN0IHBhdGggPSBhbGlZdW5PcHRpb25zLnBhdGhcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCBvcHRpb25VcmwgPSBhbGlZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke2FsaVl1bk9wdGlvbnMuYnVja2V0fS4ke2FsaVl1bk9wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleUlkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlTZWNyZXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYnVja2V0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FyZWEnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29wdGlvbnMnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5hbGl5dW4sIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVUQnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgRmlsZVR5cGUgZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSdcbmltcG9ydCB7IEh0dHBzUHJveHlBZ2VudCwgSHR0cFByb3h5QWdlbnQgfSBmcm9tICdocGFnZW50J1xuaW1wb3J0IHsgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcblxuY2xhc3MgRmlsZU5hbWVHZW5lcmF0b3Ige1xuICBkYXRlOiBEYXRlXG4gIGluZm86IElJbWdJbmZvXG5cbiAgc3RhdGljIGZpZWxkcyA9IFtcbiAgICAneWVhcicsIC8vIOW9k+WJjeaXpeacnyAtIOW5tFxuICAgICdtb250aCcsIC8vIOW9k+WJjeaXpeacnyAtIOaciFxuICAgICdkYXknLCAvLyDlvZPliY3ml6XmnJ8gLSDml6VcbiAgICAnZnVsbE5hbWUnLCAvLyDmlofku7blkI0sIOWMheWQq+aJqeWxleWQjVxuICAgICdmaWxlTmFtZScsIC8vIOaWh+S7tuWQjSwg5LiN5YyF5ZCr5omp5bGV5ZCNXG4gICAgJ2V4dE5hbWUnLCAvLyDmianlsZXlkI1cbiAgICAnbWQ1JywgLy8gbWQ1XG4gICAgJ21kNUI2NCcsIC8vIG1kNSBiYXNlNjRcbiAgICAnbWQ1QjY0U2hvcnQnLCAvLyBtZDUgYmFzZTY0IHNob3J0XG4gICAgJ3NoYTEnLCAvLyBzaGExXG4gICAgJ3NoYTI1NicsIC8vIHNoYTI1NlxuICAgICd0aW1lc3RhbXAnLCAvLyDlvZPliY3ml7bpl7TmiLMsIOenklxuICAgICd0aW1lc3RhbXBNUycgLy8g5b2T5YmN5pe26Ze05oizLCDmr6vnp5JcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKGluZm86IElJbWdJbmZvKSB7XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKVxuICAgIHRoaXMuaW5mbyA9IGluZm9cbiAgfVxuXG4gIHB1YmxpYyB5ZWFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfWBcbiAgfVxuXG4gIHB1YmxpYyBtb250aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBkYXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBmdWxsTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uZmlsZU5hbWVcbiAgfVxuXG4gIHB1YmxpYyBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5pbmZvLmZpbGVOYW1lID8/ICcnKS5yZXBsYWNlKHRoaXMuaW5mby5leHRuYW1lID8/ICcnLCAnJylcbiAgfVxuXG4gIHB1YmxpYyBleHROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJykucmVwbGFjZSgnLicsICcnKVxuICB9XG5cbiAgcHVibGljIG1kNSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoJ2hleCcpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0b1xuICAgICAgLmNyZWF0ZUhhc2goJ21kNScpXG4gICAgICAudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKVxuICAgICAgLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAucmVwbGFjZSgvPSskLywgJycpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0U2hvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvXG4gICAgICAuY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAgIC51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpXG4gICAgICAuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIC5zbGljZSgwLCA3KVxuICB9XG5cbiAgcHVibGljIHNoYTEoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdCgnaGV4JylcbiAgfVxuXG4gIHB1YmxpYyBzaGEyNTYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KCdoZXgnKVxuICB9XG5cbiAgcHVibGljIHRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXG4gIH1cblxuICBwdWJsaWMgdGltZXN0YW1wTVMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygpXG4gIH1cblxuICBwcml2YXRlIGltZ0J1ZmZlcigpOiBzdHJpbmcgfCBCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgPyB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgOiB0aGlzLmluZm8uYnVmZmVyXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGgoaW5mbzogSUltZ0luZm8sIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghZm9ybWF0KSB7XG4gICAgcmV0dXJuIGluZm8uZmlsZU5hbWUhXG4gIH1cblxuICBjb25zdCBmaWxlTmFtZUdlbmVyYXRvciA9IG5ldyBGaWxlTmFtZUdlbmVyYXRvcihpbmZvKVxuXG4gIGxldCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBmb3JtYXRcblxuICBmb3IgKGNvbnN0IGtleSBvZiBGaWxlTmFtZUdlbmVyYXRvci5maWVsZHMpIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYHske2tleX19YCwgJ2cnKVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHMtbWlncmF0ZSgyNTMyKSBGSVhNRTogT2JqZWN0IGlzIHBvc3NpYmx5ICd1bmRlZmluZWQnLlxuICAgIGZvcm1hdFBhdGggPSBmb3JtYXRQYXRoLnJlcGxhY2UocmUsIGZpbGVOYW1lR2VuZXJhdG9yW2tleV0oKSlcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRQYXRoXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SW5mbyhpbmZvOiBJSW1nSW5mbyk6IFByb21pc2U8e1xuICBib2R5PzogQnVmZmVyXG4gIGNvbnRlbnRUeXBlPzogc3RyaW5nXG4gIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xufT4ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBib2R5PzogQnVmZmVyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmdcbiAgICBjb250ZW50RW5jb2Rpbmc/OiBzdHJpbmdcbiAgfSA9IHt9XG5cbiAgaWYgKGluZm8uYmFzZTY0SW1hZ2UpIHtcbiAgICBjb25zdCBib2R5ID0gaW5mby5iYXNlNjRJbWFnZS5yZXBsYWNlKC9eZGF0YTpbL1xcd10rO2Jhc2U2NCwvLCAnJylcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBpbmZvLmJhc2U2NEltYWdlLm1hdGNoKC9bXjpdXFx3K1xcL1tcXHctK1xcZC5dKyg/PTt8LCkvKT8uWzBdXG4gICAgcmVzdWx0LmJvZHkgPSBCdWZmZXIuZnJvbShib2R5LCAnYmFzZTY0JylcbiAgICByZXN1bHQuY29udGVudEVuY29kaW5nID0gJ2Jhc2U2NCdcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5mby5leHRuYW1lKSB7XG4gICAgICByZXN1bHQuY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoaW5mby5leHRuYW1lKSFcbiAgICB9XG4gICAgcmVzdWx0LmJvZHkgPSBpbmZvLmJ1ZmZlclxuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gZGV0ZWN0IGZyb20gYnVmZmVyXG4gIGlmICghcmVzdWx0LmNvbnRlbnRUeXBlKSB7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBhd2FpdCBGaWxlVHlwZS5mcm9tQnVmZmVyKHJlc3VsdC5ib2R5ISlcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBmaWxlVHlwZT8ubWltZVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBmb3JtYXRIdHRwUHJveHlVUkwodXJsID0gJycpOiBzdHJpbmcge1xuICBpZiAoIXVybCkgcmV0dXJuICcnXG5cbiAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSkge1xuICAgIGNvbnN0IFtob3N0LCBwb3J0XSA9IHVybC5zcGxpdCgnOicpXG4gICAgcmV0dXJuIGBodHRwOi8vJHtob3N0LnJlcGxhY2UoJzEyNy4wLjAuMScsICdsb2NhbGhvc3QnKX06JHtwb3J0fWBcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IG5ldyBVUkwodXJsKVxuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWUucmVwbGFjZSgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcpfToke3BvcnR9YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3h5QWdlbnQoXG4gIHByb3h5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNzbEVuYWJsZWQ6IGJvb2xlYW4sXG4gIHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhblxuKTogSHR0cFByb3h5QWdlbnQgfCBIdHRwc1Byb3h5QWdlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBmb3JtYXRlZFByb3h5ID0gZm9ybWF0SHR0cFByb3h5VVJMKHByb3h5KVxuICBpZiAoIWZvcm1hdGVkUHJveHkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBBZ2VudCA9IHNzbEVuYWJsZWQgPyBIdHRwc1Byb3h5QWdlbnQgOiBIdHRwUHJveHlBZ2VudFxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICBrZWVwQWxpdmVNc2VjczogMTAwMCxcbiAgICBzY2hlZHVsaW5nOiAnbGlmbycgYXMgJ2xpZm8nIHwgJ2ZpZm8nIHwgdW5kZWZpbmVkLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZCxcbiAgICBwcm94eTogZm9ybWF0ZWRQcm94eVxuICB9XG5cbiAgcmV0dXJuIG5ldyBBZ2VudChvcHRpb25zKVxufVxuIiwiaW1wb3J0IHtcbiAgUzNDbGllbnRDb25maWcsXG4gIFMzQ2xpZW50LFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kT3V0cHV0XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMydcbmltcG9ydCB7IGdldFNpZ25lZFVybCB9IGZyb20gJ0Bhd3Mtc2RrL3MzLXJlcXVlc3QtcHJlc2lnbmVyJ1xuaW1wb3J0IHsgTm9kZUh0dHBIYW5kbGVyLCBOb2RlSHR0cEhhbmRsZXJPcHRpb25zIH0gZnJvbSAnQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlcidcblxuaW1wb3J0IHVybCBmcm9tICd1cmwnXG5pbXBvcnQgeyBIdHRwUHJveHlBZ2VudCwgSHR0cHNQcm94eUFnZW50IH0gZnJvbSAnaHBhZ2VudCdcbmltcG9ydCB7IElBd3NTM1BMaXN0VXNlckNvbmZpZywgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IGV4dHJhY3RJbmZvLCBnZXRQcm94eUFnZW50IH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBJVXBsb2FkUmVzdWx0IHtcbiAga2V5OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgaW1nVVJMOiBzdHJpbmdcbiAgdmVyc2lvbklkPzogc3RyaW5nXG4gIGVUYWc/OiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlUzNDbGllbnQob3B0czogSUF3c1MzUExpc3RVc2VyQ29uZmlnKTogUzNDbGllbnQge1xuICBsZXQgc3NsRW5hYmxlZCA9IHRydWVcbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IHVybC5VUkwob3B0cy5lbmRwb2ludCEpXG4gICAgc3NsRW5hYmxlZCA9IHUucHJvdG9jb2wgPT09ICdodHRwczonXG4gIH0gY2F0Y2gge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICB9XG5cbiAgY29uc3QgaHR0cEhhbmRsZXJPcHRzOiBOb2RlSHR0cEhhbmRsZXJPcHRpb25zID0ge31cbiAgaWYgKHNzbEVuYWJsZWQpIHtcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cHNBZ2VudCA9IGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgdHJ1ZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBzUHJveHlBZ2VudFxuICB9IGVsc2Uge1xuICAgIGh0dHBIYW5kbGVyT3B0cy5odHRwQWdlbnQgPSBnZXRQcm94eUFnZW50KG9wdHMucHJveHksIGZhbHNlLCBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA/PyBmYWxzZSkgYXMgSHR0cFByb3h5QWdlbnRcbiAgfVxuXG4gIGNvbnN0IGNsaWVudE9wdGlvbnM6IFMzQ2xpZW50Q29uZmlnID0ge1xuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24gfHwgJ2F1dG8nLFxuICAgIGVuZHBvaW50OiBvcHRzLmVuZHBvaW50IHx8IHVuZGVmaW5lZCxcbiAgICBjcmVkZW50aWFsczoge1xuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMuYWNjZXNzS2V5SUQsXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IG9wdHMuc2VjcmV0QWNjZXNzS2V5XG4gICAgfSxcbiAgICB0bHM6IHNzbEVuYWJsZWQsXG4gICAgZm9yY2VQYXRoU3R5bGU6IG9wdHMucGF0aFN0eWxlQWNjZXNzLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBuZXcgTm9kZUh0dHBIYW5kbGVyKGh0dHBIYW5kbGVyT3B0cylcbiAgfVxuXG4gIHJldHVybiBuZXcgUzNDbGllbnQoY2xpZW50T3B0aW9ucylcbn1cblxuaW50ZXJmYWNlIElDcmVhdGVVcGxvYWRUYXNrT3B0cyB7XG4gIGNsaWVudDogYW55XG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgaXRlbTogSUltZ0luZm9cbiAgYWNsOiBzdHJpbmdcbiAgdXJsUHJlZml4Pzogc3RyaW5nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFRhc2sob3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzKTogUHJvbWlzZTxJVXBsb2FkUmVzdWx0PiB7XG4gIGlmICghb3B0cy5pdGVtLmJ1ZmZlciAmJiAhb3B0cy5pdGVtLmJhc2U2NEltYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmRlZmluZWQgaW1hZ2UnKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgeyBib2R5LCBjb250ZW50VHlwZSwgY29udGVudEVuY29kaW5nIH0gPSBhd2FpdCBleHRyYWN0SW5mbyhvcHRzLml0ZW0pXG5cbiAgICBjb25zdCBjb21tYW5kID0gbmV3IFB1dE9iamVjdENvbW1hbmQoe1xuICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IG9wdHMucGF0aCxcbiAgICAgIEFDTDogb3B0cy5hY2wsXG4gICAgICBCb2R5OiBib2R5LFxuICAgICAgQ29udGVudFR5cGU6IGNvbnRlbnRUeXBlLFxuICAgICAgQ29udGVudEVuY29kaW5nOiBjb250ZW50RW5jb2RpbmdcbiAgICB9KVxuXG4gICAgY29uc3Qgb3V0cHV0OiBQdXRPYmplY3RDb21tYW5kT3V0cHV0ID0gYXdhaXQgb3B0cy5jbGllbnQuc2VuZChjb21tYW5kKVxuXG4gICAgbGV0IHVybDogc3RyaW5nXG4gICAgaWYgKCFvcHRzLnVybFByZWZpeCkge1xuICAgICAgdXJsID0gYXdhaXQgZ2V0RmlsZVVSTChvcHRzLCBvdXRwdXQuRVRhZyEsIG91dHB1dC5WZXJzaW9uSWQhKVxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSBgJHtvcHRzLnVybFByZWZpeH0vJHtvcHRzLnBhdGh9YFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBrZXk6IG9wdHMucGF0aCxcbiAgICAgIHVybCxcbiAgICAgIGltZ1VSTDogdXJsLFxuICAgICAgdmVyc2lvbklkOiBvdXRwdXQuVmVyc2lvbklkLFxuICAgICAgZVRhZzogb3V0cHV0LkVUYWdcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVVSTChvcHRzOiBJQ3JlYXRlVXBsb2FkVGFza09wdHMsIGVUYWc6IHN0cmluZywgdmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzaWduZWRVcmwgPSBhd2FpdCBnZXRTaWduZWRVcmwoXG4gICAgb3B0cy5jbGllbnQsXG4gICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xuICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IG9wdHMucGF0aCxcbiAgICAgIElmTWF0Y2g6IGVUYWcsXG4gICAgICBWZXJzaW9uSWQ6IHZlcnNpb25JZFxuICAgIH0pLFxuICAgIHsgZXhwaXJlc0luOiAzNjAwIH1cbiAgKVxuICBjb25zdCB1cmxPYmplY3QgPSBuZXcgdXJsLlVSTChzaWduZWRVcmwpXG4gIHVybE9iamVjdC5zZWFyY2ggPSAnJ1xuICByZXR1cm4gdXJsT2JqZWN0LmhyZWZcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjcmVhdGVTM0NsaWVudCxcbiAgY3JlYXRlVXBsb2FkVGFza1xufVxuIiwiaW1wb3J0IHVwbG9hZGVyIGZyb20gJy4vczMvdXBsb2FkZXInXG5cbmltcG9ydCB7IGZvcm1hdFBhdGggfSBmcm9tICcuL3MzL3V0aWxzJ1xuaW1wb3J0IHsgSUF3c1MzUExpc3RVc2VyQ29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5mdW5jdGlvbiBmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwoZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4oZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnOiBJQXdzUzNQTGlzdFVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuYXdzLXMzLXBsaXN0JylcbiAgaWYgKCF1c2VyQ29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGF3cyBzMyB1cGxvYWRlciBjb25maWdcIilcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPSBmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwodXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpXG4gICAgbGV0IHVybFByZWZpeCA9IHVzZXJDb25maWcudXJsUHJlZml4XG4gICAgaWYgKHVybFByZWZpeCkge1xuICAgICAgdXJsUHJlZml4ID0gdXJsUHJlZml4LnJlcGxhY2UoL1xcLz8kLywgJycpXG4gICAgICBpZiAodXNlckNvbmZpZy5wYXRoU3R5bGVBY2Nlc3MgJiYgIWRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkge1xuICAgICAgICB1cmxQcmVmaXggKz0gJy8nICsgdXNlckNvbmZpZy5idWNrZXROYW1lXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNsaWVudCA9IHVwbG9hZGVyLmNyZWF0ZVMzQ2xpZW50KHVzZXJDb25maWcpXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBjb25zdCB0YXNrID0gYXdhaXQgdXBsb2FkZXIuY3JlYXRlVXBsb2FkVGFzayh7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgYnVja2V0TmFtZTogdXNlckNvbmZpZy5idWNrZXROYW1lLFxuICAgICAgICBwYXRoOiBmb3JtYXRQYXRoKGltZywgdXNlckNvbmZpZy51cGxvYWRQYXRoKSxcbiAgICAgICAgaXRlbTogaW1nLFxuICAgICAgICBhY2w6IHVzZXJDb25maWcuYWNsIHx8ICdwdWJsaWMtcmVhZCcsXG4gICAgICAgIHVybFByZWZpeFxuICAgICAgfSlcbiAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICBpbWcuaW1nVXJsID0gdGFzay5pbWdVUkxcbiAgICAgIGltZy51cmwgPSB0YXNrLnVybFxuICAgIH1cblxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXG4gICAgICB0ZXh0OiAnJ1xuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgZGVmYXVsdENvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0ge1xuICAgIGFjY2Vzc0tleUlEOiAnJyxcbiAgICBzZWNyZXRBY2Nlc3NLZXk6ICcnLFxuICAgIGJ1Y2tldE5hbWU6ICcnLFxuICAgIHVwbG9hZFBhdGg6ICd7eWVhcn0ve21vbnRofS97bWQ1fS57ZXh0TmFtZX0nLFxuICAgIHBhdGhTdHlsZUFjY2VzczogZmFsc2UsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcbiAgICBhY2w6ICdwdWJsaWMtcmVhZCdcbiAgfVxuICBsZXQgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUF3c1MzUExpc3RVc2VyQ29uZmlnPigncGljQmVkLmF3cy1zMy1wbGlzdCcpIHx8IHt9XG4gIHVzZXJDb25maWcgPSB7IC4uLmRlZmF1bHRDb25maWcsIC4uLnVzZXJDb25maWcgfVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SUQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SUQsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0QWNjZXNzS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEFjY2Vzc0tleSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXROYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldE5hbWUsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXBsb2FkUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlZ2lvbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWdpb24sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUdJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT04nKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwcm94eScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXJsUHJlZml4JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybFByZWZpeCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aFN0eWxlQWNjZXNzJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzIHx8IGZhbHNlLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZWplY3RVbmF1dGhvcml6ZWQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWplY3RVbmF1dGhvcml6ZWQgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjbCcsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjbCB8fCAncHVibGljLXJlYWQnLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICAncHJpdmF0ZScsXG4gICAgICAgICdwdWJsaWMtcmVhZCcsXG4gICAgICAgICdwdWJsaWMtcmVhZC13cml0ZScsXG4gICAgICAgICdhdXRoZW50aWNhdGVkLXJlYWQnLFxuICAgICAgICAnYXdzLWV4ZWMtcmVhZCcsXG4gICAgICAgICdidWNrZXQtb3duZXItcmVhZCcsXG4gICAgICAgICdidWNrZXQtb3duZXItZnVsbC1jb250cm9sJ1xuICAgICAgXSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0wnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXNbJ2F3cy1zMy1wbGlzdCddLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJR2l0aHViQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhKU09OIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuZnVuY3Rpb24gYnVpbGRHaXRodWJBcGlVcmwocmVwbzogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGV4dHJhOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gIHJldHVybiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7ZmlsZU5hbWV9YCl9JHtleHRyYX1gXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcsIGRhdGE6IGFueSk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xuICBjb25zdCB7IHRva2VuLCByZXBvIH0gPSBvcHRpb25zXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gbG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgdXJsOiBidWlsZEdpdGh1YkFwaVVybChyZXBvLCBvcHRpb25zLnBhdGgsIGZpbGVOYW1lKSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgICAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGVcbiAgICB9LFxuICAgIGJvZHk6IGRhdGEsXG4gICAganNvbjogdHJ1ZVxuICB9IGFzIGNvbnN0XG59XG5cbmNvbnN0IGdldE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZyk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xuICBjb25zdCB7IHRva2VuLCByZXBvLCBicmFuY2ggfSA9IG9wdGlvbnNcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIHVybDogYnVpbGRHaXRodWJBcGlVcmwocmVwbywgb3B0aW9ucy5wYXRoLCBmaWxlTmFtZSwgYD9yZWY9JHticmFuY2h9YCksXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnXG4gICAgfSxcbiAgICBqc29uOiB0cnVlXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgZ2l0aHViT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKVxuICBpZiAoIWdpdGh1Yk9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgZ2l0aHViIGNvbmZpZ1wiKVxuXG4gIGNvbnN0IHVwbG9hZFBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogZ2l0aHViT3B0aW9ucy5wYXRoIH0pXG4gIGdpdGh1Yk9wdGlvbnMucGF0aCA9IHVwbG9hZFBhdGhcbiAgZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgPSAoZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0xpc3QnLFxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXG4gICAgICAgICAgY29udGVudDogYmFzZTY0SW1hZ2UsXG4gICAgICAgICAgcGF0aDogdXBsb2FkUGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgZ2l0aHViT3B0aW9ucywgZGF0YSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBib2R5OiB7XG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmxcbiAgICAgICAgICAgICAgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxuICAgICAgICAgICAgICA6IGJvZHkuY29udGVudC5kb3dubG9hZF91cmxcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIGlmIChlcnIuc3RhdHVzQ29kZSAhPT0gNDIyKSB0aHJvdyBlcnJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCByZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3QoZ2V0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMpKSkgYXMgYW55XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlcykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbWcuaGFzaCA9IHJlcy5zaGFcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBnaXRodWJPcHRpb25zLmN1c3RvbVVybFxuICAgICAgICAgICAgICA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgICAgICAgIDogcmVzLmRvd25sb2FkX3VybFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAncmVwbycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2JyYW5jaCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndG9rZW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuZ2l0aHViLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElJbWd1ckNvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+XG4gIGFjY2Vzc1Rva2VuID8gKGFjY2Vzc1Rva2VuLnN0YXJ0c1dpdGgoJ0JlYXJlcicpID8gYWNjZXNzVG9rZW4gOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCkgOiAnJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChcbiAgY3R4OiBJUGljR28sXG4gIG9wdGlvbnM6IElJbWd1ckNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgaW1nQmFzZTY0OiBzdHJpbmdcbik6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkIHx8ICcnXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGZvcm1hdEFjY2Vzc1Rva2VuKG9wdGlvbnMuYWNjZXNzVG9rZW4gfHwgJycpXG4gIGNvbnN0IGFsYnVtID0gb3B0aW9ucy5hbGJ1bSB8fCAnJ1xuICBsZXQgYXV0aG9yaXphdGlvblxuICBpZiAodXNlcm5hbWUgJiYgYWNjZXNzVG9rZW4pIHtcbiAgICBhdXRob3JpemF0aW9uID0gYWNjZXNzVG9rZW5cbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xuICAgIGF1dGhvcml6YXRpb24gPSBgQ2xpZW50LUlEICR7Y2xpZW50SWR9YFxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxuICB9XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICdodHRwczovL2FwaS5pbWd1ci5jb20vMy9pbWFnZScsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICBIb3N0OiAnYXBpLmltZ3VyLmNvbScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXG4gICAgICB0eXBlOiAnYmFzZTY0JyxcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXG4gICAgfVxuICB9XG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xuICAgIGxldCBpbml0UGFnZXMgPSAwXG4gICAgbGV0IHJlc1xuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IGdldEFsYnVtSGFzaE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGBodHRwczovL2FwaS5pbWd1ci5jb20vMy9hY2NvdW50LyR7dXNlcm5hbWV9L2FsYnVtcy8ke2luaXRQYWdlc31gLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxuICAgICAgICB9LFxuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGdldEFsYnVtSGFzaE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XG4gICAgICB9XG4gICAgICByZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3QoZ2V0QWxidW1IYXNoT3B0aW9ucykpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICB9XG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWxidW1MaXN0KSB7XG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBhbGJ1bSkge1xuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbml0UGFnZXMrK1xuICAgIH0gd2hpbGUgKHJlcy5ib2R5LmRhdGEubGVuZ3RoID4gMClcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucy5mb3JtRGF0YS5hbGJ1bSA9IGFsYnVtSGFzaFxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxuICB9XG4gIHJldHVybiByZXF1ZXN0T3B0aW9uc1xufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXG4gIGlmICghaW1ndXJPcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGltZ3VyIGNvbmZpZ1wiKVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnMoY3R4LCBpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXG4gICAgICB0ZXh0OiAnaHR0cDovL2RvY3MuaW1ndXIuY29tL2FwaS9lcnJuby8nXG4gICAgfSlcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdjbGllbnRJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2Vzc1Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhbGJ1bScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncHJveHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuaW1ndXIsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUxvY2FsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBsb2NhbENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJylcbiAgaWYgKCFsb2NhbENvbmZpZykgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgbG9jYWwgY29uZmlnIScpXG5cbiAgY29uc3QgdXBsb2FkUGF0aCA9IGxvY2FsQ29uZmlnLnBhdGggfHwgJydcbiAgY29uc3QgY3VzdG9tVXJsID0gKGxvY2FsQ29uZmlnLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICBjb25zdCB3ZWJQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgcGF0aDogbG9jYWxDb25maWcud2ViUGF0aD8ucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gIH0pXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICdsb2NhbCcpXG4gICAgICAgIGNvbnN0IGZpbGVJbWdUZW1wUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBjb25zdCBmaWxlVXBsb2FkUGF0aCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVVcGxvYWRQYXRoKSlcbiAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZUltZ1RlbXBQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlVXBsb2FkUGF0aCwgaW1hZ2UpXG4gICAgICAgIGZzLmNvcHlGaWxlU3luYyhmaWxlVXBsb2FkUGF0aCwgZmlsZUltZ1RlbXBQYXRoKVxuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGlmIChjdXN0b21VcmwpIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7d2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgaW1nLmhhc2ggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9sb2NhbC8ke2VuY29kZVBhdGgoaW1nLmZpbGVOYW1lKS5yZXBsYWNlKC9eXFwvLywgJycpfWBcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHVwbG9hZCBpbWFnZScpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3ZWJQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMubG9jYWwsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2hlbGxvZGszNC9waWNnby1wbHVnaW4tbGFua29uZ1xuLy8gTElDRU5TRTogTUlUXG5cbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcbmltcG9ydCB7IElMc2t5Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElNR1RZUEUge1xuICBpbWdVcmw/OiBzdHJpbmdcbiAgdHlwZT86IHN0cmluZ1xuICBrZXk/OiBzdHJpbmdcbiAgaWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVjJGT1JNREFUQSB7XG4gIGZpbGU6IHtcbiAgICB2YWx1ZTogQnVmZmVyXG4gICAgb3B0aW9uczoge1xuICAgICAgZmlsZW5hbWU6IHN0cmluZ1xuICAgIH1cbiAgfVxuICBzc2w6IHN0cmluZ1xuICBzdHJhdGVneV9pZD86IHN0cmluZ1xuICBhbGJ1bV9pZD86IHN0cmluZ1xuICBwZXJtaXNzaW9uPzogbnVtYmVyXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElMc2t5Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbWFnZTogQnVmZmVyKTogYW55ID0+IHtcbiAgbGV0IGhvc3QgPSBvcHRpb25zLmhvc3RcbiAgaG9zdCA9IGhvc3QucmVwbGFjZSgvXFwvJC8sICcnKVxuICBjb25zdCBpc1YyID0gb3B0aW9ucy52ZXJzaW9uID09PSAnVjInXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlblxuXG4gIGNvbnN0IHYxSGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxuICAgIENvbm5lY3Rpb246ICdrZWVwLWFsaXZlJyxcbiAgICB0b2tlbjogdG9rZW4gfHwgdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgdjFGb3JtRGF0YSA9IHtcbiAgICBpbWFnZToge1xuICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXG4gICAgICB9XG4gICAgfSxcbiAgICBzc2w6ICd0cnVlJ1xuICB9XG5cbiAgY29uc3QgdjJIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxuICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIEF1dGhvcml6YXRpb246IHRva2VuIHx8IHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IHN0cmF0ZWd5SWQgPSBvcHRpb25zLnN0cmF0ZWd5SWRcbiAgY29uc3QgYWxidW1JZCA9IG9wdGlvbnMuYWxidW1JZFxuICBsZXQgcGVybWlzc2lvbjogYW55ID0gb3B0aW9ucy5wZXJtaXNzaW9uLnZhbHVlXG4gIGlmIChwZXJtaXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBwZXJtaXNzaW9uID0gb3B0aW9ucy5wZXJtaXNzaW9uXG4gIH1cbiAgY29uc3QgdjJGb3JtRGF0YTogSVYyRk9STURBVEEgPSB7XG4gICAgZmlsZToge1xuICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXG4gICAgICB9XG4gICAgfSxcbiAgICBzc2w6ICd0cnVlJyxcbiAgICBzdHJhdGVneV9pZDogc3RyYXRlZ3lJZCxcbiAgICBhbGJ1bV9pZDogYWxidW1JZCxcbiAgICBwZXJtaXNzaW9uXG4gIH1cbiAgaWYgKCFzdHJhdGVneUlkKSB7XG4gICAgZGVsZXRlIHYyRm9ybURhdGEuc3RyYXRlZ3lfaWRcbiAgfVxuICBpZiAoIWFsYnVtSWQpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5hbGJ1bV9pZFxuICB9XG4gIGlmICghKHBlcm1pc3Npb24gPT09IDAgfHwgcGVybWlzc2lvbiA9PT0gMSkpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5wZXJtaXNzaW9uXG4gIH1cblxuICBjb25zdCByZXF1ZXN0QWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGlzVjIgPyBgJHtob3N0fS9hcGkvdjEvdXBsb2FkYCA6IGAke2hvc3R9L2FwaS91cGxvYWRgLFxuICAgIGFnZW50OiByZXF1ZXN0QWdlbnQsXG4gICAgaGVhZGVyczogaXNWMiA/IHYySGVhZGVycyA6IHYxSGVhZGVycyxcbiAgICBmb3JtRGF0YTogaXNWMiA/IHYyRm9ybURhdGEgOiB2MUZvcm1EYXRhXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgbHNreU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpXG4gIGlmICghbHNreU9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgbHNreSB1cGxvYWRlciBjb25maWdcIilcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlciFcbiAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgIH1cbiAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMobHNreU9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXG4gICAgbGV0IGJvZHkgPSAoYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZykpIGFzIGFueVxuICAgIGJvZHkgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keVxuICAgIGNvbnN0IGlzVjIgPSBsc2t5T3B0aW9ucy52ZXJzaW9uID09PSAnVjInXG4gICAgY29uc3QgY29uZGl0aW9uID0gaXNWMiA/IGJvZHkuc3RhdHVzID09PSB0cnVlIDogYm9keS5jb2RlID09PSAyMDBcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgaW1nLmltZ1VybCA9IGlzVjIgPyBib2R5LmRhdGEubGlua3MudXJsIDogYm9keS5kYXRhLnVybFxuICAgICAgaWYgKGlzVjIpIHtcbiAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEua2V5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiAndXBsb2FkIGZhaWxlZCcsXG4gICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxuICAgICAgfSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxza3lDb25maWc+KCdwaWNCZWQubHNreXBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy52ZXJzaW9uIHx8ICdWMScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04nKVxuICAgICAgfSxcbiAgICAgIGNob2ljZXM6IFsnVjEnLCAnVjInXSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0cmF0ZWd5SWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3RyYXRlZ3lJZCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWxidW1JZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbGJ1bUlkLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9BTEJVTV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwZXJtaXNzaW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGVybWlzc2lvbiB8fCAncHJpdmF0ZShkZWZhdWx0KScsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHJpdmF0ZShkZWZhdWx0KScsXG4gICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwdWJsaWMnLFxuICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT04nKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMubHNreXBsaXN0LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCB7IElQaWNMaXN0Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElQaWNMaXN0Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcbiAgY29uc3QgeyBob3N0ID0gJzEyNy4wLjAuMScsIHBvcnQgPSAnJywgcGljYmVkID0gJycsIGNvbmZpZ05hbWUgPSAnRGVmYXVsdCcsIHNlcnZlcktleSA9ICcnIH0gPSBvcHRpb25zXG4gIGNvbnN0IGlzSXAgPSBob3N0Lm1hdGNoKC8oXFxkKylcXC4oXFxkKylcXC4oXFxkKylcXC4oXFxkKykvKVxuICBjb25zdCBwcm90b2NvbCA9IGhvc3Quc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSA/ICdodHRwczovLycgOiAnaHR0cDovLydcbiAgY29uc3QgZm9ybWF0SG9zdCA9IGhvc3QucmVwbGFjZSgvKGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcLykvLCAnJylcbiAgY29uc3QgZGVmYXVsdFBvcnQgPSBwb3J0IHx8ICczNjY3NydcbiAgY29uc3QgZW5kcG9pbnQgPSBpc0lwXG4gICAgPyBgJHtwcm90b2NvbH0ke2Zvcm1hdEhvc3R9OiR7ZGVmYXVsdFBvcnR9YFxuICAgIDogYCR7cHJvdG9jb2x9JHtmb3JtYXRIb3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gXG4gIGNvbnN0IHVybCA9IGAke2VuZHBvaW50fS91cGxvYWQ/Y29uZmlnTmFtZT0ke2NvbmZpZ05hbWV9JHtwaWNiZWQgPyBgJnBpY2JlZD0ke3BpY2JlZH1gIDogJyd9JHtzZXJ2ZXJLZXkgPyBgJmtleT0ke3NlcnZlcktleX1gIDogJyd9YFxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgfSxcbiAgICBmb3JtRGF0YToge1xuICAgICAgZmlsZToge1xuICAgICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgY29udGVudFR5cGU6IGxvb2t1cChmaWxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgcGljbGlzdE9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKVxuICBpZiAoIXBpY2xpc3RPcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBQaWNMaXN0IGNvbmZpZ1wiKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocGljbGlzdE9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4XG4gICAgICAgICAgLnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5Py5zdWNjZXNzKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IHJlcy5ib2R5LnJlc3VsdFswXVxuICAgICAgICAgIGltZy5mdWxsUmVzdWx0ID0gcmVzLmJvZHkuZnVsbFJlc3VsdCA/IHJlcy5ib2R5LmZ1bGxSZXN1bHRbMF0gOiAnJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9ydCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAzNjY3NyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BpY2JlZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BJQ0JFRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUElDQkVEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBpY2JlZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2NvbmZpZ05hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9DT05GSUdOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9DT05GSUdOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNvbmZpZ05hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZXJ2ZXJLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9LRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0tFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZXJ2ZXJLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnBpY2xpc3QsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHFpbml1IGZyb20gJ3Fpbml1J1xuaW1wb3J0IHsgSVBsdWdpbkNvbmZpZywgSVFpbml1Q29uZmlnLCBJUGljR28sIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzIH0gZnJvbSAnLi91dGlscydcblxuZnVuY3Rpb24gcG9zdE9wdGlvbnMob3B0aW9uczogSVFpbml1Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBpbWdCYXNlNjQ6IHN0cmluZyk6IElPbGRSZXFPcHRpb25zIHtcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcbiAgY29uc3QgYmFzZTY0RmlsZU5hbWUgPSBCdWZmZXIuZnJvbShwYXRoICsgZmlsZU5hbWUsICd1dGYtOCcpXG4gICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogYGh0dHA6Ly91cGxvYWQke2FyZWF9LnFpbml1cC5jb20vcHV0YjY0Ly0xL2tleS8ke2Jhc2U2NEZpbGVOYW1lfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYFVwVG9rZW4gJHt0b2tlbn1gLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICB9LFxuICAgIGJvZHk6IGltZ0Jhc2U2NFxuICB9XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEFyZWEoYXJlYTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW4ocWluaXVPcHRpb25zOiBhbnkpOiBzdHJpbmcge1xuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XG4gIGNvbnN0IHNlY3JldEtleSA9IHFpbml1T3B0aW9ucy5zZWNyZXRLZXlcbiAgY29uc3QgbWFjID0gbmV3IHFpbml1LmF1dGguZGlnZXN0Lk1hYyhhY2Nlc3NLZXksIHNlY3JldEtleSlcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBzY29wZTogcWluaXVPcHRpb25zLmJ1Y2tldFxuICB9XG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcbiAgcmV0dXJuIHB1dFBvbGljeS51cGxvYWRUb2tlbihtYWMpXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHFpbml1T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JylcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIHFpbml1IGNvbmZpZ1wiKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhxaW5pdU9wdGlvbnMsIGltZy5maWxlTmFtZSwgZ2V0VG9rZW4ocWluaXVPcHRpb25zKSwgYmFzZTY0SW1hZ2UpXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgaWYgKGJvZHk/LmtleSkge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBxaW5pdU9wdGlvbnMudXJsXG4gICAgICAgICAgY29uc3QgdXJsT3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zIHx8ICcnXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7Ym9keS5rZXkgYXMgc3RyaW5nfSR7dXJsT3B0aW9uc31gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgICBib2R5OiBib2R5Lm1zZ1xuICAgICAgICAgIH0pXG4gICAgICAgICAgY3R4LmxvZy5lcnJvcigncWluaXUgZXJyb3InLCBib2R5KVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGlmIChlcnIubWVzc2FnZSAhPT0gJ1VwbG9hZCBmYWlsZWQnKSB7XG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXG4gICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlLmJvZHlcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVycm9yLmVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FyZWEnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy5xaW5pdSwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBOb2RlU1NILCBDb25maWcgfSBmcm9tICdub2RlLXNzaC1uby1jcHUtZmVhdHVyZXMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNsYXNzIFNTSENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBTU0hDbGllbnRcbiAgcHJpdmF0ZSBjbGllbnQgPSBuZXcgTm9kZVNTSCgpXG4gIGlzQ29ubmVjdGVkID0gZmFsc2VcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFNTSENsaWVudCB7XG4gICAgaWYgKCFTU0hDbGllbnQuaW5zdGFuY2UpIHtcbiAgICAgIFNTSENsaWVudC5pbnN0YW5jZSA9IG5ldyBTU0hDbGllbnQoKVxuICAgIH1cbiAgICByZXR1cm4gU1NIQ2xpZW50Lmluc3RhbmNlXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBwcml2YXRlS2V5LCBwYXNzcGhyYXNlIH0gPSBjb25maWdcbiAgICBjb25zdCBsb2dpbkluZm86IENvbmZpZyA9IHByaXZhdGVLZXlcbiAgICAgID8ge1xuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgIHByaXZhdGVLZXlQYXRoOiBwcml2YXRlS2V5LFxuICAgICAgICAgIHBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfHwgdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIDogeyB1c2VybmFtZSwgcGFzc3dvcmQgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5jb25uZWN0KHtcbiAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgcG9ydDogTnVtYmVyKHBvcnQpIHx8IDIyLFxuICAgICAgICAuLi5sb2dpbkluZm9cbiAgICAgIH0pXG4gICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGxvYWQobG9jYWw6IHN0cmluZywgcmVtb3RlOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0ggY2xpZW50IGlzIG5vdCBjb25uZWN0ZWQnKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmVtb3RlID0gU1NIQ2xpZW50LmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXG4gICAgICBhd2FpdCB0aGlzLm1rZGlyKHBhdGguZGlybmFtZShyZW1vdGUpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgY29uZmlnKVxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucHV0RmlsZShsb2NhbCwgcmVtb3RlKVxuICAgICAgY29uc3QgZmlsZU1vZGUgPSBjb25maWcuZmlsZU1vZGUgfHwgJzA2NDQnXG4gICAgICBpZiAoZmlsZU1vZGUgIT09ICcwNjQ0Jykge1xuICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoYGNobW9kICR7ZmlsZU1vZGV9IFwiJHtyZW1vdGV9XCJgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWtkaXIoZGlyUGF0aDogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2Z0cCBjbGllbnQgaXMgbm90IGNvbm5lY3RlZCcpXG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdG9yeU1vZGUgPSBjb25maWcuZGlyTW9kZSB8fCAnMDc1NSdcbiAgICBpZiAoZGlyZWN0b3J5TW9kZSAhPT0gJzA3NTUnKSB7XG4gICAgICBjb25zdCBkaXJzID0gZGlyUGF0aC5zcGxpdCgnLycpXG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJ1xuICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICBpZiAoZGlyKSB7XG4gICAgICAgICAgY3VycmVudFBhdGggKz0gYC8ke2Rpcn1gXG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYG1rZGlyIFwiJHtjdXJyZW50UGF0aH1cIiAmJiBjaG1vZCAke2RpcmVjdG9yeU1vZGV9IFwiJHtjdXJyZW50UGF0aH1cImBcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGBjZCAvICYmIG1rZGlyIC1wIFwiJHtkaXJQYXRofVwiYFxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hvd24ocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZW1vdGUgPSBTU0hDbGllbnQuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcbiAgICBjb25zdCBbX3VzZXIsIF9ncm91cF0gPSBncm91cCA/IFt1c2VyLCBncm91cF0gOiB1c2VyLmluY2x1ZGVzKCc6JykgPyB1c2VyLnNwbGl0KCc6JykgOiBbdXNlciwgdXNlcl1cblxuICAgIGF3YWl0IHRoaXMuZXhlYyhgY2hvd24gJHtfdXNlcn06JHtfZ3JvdXB9IFwiJHtyZW1vdGV9XCJgKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjKHNjcmlwdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHRoaXMuY2xpZW50LmV4ZWNDb21tYW5kKHNjcmlwdClcbiAgICByZXR1cm4gZXhlY1Jlc3VsdC5jb2RlID09PSAwXG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbGllbnQuZGlzcG9zZSgpXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU1NIQ2xpZW50XG4iLCJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYywgbW92ZVN5bmMsIHJlbW92ZVN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNmdHBQbGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgU1NIQ2xpZW50IGZyb20gJy4uLy4uL3V0aWxzL3NzaENsaWVudCdcbmltcG9ydCB7IGJ1aWxkSW5VcGxvYWRlck5hbWVzLCBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3Qgc2Z0cHBsaXN0Q29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpXG4gIGlmICghc2Z0cHBsaXN0Q29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc2Z0cHBsaXN0IGNvbmZpZyEnKVxuICB9XG4gIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gTnVtYmVyKHNmdHBwbGlzdENvbmZpZy5wb3J0KSB8fCAyMlxuICBpZiAoc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPCAwIHx8IHNmdHBwbGlzdENvbmZpZy5wb3J0ID4gNjU1MzUpIHtcbiAgICBzZnRwcGxpc3RDb25maWcucG9ydCA9IDIyXG4gIH1cbiAgc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCxcbiAgICByb290VG9FbXB0eTogZmFsc2VcbiAgfSlcbiAgY29uc3Qgd2ViUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3NmdHBwbGlzdCcpXG4gICAgICAgIGVuc3VyZURpclN5bmMoaW1nVGVtcFBhdGgpXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZSh0ZW1wRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgaW1hZ2UpXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFNTSENsaWVudC5nZXRJbnN0YW5jZSgpXG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KHNmdHBwbGlzdENvbmZpZylcbiAgICAgICAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGguam9pbihgLyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9YC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJyksIGltZy5maWxlTmFtZSlcbiAgICAgICAgYXdhaXQgY2xpZW50LnVwbG9hZCh0ZW1wRmlsZVBhdGgsIHJlbW90ZVBhdGgsIHNmdHBwbGlzdENvbmZpZylcbiAgICAgICAgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyICYmIChhd2FpdCBjbGllbnQuY2hvd24ocmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyKSlcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBjb25zdCBiYXNlVXJsID0gc2Z0cHBsaXN0Q29uZmlnLmN1c3RvbVVybCB8fCBzZnRwcGxpc3RDb25maWcuaG9zdFxuICAgICAgICBpZiAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgpIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGggPT09ICcvJyA/ICcnIDogd2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGltZ1RlbXBGaWxlUGF0aCkpXG4gICAgICAgIHJlbW92ZVN5bmMoaW1nVGVtcEZpbGVQYXRoKVxuICAgICAgICBtb3ZlU3luYyh0ZW1wRmlsZVBhdGgsIHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKSlcbiAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvc2Z0cHBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxuICAgICAgICBjbGllbnQuY2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9ydCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3ByaXZhdGVLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcml2YXRlS2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3BocmFzZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cGxvYWRQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZmlsZVVzZXInLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlVXNlciB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2ZpbGVNb2RlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZmlsZU1vZGUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuc2Z0cHBsaXN0LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTbW1zQ29uZmlnLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcyB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xuICBsZXQgZG9tYWluID0gYmFja3VwRG9tYWluIHx8ICdzbS5tcydcbiAgZG9tYWluID0gZG9tYWluLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGBodHRwczovLyR7ZG9tYWlufS9hcGkvdjIvdXBsb2FkYCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgICBBdXRob3JpemF0aW9uOiBhcGlUb2tlblxuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIHNtZmlsZToge1xuICAgICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNzbDogJ3RydWUnXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxuICBpZiAoIXNtbXNDb25maWcpIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXG5cbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgfVxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgaW1hZ2UsIHNtbXNDb25maWc/LnRva2VuLCBzbW1zQ29uZmlnPy5iYWNrdXBEb21haW4pXG5cbiAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZylcbiAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgIGlmIChib2R5LmNvZGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEudXJsXG4gICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmhhc2hcbiAgICAgIH0gZWxzZSBpZiAoYm9keS5jb2RlID09PSAnaW1hZ2VfcmVwZWF0ZWQnICYmIHR5cGVvZiBib2R5LmltYWdlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcbiAgICAgICAgY29uc3QgdXBsb2FkSGlzdG9yeSA9IGF3YWl0IGF4aW9zLmdldCgnaHR0cHM6Ly9zbS5tcy9hcGkvdjIvdXBsb2FkX2hpc3RvcnknLCB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogc21tc0NvbmZpZy50b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHVwbG9hZEhpc3RvcnkuZGF0YS5jb2RlID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICBjb25zdCBpbWFnZXMgPSB1cGxvYWRIaXN0b3J5LmRhdGEuZGF0YVxuICAgICAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgaW1hZ2VzKSB7XG4gICAgICAgICAgICBpZiAoaW1hZ2UudXJsID09PSBib2R5LmltYWdlcykge1xuICAgICAgICAgICAgICBpbWcuaGFzaCA9IGltYWdlLmhhc2hcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBib2R5Lm1lc3NhZ2VcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2JhY2t1cERvbWFpbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJhY2t1cERvbWFpbiB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoYnVpbGRJblVwbG9hZGVyTmFtZXMuc21tcywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVRjeXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaWduYXR1cmUge1xuICBzaWduYXR1cmU6IHN0cmluZ1xuICBhcHBJZDogc3RyaW5nXG4gIGJ1Y2tldDogc3RyaW5nXG4gIHNpZ25UaW1lOiBzdHJpbmdcbn1cblxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogSVNpZ25hdHVyZSA9PiB7XG4gIGNvbnN0IHNlY3JldElkID0gb3B0aW9ucy5zZWNyZXRJZFxuICBjb25zdCBzZWNyZXRLZXkgPSBvcHRpb25zLnNlY3JldEtleVxuICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWRcbiAgY29uc3QgYnVja2V0ID0gb3B0aW9ucy5idWNrZXRcbiAgbGV0IHNpZ25hdHVyZVxuICBsZXQgc2lnblRpbWU6IHN0cmluZyA9ICcnXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xuICAgIGNvbnN0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwKVxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgLSAxXG4gICAgY29uc3QgZXhwaXJlZCA9IGN1cnJlbnQgKyAzNjAwXG5cbiAgICBjb25zdCBtdWx0aVNpZ25hdHVyZSA9IGBhPSR7YXBwSWR9JmI9JHtidWNrZXR9Jms9JHtzZWNyZXRJZH0mZT0ke2V4cGlyZWR9JnQ9JHtjdXJyZW50fSZyPSR7cmFuZG9tfSZmPWBcblxuICAgIGNvbnN0IHNpZ25IZXhLZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKG11bHRpU2lnbmF0dXJlKS5kaWdlc3QoKVxuICAgIGNvbnN0IHRlbXBTdHJpbmcgPSBCdWZmZXIuY29uY2F0KFtzaWduSGV4S2V5LCBCdWZmZXIuZnJvbShtdWx0aVNpZ25hdHVyZSldKVxuICAgIHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlbXBTdHJpbmcpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICB9IGVsc2Uge1xuICAgIC8vIGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNzc3OCNzaWduYXR1cmVcbiAgICBjb25zdCB0b2RheSA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxuICAgIGNvbnN0IHRvbW9ycm93ID0gdG9kYXkgKyA4NjQwMFxuICAgIHNpZ25UaW1lID0gYCR7dG9kYXl9OyR7dG9tb3Jyb3d9YFxuICAgIGNvbnN0IHNpZ25LZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKHNpZ25UaW1lKS5kaWdlc3QoJ2hleCcpXG4gICAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8gb3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcbiAgICBjb25zdCBodHRwU3RyaW5nID0gYHB1dFxcbi8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfVxcblxcbmhvc3Q9JHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH1cXG5gXG4gICAgY29uc3Qgc2hhMWVkSHR0cFN0cmluZyA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGh0dHBTdHJpbmcpLmRpZ2VzdCgnaGV4JylcbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBgc2hhMVxcbiR7c2lnblRpbWV9XFxuJHtzaGExZWRIdHRwU3RyaW5nfVxcbmBcbiAgICBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNpZ25LZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24pLmRpZ2VzdCgnaGV4JylcbiAgfVxuICByZXR1cm4ge1xuICAgIHNpZ25hdHVyZSxcbiAgICBhcHBJZCxcbiAgICBidWNrZXQsXG4gICAgc2lnblRpbWVcbiAgfVxufVxuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChcbiAgb3B0aW9uczogSVRjeXVuQ29uZmlnLFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBzaWduYXR1cmU6IElTaWduYXR1cmUsXG4gIGltYWdlOiBCdWZmZXIsXG4gIHZlcnNpb246IHN0cmluZ1xuKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcbiAgY29uc3QgYXJlYSA9IG9wdGlvbnMuYXJlYVxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xuICAgIHJldHVybiB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogYGh0dHA6Ly8ke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tL2ZpbGVzL3YyLyR7c2lnbmF0dXJlLmFwcElkfS8ke3NpZ25hdHVyZS5idWNrZXR9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZmlsZU5hbWV9YCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgSG9zdDogYCR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb21gLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUuc2lnbmF0dXJlLFxuICAgICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgICAnVXNlci1BZ2VudCc6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcbiAgICAgIH0sXG4gICAgICBmb3JtRGF0YToge1xuICAgICAgICBvcDogJ3VwbG9hZCcsXG4gICAgICAgIGZpbGVjb250ZW50OiBpbWFnZVxuICAgICAgfSxcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICB1cmw6IGBodHRwOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH1gLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxuICAgICAgICBjb250ZW50VHlwZTogbG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXG4gICAgICB9LFxuICAgICAgYm9keTogaW1hZ2UsXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxuICBpZiAoIXRjWXVuT3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWdcIilcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IGN1c3RvbVVybCA9ICh0Y1l1bk9wdGlvbnMuY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gICAgY29uc3QgcGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgICAgcGF0aDogdGNZdW5PcHRpb25zLnBhdGhcbiAgICB9KVxuICAgIHRjWXVuT3B0aW9ucy5wYXRoID0gcGF0aFxuICAgIGNvbnN0IHVzZVY0ID0gIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlLCBjdHguR1VJX1ZFUlNJT04gfHwgY3R4LlZFUlNJT04pXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eFxuICAgICAgICAgIC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXG4gICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICBtc2c6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0FVVEhfRkFJTEVEJyksXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBsZXQgYm9keVxuICAgICAgICBpZiAodXNlVjQgJiYgdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IHJlc1xuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xuICAgICAgICAgIGlmIChib2R5Py5ib2R5Py5lcnIpIHtcbiAgICAgICAgICAgIHRocm93IGJvZHkuYm9keS5lcnJcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHk/LmJvZHk/Lm1zZyB8fCBib2R5Py5ib2R5Py5tZXNzYWdlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25VcmwgPSB0Y1l1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xuICAgICAgICBjb25zdCBzbGltID0gdGNZdW5PcHRpb25zLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF0Y1l1bk9wdGlvbnMuc2xpbVxuICAgICAgICBpZiAodXNlVjQgJiYgYm9keS5tZXNzYWdlID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtib2R5LmRhdGEuc291cmNlX3VybCBhcyBzdHJpbmd9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghdXNlVjQgJiYgYm9keSAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgPyB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7dGNZdW5PcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke3RjWXVuT3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5ib2R5Lm1zZylcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2xpbSkge1xuICAgICAgICAgIGlmIChvcHRpb25VcmwpIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgKz0gJyZpbWFnZVNsaW0nXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgKz0gJz9pbWFnZVNsaW0nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBpZiAoIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShlcnIuZXJyb3IpXG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICAgIGNvZGU6IGJvZHkuY29kZSBhcyBzdHJpbmdcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0ZXh0OiAnaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NDMyJ1xuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAndmVyc2lvbicsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJylcbiAgICAgIH0sXG4gICAgICBhbGlhczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJyksXG4gICAgICBjaG9pY2VzOiBbJ3Y0JywgJ3Y1J10sXG4gICAgICBkZWZhdWx0OiAndjUnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0SWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldElkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVknKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhcHBJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXBwSWQgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhcmVhJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzbGltJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2xpbSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhIXVzZXJDb25maWcuc2xpbSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IGNvbmZpcm1UZXh0KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0nKVxuICAgICAgfSxcbiAgICAgIGdldCBjYW5jZWxUZXh0KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IHRpcHMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQJylcbiAgICAgIH1cbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLnRjeXVuLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IGxvb2t1cCB9IGZyb20gJ21pbWUtdHlwZXMnXG5cbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgc2FmZVBhcnNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xuXG5pbXBvcnQgeyBidWlsZEluVXBsb2FkZXJOYW1lcywgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElVcHl1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXG4gIGNvbnN0IG9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvclxuICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcbiAgY29uc3QgbWQ1UGFzc3dvcmQgPSBNRDUocGFzc3dvcmQpXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMuYnVja2V0fS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ZpbGVOYW1lfWApfWBcbiAgY29uc3QgdmFsdWUgPSBgUFVUJiR7dXJpfSYke2RhdGV9YFxuICBjb25zdCBzaWduID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBtZDVQYXNzd29yZCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2Jhc2U2NCcpXG4gIHJldHVybiBgVVBZVU4gJHtvcGVyYXRvcn06JHtzaWdufWBcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IElVcHl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gIGltYWdlOiBCdWZmZXJcbik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGhcbiAgbGV0IGVuZHBvaW50ID0gKG9wdGlvbnMuZW5kcG9pbnQgfHwgJ2h0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScpLnJlcGxhY2UoL1xcLyskL2csICcnKVxuICBpZiAoIWVuZHBvaW50LnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgIGVuZHBvaW50ID0gYGh0dHBzOi8vJHtlbmRwb2ludH1gXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQVVQnLFxuICAgIHVybDogYCR7ZW5kcG9pbnR9LyR7YnVja2V0fS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ZpbGVOYW1lfWApfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICB9LFxuICAgIGJvZHk6IGltYWdlLFxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gTUQ1KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgnaGV4Jylcbn1cblxuY29uc3QgZ2V0QW50aUxlZWNoUGFyYW0gPSAoXG4gIGFudGlMZWVjaFRva2VuOiBzdHJpbmcsXG4gIGV4cGlyZVRpbWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogSVVweXVuQ29uZmlnLFxuICBmaWxlTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCB1cmkgPSBgLyR7b3B0aW9ucy5wYXRoIHx8ICcnfSR7ZmlsZU5hbWV9YC5yZXBsYWNlKC8lMkYvZywgJy8nKS5yZXBsYWNlKC9eXFwvKy9nLCAnLycpXG4gIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxuICBjb25zdCBleHBpcmUgPSBleHBpcmVUaW1lID8gbm93ICsgcGFyc2VJbnQoZXhwaXJlVGltZS50b1N0cmluZygpLCAxMCkgOiBub3cgKyAxODAwXG4gIGNvbnN0IHNpZ24gPSBNRDUoYCR7YW50aUxlZWNoVG9rZW59JiR7ZXhwaXJlfSYke3VyaX1gKVxuICBjb25zdCB1cHQgPSBgJHtzaWduLnN1YnN0cmluZygxMiwgMjApfSR7ZXhwaXJlfWBcbiAgcmV0dXJuIGBfdXB0PSR7dXB0fWBcbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgdXB5dW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKVxuICBpZiAoIXVweXVuT3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCB1cFl1biBjb25maWdcIilcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IHBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogdXB5dW5PcHRpb25zLnBhdGggfSlcbiAgICB1cHl1bk9wdGlvbnMucGF0aCA9IHBhdGhcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxuICAgICAgICBjb25zdCBzdWZmaXggPSB1cHl1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcbiAgICAgICAgICBpZiAodXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCB1cHQgPSBnZXRBbnRpTGVlY2hQYXJhbShcbiAgICAgICAgICAgICAgdXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuLFxuICAgICAgICAgICAgICB1cHl1bk9wdGlvbnMuZXhwaXJlVGltZSxcbiAgICAgICAgICAgICAgdXB5dW5PcHRpb25zLFxuICAgICAgICAgICAgICBpbWcuZmlsZU5hbWVcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBpbWcuaW1nVXJsLmluY2x1ZGVzKCc/JykgPyBgJHtpbWcuaW1nVXJsfSYke3VwdH1gIDogYCR7aW1nLmltZ1VybH0/JHt1cHR9YFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgZmFpbGVkJykge1xuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keSA9IHNhZmVQYXJzZTx7IGNvZGU6IHN0cmluZyB9PihlcnIuZXJyb3IpXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5LmNvZGUgOiBib2R5XG4gICAgICAgIH0pLFxuICAgICAgICB0ZXh0OiAnaHR0cDovL2RvY3MudXB5dW4uY29tL2FwaS9lcnJuby8nXG4gICAgICB9KVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYnVja2V0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29wZXJhdG9yJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1InKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3BlcmF0b3IgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYW50aUxlZWNoVG9rZW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYW50aUxlZWNoVG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdleHBpcmVUaW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmV4cGlyZVRpbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdlbmRwb2ludCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcihidWlsZEluVXBsb2FkZXJOYW1lcy51cHl1biwge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IFdlYkRBVkNsaWVudCwgV2ViREFWQ2xpZW50T3B0aW9ucywgQXV0aFR5cGUsIGNyZWF0ZUNsaWVudCB9IGZyb20gJ3dlYmRhdidcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJV2ViZGF2UGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgYnVpbGRJblVwbG9hZGVyTmFtZXMsIGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qgd2ViZGF2cGxpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJV2ViZGF2UGxpc3RDb25maWc+KCdwaWNCZWQud2ViZGF2cGxpc3QnKVxuICBpZiAoIXdlYmRhdnBsaXN0T3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCB3ZWJkYXZwbGlzdCBjb25maWdcIilcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL3xcXC8rJC9nLCAnJylcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSAod2ViZGF2cGxpc3RPcHRpb25zLnNzbEVuYWJsZWQgPyAnaHR0cHM6Ly8nIDogJ2h0dHA6Ly8nKSArIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0XG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgcGF0aDogd2ViZGF2cGxpc3RPcHRpb25zLnBhdGgsXG4gICAgcm9vdFRvRW1wdHk6IGZhbHNlXG4gIH0pXG4gIGNvbnN0IGF1dGhUeXBlID0gd2ViZGF2cGxpc3RPcHRpb25zLmF1dGhUeXBlIHx8ICdiYXNpYydcbiAgY29uc3Qgd2VicGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHdlYmRhdnBsaXN0T3B0aW9ucy53ZWJwYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICBjb25zdCBzdWZmaXggPSB3ZWJkYXZwbGlzdE9wdGlvbnMub3B0aW9ucyB8fCAnJ1xuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgY29uc3QgY3VzdG9tVXJsID0gd2ViZGF2cGxpc3RPcHRpb25zLmN1c3RvbVVybFxuICAgIGNvbnN0IHVwbG9hZFBhdGggPSB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnM6IFdlYkRBVkNsaWVudE9wdGlvbnMgPSB7XG4gICAgICAgICAgdXNlcm5hbWU6IHdlYmRhdnBsaXN0T3B0aW9ucy51c2VybmFtZSxcbiAgICAgICAgICBwYXNzd29yZDogd2ViZGF2cGxpc3RPcHRpb25zLnBhc3N3b3JkLFxuICAgICAgICAgIG1heEJvZHlMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjQsXG4gICAgICAgICAgbWF4Q29udGVudExlbmd0aDogNCAqIDEwMjQgKiAxMDI0ICogMTAyNFxuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRoVHlwZSA9PT0gJ2RpZ2VzdCcpIHtcbiAgICAgICAgICBjbGllbnRPcHRpb25zLmF1dGhUeXBlID0gQXV0aFR5cGUuRGlnZXN0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xpZW50OiBXZWJEQVZDbGllbnQgPSBjcmVhdGVDbGllbnQod2ViZGF2cGxpc3RPcHRpb25zLmhvc3QsIGNsaWVudE9wdGlvbnMpXG4gICAgICAgIGNvbnN0IHBhdGhUb0NyZWF0ZSA9IHVwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogdXBsb2FkUGF0aFxuICAgICAgICBpZiAocGF0aFRvQ3JlYXRlKSB7XG4gICAgICAgICAgYXdhaXQgY2xpZW50LmNyZWF0ZURpcmVjdG9yeShwYXRoVG9DcmVhdGUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnB1dEZpbGVDb250ZW50cyhgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBpbWFnZSwge1xuICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3dlYmRhdnBsaXN0JylcbiAgICAgICAgICBjb25zdCBpbWdUZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShpbWdUZW1wRmlsZVBhdGgpKVxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW1nVGVtcEZpbGVQYXRoLCBpbWFnZSlcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gY3VzdG9tVXJsIHx8IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0XG4gICAgICAgICAgaWYgKHdlYmRhdnBsaXN0T3B0aW9ucy53ZWJwYXRoKSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYnBhdGh9JHtpbWcuZmlsZU5hbWV9YCkucmVwbGFjZSgvXlxcLysvZywgJycpfSR7c3VmZml4fWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApLnJlcGxhY2UoL15cXC8rL2csICcnKX0ke3N1ZmZpeH1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3dlYmRhdnBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2hvc3QnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9IT1NUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NzbEVuYWJsZWQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zc2xFbmFibGVkID8/IGZhbHNlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dlYnBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYXV0aFR5cGUnLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFJylcbiAgICAgIH0sXG4gICAgICBjaG9pY2VzOiBbJ2Jhc2ljJywgJ2RpZ2VzdCddLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hdXRoVHlwZSB8fCAnYmFzaWMnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKGJ1aWxkSW5VcGxvYWRlck5hbWVzLndlYmRhdnBsaXN0LCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IGFkdmFuY2VkcGxpc3RVcGxvYWRlciBmcm9tICcuL2FkdmFuY2VkcGxpc3QnXG5pbXBvcnQgYWxpc3RVcGxvYWRlciBmcm9tICcuL2FsaXN0J1xuaW1wb3J0IGFsaVl1blVwbG9hZGVyIGZyb20gJy4vYWxpeXVuJ1xuaW1wb3J0IGF3c3MzcGxpc3RVcGxvYWRlciBmcm9tICcuL2F3c3MzcGxpc3QnXG5pbXBvcnQgZ2l0aHViVXBsb2FkZXIgZnJvbSAnLi9naXRodWInXG5pbXBvcnQgaW1ndXJVcGxvYWRlciBmcm9tICcuL2ltZ3VyJ1xuaW1wb3J0IGxvY2FsVXBsb2FkZXIgZnJvbSAnLi9sb2NhbCdcbmltcG9ydCBsc2t5VXBsb2FkZXIgZnJvbSAnLi9sc2t5J1xuaW1wb3J0IHBpY2xpc3RVcGxvYWRlciBmcm9tICcuL3BpY2xpc3QnXG5pbXBvcnQgcWluaXVVcGxvYWRlciBmcm9tICcuL3Fpbml1J1xuaW1wb3J0IHNmdHBVcGxvYWRlciBmcm9tICcuL3NmdHAnXG5pbXBvcnQgc21tc1VwbG9hZGVyIGZyb20gJy4vc21tcydcbmltcG9ydCB0Y1l1blVwbG9hZGVyIGZyb20gJy4vdGN5dW4nXG5pbXBvcnQgdXBZdW5VcGxvYWRlciBmcm9tICcuL3VweXVuJ1xuaW1wb3J0IHdlYmRhdnBsaXN0VXBsb2FkZXIgZnJvbSAnLi93ZWJkYXYnXG5cbmNvbnN0IGJ1aWxkSW5VcGxvYWRlcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgcmVnaXN0ZXIoY3R4OiBJUGljR28pIHtcbiAgICAgIGFkdmFuY2VkcGxpc3RVcGxvYWRlcihjdHgpXG4gICAgICBhbGlzdFVwbG9hZGVyKGN0eClcbiAgICAgIGFsaVl1blVwbG9hZGVyKGN0eClcbiAgICAgIGF3c3MzcGxpc3RVcGxvYWRlcihjdHgpXG4gICAgICBnaXRodWJVcGxvYWRlcihjdHgpXG4gICAgICBpbWd1clVwbG9hZGVyKGN0eClcbiAgICAgIGxvY2FsVXBsb2FkZXIoY3R4KVxuICAgICAgbHNreVVwbG9hZGVyKGN0eClcbiAgICAgIHBpY2xpc3RVcGxvYWRlcihjdHgpXG4gICAgICBxaW5pdVVwbG9hZGVyKGN0eClcbiAgICAgIHNmdHBVcGxvYWRlcihjdHgpXG4gICAgICBzbW1zVXBsb2FkZXIoY3R4KVxuICAgICAgdGNZdW5VcGxvYWRlcihjdHgpXG4gICAgICB1cFl1blVwbG9hZGVyKGN0eClcbiAgICAgIHdlYmRhdnBsaXN0VXBsb2FkZXIoY3R4KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVXBsb2FkZXJzXG4iLCJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5cbmltcG9ydCB7IGlzVXJsLCBnZXRJbWFnZVNpemUsIGdldEZTRmlsZSwgZ2V0VVJMRmlsZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcbmltcG9ydCB7IElQaWNHbywgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sIElJbWdJbmZvLCBJSW1nU2l6ZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCByZXN1bHRzOiBJSW1nSW5mb1tdID0gY3R4Lm91dHB1dFxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcgfCBCdWZmZXIsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihpdGVtKSkge1xuICAgICAgICBpbmZvID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgYnVmZmVyOiBpdGVtLFxuICAgICAgICAgIGZpbGVOYW1lOiAnJyxcbiAgICAgICAgICBleHRuYW1lOiAnJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzVXJsKGl0ZW0pKSB7XG4gICAgICAgIGluZm8gPSBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZm8gPSBhd2FpdCBnZXRGU0ZpbGUoaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmZvLnN1Y2Nlc3MgJiYgaW5mby5idWZmZXIpIHtcbiAgICAgICAgY29uc3QgaW1nU2l6ZSA9IGdldEltZ1NpemUoY3R4LCBpbmZvLmJ1ZmZlciwgaXRlbSlcbiAgICAgICAgY29uc3QgZXh0bmFtZSA9IGluZm8uZXh0bmFtZSB8fCBpbWdTaXplLmV4dG5hbWUgfHwgJy5wbmcnXG4gICAgICAgIHJlc3VsdHNbaW5kZXhdID0ge1xuICAgICAgICAgIGJ1ZmZlcjogaW5mby5idWZmZXIsXG4gICAgICAgICAgZmlsZU5hbWU6IGluZm8uZmlsZU5hbWUgfHwgYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyl9JHtleHRuYW1lfWAsXG4gICAgICAgICAgd2lkdGg6IGltZ1NpemUud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBpbWdTaXplLmhlaWdodCxcbiAgICAgICAgICBleHRuYW1lOiBpbmZvLmV4dG5hbWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmxvZy5lcnJvcihpbmZvLnJlYXNvbilcbiAgICAgIH1cbiAgICB9KVxuICApXG4gIC8vIHJlbW92ZSBlbXB0eSBpdGVtXG4gIGN0eC5vdXRwdXQgPSByZXN1bHRzLmZpbHRlcihpdGVtID0+IGl0ZW0pXG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcgfCBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XG4gIGNvbnN0IGltYWdlU2l6ZSA9IGdldEltYWdlU2l6ZShmaWxlKVxuICBpZiAoIWltYWdlU2l6ZS5yZWFsKSB7XG4gICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgY3R4LmxvZy53YXJuKGBjYW4ndCBnZXQgJHtwYXRofSdzIGltYWdlIHNpemVgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubG9nLndhcm4oXCJjYW4ndCBnZXQgaW1hZ2Ugc2l6ZVwiKVxuICAgIH1cbiAgICBjdHgubG9nLndhcm4oJ2ZhbGxiYWNrIHRvIDIwMCAqIDIwMCcpXG4gIH1cbiAgcmV0dXJuIGltYWdlU2l6ZVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGhhbmRsZVxufVxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGN0eC5vdXRwdXQucHVzaCguLi5jdHguaW5wdXQpXG4gIHJldHVybiBjdHhcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBoYW5kbGVcbn1cbiIsImV4cG9ydCBjb25zdCBDTElQQk9BUkRfSU1BR0VfRk9MREVSID0gJ3BpY2xpc3QtY2xpcGJvYXJkLWltYWdlcydcbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBmcywgeyBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgaXNXc2wgZnJvbSAnaXMtd3NsJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBvcyBmcm9tICdvcydcblxuaW1wb3J0IG1hY0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9tYWMuYXBwbGVzY3JpcHQnXG5pbXBvcnQgd2luZG93c0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzLnBzMSdcbmltcG9ydCB3aW5kb3dzMTBDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93czEwLnBzMSdcbmltcG9ydCBsaW51eENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9saW51eC5zaCdcbmltcG9ydCB3c2xDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd3NsLnNoJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4vZW51bSdcbmltcG9ydCB7IElQaWNHbywgSUNsaXBib2FyZEltYWdlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBDTElQQk9BUkRfSU1BR0VfRk9MREVSIH0gZnJvbSAnLi9zdGF0aWMnXG5cbmV4cG9ydCB0eXBlIFBsYXRmb3JtID0gJ2RhcndpbicgfCAnd2luMzInIHwgJ3dpbjEwJyB8ICdsaW51eCcgfCAnd3NsJ1xuXG5jb25zdCBnZXRDdXJyZW50UGxhdGZvcm0gPSAoKTogUGxhdGZvcm0gPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cbiAgaWYgKGlzV3NsKSByZXR1cm4gJ3dzbCdcbiAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpWzBdID09PSAnMTAnID8gJ3dpbjEwJyA6ICd3aW4zMidcbiAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gJ2RhcndpbidcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ2xpbnV4J1xuICB9XG59XG5cbmNvbnN0IHBsYXRmb3JtMlNjcmlwdENvbnRlbnQ6IHtcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xufSA9IHtcbiAgZGFyd2luOiBtYWNDbGlwYm9hcmRTY3JpcHQsXG4gIHdpbjMyOiB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0LFxuICB3aW4xMDogd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0LFxuICBsaW51eDogbGludXhDbGlwYm9hcmRTY3JpcHQsXG4gIHdzbDogd3NsQ2xpcGJvYXJkU2NyaXB0XG59XG5cbi8qKlxuICogcG93ZXJzaGVsbCB3aWxsIHJlcG9ydCBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGhhdmUgYSAnLnBzMScgZXh0ZW5zaW9uLFxuICogc28gd2Ugc2hvdWxkIGtlZXAgdGhlIGV4dGVuc2lvbiBuYW1lIGNvbnNpc3RlbnQgd2l0aCBjb3JyZXNwb25kaW5nIHNoZWxsXG4gKi9cbmNvbnN0IHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lOiB7XG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcbn0gPSB7XG4gIGRhcndpbjogJ21hYy5hcHBsZXNjcmlwdCcsXG4gIHdpbjMyOiAnd2luZG93cy5wczEnLFxuICB3aW4xMDogJ3dpbmRvd3MxMC5wczEnLFxuICBsaW51eDogJ2xpbnV4LnNoJyxcbiAgd3NsOiAnd3NsLnNoJ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbWFnZUZvbGRlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIENMSVBCT0FSRF9JTUFHRV9GT0xERVIpXG4gIGVuc3VyZURpclN5bmMoaW1hZ2VQYXRoKVxufVxuXG4vLyBUaGFua3MgdG8gdnMtcGljZ286IGh0dHBzOi8vZ2l0aHViLmNvbS9TcGFkZXMtUy92cy1waWNnby9ibG9iL21hc3Rlci9zcmMvZXh0ZW5zaW9uLnRzXG5jb25zdCBnZXRDbGlwYm9hcmRJbWFnZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SUNsaXBib2FyZEltYWdlPiA9PiB7XG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcbiAgLy8gYWRkIGFuIGNsaXBib2FyZCBpbWFnZSBmb2xkZXIgdG8gY29udHJvbCB0aGUgaW1hZ2UgY2FjaGUgZmlsZVxuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIENMSVBCT0FSRF9JTUFHRV9GT0xERVIsIGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfS5wbmdgKVxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogYW55LCByZWplY3Q6IGFueSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFBsYXRmb3JtKClcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZVtwbGF0Zm9ybV0pXG4gICAgLy8gSWYgdGhlIHNjcmlwdCBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGNvbnRlbnQgdG8gdGhlIHNjcmlwdCBmaWxlXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHNjcmlwdFBhdGgpKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHNjcmlwdFBhdGgsIHBsYXRmb3JtMlNjcmlwdENvbnRlbnRbcGxhdGZvcm1dLCAndXRmOCcpXG4gICAgfVxuICAgIGxldCBleGVjdXRpb25cbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgICBleGVjdXRpb24gPSBzcGF3bignb3Nhc2NyaXB0JywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJyB8fCBwbGF0Zm9ybSA9PT0gJ3dpbjEwJykge1xuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3Bvd2Vyc2hlbGwnLCBbXG4gICAgICAgICctbm9wcm9maWxlJyxcbiAgICAgICAgJy1ub25pbnRlcmFjdGl2ZScsXG4gICAgICAgICctbm9sb2dvJyxcbiAgICAgICAgJy1zdGEnLFxuICAgICAgICAnLWV4ZWN1dGlvbnBvbGljeScsXG4gICAgICAgICd1bnJlc3RyaWN0ZWQnLFxuICAgICAgICAvLyBmaXggd2luZG93cyAxMCBuYXRpdmUgY21kIGNyYXNoIGJ1ZyB3aGVuIFwicGljZ28gdXBsb2FkXCJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUvaXNzdWVzLzMyXG4gICAgICAgIC8vICctd2luZG93c3R5bGUnLCdoaWRkZW4nLFxuICAgICAgICAvLyAnLW5vZXhpdCcsXG4gICAgICAgICctZmlsZScsXG4gICAgICAgIHNjcmlwdFBhdGgsXG4gICAgICAgIGltYWdlUGF0aFxuICAgICAgXSlcbiAgICB9IGVsc2Uge1xuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3NoJywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXG4gICAgfVxuXG4gICAgZXhlY3V0aW9uLnN0ZG91dC5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgICAgICBpZiAoZGF0YS50b1N0cmluZygpLnRyaW0oKSA9PT0gJ25vIHhjbGlwIG9yIHdsLWNsaXBib2FyZCcpIHtcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgICAgdGl0bGU6ICd4Y2xpcCBvciB3bC1jbGlwYm9hcmQgbm90IGZvdW5kJyxcbiAgICAgICAgICAgIGJvZHk6ICdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGltZ1BhdGggPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpXG5cbiAgICAgIC8vIGlmIHRoZSBmaWxlUGF0aCBpcyB0aGUgcmVhbCBmaWxlIGluIHN5c3RlbVxuICAgICAgLy8gd2Ugc2hvdWxkIGtlZXAgaXQgaW5zdGVhZCBvZiByZW1vdmluZ1xuICAgICAgbGV0IHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IGZhbHNlXG5cbiAgICAgIC8vIGluIG1hY09TIGlmIHlvdXIgY29weSB0aGUgZmlsZSBpbiBzeXN0ZW0sIGl0J3MgYmFzZW5hbWUgd2lsbCBub3QgZXF1YWwgdG8gb3VyIGRlZmF1bHQgYmFzZW5hbWVcbiAgICAgIGlmIChwYXRoLmJhc2VuYW1lKGltZ1BhdGgpICE9PSBwYXRoLmJhc2VuYW1lKGltYWdlUGF0aCkpIHtcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggaXMgbm90IGdlbmVyYXRlIGJ5IHBpY2dvXG4gICAgICAgIC8vIGJ1dCB0aGUgcGF0aCBleGlzdHMsIHdlIHNob3VsZCBrZWVwIGl0XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XG4gICAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgaW1nUGF0aCBpcyBpbnZhbGlkXG4gICAgICBpZiAoaW1nUGF0aCAhPT0gJ25vIGltYWdlJyAmJiAhZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQ2FuJ3QgZmluZCAke2ltZ1BhdGh9YCkpXG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBpbWdQYXRoLFxuICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmdcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0Q2xpcGJvYXJkSW1hZ2VcbiIsImltcG9ydCB7IElDb25maWcsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgSlNPTlN0b3JlIH0gZnJvbSAnQHBpY2dvL3N0b3JlJ1xuaW1wb3J0IHsgSUpTT04gfSBmcm9tICdAcGljZ28vc3RvcmUvZGlzdC90eXBlcydcblxuY2xhc3MgREIge1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHByaXZhdGUgcmVhZG9ubHkgZGI6IEpTT05TdG9yZVxuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy5kYiA9IG5ldyBKU09OU3RvcmUodGhpcy5jdHguY29uZmlnUGF0aClcblxuICAgIGlmICghdGhpcy5kYi5oYXMoJ3BpY0JlZCcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmRiLnNldCgncGljQmVkJywge1xuICAgICAgICAgIHVwbG9hZGVyOiAnc21tcycsXG4gICAgICAgICAgY3VycmVudDogJ3NtbXMnLFxuICAgICAgICAgIHNtbXM6IHtcbiAgICAgICAgICAgIHRva2VuOiAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNnb1BsdWdpbnMnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY2dvUGx1Z2lucycsIHt9KVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVhZChmbHVzaD86IGJvb2xlYW4pOiBJSlNPTiB7XG4gICAgcmV0dXJuIHRoaXMuZGIucmVhZChmbHVzaClcbiAgfVxuXG4gIGdldChrZXk6IHN0cmluZyA9ICcnKTogYW55IHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi5nZXQoa2V5KVxuICB9XG5cbiAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yZWFkKHRydWUpXG4gICAgdGhpcy5kYi5zZXQoa2V5LCB2YWx1ZSlcbiAgfVxuXG4gIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRoaXMucmVhZCh0cnVlKVxuICAgIHJldHVybiB0aGlzLmRiLmhhcyhrZXkpXG4gIH1cblxuICB1bnNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHRoaXMucmVhZCh0cnVlKVxuICAgIHJldHVybiB0aGlzLmRiLnVuc2V0KGtleSwgdmFsdWUpXG4gIH1cblxuICBzYXZlQ29uZmlnKGNvbmZpZzogUGFydGlhbDxJQ29uZmlnPik6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnNldChuYW1lLCBjb25maWdbbmFtZV0pXG4gICAgfSlcbiAgfVxuXG4gIHJlbW92ZUNvbmZpZyhjb25maWc6IElDb25maWcpOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy51bnNldChuYW1lLCBjb25maWdbbmFtZV0pXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEQlxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XG4gIFVQTE9BRF9GQUlMRUQ6ICfkuIrkvKDlpLHotKUnLFxuICBDSEVDS19TRVRUSU5HUzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueaYr+WQpuato+ehricsXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICfplJnor6/noIHvvJoke2NvZGV977yM6K+35omT5byA5rWP6KeI5Zmo57KY6LS05Zyw5Z2A5p+l55yL55u45YWz5Y6f5ZugJyxcbiAgU0VSVkVSX0VSUk9SOiAn5pyN5Yqh56uv5Ye66ZSZ77yM6K+36YeN6K+VJyxcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxuXG4gIC8vIHNtbXNcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOOiAn6K+35aGr5YaZVG9rZW4nLFxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAn5aSH55So5LiK5Lyg5Z+f5ZCNJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcblxuICAvLyBhZHZhbmNlZHBsaXN0XG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUOiAn6auY57qn6Ieq5a6a5LmJJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfRU5EUE9JTlQ6ICforr7lrprmjqXlj6PnvZHlnYAnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS91cGxvYWQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVRIT0Q6ICforr7lrpror7fmsYLmlrnms5UnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX01FVEhPRDogJ+ivt+mAieaLqeivt+axguaWueazlScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0ZPUk1fREFUQV9LRVk6ICforr7lrprooajljZXlj4LmlbDlkI0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0ZPUk1fREFUQV9LRVk6ICfkvovlpoLvvJpmaWxlJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfSEVBREVSUzogJ+iuvuWumuivt+axguWktCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfSEVBREVSUzogJ+S+i+Wmgu+8mntcIkNvbnRlbnQtVHlwZVwiOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9CT0RZOiAn6K6+5a6a6K+35rGC5L2TJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9CT0RZOiAn5L6L5aaC77yae1wia2V5XCI6IFwidmFsdWVcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9DVVNUT01fUFJFRklYOiAn6K6+5a6a6Ieq5a6a5LmJ5YmN57yAJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9DVVNUT01fUFJFRklYOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS8nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9SRVNfREFUQV9QQVRIOiAn6K6+5a6a6L+U5Zue5pWw5o2uVVJM6Lev5b6EJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9SRVNfREFUQV9QQVRIOiAn5L6L5aaC77yaZGF0YS51cmwnLFxuXG4gIC8vIGxvY2FsXG4gIFBJQ0JFRF9MT0NBTDogJ+acrOWcsOS4iuS8oCcsXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6K6+5a6a6Lev5b6EJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ+S+i+WmgiAvdXNyL2xvY2FsL2ltYWdlcy8nLFxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICfnlKjkuo7mi7zmjqXnvZHlnYDot6/lvoQnLFxuXG4gIC8vIGFsaXN0XG4gIFBJQ0JFRF9BTElTVF9QTElTVDogJ0FMaXN0JyxcbiAgUElDQkVEX0FMSVNUX1VSTDogJ+iuvuWumlVSTCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vYWxpc3QuZXhhbXBsZS5jb20nLFxuICBQSUNCRURfQUxJU1RfVE9LRU46ICforr7lrppUb2tlbicsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1RPS0VOOiAn6K+36L6T5YWlVG9rZW4o5LiO55So5oi35ZCNLeWvhueggeS6jOmAieS4gCknLFxuICBQSUNCRURfQUxJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+ivt+i+k+WFpeeUqOaIt+WQjSjkuI5Ub2tlbuS6jOmAieS4gCknLFxuICBQSUNCRURfQUxJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+ivt+i+k+WFpeWvhueggScsXG4gIFBJQ0JFRF9BTElTVF9VUExPQURfUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VQTE9BRF9QQVRIOiAn5L6L5aaC77yaL3Rlc3QnLFxuICBQSUNCRURfQUxJU1RfV0VCX1BBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9XRUJfUEFUSDogJ+eUqOS6juaLvOaOpee9keWdgOi3r+W+hCcsXG4gIFBJQ0JFRF9BTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBBbGktY2xvdWRcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6K6+5a6aYWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6K6+5a6aYWNjZXNzS2V5U2VjcmV0JyxcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yab3NzLWNuLWJlaWppbmcnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP3gtb3NzLXByb2Nlc3M9eHh4JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gVGVuY2VudC1jbG91ZFxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAn6IW+6K6v5LqRQ09TJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ+iuvuWumlNlY3JldElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICforr7lrppTZWNyZXRLZXknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICforr7lrprmjqXlhaXngrknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ+S+i+Wmgu+8mjEyMzQ1Njc4OTAnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mmFwLWJlaWppbmcnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZU1vZ3IyJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ+aegeaZuuWOi+e8qScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6XG4gICAgJ+WbvueJh+aegeaZuuWOi+e8qe+8jOivpuaDheivt+WPguiAg1vmlofmoaPor7TmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODY0MzgpJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICflvIDlkK8nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn5YWz6ZetJyxcblxuICAvLyBHaXRIdWJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICforr7lrppUb2tlbicsXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+iuvuWumuS7k+W6k+WQjScsXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6K6+5a6a5YiG5pSv5ZCNJyxcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gcWluaXVcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+iuvuWumkFjY2Vzc0tleScsXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICforr7lrppTZWNyZXRLZXknLFxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX1FJTklVX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfUUlOSVVfVVJMOiAn6K6+5a6a6K6/6Zeu572R5Z2AJyxcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXG5cbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICforr7lrppDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICforr7lrpphY2Nlc3NUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+iuvuWumuebuOWGjOWQjScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+iuvuWumuS7o+eQhicsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5Lyg5pe25aGr5YaZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG5cbiAgLy8gdXB5dW5cbiAgUElDQkVEX1VQWVVOOiAn5Y+I5ouN5LqRJyxcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+iuvuWumuaTjeS9nOWRmOWvhueggScsXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6K6+5a6a6Ieq5a6a5LmJQVBJ5o6l5YWl54K5JyxcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICforr7lrprpmLLnm5fpk75Ub2tlbicsXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ+iuvuWumui/h+acn+aXtumXtCjnp5IpJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5pON5L2c5ZGY5a+G56CBJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcblxuICAvLyB3ZWJkYXZwbGlzdFxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+iuvuWumuaOpeWPo+e9keWdgCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn5ZCv55SoU1NMJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R5Z2A6Lev5b6EJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+iuvuWumuiupOivgeaWueW8jycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pe25ZCv55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5a+G56CBJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/a2V5PTEyMzQ1NicsXG5cbiAgLy8gc2Z0cHBsaXN0XG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhoXnva5TRlRQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAn6K6+5a6a5Li75py6JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAn6K6+5a6a56uv5Y+jJyxcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICforr7lrprnp4HpkqUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+iuvuWumuengemSpeWvhueggScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ+iuvuWumuaWh+S7tueUqOaItzrnu4QnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ+iuvuWumuaWh+S7tuadg+mZkCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICforr7lrprmlofku7blpLnmnYPpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mjEuMS4xLjMnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiupDIyJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i+k+WFpeengemSpeWvhueggScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaC77yad3d3OmRhdGEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ+S+i+Wmgu+8mjA3NzUnLFxuXG4gIC8vIFBpY0xpc3RcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICforr7lrprlm77luoonLFxuICBQSUNCRURfUElDTElTVF9DT05GSUdOQU1FOiAn6K6+5a6a6YWN572u5ZCNJyxcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAn6K6+5a6a6Ym05p2DS2V5JyxcblxuICAvLyBMc2t5IFByb1xuICBQSUNCRURfTFNLWV9QTElTVDogJ+WFsOepuuWbvuW6iicsXG4gIFBJQ0JFRF9MU0tZX1ZFUlNJT046ICforr7lrprniYjmnKwnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICfkvovlpoJWMScsXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICforr7lrprkuLvmnLonLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tJyxcbiAgUElDQkVEX0xTS1lfVE9LRU46ICforr7lrppUb2tlbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICforr7lrprnrZbnlaVJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQ6ICfkvovlpoLvvJoxJyxcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICforr7lrprnm7jlhoxJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfpgInloavvvIxWMueJiOacrOmZkOWumicsXG4gIFBJQ0JFRF9MU0tZX1BFUk1JU1NJT046ICforr7lrprmnYPpmZAnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfkvovlpoLvvJpwdWJsaWMnLFxuXG4gIC8vIEF3c1MzUGxpc3RcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ+iuvuWumkFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWTogJ+iuvuWumlNlY3JldEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ+iuvuWumlJlZ2lvbicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VQTE9BRFBBVEg6ICforr7lrprkuIrkvKDot6/lvoQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ+iuvuWumuiHquWumuS5ieiKgueCuScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAn6K6+5a6a5Luj55CGJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAn5ZCv55SoczNGb3JjZVBhdGhTdHlsZScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+aLkue7neaXoOaViFRMU+ivgeS5pui/nuaOpScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDTDogJ+iuvuWumuS4iuS8oOi1hOa6kOeahOiuv+mXruetlueVpScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+W8gOWQryBgcGF0aFN0eWxlQWNjZXNzYCDml7bvvIzmmK/lkKbopoHnpoHnlKjmnIDnu4jnlJ/miJBVUkzkuK3mt7vliqAgYnVja2V0IOWJjee8gCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICfkvovlpoLvvJpBS0lBeHh4eHh4eHh4eHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ+S+i+Wmgu+8mnh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ+S+i+Wmgu+8mnRlc3QnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3Qve2Z1bGxOYW1lfScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3MzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pe25ZCv55SoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHml7blkK/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTDogJ+S+i+Wmgu+8mnB1YmxpYy1yZWFkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfpnIDopoHml7blkK/nlKgnLFxuXG4gIEJVSUxESU5fV0FURVJNQVJLOiAn5rC05Y2w6K6+572uJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAn6ZyA6KaB5re75Yqg5rC05Y2w5pe25ZCv55SoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+iuvuWumuawtOWNsOexu+WeiycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+ivt+mAieaLqeawtOWNsOexu+WeiycsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+aYr+WQpuWFqOWxj+awtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pe25ZCv55SoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6K6+5a6a5rC05Y2w6KeS5bqmJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICfor7fovpPlhaXmlbDlrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6K6+5a6a5rC05Y2w5paH5a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6K+36L6T5YWl5rC05Y2w5paH5a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAn6K6+5a6a5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iuvuWumuawtOWNsOebuOWvueS6juWbvueJh+eahOavlOS+iycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAn6K+36L6T5YWlMC0x55qE5bCP5pWwJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6K6+5a6a5rC05Y2w5a2X5L2T6aKc6ImyJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfor7fovpPlhaVyZ2LpopzoibLlgLwnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICforr7lrprmsLTljbDlm77niYfot6/lvoQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWbvueJh+i3r+W+hCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K6+5a6a5rC05Y2w5L2N572uJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+ivt+mAieaLqeawtOWNsOS9jee9ricsXG5cbiAgQlVJTERJTl9SRU5BTUU6ICfph43lkb3lkI3orr7nva4nLFxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICforr7lrprph43lkb3lkI3moLzlvI8nLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKblkK/nlKjph43lkb3lkI0nLFxuXG4gIEJVSUxESU5fQ09NUFJFU1M6ICflm77niYflpITnkIYnLFxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICforr7lrprlm77niYfotKjph48nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+ivt+i+k+WFpTAtMTAw55qE5pW05pWwJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbov5vooYzmoLzlvI/ovazmjaInLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2s5o2i5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6K6+5a6a6L2s5o2i5qC85byPJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfor7fpgInmi6novazmjaLmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6L+b6KGM5Zu+54mH57yp5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57yp5pS+5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+iuvuWumue8qeaUvuWuveW6picsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6K6+5a6a57yp5pS+6auY5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5Tov5vooYznvKnmlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnvKnmlL7ml7blkK/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9rOWbvueJhycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2s5Zu+54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6K6+5a6a57yp5pS+55m+5YiG5q+UJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfor7fovpPlhaXmlbDlrZcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6L+H5bCP5Zu+57yp5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpui/m+ihjOWbvueJh+aXi+i9rCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9rOaXtuWQr+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6K6+5a6a5peL6L2s6KeS5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+ivt+i+k+WFpeaVsOWtl++8jOWPr+S4uui0n+aVsCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuS/oeaBrycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG5L+h5oGv5pe25ZCv55SoJyxcblxuICAvLyBQbHVnaW4gSGFuZGxlclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOF5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOF5aSx6LSlJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijheWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijheWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjeaIluWQiOazleWuieijhei3r+W+hCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi9veaIkOWKnycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246L295aSx6LSlJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246L295aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246L295aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHotKUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nXG59XG5cbmV4cG9ydCB0eXBlIElMb2NhbGVzS2V5ID0ga2V5b2YgdHlwZW9mIFpIX0NOXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxuIiwiaW1wb3J0IHsgWkhfQ04sIElMb2NhbGVzS2V5LCBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IElQaWNHbywgSVN0cmluZ0tleU1hcCwgSUkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzLCB7IHBhdGhFeGlzdHNTeW5jLCBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJ1xuXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXG5cbmltcG9ydCB7IElMb2NhbGUgfSBmcm9tICdAcGljZ28vaTE4bi9kaXN0L3R5cGVzJ1xuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xuaW1wb3J0IHsgWkhfVFcgfSBmcm9tICcuL3poLVRXJ1xuXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcbiAgJ3poLUNOJzogWkhfQ04sXG4gICd6aC1UVyc6IFpIX1RXLFxuICBlbjogRU5cbn1cblxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGkxOG46IEkxOG5cbiAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RBZGFwdGVyOiBPYmplY3RBZGFwdGVyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMub2JqZWN0QWRhcHRlciA9IG5ldyBPYmplY3RBZGFwdGVyKGxhbmd1YWdlTGlzdClcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXG4gICAgaWYgKCFsYW5ndWFnZUxpc3RbbGFuZ3VhZ2VdKSB7XG4gICAgICBsYW5ndWFnZSA9ICd6aC1DTicgLy8gdXNlIGRlZmF1bHRcbiAgICB9XG4gICAgdGhpcy5pMThuID0gbmV3IEkxOG4oe1xuICAgICAgYWRhcHRlcjogdGhpcy5vYmplY3RBZGFwdGVyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxuICAgIH0pXG4gICAgdGhpcy5sb2FkT3V0dGVySTE4bigpXG4gIH1cblxuICBwcml2YXRlIGxvYWRPdXR0ZXJJMThuKCk6IHZvaWQge1xuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSB0aGlzLmdldE91dHRlckkxOG5Gb2xkZXIoKVxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xuICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZVxuICAgIH0pXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGlmIChmaWxlLmlzRmlsZSgpICYmIGZpbGUubmFtZS5lbmRzV2l0aCgnLnltbCcpKSB7XG4gICAgICAgIGNvbnN0IGkxOG5GaWxlUGF0aCA9IHBhdGguam9pbihpMThuRm9sZGVyLCBmaWxlLm5hbWUpXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGkxOG5GaWxlT2JqID0geWFtbC5sb2FkKGkxOG5GaWxlKSBhcyBJTG9jYWxlc1xuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3V0dGVySTE4bkZvbGRlcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ2kxOG4tY2xpJylcbiAgICBpZiAoIXBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XG4gICAgICBlbnN1cmVEaXJTeW5jKGkxOG5Gb2xkZXIpXG4gICAgfVxuICAgIHJldHVybiBpMThuRm9sZGVyXG4gIH1cblxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udHJhbnNsYXRlKGtleSwgYXJncykgfHwga2V5XG4gIH1cblxuICBzZXRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pMThuLnNldExhbmd1YWdlKGxhbmd1YWdlKVxuICAgIHRoaXMuY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcbiAgICB9KVxuICB9XG5cbiAgYWRkTG9jYWxlKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcbiAgICBpZiAoIW9yaWdpbkxvY2FsZXMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBjb25zdCBuZXdMb2NhbGVzID0gbWVyZ2Uob3JpZ2luTG9jYWxlcywgbG9jYWxlcylcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBhZGRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3JpZ2luTG9jYWxlcyA9IHRoaXMub2JqZWN0QWRhcHRlci5nZXRMb2NhbGUobGFuZ3VhZ2UpXG4gICAgaWYgKG9yaWdpbkxvY2FsZXMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBsb2NhbGVzKVxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGdldExhbmd1YWdlTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxhbmd1YWdlTGlzdClcbiAgfVxufVxuXG5leHBvcnQgeyBJMThuTWFuYWdlciB9XG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IFpIX1RXOiBJTG9jYWxlcyA9IHtcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXG4gIENIRUNLX1NFVFRJTkdTOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5piv5ZCm5q2j56K6JyxcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprlj4rntrLot68nLFxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivO+8miR7Y29kZX3vvIzoq4vmiZPplovngI/opr3lmajosrzkuIrlnLDlnYDmn6XnnIvnm7jpl5zljp/lm6AnLFxuICBTRVJWRVJfRVJST1I6ICfkvLrmnI3lmajlh7rpjK/vvIzoq4vph43oqaYnLFxuICBBVVRIX0ZBSUxFRDogJ+iqjeitieWkseaVlycsXG5cbiAgLy8gc21tc1xuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcbiAgUElDQkVEX1NNTVNfVE9LRU46ICfoqK3lrppUb2tlbicsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfVE9LRU46ICfoq4vovLjlhaVUb2tlbicsXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICflgpnnlKjkuIrlgrPntrLlnYAnLFxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxuXG4gIC8vYWR2YW5jZWRwbGlzdFxuICBQSUNCRURfQURWQU5DRURQTElTVDogJ+mrmOe0muiHquWumue+qScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0VORFBPSU5UOiAn6Kit5a6aQVBJ5Li75qmfJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vdXBsb2FkJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVUSE9EOiAn6Kit5a6a6KuL5rGC5pa55rOVJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0Q6ICfoq4vpgbjmk4foq4vmsYLmlrnms5UnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9GT1JNX0RBVEFfS0VZOiAn6Kit5a6a6KGo5ZauS2V5JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9GT1JNX0RBVEFfS0VZOiAn5L6L5aaC77yaZmlsZScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlM6ICfoqK3lrproq4vmsYLpoK0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlM6ICfkvovlpoLvvJp7XCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQk9EWTogJ+ioreWumuiri+axgumrlCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQk9EWTogJ+S+i+Wmgu+8mntcImtleVwiOiBcInZhbHVlXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQ1VTVE9NX1BSRUZJWDogJ+ioreWumuiHquWumue+qeWJjee2tCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQ1VTVE9NX1BSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfUkVTX0RBVEFfUEFUSDogJ+ioreWumui/lOWbnuaVuOaTmui3r+W+kScsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfUkVTX0RBVEFfUEFUSDogJ+S+i+Wmgu+8mmRhdGEudXJsJyxcblxuICAvLyBsb2NhbFxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLAnLFxuICBQSUNCRURfTE9DQUxfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICfkvovlpoIgL3Vzci9sb2NhbC9pbWFnZXMvJyxcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICfoqK3lrprntrLlnYDot6/lvpEnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO57ay6aCB6aGv56S655qE6Lev5b6RJyxcblxuICAvLyBhbGlzdFxuICBQSUNCRURfQUxJU1RfUExJU1Q6ICdBTGlzdCcsXG4gIFBJQ0JFRF9BTElTVF9VUkw6ICfoqK3lrppVUkwnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL2FsaXN0LmV4YW1wbGUuY29tJyxcbiAgUElDQkVEX0FMSVNUX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuKOiIh+eUqOaItuWQjS3lr4bnorzkuozpgbjkuIApJyxcbiAgUElDQkVEX0FMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfoq4vovLjlhaXnlKjmiLblkI0o6IiHVG9rZW7kuozpgbjkuIApJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfoq4vovLjlhaXlr4bnorwnLFxuICBQSUNCRURfQUxJU1RfVVBMT0FEX1BBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSDogJ+S+i+Wmgu+8mi90ZXN0JyxcbiAgUElDQkVEX0FMSVNUX1dFQl9QQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEg6ICfnlKjkuo7ntrLpoIHpoa/npLrnmoTot6/lvpEnLFxuICBQSUNCRURfQUxJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gQWxpLWNsb3VkXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+ioreWummFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWummFjY2Vzc0tleVNlY3JldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIFRlbmNlbnQtY2xvdWRcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICfoqK3lrppTZWNyZXRJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+ioreWumkFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmpbXmmbrlo5PnuK4nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn6Zec6ZaJJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICfplovllZMnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICflnJbniYfmpbXmmbrlo5PnuK7vvIzoqbPmg4Xoq4vlj4PogINb5paH5qqU6Kqq5piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2LzQ5MjU5KScsXG5cbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+ioreWumuWIhuaUr+WQjeeosScsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICfoqK3lrppBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuXG4gIC8vIGltZ3VyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6Kit5a6aQ2xpZW50SWQnLFxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6Kit5a6aYWNjZXNzVG9rZW4nLFxuICBQSUNCRURfSU1HVVJfQUxCVU06ICfoqK3lrprnm7jnsL/lkI0nLFxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICfoqK3lrppQUk9YWScsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5YKz5pmC5aGr5a+rJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG5cbiAgLy8gdXB5dW5cbiAgUElDQkVEX1VQWVVOOiAn5Y+I5ouN5LqRJyxcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ+ioreWumuaOpeWFpem7nicsXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+ioreWumuaTjeS9nOWToScsXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+ioreWumuaTjeS9nOWToeWvhueivCcsXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+ioreWumuWKoOmAn+e2suWdgCcsXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICfoqK3lrprpmLLnm5zpj4hUb2tlbicsXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ+ioreWumumBjuacn+aZgumWkyjnp5IpJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl5pON5L2c5ZOh5a+G56K8JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcblxuICAvLyB3ZWJkYXZcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICfoqK3lrppBUEnkuLvmqZ8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pmC5ZWf55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAn6Kit5a6a6KqN6K2J5pa55byPJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pmC5ZWf55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/a2V5PXZhbHVlJyxcblxuICAvLyBzZnRwcGxpc3RcbiAgUElDQkVEX1NGVFBQTElTVDogJ+WFp+e9rlNGVFAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICfoqK3lrprnq6/lj6MnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+ioreWumuWvhueivCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ+ioreWumuengemRsCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6Kit5a6a56eB6ZGw5a+G56K8JyxcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6Kit5a6a5LiK5YKz6Lev5b6RJyxcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6Kit5a6a5paH5Lu255So5oi2Oue1hCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAn6Kit5a6a5paH5Lu25qyK6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ+ioreWumuaWh+S7tuWkvuasiumZkCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaMS4xLjEuMycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAn6buY6KqNMjInLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ+S+i+Wmgu+8mi9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6Ly45YWl56eB6ZGw5a+G56K8JyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee2suWdgOaZguS9v+eUqCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICfkvovlpoLvvJp3d3c6ZGF0YScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICfkvovlpoLvvJowNjY0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaC77yaMDc3NScsXG5cbiAgLy8gUGljTGlzdFxuICBQSUNCRURfUElDTElTVDogJ1BpY0xpc3QnLFxuICBQSUNCRURfUElDTElTVF9IT1NUOiAn6Kit5a6a5Li75qmfJyxcbiAgUElDQkVEX1BJQ0xJU1RfUE9SVDogJ+ioreWumuerr+WPoycsXG4gIFBJQ0JFRF9QSUNMSVNUX1BJQ0JFRDogJ+ioreWumuWcluW6iicsXG4gIFBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUU6ICfoqK3lrprphY3nva7lkI0nLFxuICBQSUNCRURfUElDTElTVF9LRVk6ICfoqK3lrprpkZLmrIpLZXknLFxuXG4gIC8vIExza3kgUHJvXG4gIFBJQ0JFRF9MU0tZX1BMSVNUOiAn6Jit56m65ZyW5bqKJyxcbiAgUElDQkVEX0xTS1lfVkVSU0lPTjogJ+ioreWumueJiOacrCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ+iri+mBuOaTh+eJiOacrCcsXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tJyxcbiAgUElDQkVEX0xTS1lfVE9LRU46ICfoqK3lrppUb2tlbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICfoq4vovLjlhaVUb2tlbicsXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAn6Kit5a6a562W55WlSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAn5L6L5aaCMScsXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6Kit5a6a55u45YaKSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAn5L6L5aaCMScsXG4gIFBJQ0JFRF9MU0tZX1BFUk1JU1NJT046ICfoqK3lrprkuIrlgrPmrIrpmZAnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfoq4vpgbjmk4fkuIrlgrPmrIrpmZAnLFxuXG4gIC8vIEF3c1MzUGxpc3RcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ+ioreWumkFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWTogJ+ioreWumlNlY3JldEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ+ioreWumlJlZ2lvbicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ+ioreWumuiHquWumue+qeevgOm7nicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAn6Kit5a6a5Luj55CGJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYOiAn6Kit5a6a6Ieq5a6a576p57ay5Z2AJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEOiAn6ZaL5ZWfIGByZWplY3RVbmF1dGhvcml6ZWRgJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAn6Kit5a6aQUNMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgIOaZgu+8jOaYr+WQpuimgeemgeeUqOacgOe1gueUn+aIkFVSTOS4rea3u+WKoCBidWNrZXQg5YmN57a0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRDogJ+S+i+Wmgu+8mkFLSUF4eHh4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZOiAn5L6L5aaC77yaeHh4eHh4eHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICfkvovlpoLvvJp1cy1lYXN0LTEnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3MzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pmC5ZWf55SoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHmmYLllZ/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTDogJ+S+i+Wmgu+8mnB1YmxpYy1yZWFkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfpnIDopoHmmYLllZ/nlKgnLFxuXG4gIEJVSUxESU5fV0FURVJNQVJLOiAn5rC05Y2w6Kit5a6aJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAn6ZyA6KaB5re75Yqg5rC05Y2w5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+ioreWumuawtOWNsOmhnuWeiycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+iri+mBuOaTh+awtOWNsOmhnuWeiycsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+aYr+WQpuWFqOWxj+awtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6Kit5a6a5rC05Y2w6KeS5bqmJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICfoq4vovLjlhaXmlbjlrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6Kit5a6a5rC05Y2w5paH5a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6KuL6Ly45YWl5rC05Y2w5paH5a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAn6Kit5a6a5rC05Y2w5a2X6auUJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+iri+i8uOWFpeawtOWNsOWtl+mrlOaWh+S7tui3r+W+kScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ioreWumuawtOWNsOWclueJh+avlOS+iycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAn6KuL6Ly45YWlMC0x55qE5pW45a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6Kit5a6a5rC05Y2w5a2X6auU6aGP6ImyJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfoq4vovLjlhaVyZ2LpoY/oibLlgLwnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICfoqK3lrprmsLTljbDlnJbniYfot6/lvpEnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iri+i8uOWFpeawtOWNsOWclueJh+i3r+W+kScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6Kit5a6a5rC05Y2w5L2N572uJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+iri+mBuOaTh+awtOWNsOS9jee9ricsXG5cbiAgQlVJTERJTl9SRU5BTUU6ICfph43lkb3lkI3oqK3lrponLFxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICfoqK3lrprph43lkb3lkI3moLzlvI8nLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKbllZ/nlKjph43lkb3lkI0nLFxuXG4gIEJVSUxESU5fQ09NUFJFU1M6ICflnJbniYfomZXnkIboqK3lrponLFxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICfoqK3lrprlnJbniYfos6rph48nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+iri+i8uOWFpTAtMTAw55qE5pW05pW4JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbpgLLooYzmoLzlvI/ovYnmj5snLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2J5o+b5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6Kit5a6a6L2J5o+b5qC85byPJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfoq4vpgbjmk4fovYnmj5vmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6YCy6KGM5ZyW54mH57iu5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57iu5pS+5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+ioreWumue4ruaUvuWvrOW6picsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+iri+i8uOWFpeaVuOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6Kit5a6a57iu5pS+6auY5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+iri+i8uOWFpeaVuOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5TpgLLooYznuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnuK7mlL7mmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9ieWclueJhycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2J5ZyW54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6Kit5a6a57iu5pS+55m+5YiG5q+UJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfoq4vovLjlhaXmlbDlrZcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6YGO5bCP5ZyW57iu5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpumAsuihjOWclueJh+aXi+i9iScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9ieaZguWVn+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6Kit5a6a5peL6L2J6KeS5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+iri+i8uOWFpeaVuOWtl++8jOWPr+eCuuiyoOaVuCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuizh+ioiicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG6LOH6KiK5pmC5ZWf55SoJyxcblxuICAvLyBQbHVnaW4gSGFuZGxlclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOd5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOd5aSx5pWXJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijneWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijneWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeoseaIluato+eiuueahOWuieijnei3r+W+kScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi8ieaIkOWKnycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246LyJ5aSx5pWXJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246LyJ5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246LyJ5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ixJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnXG59XG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IEVOOiBJTG9jYWxlcyA9IHtcbiAgVVBMT0FEX0ZBSUxFRDogJ1VwbG9hZCBmYWlsZWQnLFxuICBDSEVDS19TRVRUSU5HUzogJ1BsZWFzZSBjaGVjayB5b3VyIHNldHRpbmdzJyxcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncyBhbmQgbmV0d29yaycsXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAnRXJyb3IgY29kZTogJHtjb2RlfSwgcGxlYXNlIG9wZW4gdGhlIGJyb3dzZXIgYW5kIHBhc3RlIHRoZSBhZGRyZXNzIHRvIHNlZSB0aGUgcmVhc29uJyxcbiAgU0VSVkVSX0VSUk9SOiAnU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyJyxcbiAgQVVUSF9GQUlMRUQ6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxuXG4gIC8vIHNtbXNcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAnU2V0IFRva2VuJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9UT0tFTjogJ1BsZWFzZSBlbnRlciB0aGUgdG9rZW4nLFxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAnU2V0IEJhY2t1cCBVcGxvYWQgRG9tYWluJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAnRXguIHNtbXMuYXBwJyxcblxuICAvL2FkdmFuY2VkcGxpc3RcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1Q6ICdBZHZhbmNlZCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ1BsZWFzZSBlbnRlciB0aGUgZW5kcG9pbnQnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVRIT0Q6ICdTZXQgTWV0aG9kJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9NRVRIT0Q6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZXF1ZXN0IG1ldGhvZCcsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX0ZPUk1fREFUQV9LRVk6ICdTZXQgRm9ybURhdGEgS2V5JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9GT1JNX0RBVEFfS0VZOiAnUGxlYXNlIGVudGVyIHRoZSBGb3JtRGF0YSBrZXknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9IRUFERVJTOiAnU2V0IEhlYWRlcnMnLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlM6ICdzdWNoIGFzIHtcIkNvbnRlbnQtVHlwZVwiOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIn0nLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9CT0RZOiAnU2V0IEJvZHknLFxuICBQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0JPRFk6ICdzdWNoIGFzIHtcImtleVwiOiBcInZhbHVlXCJ9JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfQ1VTVE9NX1BSRUZJWDogJ1NldCBDdXN0b20gUHJlZml4JyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9DVVNUT01fUFJFRklYOiAnc3VjaCBhcyBodHRwczovL2V4YW1wbGUuY29tLycsXG4gIFBJQ0JFRF9BRFZBTkNFRFBMSVNUX1JFU19EQVRBX1BBVEg6ICdTZXQgUmVzcG9uc2UgRGF0YSBQYXRoJyxcbiAgUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9SRVNfREFUQV9QQVRIOiAnc3VjaCBhcyBkYXRhLnVybCcsXG4gIC8vIGxvY2FsXG4gIFBJQ0JFRF9MT0NBTDogJ0xvY2FsJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICdFeC4gL1VzZXJzL25hbWUvUGljdHVyZXMvJyxcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHVybCBwYXRoJyxcblxuICAvLyBhbGlzdFxuICBQSUNCRURfQUxJU1RfUExJU1Q6ICdBTGlzdCcsXG4gIFBJQ0JFRF9BTElTVF9VUkw6ICdTZXQgVVJMJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMOiAnRXguIGh0dHBzOi8vYWxpc3QuZXhhbXBsZS5jb20nLFxuICBQSUNCRURfQUxJU1RfVE9LRU46ICdTZXQgVG9rZW4nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTjogJ1BsZWFzZSBlbnRlciB0aGUgdG9rZW4oY2hvb3NlIG9uZSBvZiBlaXRoZXIgdXNlcm5hbWUtcGFzc3dvcmQgb3IgdG9rZW4pJyxcbiAgUElDQkVEX0FMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICdQbGVhc2UgZW50ZXIgdGhlIHVzZXJuYW1lKGNob29zZSBvbmUgb2YgZWl0aGVyIHVzZXJuYW1lLXBhc3N3b3JkIG9yIHRva2VuKScsXG4gIFBJQ0JFRF9BTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIGVudGVyIHRoZSBwYXNzd29yZCcsXG4gIFBJQ0JFRF9BTElTVF9VUExPQURfUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VQTE9BRF9QQVRIOiAnRXguIC90ZXN0LycsXG4gIFBJQ0JFRF9BTElTVF9XRUJfUEFUSDogJ1NldCBXZWIgUGF0aCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSB1cmwgcGF0aCcsXG4gIFBJQ0JFRF9BTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBBbGktY2xvdWRcbiAgUElDQkVEX0FMSUNMT1VEOiAnQWxpIENsb3VkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAnU2V0IGFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBhY2Nlc3NLZXlTZWNyZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/eC1vc3MtcHJvY2Vzcz14eHgnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gVGVuY2VudC1jbG91ZFxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0Nob29zZSBDT1MgdmVyc2lvbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICdTZXQgU2VjcmV0SWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAnU2V0IEFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICdFeC4gMTIzNDU2Nzg5MCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cDovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ1NldCBJbWFnZVNsaW0nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICdJbWFnZSBleHRyZW1lbHkgaW50ZWxsaWdlbnQgY29tcHJlc3Npb24sIHBsZWFzZSByZWZlciB0byB0aGUgW2RvY3VtZW50IGRlc2NyaXB0aW9uXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg2NDM4KScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAnT1BFTicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICdDTE9TRScsXG4gIC8vIEdpdEh1YlxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ1NldCBSZXBvIE5hbWUnLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAnU2V0IEJyYW5jaCcsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ0V4LiBtYWluJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ1NldCBBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX1FJTklVX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICdTZXQgVVJMJyxcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ0V4LiBodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcblxuICAvLyBpbWd1clxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ1NldCBDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICdTZXQgQWNjZXNzIFRva2VuJyxcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAnU2V0IEFsYnVtIE5hbWUnLFxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICdTZXQgUHJveHknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgYXMgYW5vbnltb3VzJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAnRXguIHRlc3QnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ0V4LiBodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxuXG4gIC8vIHVweXVuXG4gIFBJQ0JFRF9VUFlVTjogJ1VweXVuJyxcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfVVBZVU5fRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICdTZXQgT3BlcmF0b3InLFxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICdTZXQgT3BlcmF0b3IgUGFzc3dvcmQnLFxuICBQSUNCRURfVVBZVU5fUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX1VQWVVOX1VSTDogJ1NldCBVUkwnLFxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICdTZXQgQW50aS1MZWVjaCBUb2tlbicsXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ1NldCBFeHBpcmUgVGltZShzZWNvbmRzKScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAnRXguIG1lJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgb3BlcmF0b3IgcGFzc3dvcmQnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICdFeC4gaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICdFeC4gIWltZ3NsaW0nLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcblxuICAvLyB3ZWJkYXZcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAnU2V0IEF1dGggVHlwZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAnRXguIG1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSB0aGUgVVJMIG9mIHRoZSBpbWFnZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/a2V5PXZhbHVlJyxcblxuICAvLyBzZnRwcGxpc3RcbiAgUElDQkVEX1NGVFBQTElTVDogJ1NGVFAgQnVpbGRpbicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ1NldCBIb3N0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ1NldCBQcml2YXRlIEtleScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnU2V0IFByaXZhdGUgS2V5IFBhc3NwaHJhc2UnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICdTZXQgVXBsb2FkIFBhdGgnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICdTZXQgRmlsZSBVc2VyOkdyb3VwJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICdTZXQgRmlsZSBNb2RlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ1NldCBEaXJlY3RvcnkgTW9kZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIDEuMS4xLjMnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ0RlZmF1bHQgMjInLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ0V4LiAvVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ1BsZWFzZSB0eXBlIHRoZSBwcml2YXRlIGtleSBwYXNzcGhyYXNlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSB0aGUgVVJMIG9mIHRoZSBpbWFnZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICdFeC4gd3d3OmRhdGEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAnRXguIDA2NjQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICdFeC4gMDc3NScsXG5cbiAgLy8gUGljTGlzdFxuICBQSUNCRURfUElDTElTVDogJ1BpY0xpc3QnLFxuICBQSUNCRURfUElDTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxuICBQSUNCRURfUElDTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICdTZXQgUGljQmVkJyxcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ1NldCBDb25maWcgTmFtZScsXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ1NldCBLZXknLFxuXG4gIC8vIExza3kgUHJvXG4gIFBJQ0JFRF9MU0tZX1BMSVNUOiAnTHNreScsXG4gIFBJQ0JFRF9MU0tZX1ZFUlNJT046ICdTZXQgVmVyc2lvbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ0V4LiB2MScsXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ0V4LiBodHRwczovL2xza3kuY28nLFxuICBQSUNCRURfTFNLWV9UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICdFeC4geHh4JyxcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICdTZXQgU3RyYXRlZ3kgSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAnRXguIDEnLFxuICBQSUNCRURfTFNLWV9BTEJVTV9JRDogJ1NldCBBbGJ1bSBJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICdPcHRpb25hbCwgb25seSBmb3IgVjInLFxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAnU2V0IFBlcm1pc3NvbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ0V4LiBwdWJsaWMnLFxuXG4gIC8vIEF3c1MzUGxpc3RcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ1NldCBBY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICdTZXQgU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ1NldCBSZWdpb24nLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9QUk9YWTogJ1NldCBQcm94eScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAnU2V0IFBhdGhTdHlsZUFjY2VzcycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ1NldCBSZWplY3RVbmF1dGhvcml6ZWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICdTZXQgQUNMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOlxuICAgICd3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQsIHdoZXRoZXIgdG8gZGlzYWJsZSBhZGRpbmcgYnVja2V0IHByZWZpeCB0byB1cmwnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAnRXguIHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ0V4LiB4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ0V4LiB0ZXN0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICdFeC4gdXMtZWFzdC0xJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3Qve2Z1bGxOYW1lfScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAnRW5hYmxlIHdoZW4gYHBhdGhTdHlsZUFjY2Vzc2AgaXMgcmVxdWlyZWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ0VuYWJsZSB3aGVuIHJlamVjdGluZyBpbnZhbGlkIFRMUyBjZXJ0aWZpY2F0ZSBjb25uZWN0aW9uIGlzIHJlcXVpcmVkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICdFeC4gcHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQnLFxuXG4gIEJVSUxESU5fUkVOQU1FOiAnUmVuYW1lIFNldHRpbmdzJyxcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAnU2V0IHJlbmFtZSBmb3JtYXQnLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICdFbmFibGUgcmVuYW1lJyxcblxuICBCVUlMRElOX1dBVEVSTUFSSzogJ1dhdGVybWFyayBTZXR0aW5ncycsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICdTZXQgd2F0ZXJtYXJrIHR5cGUnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdFbmFibGUgd2hlbiBmdWxsLXNjcmVlbiB3YXRlcm1hcmsgaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAnU2V0IHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGZvbnQgZmlsZSBwYXRoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAnU2V0IHdhdGVybWFyayBmb250IGNvbG9yJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXG5cbiAgQlVJTERJTl9DT01QUkVTUzogJ1Byb2Nlc3NpbmcgU2V0dGluZ3MnLFxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICdTZXQgaW1hZ2UgcXVhbGl0eScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAwLTEwMCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAnV2hldGhlciB0byBwZXJmb3JtIGZvcm1hdCBjb252ZXJzaW9uJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ0VuYWJsZSB3aGVuIGZvcm1hdCBjb252ZXJzaW9uIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICdQbGVhc2Ugc2VsZWN0IGNvbnZlcnNpb24gZm9ybWF0JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ1NldCByZXNpemluZyB3aWR0aCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlIGJ5IHBlcmNlbnRhZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIHZlcnRpY2FsbHknLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxPUDogJ1doZXRoZXIgdG8gZmxpcCB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5JyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICdXaGV0aGVyIHRvIHNraXAgcmVzaXppbmcgb2Ygc21hbGwgaW1hZ2VzJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ0VuYWJsZSB3aGVuIGltYWdlIHJvdGF0aW9uIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICdTZXQgcm90YXRpb24gYW5nbGUnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ1doZXRoZXIgdG8gcmVtb3ZlIEVYSUYgaW5mb3JtYXRpb24nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAnRW5hYmxlIHdoZW4gcmVtb3ZpbmcgRVhJRiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCcsXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjpcbiAgICAnUGx1Z2luIGluc3RhbGxhdGlvbiBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6XG4gICAgJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSBvciB2YWxpZCBpbnN0YWxsYXRpb24gcGF0aCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOlxuICAgICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgZXJyb3IgY29kZSBpcyAke2NvZGV9LCBlcnJvciBsb2cgaXMgXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcbn1cbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcbmltcG9ydCB7IHJlbW92ZSwgZW5zdXJlRmlsZVN5bmMsIHBhdGhFeGlzdHNTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBnZXQsIHNldCwgdW5zZXQgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBDb21tYW5kZXIgfSBmcm9tICcuLi9saWIvQ29tbWFuZGVyJ1xuaW1wb3J0IHsgTGlmZWN5Y2xlUGx1Z2lucywgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuLi9saWIvTGlmZWN5Y2xlUGx1Z2lucydcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXG5pbXBvcnQgeyBQbHVnaW5IYW5kbGVyIH0gZnJvbSAnLi4vbGliL1BsdWdpbkhhbmRsZXInXG5pbXBvcnQgeyBQbHVnaW5Mb2FkZXIgfSBmcm9tICcuLi9saWIvUGx1Z2luTG9hZGVyJ1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xuXG5pbXBvcnQgeyBMaWZlY3ljbGUgfSBmcm9tICcuL0xpZmVjeWNsZSdcblxuaW1wb3J0IGJ1aWxkSW5VcGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcbmltcG9ydCBidWlsZEluVHJhbnNmb3JtZXJzIGZyb20gJy4uL3BsdWdpbnMvdHJhbnNmb3JtZXInXG5cbmltcG9ydCBnZXRDbGlwYm9hcmRJbWFnZSBmcm9tICcuLi91dGlscy9nZXRDbGlwYm9hcmRJbWFnZSdcblxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IERCIGZyb20gJy4uL3V0aWxzL2RiJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCwgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXG5cbmltcG9ydCB7IEkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vaTE4bidcblxuaW1wb3J0IHtcbiAgSUhlbHBlcixcbiAgSUltZ0luZm8sXG4gIElDb25maWcsXG4gIElQaWNHbyxcbiAgSVN0cmluZ0tleU1hcCxcbiAgSVBsdWdpbkxvYWRlcixcbiAgSUkxOG5NYW5hZ2VyLFxuICBJUGljR29QbHVnaW4sXG4gIElQaWNHb1BsdWdpbkludGVyZmFjZSxcbiAgSVJlcXVlc3Rcbn0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBQaWNHbyBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElQaWNHbyB7XG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcbiAgcHJpdmF0ZSBsaWZlY3ljbGUhOiBMaWZlY3ljbGVcbiAgcHJpdmF0ZSBkYiE6IERCXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxuICBjb25maWdQYXRoOiBzdHJpbmdcbiAgYmFzZURpciE6IHN0cmluZ1xuICBoZWxwZXIhOiBJSGVscGVyXG4gIGxvZzogTG9nZ2VyXG4gIGNtZDogQ29tbWFuZGVyXG4gIG91dHB1dDogSUltZ0luZm9bXVxuICBpbnB1dDogYW55W11cbiAgcmF3SW5wdXQ6IGFueVtdXG4gIHByb2Nlc3NlZElucHV0OiBhbnlbXVxuICBwbHVnaW5IYW5kbGVyOiBQbHVnaW5IYW5kbGVyXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xuICAgKlxuICAgKiB1c2UgcmVxdWVzdCBpbnN0ZWFkXG4gICAqL1xuICBSZXF1ZXN0ITogUmVxdWVzdFxuICBpMThuITogSUkxOG5NYW5hZ2VyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cbiAgR1VJX1ZFUlNJT04/OiBzdHJpbmdcblxuICBnZXQgcGx1Z2luTG9hZGVyKCk6IElQbHVnaW5Mb2FkZXIge1xuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ1BhdGg6IHN0cmluZyA9ICcnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhcbiAgICB0aGlzLmlucHV0ID0gW11cbiAgICB0aGlzLnJhd0lucHV0ID0gW11cbiAgICB0aGlzLnByb2Nlc3NlZElucHV0ID0gW11cbiAgICB0aGlzLm91dHB1dCA9IFtdXG4gICAgdGhpcy5oZWxwZXIgPSB7XG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXG4gICAgICB1cGxvYWRlcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3VwbG9hZGVyJyksXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcbiAgICAgIGFmdGVyVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2FmdGVyVXBsb2FkUGx1Z2lucycpXG4gICAgfVxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxuICAgIHRoaXMubG9nID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXG4gICAgdGhpcy5pbml0Q29uZmlnKClcbiAgICB0aGlzLmluaXQoKVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSB0aGlzLmNvbmZpZ1BhdGggfHwgcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNsaXN0L2NvbmZpZy5qc29uJylcbiAgICBpZiAocGF0aC5leHRuYW1lKHRoaXMuY29uZmlnUGF0aCkudG9VcHBlckNhc2UoKSAhPT0gJy5KU09OJykge1xuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcbiAgICAgIHRocm93IEVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcbiAgICB9XG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcbiAgICBpZiAoIXBhdGhFeGlzdHNTeW5jKHRoaXMuY29uZmlnUGF0aCkpIHtcbiAgICAgIGVuc3VyZUZpbGVTeW5jKGAke3RoaXMuY29uZmlnUGF0aH1gKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYi5yZWFkKHRydWUpIGFzIElDb25maWdcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgLy8gaW5pdCAxOG4gYXQgZmlyc3RcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxuICAgICAgdGhpcy5SZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpcylcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlciA9IG5ldyBQbHVnaW5Mb2FkZXIodGhpcylcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgncGljZ28nKVxuICAgICAgYnVpbGRJblVwbG9hZGVycygpLnJlZ2lzdGVyKHRoaXMpXG4gICAgICBidWlsZEluVHJhbnNmb3JtZXJzKCkucmVnaXN0ZXIodGhpcylcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCcnKVxuICAgICAgLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXG4gICAgICB0aGlzLmxpZmVjeWNsZSA9IG5ldyBMaWZlY3ljbGUodGhpcylcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXG4gICAgICB0aGlzLmxvZy5lcnJvcihlKVxuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBlYXNpbHkgbWFubnVhbGx5IGxvYWQgYSBwbHVnaW5cbiAgICogaWYgcHJvdmlkZSBwbHVnaW4gbmFtZSwgd2lsbCByZWdpc3RlciBwbHVnaW4gYnkgbmFtZVxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXG4gICAqL1xuICB1c2UocGx1Z2luOiBJUGljR29QbHVnaW4sIG5hbWU/OiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2Uge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIVxuICAgIH1cbiAgICByZXR1cm4gcGx1Z2luKHRoaXMpXG4gIH1cblxuICByZWdpc3RlckNvbW1hbmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggIT09ICcnKSB7XG4gICAgICB0aGlzLmNtZC5pbml0KClcbiAgICAgIHRoaXMuY21kLmxvYWRDb21tYW5kcygpXG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZmlnPFQ+KG5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIHVua25vd24gYXMgVFxuICAgIH1cbiAgICByZXR1cm4gZ2V0KHRoaXMuX2NvbmZpZywgbmFtZSlcbiAgfVxuXG4gIHNhdmVDb25maWcoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLmRiLnNhdmVDb25maWcoY29uZmlnKVxuICB9XG5cbiAgcmVtb3ZlQ29uZmlnKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXG4gICAgdGhpcy5kYi51bnNldChrZXksIHByb3BOYW1lKVxuICB9XG5cbiAgc2V0Q29uZmlnKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke25hbWV9IGNhbid0IGJlIG1vZGlmaWVkYClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXG4gICAgICB9XG4gICAgICBzZXQodGhpcy5fY29uZmlnLCBuYW1lLCBjb25maWdbbmFtZV0pXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XG4gICAgICAgIGNvbmZpZ05hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBjb25maWdbbmFtZV1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHVuc2V0Q29uZmlnKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXG4gIH1cblxuICBnZXQgcmVxdWVzdCgpOiBJUmVxdWVzdFsncmVxdWVzdCddIHtcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXG4gIH1cblxuICBhc3luYyB1cGxvYWQoaW5wdXQ/OiBhbnlbXSk6IFByb21pc2U8SUltZ0luZm9bXSB8IEVycm9yPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdObyBjb25maWcgZmlsZSBmb3VuZCwgcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlnIGZpbGUgcGF0aCcpXG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxuICAgICAgICBjb25zdCBjbGVhbnVwID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICByZW1vdmUoaW1nUGF0aCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCBjbGVhbnVwKVxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjbGVhbnVwKVxuICAgICAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0pXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQpXG4gICAgICByZXR1cm4gb3V0cHV0XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkUmV0dXJuQ3R4KGlucHV0PzogYW55W10sIHNraXBQcm9jZXNzID0gZmFsc2UpOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignTm8gY29uZmlnIGZpbGUgZm91bmQsIHBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZyBmaWxlIHBhdGgnKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxuICAgICAgICBjb25zdCBjbGVhbnVwID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICByZW1vdmUoaW1nUGF0aCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCBjbGVhbnVwKVxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjbGVhbnVwKVxuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChbaW1nUGF0aF0sIHNraXBQcm9jZXNzKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoaW5wdXQsIHNraXBQcm9jZXNzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgSW1nRnJvbVBhdGggZnJvbSAnLi9wYXRoJ1xuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXG5cbmNvbnN0IGJ1aWxkSW5UcmFuc2Zvcm1lcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgcmVnaXN0ZXIoY3R4OiBJUGljR28pIHtcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ3BhdGgnLCBJbWdGcm9tUGF0aClcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5UcmFuc2Zvcm1lcnNcbiJdLCJuYW1lcyI6WyJjcmVhdGVDb21tYW5kIiwiY21kIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxpYXMiLCJhY3Rpb24iLCJvcHRpb25zIiwicHJvZ3JhbSIsInByb3h5Iiwib3B0aW9uIiwicmVnaXN0cnkiLCJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwicGx1Z2lucyIsImluc3RhbGwiLCJjYXRjaCIsImUiLCJsb2ciLCJlcnJvciIsInVuaW5zdGFsbCIsInVwZGF0ZSIsImNvbmZpZyIsInJhbmRvbVN0cmluZ0dlbmVyYXRvciIsImxlbmd0aCIsImNoYXJzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiam9pbiIsImZvcm1hdEhlbHBlciIsIm51bSIsInRvU3RyaW5nIiwiZ2V0TWQ1IiwiaW5wdXQiLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwiZGlnZXN0IiwicmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIiwib2xkTmFtZSIsImN1c3RvbUZvcm1hdCIsImFmZml4RmlsZU5hbWUiLCJmaWxlQnVmZmVyIiwibm93IiwiRGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsImZpbGViYXNlbmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImV4dG5hbWUiLCJjb252ZXJzaW9uTWFwIiwic2xpY2UiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwicGFkU3RhcnQiLCJ1dWlkdjQiLCJ2NCIsInJlcGxhY2UiLCJnZXRUaW1lIiwidW5kZWZpbmVkIiwiT2JqZWN0Iiwia2V5cyIsInNvbWUiLCJpdGVtIiwiaW5jbHVkZXMiLCJleHQiLCJuZXdOYW1lIiwicmVkdWNlIiwiYWNjIiwiY3VyIiwiUmVnRXhwIiwiXyIsImdyb3VwMSIsInBhcnNlSW50IiwiX3Jlc3VsdCIsImtleSIsImNvdW50IiwibWF4IiwiZGlybmFtZSIsInNwbGl0Iiwic2VwIiwiYSIsImIiLCJpc1VybCIsInVybCIsInRlc3QiLCJpc1VybEVuY29kZSIsImRlY29kZVVSSSIsImhhbmRsZVVybEVuY29kZSIsImVuY29kZVVSSSIsImdldEltYWdlU2l6ZSIsImZpbGUiLCJ3aWR0aCIsImhlaWdodCIsInR5cGUiLCJpbWFnZVNpemUiLCJyZWFsIiwiZ2V0RlNGaWxlIiwiYXN5bmMiLCJmaWxlUGF0aCIsImZpbGVOYW1lIiwiYnVmZmVyIiwicmVhZEZpbGUiLCJzdWNjZXNzIiwiX2EiLCJyZWFzb24iLCJnZXRVUkxGaWxlIiwidGltZW91dElkIiwicmVxdWVzdEZuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXMiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcCIsImRhdGEiLCJjbGVhclRpbWVvdXQiLCJ1cmxQYXRoIiwiVVJMIiwicGF0aG5hbWUiLCJzZWFyY2hQYXJhbXMiLCJnZXQiLCJzdGFydHNXaXRoIiwibWVzc2FnZSIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJnZXRQbHVnaW5OYW1lVHlwZSIsIm5hbWUiLCJpc1NpbXBsZU5hbWUiLCJuYW1lT3JQYXRoIiwiaXNBYnNvbHV0ZSIsInBsdWdpblBhdGgiLCJwcm9jZXNzIiwiY3dkIiwiZnMiLCJleGlzdHNTeW5jIiwiaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lIiwic2NvcGUiLCJnZXRQcm9jZXNzUGx1Z2luTmFtZSIsImxvZ2dlciIsImNvbnNvbGUiLCJoYW5kbGVVbml4U3R5bGVQYXRoIiwid2FybiIsImdldE5vcm1hbFBsdWdpbk5hbWUiLCJyZW1vdmVQbHVnaW5WZXJzaW9uIiwicGFja2FnZUpTT05QYXRoIiwicG9zaXgiLCJwa2ciLCJyZWFkSlNPTlN5bmMiLCJwYXRoU3RyIiwicmVnIiwibWF0Y2hBcnIiLCJtYXRjaCIsImNvbmZpZ0JsYWNrTGlzdCIsImlzQ29uZmlnS2V5SW5CbGFja0xpc3QiLCJibGFja0l0ZW0iLCJpc0lucHV0Q29uZmlnVmFsaWQiLCJpc0FycmF5Iiwic2FmZVBhcnNlIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiZm9yY2VOdW1iZXIiLCJpc05hTiIsIk51bWJlciIsImlzRGV2IiwiZW52IiwiTk9ERV9FTlYiLCJkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoIiwiX19kaXJuYW1lIiwiQWRkV2F0ZXJtYXJrIiwiaW1nIiwid2F0ZXJtYXJrVHlwZSIsImRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCIsImlzRnVsbFNjcmVlbldhdGVybWFyayIsIndhdGVybWFya0RlZ3JlZSIsInRleHQiLCJ3YXRlcm1hcmtGb250UGF0aCIsIndhdGVybWFya1NjYWxlUmF0aW8iLCJ3YXRlcm1hcmtDb2xvciIsIndhdGVybWFya0ltYWdlUGF0aCIsInBvc2l0aW9uIiwiaW1hZ2UiLCJzaGFycCIsImFuaW1hdGVkIiwiaW1nV2lkdGgiLCJtZXRhZGF0YSIsIndhdGVybWFyayIsInRvQnVmZmVyIiwiY29sb3IiLCJmb250RmFtaWx5IiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImZpbGwiLCJ0ZXh0U1ZHIiwiVGV4dFRvU1ZHIiwibG9hZFN5bmMiLCJnZXRTVkciLCJCdWZmZXIiLCJ0ZXh0MlNWRyIsIndhdGVybWFya1dpZHRoIiwid2F0ZXJtYXJrSGVpZ2h0IiwiZ2V0U2l6ZSIsIndhdGVybWFya1Jlc2l6ZVdpZHRoIiwid2F0ZXJtYXJrUmVzaXplSGVpZ2h0IiwicmVzaXplIiwiZml0Iiwicm90YXRlIiwiYmFja2dyb3VuZCIsInIiLCJnIiwiYWxwaGEiLCJjcmVhdGVXYXRlcm1hcmsiLCJjb21wb3NpdGUiLCJncmF2aXR5IiwidGlsZSIsInZhbGlkUGFyYW0iLCJwYXJhbXMiLCJldmVyeSIsInBhcmFtIiwiYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QiLCJpbWFnZUZvcm1hdExpc3QiLCJ2YWxpZE91dHB1dEZvcm1hdCIsImZvcm1hdCIsImltYWdlQWRkV2F0ZXJNYXJrIiwid2F0ZXJtYXJrVGV4dCIsIndhdGVybWFya1Bvc2l0aW9uIiwiZm9ybWF0T3B0aW9ucyIsImZvcm1hdENvbnZlcnRPYmoiLCJxdWFsaXR5IiwiaXNDb252ZXJ0IiwiY29udmVydEZvcm1hdCIsImlzUmVTaXplIiwicmVTaXplSGVpZ2h0IiwicmVTaXplV2lkdGgiLCJza2lwUmVTaXplT2ZTbWFsbEltZyIsImlzUmVTaXplQnlQZXJjZW50IiwicmVTaXplUGVyY2VudCIsImlzUm90YXRlIiwiaXNGbGlwIiwiaXNGbG9wIiwicm90YXRlRGVncmVlIiwicGljQmVkIiwiaW1hZ2VDb21wcmVzcyIsInJhd0Zvcm1hdCIsIm5vcm1hbGl6ZUltYWdlRXh0IiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0Iiwicm91bmQiLCJzY2FsZVJhdGlvIiwiZmxpcCIsImZsb3AiLCJuZXdGb3JtYXQiLCJnZXRDb252ZXJ0ZWRGb3JtYXQiLCJ0b0Zvcm1hdCIsIm1vempwZWciLCJ0b0xvd2VyQ2FzZSIsImlzTmVlZEFkZFdhdGVybWFyayIsIndhdGVybWFya09wdGlvbnMiLCJmaWxlRXh0IiwiaXNBZGRXYXRlcm1hcmsiLCJpc05lZWRDb21wcmVzcyIsImNvbXByZXNzT3B0aW9ucyIsInJlbW92ZUV4aWYiLCJ1cGxvYWQiLCJhcmd1bWVudHMiLCJpbnB1dExpc3QiLCJmaWx0ZXIiLCJleGlzdCIsImNvbXByZXNzIiwidXNlckNvbmZpZyIsImdldENvbmZpZyIsInByZWZpeCIsImkxOG4iLCJ0cmFuc2xhdGUiLCJyZXF1aXJlZCIsImRlZmF1bHQiLCJjaG9pY2VzIiwiaXNSZW1vdmVFeGlmIiwicmVuYW1lIiwiZW5hYmxlIiwidXBsb2FkZXJUcmFuc2xhdG9ycyIsImFkdmFuY2VkcGxpc3QiLCJhbGlzdHBsaXN0IiwiYWxpeXVuIiwiZ2l0aHViIiwiaW1ndXIiLCJsb2NhbCIsImxza3lwbGlzdCIsInBpY2xpc3QiLCJxaW5pdSIsInNmdHBwbGlzdCIsInNtbXMiLCJ0Y3l1biIsInVweXVuIiwid2ViZGF2cGxpc3QiLCJoYW5kbGVDb25maWciLCJwcm9tcHRzIiwibW9kdWxlIiwiYW5zd2VyIiwiaW5xdWlyZXIiLCJwcm9tcHQiLCJjb25maWdOYW1lIiwic2F2ZUNvbmZpZyIsInNldHRpbmciLCJ2YWx1ZSIsImJ1aWxkaW4iLCJoZWxwZXIiLCJnZXRJZExpc3QiLCJwbHVnaW5Mb2FkZXIiLCJnZXRQbHVnaW4iLCJnZXRGdWxsTGlzdCIsIl9iIiwicGx1Z2luIiwiaW5mbyIsImFyZ3YiLCJ1c2UiLCJ1cGxvYWRlciIsInRyYW5zZm9ybWVyIiwicHVzaCIsImZvckVhY2giLCJwaWNnb1BsdWdpbnMiLCJzZXRDb25maWciLCJnZW5lcmF0ZSIsIm9wdHMiLCJnZXRPcHRpb25zIiwidG1wIiwic291cmNlIiwiYW5zd2VycyIsIl9maWxlcyIsImdsb2JieSIsImRvdCIsImdsb2IiLCJmaWx0ZXJzIiwiZmlsZXMiLCJyZW5kZXIiLCJ3cml0ZUZpbGVUcmVlIiwiZGVzdCIsImNvbXBsZXRlIiwiY29tcGxldGVNZXNzYWdlIiwiZXhwIiwiZm4iLCJGdW5jdGlvbiIsInN0cmluZ2lmeSIsInRlbXBsYXRlUGF0aCIsIm9wdGlvbnNQYXRoIiwicmVxdWlyZSIsImZpbGVUcmVlIiwicmVhZEZpbGVTeW5jIiwiY29udGVudCIsImVqc1JlbmRlciIsImlzQnVmZmVyIiwiZGlyIiwiZW5zdXJlRGlyU3luYyIsIndyaXRlRmlsZVN5bmMiLCJydW4iLCJvZmZsaW5lIiwidGVtcGxhdGUiLCJoYXNTbGFzaCIsImRvd25sb2FkQW5kR2VuZXJhdGUiLCJzeW5jIiwiZG93bmxvYWQiLCJjbG9uZSIsImVyciIsImluaXQiLCJwcm9qZWN0IiwiaW5QbGFjZSIsImhvbWVkaXIiLCJvayIsIm9uIiwiY2hhbGsiLCJncmF5IiwibGFuZyIsImxpc3QiLCJnZXRMYW5ndWFnZUxpc3QiLCJzZXRMYW5ndWFnZSIsIkxpZmVjeWNsZVBsdWdpbnMiLCJjb25zdHJ1Y3RvciIsInRoaXMiLCJNYXAiLCJwbHVnaW5JZE1hcCIsInJlZ2lzdGVyIiwiaWQiLCJUeXBlRXJyb3IiLCJoYXMiLCJzZXQiLCJjdXJyZW50UGx1Z2luIiwidW5yZWdpc3RlciIsInBsdWdpbk5hbWUiLCJwbHVnaW5MaXN0IiwiZGVsZXRlIiwiZ2V0TmFtZSIsImdldExpc3QiLCJ2YWx1ZXMiLCJzZXRDdXJyZW50UGx1Z2luTmFtZSIsIkNvbW1hbmRlciIsIkNvbW1hbmQiLCJ2ZXJzaW9uIiwiZGVidWciLCJzaWxlbnQiLCJhcmdzIiwiZXhpdCIsImN1cnJlbnRQbHVnaW5OYW1lIiwibG9hZENvbW1hbmRzIiwiSUxvZ1R5cGUiLCJJQnVpbGRJbkV2ZW50IiwiSUJ1c0V2ZW50IiwiTG9nZ2VyIiwibGV2ZWwiLCJoYW5kbGVMb2ciLCJtc2ciLCJsb2dMZXZlbCIsImNoZWNrTG9nTGV2ZWwiLCJsb2dIZWFkZXIiLCJ0b1VwcGVyQ2FzZSIsImxvZ1BhdGgiLCJiYXNlRGlyIiwicmVzdWx0IiwiY2hlY2tMb2dGaWxlSXNMYXJnZSIsImlzTGFyZ2UiLCJ3YXJuaW5nTXNnIiwibG9nRmlsZVNpemVMaW1pdCIsInllbGxvdyIsInJlY3JlYXRlTG9nRmlsZSIsInVuc2hpZnQiLCJoYW5kbGVXcml0ZUxvZyIsImxvZ0ZpbGVTaXplIiwic3RhdFN5bmMiLCJzaXplIiwidW5saW5rU3luYyIsImNyZWF0ZUZpbGVTeW5jIiwiZGF5anMiLCJFcnJvciIsInV0aWwiLCJzdGFjayIsImFwcGVuZEZpbGVTeW5jIiwiUGx1Z2luSGFuZGxlciIsImluc3RhbGxlZFBsdWdpbnMiLCJwcm9jZXNzUGx1Z2lucyIsImhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzIiwiaGFzUGx1Z2luIiwicGtnTmFtZSIsImZ1bGxOYW1lTGlzdCIsImZ1bGxOYW1lIiwicGtnTmFtZUxpc3QiLCJleGVjQ29tbWFuZCIsImNvZGUiLCJlbWl0IiwidGl0bGUiLCJib2R5IiwicmVnaXN0ZXJQbHVnaW4iLCJ1bnJlZ2lzdGVyUGx1Z2luIiwibW9kdWxlcyIsIndoZXJlIiwiY29uY2F0IiwibnBtIiwic3Bhd24iLCJhc3NpZ24iLCJvdXRwdXQiLCJzdGRvdXQiLCJwaXBlIiwic3RkZXJyIiwiRkFJTEVEIiwiUGx1Z2luTG9hZGVyIiwiZnVsbExpc3QiLCJTZXQiLCJwbHVnaW5NYXAiLCJwYWNrYWdlUGF0aCIsInJlcG9zaXRvcnkiLCJsaWNlbnNlIiwicmVzb2x2ZVBsdWdpbiIsImJhc2VkaXIiLCJsb2FkIiwicGx1Z2luRGlyIiwianNvbiIsImRlcHMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBzIiwiZGV2RGVwZW5kZW5jaWVzIiwiYWRkIiwicGx1Z2luSW50ZXJmYWNlIiwiTk9USUZJQ0FUSU9OIiwiYmVmb3JlVHJhbnNmb3JtUGx1Z2lucyIsImJlZm9yZVVwbG9hZFBsdWdpbnMiLCJhZnRlclVwbG9hZFBsdWdpbnMiLCJyZW1vdmVDb25maWciLCJldmVudEJ1cyIsIkV2ZW50RW1pdHRlciIsImh0dHBzQWdlbnQiLCJodHRwcyIsIkFnZW50IiwibWF4VmVyc2lvbiIsIm1pblZlcnNpb24iLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJhcHBlbmRGb3JtRGF0YSIsImZvcm0iLCJhcHBlbmQiLCJyZXNwb25zZUludGVyY2VwdG9yIiwicmVzcG9uc2UiLCJzdGF0dXNDb2RlIiwic3RhdHVzIiwicmVzcG9uc2VFcnJvckhhbmRsZXIiLCJlcnJvck9iaiIsIl9jIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJSZXF1ZXN0IiwiQ09ORklHX0NIQU5HRSIsImhhbmRsZVByb3h5IiwicHJveHlPcHRpb25zIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInByb3RvY29sIiwiaGVhZGVycyIsIm1heEJvZHlMZW5ndGgiLCJJbmZpbml0eSIsIm1heENvbnRlbnRMZW5ndGgiLCJodHRwc092ZXJIdHRwIiwiaW5zdGFuY2UiLCJheGlvcyIsImNyZWF0ZSIsImludGVyY2VwdG9ycyIsIm9wdCIsIl9faXNPbGRPcHRpb25zIiwiRm9ybURhdGEiLCJmb3JtRGF0YSIsImdldEhlYWRlcnMiLCJxcyIsInJlcXVlc3RJbnRlcmNlcHRvciIsIm9iaiIsImNvbnRlbnRUeXBlIiwiQ29udGVudFR5cGUiLCJMaWZlY3ljbGUiLCJzdXBlciIsInR0ZlBhdGgiLCJlbXB0eURpclN5bmMiLCJoZWxwR2V0T3B0aW9uIiwic2tpcFByb2Nlc3MiLCJjb25maWdQYXRoIiwicmF3SW5wdXQiLCJwcm9jZXNzZWRJbnB1dCIsIlZFUlNJT04iLCJHVUlfVkVSU0lPTiIsImJpbmQiLCJ1bnNldENvbmZpZyIsInVwbG9hZFJldHVybkN0eCIsImFkZExpc3RlbmVyIiwib25jZSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwibGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwibGlzdGVuZXJDb3VudCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJldmVudE5hbWVzIiwiY3JlYXRlQ29udGV4dCIsInJhd0lucHV0UGF0aCIsImNsb25lRGVlcCIsImRvVXBsb2FkIiwiYWZ0ZXJVcGxvYWQiLCJwcmVwcm9jZXNzIiwiYmVmb3JlVHJhbnNmb3JtIiwiZG9UcmFuc2Zvcm0iLCJidWlsZEluUmVuYW1lIiwiYmVmb3JlVXBsb2FkIiwiVVBMT0FEX1BST0dSRVNTIiwiQkVGT1JFX1RSQU5TRk9STSIsInRlbXBGaWxlUGF0aCIsImFsbFNldHRsZWQiLCJpbmRleCIsIml0ZW1Jc1VybCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiaXNTa2lwIiwiZXh0ZW50aW9uIiwiZG93bmxvYWRUVEYiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwibmV3RXh0IiwidGVtcEZpbGUiLCJyZW5hbWVDb25maWciLCJiYXNlNjRJbWFnZSIsImhhbmRsZVBsdWdpbnMiLCJjdXJyZW50VHJhbnNmb3JtZXIiLCJCRUZPUkVfVVBMT0FEIiwib3V0cHV0SW1nIiwiQUZURVJfVVBMT0FEIiwiaXNFbmNvZGVPdXRwdXRVUkwiLCJpIiwiaW1nVXJsIiwiRklOSVNIRUQiLCJsaWZlQ3ljbGVQbHVnaW5zIiwicGx1Z2luTmFtZXMiLCJsaWZlQ3ljbGVOYW1lIiwiYWxsIiwiZm9ybWF0UGF0aEhlbHBlciIsInN0YXJ0U2xhc2giLCJlbmRTbGFzaCIsInJvb3RUb0VtcHR5IiwiY2xlYW5QYXRoIiwiZW5jb2RlUGF0aCIsInAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJidWlsZEluVXBsb2FkZXJOYW1lcyIsInBvc3RPcHRpb25zIiwiZW5kcG9pbnQiLCJmb3JtRGF0YUtleSIsImZpbGVuYW1lIiwiYWR2YW5jZWRwbGlzdENvbmZpZyIsImltZ0xpc3QiLCJwb3N0Q29uZmlnIiwiaW1hZ2VVcmwiLCJyZXNEYXRhUGF0aCIsImN1c3RvbVByZWZpeCIsInRva2VuIiwiQXV0aG9yaXphdGlvbiIsImhhbmRsZVJlc0Vycm9yIiwiZXh0cmFjdENvbmZpZyIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1cGxvYWRQYXRoIiwid2ViUGF0aCIsImN1c3RvbVVybCIsImFsaXN0Q29uZmlnIiwidG9rZW5TdG9yZSIsInJlZnJlc2hlZEF0IiwicG9zdCIsImdldEFsaXN0VG9rZW4iLCJmdWxsVXBsb2FkUGF0aCIsInVwbG9hZFJlcyIsInJlZnJlc2hVcmwiLCJnZXRJbmZvVXJsIiwicmVmcmVzaFJlcyIsInBhZ2UiLCJwZXJfcGFnZSIsInJlZnJlc2giLCJnZXRJbmZvUmVzIiwic2lnbiIsImVuY29kZWRQYXRoIiwiZ2V0Q3VycmVudFVUQ0RhdGUiLCJ0b1VUQ1N0cmluZyIsImdlbmVyYXRlU2lnbmF0dXJlIiwiZGF0ZSIsInNpZ25TdHJpbmciLCJsb29rdXAiLCJidWNrZXQiLCJzaWduYXR1cmUiLCJjcmVhdGVIbWFjIiwiYWNjZXNzS2V5U2VjcmV0IiwiYWNjZXNzS2V5SWQiLCJhcmVhIiwiSG9zdCIsImFsaVl1bk9wdGlvbnMiLCJvcHRpb25VcmwiLCJGaWxlTmFtZUdlbmVyYXRvciIsIm1vbnRoIiwiZGF5IiwiZXh0TmFtZSIsIm1kNSIsImltZ0J1ZmZlciIsIm1kNUI2NCIsIm1kNUI2NFNob3J0Iiwic2hhMSIsInNoYTI1NiIsInRpbWVzdGFtcCIsInRpbWVzdGFtcE1TIiwiZm9ybWF0UGF0aCIsImZpbGVOYW1lR2VuZXJhdG9yIiwiZmllbGRzIiwicmUiLCJnZXRQcm94eUFnZW50Iiwic3NsRW5hYmxlZCIsImZvcm1hdGVkUHJveHkiLCJmb3JtYXRIdHRwUHJveHlVUkwiLCJIdHRwc1Byb3h5QWdlbnQiLCJIdHRwUHJveHlBZ2VudCIsImtlZXBBbGl2ZSIsImtlZXBBbGl2ZU1zZWNzIiwic2NoZWR1bGluZyIsImNyZWF0ZVMzQ2xpZW50IiwiaHR0cEhhbmRsZXJPcHRzIiwiaHR0cEFnZW50IiwiY2xpZW50T3B0aW9ucyIsInJlZ2lvbiIsImNyZWRlbnRpYWxzIiwiYWNjZXNzS2V5SUQiLCJzZWNyZXRBY2Nlc3NLZXkiLCJ0bHMiLCJmb3JjZVBhdGhTdHlsZSIsInBhdGhTdHlsZUFjY2VzcyIsInJlcXVlc3RIYW5kbGVyIiwiTm9kZUh0dHBIYW5kbGVyIiwiUzNDbGllbnQiLCJjcmVhdGVVcGxvYWRUYXNrIiwiY29udGVudEVuY29kaW5nIiwibWltZSIsImdldFR5cGUiLCJmaWxlVHlwZSIsIkZpbGVUeXBlIiwiZnJvbUJ1ZmZlciIsImV4dHJhY3RJbmZvIiwiUHV0T2JqZWN0Q29tbWFuZCIsIkJ1Y2tldCIsImJ1Y2tldE5hbWUiLCJLZXkiLCJBQ0wiLCJhY2wiLCJCb2R5IiwiQ29udGVudEVuY29kaW5nIiwiY2xpZW50Iiwic2VuZCIsInVybFByZWZpeCIsImVUYWciLCJ2ZXJzaW9uSWQiLCJzaWduZWRVcmwiLCJnZXRTaWduZWRVcmwiLCJHZXRPYmplY3RDb21tYW5kIiwiSWZNYXRjaCIsIlZlcnNpb25JZCIsImV4cGlyZXNJbiIsInVybE9iamVjdCIsInNlYXJjaCIsImhyZWYiLCJnZXRGaWxlVVJMIiwiRVRhZyIsImltZ1VSTCIsImZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCIsImRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCIsIkJvb2xlYW4iLCJ0YXNrIiwiYnVpbGRHaXRodWJBcGlVcmwiLCJyZXBvIiwiZXh0cmEiLCJicmFuY2giLCJnaXRodWJPcHRpb25zIiwiZG93bmxvYWRfdXJsIiwiaGFzaCIsInNoYSIsImltZ0Jhc2U2NCIsImNsaWVudElkIiwiYWNjZXNzVG9rZW4iLCJmb3JtYXRBY2Nlc3NUb2tlbiIsImFsYnVtIiwiYXV0aG9yaXphdGlvbiIsInJlcXVlc3RPcHRpb25zIiwiaW5pdFBhZ2VzIiwiYWxidW1IYXNoIiwiZ2V0QWxidW1IYXNoT3B0aW9ucyIsInRpbWVvdXQiLCJhbGJ1bUxpc3QiLCJpbWd1ck9wdGlvbnMiLCJsaW5rIiwiZGVsZXRlaGFzaCIsImxvY2FsQ29uZmlnIiwiaW1nVGVtcFBhdGgiLCJmaWxlSW1nVGVtcFBhdGgiLCJmaWxlVXBsb2FkUGF0aCIsImNvcHlGaWxlU3luYyIsImdhbGxlcnlQYXRoIiwiaXNWMiIsInYxSGVhZGVycyIsIkNvbm5lY3Rpb24iLCJ2MUZvcm1EYXRhIiwic3NsIiwidjJIZWFkZXJzIiwiQWNjZXB0Iiwic3RyYXRlZ3lJZCIsImFsYnVtSWQiLCJwZXJtaXNzaW9uIiwidjJGb3JtRGF0YSIsInN0cmF0ZWd5X2lkIiwiYWxidW1faWQiLCJhZ2VudCIsImxza3lPcHRpb25zIiwibGlua3MiLCJwaWNiZWQiLCJzZXJ2ZXJLZXkiLCJpc0lwIiwiZm9ybWF0SG9zdCIsInBpY2xpc3RPcHRpb25zIiwiZnVsbFJlc3VsdCIsInNlbGVjdEFyZWEiLCJnZXRUb2tlbiIsInFpbml1T3B0aW9ucyIsImFjY2Vzc0tleSIsInNlY3JldEtleSIsIm1hYyIsImF1dGgiLCJNYWMiLCJycyIsIlB1dFBvbGljeSIsInVwbG9hZFRva2VuIiwiYmFzZVVybCIsInVybE9wdGlvbnMiLCJTU0hDbGllbnQiLCJOb2RlU1NIIiwiaXNDb25uZWN0ZWQiLCJzdGF0aWMiLCJwcml2YXRlS2V5IiwicGFzc3BocmFzZSIsImxvZ2luSW5mbyIsInByaXZhdGVLZXlQYXRoIiwiY29ubmVjdCIsInJlbW90ZSIsImNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCIsIm1rZGlyIiwicHV0RmlsZSIsImZpbGVNb2RlIiwiZXhlYyIsImRpclBhdGgiLCJkaXJlY3RvcnlNb2RlIiwiZGlyTW9kZSIsImRpcnMiLCJjdXJyZW50UGF0aCIsInNjcmlwdCIsInVzZXIiLCJncm91cCIsIl91c2VyIiwiX2dyb3VwIiwiY2xvc2UiLCJkaXNwb3NlIiwic2Z0cHBsaXN0Q29uZmlnIiwidXBsb2FkVGVtcFBhdGgiLCJnZXRJbnN0YW5jZSIsInJlbW90ZVBhdGgiLCJmaWxlVXNlciIsImNob3duIiwiaW1nVGVtcEZpbGVQYXRoIiwicmVtb3ZlU3luYyIsIm1vdmVTeW5jIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJkb21haW4iLCJzbWZpbGUiLCJzbW1zQ29uZmlnIiwiaW1hZ2VzIiwidXBsb2FkSGlzdG9yeSIsInNlY3JldElkIiwiYXBwSWQiLCJzaWduVGltZSIsInRvZGF5Iiwic2lnbktleSIsImh0dHBTdHJpbmciLCJzdHJpbmdUb1NpZ24iLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsIm9wIiwiZmlsZWNvbnRlbnQiLCJ0Y1l1bk9wdGlvbnMiLCJ1c2VWNCIsInNsaW0iLCJzb3VyY2VfdXJsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwidGlwcyIsIm9wZXJhdG9yIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJnZXRBbnRpTGVlY2hQYXJhbSIsImFudGlMZWVjaFRva2VuIiwiZXhwaXJlVGltZSIsInVyaSIsImV4cGlyZSIsInN1YnN0cmluZyIsInVweXVuT3B0aW9ucyIsInN1ZmZpeCIsInVwdCIsIndlYmRhdnBsaXN0T3B0aW9ucyIsImF1dGhUeXBlIiwid2VicGF0aCIsIkF1dGhUeXBlIiwiRGlnZXN0IiwiY3JlYXRlQ2xpZW50IiwicGF0aFRvQ3JlYXRlIiwiY3JlYXRlRGlyZWN0b3J5IiwicmVjdXJzaXZlIiwicHV0RmlsZUNvbnRlbnRzIiwib3ZlcndyaXRlIiwiYnVpbGRJblVwbG9hZGVycyIsImFkdmFuY2VkcGxpc3RVcGxvYWRlciIsImFsaXN0VXBsb2FkZXIiLCJhbGlZdW5VcGxvYWRlciIsImF3c3MzcGxpc3RVcGxvYWRlciIsImdpdGh1YlVwbG9hZGVyIiwiaW1ndXJVcGxvYWRlciIsImxvY2FsVXBsb2FkZXIiLCJsc2t5VXBsb2FkZXIiLCJwaWNsaXN0VXBsb2FkZXIiLCJxaW5pdVVwbG9hZGVyIiwic2Z0cFVwbG9hZGVyIiwic21tc1VwbG9hZGVyIiwidGNZdW5VcGxvYWRlciIsInVwWXVuVXBsb2FkZXIiLCJ3ZWJkYXZwbGlzdFVwbG9hZGVyIiwiZ2V0SW1nU2l6ZSIsIkltZ0Zyb21QYXRoIiwicmVzdWx0cyIsImltZ1NpemUiLCJJbWdGcm9tQmFzZTY0IiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwidHJpbSIsImltZ1BhdGgiLCJzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmciLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwicmVhZCIsImZsdXNoIiwidW5zZXQiLCJsYW5ndWFnZUxpc3QiLCJVUExPQURfRkFJTEVEIiwiQ0hFQ0tfU0VUVElOR1MiLCJDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSyIsIlVQTE9BRF9GQUlMRURfUkVBU09OIiwiU0VSVkVSX0VSUk9SIiwiQVVUSF9GQUlMRUQiLCJQSUNCRURfU01NUyIsIlBJQ0JFRF9TTU1TX1RPS0VOIiwiUElDQkVEX1NNTVNfTUVTU0FHRV9UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfQURWQU5DRURQTElTVCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX0VORFBPSU5UIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FVEhPRCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfTUVUSE9EIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfRk9STV9EQVRBX0tFWSIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfRk9STV9EQVRBX0tFWSIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX0hFQURFUlMiLCJQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX0hFQURFUlMiLCJQSUNCRURfQURWQU5DRURQTElTVF9CT0RZIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfTUVTU0FHRV9CT0RZIiwiUElDQkVEX0FEVkFOQ0VEUExJU1RfQ1VTVE9NX1BSRUZJWCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX01FU1NBR0VfQ1VTVE9NX1BSRUZJWCIsIlBJQ0JFRF9BRFZBTkNFRFBMSVNUX1JFU19EQVRBX1BBVEgiLCJQSUNCRURfQURWQU5DRURQTElTVF9NRVNTQUdFX1JFU19EQVRBX1BBVEgiLCJQSUNCRURfTE9DQUwiLCJQSUNCRURfTE9DQUxfUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfTE9DQUxfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX1dFQlBBVEgiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIIiwiUElDQkVEX0FMSVNUX1BMSVNUIiwiUElDQkVEX0FMSVNUX1VSTCIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9BTElTVF9UT0tFTiIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1RPS0VOIiwiUElDQkVEX0FMSVNUX1VTRVJOQU1FIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfQUxJU1RfUEFTU1dPUkQiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9BTElTVF9VUExPQURfUEFUSCIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1VQTE9BRF9QQVRIIiwiUElDQkVEX0FMSVNUX1dFQl9QQVRIIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEgiLCJQSUNCRURfQUxJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCIsIlBJQ0JFRF9BTElDTE9VRF9CVUNLRVQiLCJQSUNCRURfQUxJQ0xPVURfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9BTElDTE9VRF9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTiIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfQUxCVU0iLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9FTkRQT0lOVCIsIlBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOIiwiUElDQkVEX1VQWVVOX0VYUElSRV9USU1FIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfV0VCREFWUExJU1QiLCJQSUNCRURfV0VCREFWUExJU1RfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfU0ZUUFBMSVNUIiwiUElDQkVEX1NGVFBQTElTVF9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUiLCJQSUNCRURfUElDTElTVCIsIlBJQ0JFRF9QSUNMSVNUX0hPU1QiLCJQSUNCRURfUElDTElTVF9QT1JUIiwiUElDQkVEX1BJQ0xJU1RfUElDQkVEIiwiUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRSIsIlBJQ0JFRF9QSUNMSVNUX0tFWSIsIlBJQ0JFRF9MU0tZX1BMSVNUIiwiUElDQkVEX0xTS1lfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX0hPU1QiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1QiLCJQSUNCRURfTFNLWV9UT0tFTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9BTEJVTV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9QRVJNSVNTSU9OIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OIiwiUElDQkVEX0FXU1MzUExJU1QiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9SRUdJT04iLCJQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9QUk9YWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMIiwiQlVJTERJTl9XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9SRU5BTUUiLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTIiwiQlVJTERJTl9DT01QUkVTU19RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNGTElQIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMT1AiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUciLCJCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEIiwiZW4iLCJJMThuTWFuYWdlciIsIm9iamVjdEFkYXB0ZXIiLCJPYmplY3RBZGFwdGVyIiwibGFuZ3VhZ2UiLCJJMThuIiwiYWRhcHRlciIsImRlZmF1bHRMYW5ndWFnZSIsImxvYWRPdXR0ZXJJMThuIiwiaTE4bkZvbGRlciIsImdldE91dHRlckkxOG5Gb2xkZXIiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJpc0ZpbGUiLCJlbmRzV2l0aCIsImkxOG5GaWxlUGF0aCIsImkxOG5GaWxlIiwiaTE4bkZpbGVPYmoiLCJ5YW1sIiwicGF0aEV4aXN0c1N5bmMiLCJhZGRMb2NhbGUiLCJsb2NhbGVzIiwib3JpZ2luTG9jYWxlcyIsImdldExvY2FsZSIsIm5ld0xvY2FsZXMiLCJtZXJnZSIsInNldExvY2FsZSIsImFkZExhbmd1YWdlIiwiUGljR28iLCJfcGx1Z2luTG9hZGVyIiwiaW5pdENvbmZpZ1BhdGgiLCJpbml0Q29uZmlnIiwiZW5zdXJlRmlsZVN5bmMiLCJfY29uZmlnIiwibGlmZWN5Y2xlIiwicmVnaXN0ZXJDb21tYW5kcyIsInByb3BOYW1lIiwic3RhcnQiLCJjbGVhbnVwIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoic3hDQUlBLE1BQU1BLEdBQWdC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