`}tablecell(r){let e=this.parser.parseInline(r.tokens),t=r.header?"th":"td";return(r.align?`<${t} align="${r.align}">`:`<${t}>`)+e+`${t}>
`}strong({tokens:r}){return`${this.parser.parseInline(r)}`}em({tokens:r}){return`${this.parser.parseInline(r)}`}codespan({text:r}){return`${S(r,!0)}`}br(r){return" "}del({tokens:r}){return`${this.parser.parseInline(r)}`}link({href:r,title:e,tokens:t}){let s=this.parser.parseInline(t),n=ae(r);if(n===null)return s;r=n;let l='"+s+"",l}image({href:r,title:e,text:t,tokens:s}){s&&(t=this.parser.parseInline(s,this.parser.textRenderer));let n=ae(r);if(n===null)return S(t);r=n;let l=`",l}text(r){return"tokens"in r&&r.tokens?this.parser.parseInline(r.tokens):"escaped"in r&&r.escaped?r.text:S(r.text)}},te=class{strong({text:r}){return r}em({text:r}){return r}codespan({text:r}){return r}del({text:r}){return r}html({text:r}){return r}text({text:r}){return r}link({text:r}){return""+r}image({text:r}){return""+r}br(){return""}checkbox({raw:r}){return r}},R=class O{constructor(e){x(this,"options");x(this,"renderer");x(this,"textRenderer");this.options=e||z,this.options.renderer=this.options.renderer||new Z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new te}static parse(e,t){return new O(t).parse(e)}static parseInline(e,t){return new O(t).parseInline(e)}parse(e){var s,n;this.renderer.parser=this;let t="";for(let l=0;l{let h=a[i].flat(1/0);t=t.concat(this.walkTokens(h,e))}):a.tokens&&(t=t.concat(this.walkTokens(a.tokens,e)))}}return t}use(...r){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return r.forEach(t=>{let s={...t};if(s.async=this.defaults.async||s.async||!1,t.extensions&&(t.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let l=e.renderers[n.name];l?e.renderers[n.name]=function(...a){let i=n.renderer.apply(this,a);return i===!1&&(i=l.apply(this,a)),i}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let l=e[n.level];l?l.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),s.extensions=e),t.renderer){let n=this.defaults.renderer||new Z(this.defaults);for(let l in t.renderer){if(!(l in n))throw new Error(`renderer '${l}' does not exist`);if(["options","parser"].includes(l))continue;let a=l,i=t.renderer[a],h=n[a];n[a]=(...o)=>{let p=i.apply(n,o);return p===!1&&(p=h.apply(n,o)),p||""}}s.renderer=n}if(t.tokenizer){let n=this.defaults.tokenizer||new M(this.defaults);for(let l in t.tokenizer){if(!(l in n))throw new Error(`tokenizer '${l}' does not exist`);if(["options","rules","lexer"].includes(l))continue;let a=l,i=t.tokenizer[a],h=n[a];n[a]=(...o)=>{let p=i.apply(n,o);return p===!1&&(p=h.apply(n,o)),p}}s.tokenizer=n}if(t.hooks){let n=this.defaults.hooks||new L;for(let l in t.hooks){if(!(l in n))throw new Error(`hook '${l}' does not exist`);if(["options","block"].includes(l))continue;let a=l,i=t.hooks[a],h=n[a];L.passThroughHooks.has(l)?n[a]=o=>{if(this.defaults.async&&L.passThroughHooksRespectAsync.has(l))return(async()=>{let g=await i.call(n,o);return h.call(n,g)})();let p=i.call(n,o);return h.call(n,p)}:n[a]=(...o)=>{if(this.defaults.async)return(async()=>{let g=await i.apply(n,o);return g===!1&&(g=await h.apply(n,o)),g})();let p=i.apply(n,o);return p===!1&&(p=h.apply(n,o)),p}}s.hooks=n}if(t.walkTokens){let n=this.defaults.walkTokens,l=t.walkTokens;s.walkTokens=function(a){let i=[];return i.push(l.call(this,a)),n&&(i=i.concat(n.call(this,a))),i}}this.defaults={...this.defaults,...s}}),this}setOptions(r){return this.defaults={...this.defaults,...r},this}lexer(r,e){return y.lex(r,e??this.defaults)}parser(r,e){return R.parse(r,e??this.defaults)}parseMarkdown(r){return(e,t)=>{let s={...t},n={...this.defaults,...s},l=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&s.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=r),n.async)return(async()=>{let a=n.hooks?await n.hooks.preprocess(e):e,i=await(n.hooks?await n.hooks.provideLexer(r):r?y.lex:y.lexInline)(a,n),h=n.hooks?await n.hooks.processAllTokens(i):i;n.walkTokens&&await Promise.all(this.walkTokens(h,n.walkTokens));let o=await(n.hooks?await n.hooks.provideParser(r):r?R.parse:R.parseInline)(h,n);return n.hooks?await n.hooks.postprocess(o):o})().catch(l);try{n.hooks&&(e=n.hooks.preprocess(e));let a=(n.hooks?n.hooks.provideLexer(r):r?y.lex:y.lexInline)(e,n);n.hooks&&(a=n.hooks.processAllTokens(a)),n.walkTokens&&this.walkTokens(a,n.walkTokens);let i=(n.hooks?n.hooks.provideParser(r):r?R.parse:R.parseInline)(a,n);return n.hooks&&(i=n.hooks.postprocess(i)),i}catch(a){return l(a)}}}onError(r,e){return t=>{if(t.message+=`
Please report this to https://github.com/markedjs/marked.`,r){let s="
An error occurred:
"+S(t.message+"",!0)+"
";return e?Promise.resolve(s):s}if(e)return Promise.reject(t);throw t}}},v=new $t;function d(r,e){return v.parse(r,e)}d.options=d.setOptions=function(r){return v.setOptions(r),d.defaults=v.defaults,ue(d.defaults),d};d.getDefaults=F;d.defaults=z;d.use=function(...r){return v.use(...r),d.defaults=v.defaults,ue(d.defaults),d};d.walkTokens=function(r,e){return v.walkTokens(r,e)};d.parseInline=v.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=Z;d.TextRenderer=te;d.Lexer=y;d.lexer=y.lex;d.Tokenizer=M;d.Hooks=L;d.parse=d;d.options;d.setOptions;d.use;d.walkTokens;d.parseInline;R.parse;y.lex;class C{constructor(e=null,t=null){if(e)this.release=e,this.version=e.tag_name,this.versionName=e.name,this.versionTag=e.tag_tag;else if(t)this.release=null,this.version=t,this.versionName=null,this.versionTag=null;else throw new Error("Either release or version must be provided");this.versionParts=this.parseVersion(this.version),this.versionMajor=this.versionParts?this.versionParts[0]:null,this.versionMinor=this.versionParts?this.versionParts[1]:null,this.versionPatch=this.versionParts?this.versionParts[2]:null}parseVersion(e){if(!e)return null;let t=e;return t.indexOf("v")===0&&(t=t.substring(1)),t.split(".").map(Number)}isGreater(e){let t;if(e instanceof C)t=e.versionParts;else if(typeof e=="string")t=this.parseVersion(e);else throw new Error("Invalid argument: otherVersion must be a SunshineVersion object or a version string");if(!this.versionParts||!t)return!1;for(let s=0;st[s];return!1}}d.setOptions({breaks:!0,gfm:!0,headerIds:!0,mangle:!1,sanitize:!1});console.log("Hello, Sunshine!");let Tt=ve({components:{Navbar:Le,ResourceCard:Ce,AlertCircle:_e,AlertTriangle:Pe,FileText:Ee,Wrench:Ve,Package:qe,Info:Ae,CheckCircle:ze,Download:Be},data(){return{version:null,githubVersion:null,notifyPreReleases:!1,preReleaseVersion:null,loading:!0,logs:null,platform:"",controllerEnabled:!1,vigembus:null}},async created(){try{let r=await fetch("./api/config").then(e=>e.json());if(this.notifyPreReleases=r.notify_pre_releases,this.platform=r.platform,this.controllerEnabled=r.controller!=="disabled",this.version=new C(null,r.version),console.log("Version: ",this.version.version),this.githubVersion=new C(await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases/latest").then(e=>e.json()),null),console.log("GitHub Version: ",this.githubVersion.version),this.preReleaseVersion=new C((await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases").then(e=>e.json())).find(e=>e.prerelease),null),console.log("Pre-Release Version: ",this.preReleaseVersion.version),this.platform==="windows"&&this.controllerEnabled)try{this.vigembus=await fetch("./api/vigembus/status").then(e=>e.json())}catch(e){console.error("Failed to fetch ViGEmBus status:",e)}}catch(r){console.error(r)}try{this.logs=await fetch("./api/logs").then(r=>r.text())}catch(r){console.error(r)}this.loading=!1},computed:{installedVersionNotStable(){return!this.githubVersion||!this.version?!1:this.version.isGreater(this.githubVersion)},stableBuildAvailable(){return!this.githubVersion||!this.version?!1:this.githubVersion.isGreater(this.version)},preReleaseBuildAvailable(){return!this.preReleaseVersion||!this.githubVersion||!this.version?!1:this.preReleaseVersion.isGreater(this.version)&&this.preReleaseVersion.isGreater(this.githubVersion)},buildVersionIsDirty(){var r;return((r=this.version.version)==null?void 0:r.split(".").length)===5&&this.version.version.indexOf("dirty")!==-1},fancyLogs(){if(!this.logs)return[];let r=/(\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}]):\s/g,e=this.logs.split(r).splice(1),t=[];for(let s=0;s