diff --git a/js/v4.min.js b/js/v4.min.js
index fd0207d..4e7c35d 100644
--- a/js/v4.min.js
+++ b/js/v4.min.js
@@ -1 +1 @@
-let files={},imports={},obs=[],events=[],exp={noDuplicateStyle:!1};const delay=e=>new Promise(t=>setTimeout(t,e));async function SFile(e){return new Promise((t,l)=>{files[e]?t(files[e]):fetch(e).then(async l=>{l=await l.text(),files[e]=l,t(l)})})}function SReplace(e,t){if(e.outerHTML)e.outerHTML=t;else{let l=document.createElement("div");l.innerHTML=t,(ObjParent=e.parentNode).replaceChild(l,e)}}function SUpdate(){exp.noDuplicateStyle?document.getElementById("HTMS-style")||(document.head.innerHTML+=''):document.head.innerHTML+="",obs.length&&(obs.forEach(e=>{e.disconnect()}),events.forEach(e=>{e[0].removeEventListener("input",e[1])}));let SMainElem=document.querySelector("htms");if(!SMainElem){console.warn("HTMS was included but no config was detected");return}document.querySelectorAll("htms").length>1&&console.warn("Multiple htms elements provided, only the first one will take effect");let SConfig=SMainElem.innerHTML.split("\n").map(e=>e.trim()).filter(e=>e.length>0&&!e.startsWith("//"));for(let line of SConfig){let args=line.split(" ");switch(args[0]){case"import":if("from"!=args[2])throw Error('Import missing "from"');SFile(args[3].slice(1,-1)).then(e=>{args[1].split(",").map(e=>e.slice(1,-1)).forEach(t=>{let l=RegExp('[^\xac]*?');imports[t]=e.match(l)[0].replaceAll(/|<\/sample>/g,"").trim()})});break;case"inject":if("with"!=args[2])throw Error('Inject missing "with"');Array.from(document.getElementsByTagName(args[1].slice(1,-1))).forEach(async e=>{for(let t=0;t<5;t++)imports[args[3].slice(1,-1)]||await delay(200);if(imports[args[3].slice(1,-1)]){let l=imports[args[3].slice(1,-1)];(e.attributes.var||"").value&&e.attributes.var.value.split(";").filter(e=>e.length).forEach(e=>{l=l.replaceAll("${"+e.split(":")[0]+"}",e.split(":")[1])}),e.innerHTML=l}else throw Error(args[3].slice(1,-1)+" was not defined when inject loaded")});break;case"replace":if("with"!=args[2])throw Error('Replace missing "with"');Array.from(document.getElementsByTagName(args[1].slice(1,-1))).forEach(async e=>{for(let t=0;t<5;t++)imports[args[3].slice(1,-1)]||await delay(200);if(imports[args[3].slice(1,-1)]){let l=imports[args[3].slice(1,-1)];(e.attributes.var||"").value&&e.attributes.var.value.split(";").filter(e=>e.length).forEach(e=>{l=l.replaceAll("${"+e.split(":")[0]+"}",e.split(":")[1])}),SReplace(e,l)}else throw Error(args[3].slice(1,-1)+" was not defined when replace loaded")});break;case"module":SFile("https://htms.fsh.plus/module/"+args[1].slice(1,-1)+"/module.js").then(code=>eval(code));break;case"exp":exp[args[1]]=!0;break;default:throw Error(args[0]+" is not a valid action")}}let valueElements=["input","textarea","select"];Array.from(document.querySelectorAll("[htms-out]")).forEach(e=>{let t=e.tagName.toLowerCase(),l=()=>{let l=valueElements.includes(t)?e.value:e.innerHTML;document.querySelectorAll(`[htms-in="${e.getAttribute("htms-out")}"]`).forEach(e=>{valueElements.includes(e.tagName.toLowerCase())?e.value=l:e.innerHTML=l})},s=new MutationObserver(l);s.observe(e,{attributes:!0,childList:!0,subtree:!0}),obs.push(s),e.addEventListener("input",l),events.push([e,l])}),document.dispatchEvent(new Event("SLoad",{bubbles:!0}))}function SRemoveCache(){files={},imports={}}document.addEventListener("DOMContentLoaded",SUpdate),window.htms={version:4,update:SUpdate,removeCache:SRemoveCache};
\ No newline at end of file
+let files={},imports={},obs=[],events=[],exp={noDuplicateStyle:!1};const delay=e=>new Promise(t=>setTimeout(t,e));async function SFile(e){return new Promise((t,l)=>{files[e]?t(files[e]):fetch(e).then(async l=>{l=await l.text(),files[e]=l,t(l)})})}function SReplace(e,t){if(e.outerHTML)e.outerHTML=t;else{let l=document.createElement("div");l.innerHTML=t,(ObjParent=e.parentNode).replaceChild(l,e)}}function SGetSample(e,t){e[3]=e[3].slice(1,-1),Array.from(document.getElementsByTagName(e[1].slice(1,-1))).forEach(async l=>{for(let i=0;i<20;i++)imports[e[3]]||await delay(100);let s=imports[e[3]];if(s)(l.getAttribute("var")||"").value&&l.getAttribute("var").value.split(";").filter(e=>e.length).forEach(e=>{e=e.split(":"),s=s.replaceAll(`\${${e[0]}}`,e[1])}),"inject"===t?l.innerHTML=s:SReplace(l,s);else throw Error(e[3]+" was not defined when "+t+" loaded")})}function SUpdate(){exp.noDuplicateStyle?document.getElementById("HTMS-style")||(document.head.innerHTML+=''):document.head.innerHTML+="",obs.length&&(obs.forEach(e=>{e.disconnect()}),events.forEach(e=>{e[0].removeEventListener("input",e[1])}));let SMainElem=document.querySelector("htms");if(!SMainElem){console.warn("HTMS was included but no config was detected");return}document.querySelectorAll("htms").length>1&&console.warn("Multiple htms elements provided, only the first one will take effect");let SConfig=SMainElem.innerHTML.split("\n").map(e=>e.trim()).filter(e=>e.length>0&&!e.startsWith("//"));for(let line of SConfig){let args=line.split(" ");switch(args[0]){case"import":if("from"!=args[2])throw Error('Import missing "from"');SFile(args[3].slice(1,-1)).then(e=>{args[1].split(",").map(e=>e.slice(1,-1)).forEach(t=>{let l=RegExp('[^\xac]*?');imports[t]=e.match(l)[0].replaceAll(/|<\/sample>/g,"").trim()})});break;case"inject":if("with"!=args[2])throw Error('Inject missing "with"');SGetSample(args,"inject");break;case"replace":if("with"!=args[2])throw Error('Replace missing "with"');SGetSample(args,"replace");break;case"module":SFile("https://htms.fsh.plus/module/"+args[1].slice(1,-1)+"/module.js").then(code=>eval(code));break;case"exp":exp[args[1]]=!0;break;default:throw Error(args[0]+" is not a valid action")}}let valueElements=["input","textarea","select"];Array.from(document.querySelectorAll("[htms-out]")).forEach(e=>{let t=e.tagName.toLowerCase(),l=()=>{let l=valueElements.includes(t)?e.value:e.innerHTML;document.querySelectorAll(`[htms-in="${e.getAttribute("htms-out")}"]`).forEach(e=>{valueElements.includes(e.tagName.toLowerCase())?e.value=l:e.innerHTML=l})},i=new MutationObserver(l);i.observe(e,{attributes:!0,childList:!0,subtree:!0}),obs.push(i),e.addEventListener("input",l),events.push([e,l])}),document.dispatchEvent(new Event("SLoad",{bubbles:!0}))}function SRemoveCache(){files={},imports={}}document.addEventListener("DOMContentLoaded",SUpdate),window.htms={version:4,update:SUpdate,removeCache:SRemoveCache};