// @ts-nocheck let currentLanguage = localStorage.getItem('language') || 'en'; let currentJbFlavor = localStorage.getItem('jailbreakFlavor') || 'GoldHEN'; let isAutoJailbreakEnabled = localStorage.getItem('autoJailbreak'); let selectedSecondaryPayload; let platform = "Unknown"; let lastScrollY = 0; let lastSection = localStorage.getItem('lastSection') || "initial"; const ui = { mainContainer: document.querySelector('.mainContainer'), // Sections initialScreen: document.getElementById('initial-screen'), exploitScreen: document.getElementById('exploit-main-screen'), // Initial screen elements settingsBtn: document.getElementById("settings-btn"), aboutBtn: document.getElementById("about-btn"), psLogoContainer: document.getElementById('ps-logo-container'), clickToStartText: document.getElementById('click-to-start-text'), ps4FwStatus: document.getElementById('PS4FW'), // Exploit screen elements statusMessage: document.getElementById('statusMessage'), consoleElement: document.getElementById('console'), toolsSection: document.getElementById('tools'), toolsTab: document.getElementById('tools-tab'), gamesSection: document.getElementById('games'), gamesTab: document.getElementById('games-tab'), linuxSection: document.getElementById('linux'), linuxTab: document.getElementById('linux-tab'), payloadsSection: document.getElementById('payloadsSection'), payloadsList: document.getElementById("payloadsGrid"), payloadsSectionTitle: document.getElementById('payloads-section-title'), exploitRunBtn: document.getElementById('exploitRun'), secondHostBtn: document.querySelectorAll('.secondHostBtn'), // Popups aboutPopupOverlay: document.getElementById('about-popup-overlay'), aboutPopup: document.getElementById('about-popup'), settingsPopupOverlay: document.getElementById('settings-popup-overlay'), settingsPopup: document.getElementById('settings-popup'), // Settings elements langRadios: document.querySelectorAll('#chooselang input[name="language"]'), }; const languages = { "en": { "title": "PSFree Enhanced", "ps4FwCompatible": `PS4 FW: {ps4fw} | Compatible`, "ps4FwIncompatible": `PS4 FW: {ps4fw} | Incompatible`, "notPs4": "You are not on a PS4, platform: ", "clickToStart": "Click to start", "chooseHEN": "Choose your HEN flavor", "exploitStatusHeader": "Exploit status", "payloadsHeader": "Payloads", "settingsBtnTitle": "Settings", "aboutMenu": "About", "payloadsToolsHeader": "Tools", "payloadsGameHeader": "Game", "payloadsLinuxHeader": "Linux", "aboutPsfreeHeader": "About PSFree Enhanced", "aboutVersion": "Version: 1.5.1", "aboutDescription": "A web interface to jailbreak your PS4 using PSFree chained with Lapse kernel exploit.", "closeButton": "Close", "settingsPsfreeHeader": "Settings", "ps4FirmwareSupportedHeader": "Supported PS4 firmware", "languageHeader": "Language", "englishOption": "English", "arabicOption": "Arabic", "warnings": { "note1": "Make sure to close all apps before running the exploit", "note2": "Make sure to delete cache data before running the exploit for the first time", "note3": "It might take you more than one time", }, "secondHostBtn": "Load payloads using GoldHEN's BinLoader - External link", "alert": "Important notice", "waitingUserInput": "Waiting for user action", "jailbreakNow": "Jailbreak process will start with ", "cache": "Installing Cache: ", "httpsHost":"Loading payloads through GoldHEN's BinLoader is not possible at the moment, click the blue button below to use the supported host." }, "ar": { "title": "PSFree محسن", "ps4FwCompatible": `بلايستايشن 4 إصدار {ps4fw} | مدعوم`, "ps4FwIncompatible": `بلايستايشن 4 إصدار {ps4fw} | غير مدعوم`, "notPs4": "انت لست على جهاز بلايستايشن 4, المنصة: ", "clickToStart": "انقر للبدء", "chooseHEN": "اختر نكهتك", "exploitStatusHeader": "حالة الثغرة", "payloadsHeader": "الإضافات", "settingsBtnTitle": "الإعدادات", "aboutMenu": "حول", "payloadsToolsHeader": "الأدوات", "payloadsGameHeader": "الألعاب", "payloadsLinuxHeader": "لينكس", "aboutPsfreeHeader": "حول PSFree المحسن", "aboutVersion": "الإصدار: 1.5.1", "aboutDescription": "واجهة ويب لتهكير البلايستايشن 4 بإستخدام ثغرة PSFree المربوطة مع ثغرة النواة Lapse", "closeButton": "إغلاق", "settingsPsfreeHeader": "الإعدادات", "ps4FirmwareSupportedHeader": "إصدارات PS4 المدعومة", "languageHeader": "اللغة", "arabicOption": "العربية", "englishOption": "الإنجليزية", "warnings": { "note1": "تأكد من إغلاق كل التطبيقات قبل تنفيذ الثغرة", "note2": "تأكد من ان تقوم بمسح الملفات المؤقته قبل تنفيذ الثغرة لأول مرة", "note3": "قم يتطلب الأمر المحاولة اكثر من مرة", }, "secondHostBtn": "تنفيذ التعديلات بإستخدام خادم GoldHEN - رابط خارجي", "alert": "ملاحظات هامة", "waitingUserInput": "في انتظار التنفيذ من المستخدم", "jailbreakNow": "عملية تحميل الثغرة ستبدأ بإستحدام ", "cache": "جاري تحميل الموقع في الذاكرة المحلية: ", "httpsHost":"تنفيذ الإضافات بإستخدام GoldHEN غير مدعوم حاليا, إضغط على الزر الأزرق ادناه للإنتقال الى الهوست المدعوم" } } const payloads = [ { id: "App2USB", name: "App2USB", author: "Stooged", description: "Unofficially Moves installed applications to an external USB drive.", specificFW: "", category: "tools", funcName: "load_App2USB" }, { id: "BinLoader", name: "BinLoader", author: "PSFree Exploit", description: "Launches BinLoader server on port 9020 to send payloads.", specificFW: "7.00 - 9.60", category: "tools", funcName: "load_BinLoader" }, { id: "FTP", name: "FTP", author: "xvortex", description: "Enables FTP server access for file transfers.", specificFW: "", category: "tools", funcName: "load_FTP" }, { id: "DisableUpdates", name: "Disable-Updates", author: "Scene Collective", description: "Disables automatic system software updates.", specificFW: "", category: "tools", funcName: "load_DisableUpdates" }, { id: "PS4Debug", name: "PS4-Debug", author: "CTN & SiSTR0", description: "Debugging tools for PS4.", specificFW: "", category: "tools", funcName: "load_PS4Debug" }, { id: "KernelDumper", name: "Kernel-Dumper", author: "Eversion", description: "Dumps the PS4 kernel.", specificFW: "", category: "tools", funcName: "load_KernelDumper" }, { id: "PS4DumperVTX", name: "PS4-Dumper-VTX", author: "xvortex", description: "All-in-one game dumper for PS4.", specificFW: "9.00", category: "tools", funcName: "load_VTXDumper" }, { id: "FanThreshold", name: "Fan-Threshold", author: "Scene Collective", description: "Sets the cooling fan's profile on the PlayStation 4", specificFW: "", category: "tools", funcName: "load_FanThreshold" }, { id: "HistoryBlocker", name: "History-Blocker", author: "Stooged", description: "Blocks the browser from remembering and returning to the last opened page on start. Run again to enable/disable.", specificFW: "", category: "tools", funcName: "load_HistoryBlocker" }, { id: "EnableBrowser", name: "Enable-Browser", author: "Scene Collective", description: "Permanently activates the browser without needing to sign into PSN.", specificFW: "", category: "tools", funcName: "load_EnableBrowser" }, { id: "OrbisToolbox", name: "Orbis-Toolbox", author: "OSM-Made", description: "A modification of the playstation UI to help with launching and developing homebrew..", specificFW: "5.05, 6.72, 7.02, 7.55, 9.00", category: "tools", funcName: "load_Orbis" }, { id: "ToDex", name: "ToDex", author: "zecoxao", description: "Spoofs the target ID to match that of a test-kit, enables some extra options, etc.", specificFW: "", category: "tools", funcName: "load_ToDex" }, { id: "ToDev", name: "ToDev", author: "SonysNightmare", description: "unlocks some PS4 Debug / TestKit Features.", specificFW: "", category: "tools", funcName: "load_ToDev" }, { id: "ToKratos", name: "ToKratos", author: "Various", description: "Custom firmware conversion tool.", specificFW: "", category: "tools", funcName: "load_ToKratos" }, { id: "ToCex", name: "ToCex", author: "Various", description: "Converts console to CEX mode.", specificFW: "", category: "tools", funcName: "load_ToCex" }, { id: "BackupDB", name: "Backup-DB", author: "Stooged", description: "Backs up your PS4's databases, licenses, and user data. Note this may not be useful if you have to reinitalize as your keys may change.", specificFW: "", category: "tools", funcName: "load_BackupDB" }, { id: "RestoreDB", name: "Restore-DB", author: "Stooged", description: "Restores the data saved in the 'Backup' payload.", specificFW: "", category: "tools", funcName: "load_RestoreDB" }, { id: "RIFRenamer", name: "RIF-Renamer", author: "Al Azif", description: "Renames 'fake' RIFs to 'free' RIFs for better HEN compatibility. Use this if your PKGs only work with Mira+HEN.", specificFW: "", category: "tools", funcName: "load_RIFRenamer" }, { id: "ExitIDU", name: "ExitIDU", author: "Scene Collective", description: "Exits IDU mode and restarts the console.", specificFW: "", category: "tools", funcName: "load_ExitIDU" }, { id: "DisableASLR", name: "Disable-ASLR", author: "Scene Collective", description: "Disables the ASLR (Address space layout randomization) to make working with memory easier/repeatable.", specificFW: "", category: "tools", funcName: "load_DisableASLR" }, { id: "ModuleDumper", name: "Module-Dumper", author: "SocraticBliss", description: "Dumps the decrypted modules from /system, /system_ex, /update and the root of the filesystem to a USB device.", specificFW: "", category: "tools", funcName: "load_ModuleDumper" }, { id: "WebRTE", name: "WebRTE", author: "Made by golden
updated by EchoStrech", description: "Web Realtime Trainer Engine", specificFW: "5.05, 6.72, 7.00-11.00", category: "tools", funcName: "load_WebRTE" }, { id: "PermanentUART", name: "Permanent-UART", author: "JTAG7371", description: "Enabled hardware based UART without a kernel patch, persists though updates.", specificFW: "", category: "tools", funcName: "load_PermanentUART" }, { id: "PUPDecrypt", name: "PUP-Decrypt", author: "andy-man", description: "Payload to decrypt the contents of a firmware update file (PUP) on the PS4", specificFW: "", category: "tools", funcName: "load_PUPDecrypt" }, { id: "GTAVArabicGuy127", name: "GTAV-ArabicGuy-1.27", author: "ArabicGuy", description: "GTA V mod menu by ArabicGuy.", specificFW: "", category: "games", funcName: "load_GTAArbic" }, { id: "GTAVArabicGuy132", name: "GTAV-ArabicGuy-1.32", author: "ArabicGuy", description: "GTA V mod menu by ArabicGuy.", specificFW: "", category: "games", funcName: "load_GTAArbic3" }, { id: "GTAVArabicGuy133", name: "GTAV-ArabicGuy-1.33", author: "ArabicGuy", description: "GTA V mod menu by ArabicGuy.", specificFW: "", category: "games", funcName: "load_GTAArbic33" }, { id: "GTAVBeefQueefMod133", name: "GTAV-BeefQueefMod-1.33", author: "BeefQueef", description: "GTA V mod menu by BeefQueef.", specificFW: "", category: "games", funcName: "load_GTABQ133" }, { id: "GTAVBeefQueefMod134", name: "GTAV-BeefQueefMod-1.34", author: "BeefQueef", description: "GTA V mod menu by BeefQueef.", specificFW: "", category: "games", funcName: "load_GTABQ134" }, { id: "GTAVBeefQueefMod138", name: "GTAV-BeefQueefMod-1.38", author: "BeefQueef", description: "GTA V mod menu by BeefQueef.", specificFW: "", category: "games", funcName: "load_GTABQ138" }, { id: "GTAVWildeModz132", name: "GTAV-WildeModz-1.32", author: "WildeModz", description: "GTA V mod menu by WildeModz.", specificFW: "", category: "games", funcName: "load_GTAWM132" }, { id: "GTAVWildeModz133", name: "GTAV-WildeModz-1.33", author: "WildeModz", description: "GTA V mod menu by WildeModz.", specificFW: "", category: "games", funcName: "load_GTAWM133" }, { id: "GTAVWildeModz138", name: "GTAV-WildeModz-1.38", author: "WildeModz", description: "GTA V mod menu by WildeModz.", specificFW: "", category: "games", funcName: "load_GTAWM138" }, { id: "RDR2OystersMenu100", name: "RDR2-OystersMenu-0", author: "Oysters", description: "RDR2 mod menu by Oysters.", specificFW: "", category: "games", funcName: "load_Oysters100" }, { id: "RDR2OystersMenu113", name: "RDR2-OystersMenu-1.13", author: "Oysters", description: "RDR2 mod menu by Oysters.", specificFW: "", category: "games", funcName: "load_Oysters113" }, { id: "RDR2OystersMenu119", name: "RDR2-OystersMenu-1.19", author: "Oysters", description: "RDR2 mod menu by Oysters.", specificFW: "", category: "games", funcName: "load_Oysters119" }, { id: "RDR2OystersMenu124", name: "RDR2-OystersMenu-1.24", author: "Oysters", description: "RDR2 mod menu by Oysters.", specificFW: "", category: "games", funcName: "load_Oysters124" }, { id: "RDR2OystersMenu129", name: "RDR2-OystersMenu-1.29", author: "Oysters", description: "RDR2 mod menu by Oysters.", specificFW: "", category: "games", funcName: "load_Oysters129" }, { id: "Linux1GB", name: "Linux-1GB", author: "Nazky", description: "Linux payload for PS4", specificFW: "9.00", category: "linux", funcName: "load_Linux" }, { id: "Linux2GB", name: "Linux-2GB", author: "Nazky", description: "Linux payload for PS4", specificFW: "9.00", category: "linux", funcName: "load_Linux2gb" }, { id: "Linux3GB", name: "Linux-3GB", author: "Nazky", description: "Loads a 3GB Linux payload for dual-booting.", specificFW: "9.00", category: "linux", funcName: "load_Linux3gb" }, { id: "Linux4GB", name: "Linux-4GB", author: "Nazky", description: "Loads a 4GB Linux payload for dual-booting.", specificFW: "9.00", category: "linux", funcName: "load_Linux4gb" }, { id: "Linux5GB", name: "Linux-5GB", author: "Nazky", description: "Loads a 5GB Linux payload for dual-booting.", specificFW: "9.00", category: "linux", funcName: "load_Linux5gb" }, ]; // Events // Scroll snap for the PS4 ui.mainContainer.addEventListener('scroll', () => { if (ui.mainContainer.scrollTop > lastScrollY) { // scrolling down if (lastSection !== "exploit") { ui.exploitScreen.scrollIntoView({ block: "end" }); lastSection = "exploit"; } } else if (ui.mainContainer.scrollTop < lastScrollY) { // scrolling up if (lastSection !== "initial") { ui.initialScreen.scrollIntoView({ block: "end" }); lastSection = "initial"; } } lastScrollY = ui.mainContainer.scrollTop; }); // Launch jailbreak ui.exploitRunBtn.addEventListener('click', () => { jailbreak(); }); ui.psLogoContainer.addEventListener('click', () => { jailbreak() ui.exploitScreen.scrollIntoView({ block: "end" }) }); // tabs switching ui.toolsTab.addEventListener('click', () =>{ if (ui.toolsSection.classList.contains('hidden')){ ui.toolsSection.classList.remove('hidden'); ui.linuxSection.classList.add('hidden'); ui.gamesSection.classList.add('hidden'); } ui.payloadsList.scrollTop = 0; }) ui.linuxTab.addEventListener('click', () =>{ if (ui.linuxSection.classList.contains('hidden')){ ui.toolsSection.classList.add('hidden'); ui.linuxSection.classList.remove('hidden'); ui.gamesSection.classList.add('hidden'); } ui.payloadsList.scrollTop = 0; }) ui.gamesTab.addEventListener('click', () =>{ if (ui.gamesSection.classList.contains('hidden')){ ui.toolsSection.classList.add('hidden'); ui.linuxSection.classList.add('hidden'); ui.gamesSection.classList.remove('hidden'); } ui.payloadsList.scrollTop = 0; }) // popups function aboutPopup() { ui.aboutPopupOverlay.classList.toggle('hidden'); } function settingsPopup() { ui.settingsPopupOverlay.classList.toggle('hidden'); } // Jailbreak-related functions async function jailbreak() { sessionStorage.removeItem('binloader'); try { const modules = await loadMultipleModules([ '../payloads/Jailbreak.js', '../../src/alert.mjs' ]); const JailbreakModule = modules[0]; if (currentJbFlavor == 'GoldHEN') { if (JailbreakModule && typeof JailbreakModule.GoldHEN === 'function') { JailbreakModule.GoldHEN(); } else { alert("GoldHEN function not found in Jailbreak.js module"); } } else { if (JailbreakModule && typeof JailbreakModule.HEN === 'function') { JailbreakModule.HEN(); } } } catch (e) { alert("Failed to jailbreak: " + e); } } async function loadMultipleModules(files) { try { // Dynamically import all modules const modules = await Promise.all(files.map(file => import(file))); return modules; // array of imported modules } catch (error) { alert("Error loading modules: " + error); throw error; } } async function binloader() { try { sessionStorage.setItem('binloader', 1); const modules = await loadMultipleModules([ '../../src/alert.mjs' ]); console.log("All modules are loaded!"); const goldhenModule = modules[0]; if (goldhenModule && typeof goldhenModule.runBinLoader === 'function') { goldhenModule.runBinLoader(); } else { console.error("GoldHEN function not found in GoldHEN.js module"); } } catch (e) { console.error("Failed to jailbreak: " + e); } } function isHttps() { return window.location.protocol === 'https:'; } async function Loadpayloads(payload) { try { let modules; sessionStorage.removeItem('binloader'); modules = await loadMultipleModules([ '../payloads/payloads.js' ]); console.log("All modules are loaded!"); const payloadModule = modules[0]; if (payloadModule && typeof payloadModule[payload] === 'function') { payloadModule[payload](); } else { alert(`${payload} function not found in payloads.js module`); } } catch (e) { alert(`Failed to load ${payload}: ${e}`); } } function setGoldHENVer(value){ localStorage.setItem('GHVer', value); } function loadGoldHENVer(){ const goldHenVer = localStorage.getItem("GHVer") || "GHv2.4b18.6"; document.querySelector(`input[name="goldhen"][value="${goldHenVer}"]`).checked = true; } function loadLanguage() { var language = localStorage.getItem("language") || 'en'; document.querySelector(`input[name="language"][value="${language}"]`).checked = true; } // Update UI langauge function applyLanguage(lang) { currentLanguage = lang; const strings = languages[currentLanguage]; if (!strings) { console.error(`Language list ${lang} is not available`); return; } document.title = strings.title || "PSFree Enhanced"; document.dir = (currentLanguage === 'ar') ? 'rtl' : 'ltr'; document.lang = currentLanguage; // Check if ps4 is supported if (window.ps4Fw === null) { ui.ps4FwStatus.textContent = strings.notPs4 + platform; ui.ps4FwStatus.style.color = 'red'; } else if (window.ps4Fw <= 9.60) { ui.ps4FwStatus.textContent = strings.ps4FwCompatible.replace('{ps4fw}', window.ps4Fw); ui.ps4FwStatus.style.color = 'green'; } else { ui.ps4FwStatus.textContent = strings.ps4FwIncompatible.replace('{ps4fw}', window.ps4Fw); ui.ps4FwStatus.style.color = 'red'; } // Main screen elements ui.settingsBtn.title = strings.settingsBtnTitle; ui.clickToStartText.textContent = strings.clickToStart; document.querySelector('#choosejb-initial h3').textContent = strings.chooseHEN; // About us popup ui.aboutPopup.querySelector('h2').textContent = strings.aboutPsfreeHeader; ui.aboutPopup.querySelectorAll('p')[0].textContent = strings.aboutVersion; ui.aboutPopup.querySelectorAll('p')[1].textContent = strings.aboutDescription; ui.aboutPopup.querySelector('#PS4FWOK h3').textContent = strings.ps4FirmwareSupportedHeader; ui.aboutPopup.querySelector('#close-about').textContent = strings.closeButton; // Settings popup ui.settingsPopup.querySelector('h2').textContent = strings.settingsPsfreeHeader; ui.settingsPopup.querySelector('#chooselang h3').textContent = strings.languageHeader; ui.settingsPopup.querySelector('#enLang').textContent = strings.englishOption; ui.settingsPopup.querySelector('#arLang').textContent = strings.arabicOption; ui.settingsPopup.querySelector('#close-settings').textContent = strings.closeButton; // Warning element (Exploit section) const warningHeader = document.querySelector('#warningBox p'); const warningNotes = document.querySelector('#warningBox ul'); if (warningNotes) { const items = warningNotes.querySelectorAll('li'); if (items[0]) items[0].textContent = strings.warnings.note1; if (items[1]) items[1].textContent = strings.warnings.note2; if (items[2]) items[2].textContent = strings.warnings.note3; } warningHeader.textContent = strings.alert; if (isHttps()){ document.getElementById("httpsHost").innerText = strings.httpsHost; ui.secondHostBtn[1].style.display = "block"; } // Buttons ui.secondHostBtn[0].textContent = strings.secondHostBtn; ui.secondHostBtn[1].textContent = strings.secondHostBtn; ui.exploitRunBtn.title = strings.clickToStart; ui.aboutBtn.title = strings.aboutMenu; document.querySelector('#exploit-status-panel h2').textContent = strings.exploitStatusHeader; ui.payloadsSectionTitle.textContent = strings.payloadsHeader; ui.toolsTab.textContent = strings.payloadsToolsHeader; ui.linuxTab.textContent = strings.payloadsLinuxHeader; ui.gamesTab.textContent = strings.payloadsGameHeader; ui.consoleElement.querySelector('center').textContent = strings.waitingUserInput; } function saveJbFlavor(name, value) { localStorage.setItem("jailbreakFlavor", value); // Apply hen selector to both inputs document.querySelector(`input[name="${name == "hen" ? "hen2" : "hen"}"][value="${value}"]`).checked = true; currentJbFlavor = value; }; function loadJbFlavor() { const flavor = currentJbFlavor || 'GoldHEN'; const henRadio = document.querySelector(`input[name="hen"][value="${flavor}"]`); const hen2Radio = document.querySelector(`input[name="hen2"][value="${flavor}"]`); if (henRadio && hen2Radio) { henRadio.checked = true; hen2Radio.checked = true; } } function saveLanguage() { const language = document.querySelector('input[name="language"]:checked').value; localStorage.setItem('language', language); currentLanguage = language; applyLanguage(language); }; function CheckFW() { const userAgent = navigator.userAgent; const ps4Regex = /PlayStation 4/; let fwVersion = navigator.userAgent.substring(navigator.userAgent.indexOf('5.0 (') + 19, navigator.userAgent.indexOf(') Apple')).replace("layStation 4/",""); let elementsToHide = [ 'ps-logo-container', 'choosejb-initial', 'exploit-main-screen', 'scrollDown', 'click-to-start-text', 'chooseGoldHEN' ]; if (ps4Regex.test(userAgent)) { if (fwVersion >= 7.00 && fwVersion <= 9.60) { document.getElementById('PS4FW').style.color = 'green'; // Highlight firmware in about popup let fwElement = "fw"+fwVersion.replace('.',''); document.getElementById(fwElement).classList.add('fwSelected'); } else { document.getElementById('PS4FW').style.color = 'red'; if (isHttps()){ ui.secondHostBtn[0].style.display = "block"; }else{ // modify elements inside elementsToHide for unsupported ps4 firmware to load using GoldHEN's BinLoader const toRemove = ['exploit-main-screen', 'scrollDown']; elementsToHide = elementsToHide.filter(e => !toRemove.includes(e)); elementsToHide.push('initial-screen', 'exploit-status-panel', 'henSelection'); document.getElementById('exploitContainer').style.display = "block"; // Sizing the payload's section ui.payloadsSection.style.width = "75%"; ui.payloadsSection.style.margin = "auto"; } elementsToHide.forEach(id => { const el = document.getElementById(id); if (el) el.style.display = 'none'; }); } window.ps4Fw = fwVersion; // Display only Compatible GoldHENs const GoldHENsOption = { "9.60": ["GHv2.3Fw755", "GHv2.3Fw702"], "9.00": ["GHv2.3Fw755", "GHv2.3Fw702"], "9.03": ["GHv2.3Fw755", "GHv2.3Fw702", "GHv2.4b18", "GHv2.4b18.2"], "7.55": ["GHv2.4b18.4", "GHv2.4b18.2", "GHv2.4b18"], "7.02": ["GHv2.4b18.4", "GHv2.4b18.2", "GHv2.4b18"] }; // To remove all of them with one line in case the firmware is not listed const allElements = [ "GHv2.3Fw755", "GHv2.3Fw702", "GHv2.4b18", "GHv2.4b18.4", "GHv2.4b18.2" ]; const idsToRemove = GoldHENsOption[fwVersion] || allElements; idsToRemove.forEach(id => { const el = document.getElementById(id); if (el) el.remove(); }); } else { platform = 'Unknown platform'; if (/Android/.test(userAgent)) platform = 'Android'; else if (/iPhone|iPad|iPod/.test(userAgent)) platform = 'iOS'; else if (/Macintosh/.test(userAgent)) platform = 'MacOS'; else if (/Windows/.test(userAgent)) platform = 'Windows'; else if (/Linux/.test(userAgent)) platform = 'Linux'; document.getElementById('PS4FW').style.color = 'red'; elementsToHide.forEach(id => { const el = document.getElementById(id); if (el) el.style.display = 'none'; }); } } // Load settings function loadSettings() { try { CheckFW(); loadJbFlavor(); loadLanguage(); applyLanguage(currentLanguage); renderPayloads(); loadGoldHENVer(); } catch (e) { alert("Error in loadSettings: " + e.message); } } function getPayloadCategoryClass(category) { switch (category) { case 'tools': return 'category-tools'; case 'games': return 'category-games'; case 'linux': return 'category-linux'; default: return ''; } } function renderPayloads() { const payloadsToRender = payloads; payloadsToRender.forEach(payload => { const payloadCard = document.createElement('div'); payloadCard.id = payload.id; payloadCard.onclick = () => Loadpayloads(payload.funcName); payloadCard.className = `payload payload-card relative group cursor-pointer transition-all duration-300 hover:scale-105`; payloadCard.dataset.payloadId = payload.id; payloadCard.innerHTML = ` `; switch (payload.category) { case "tools": ui.toolsSection.appendChild(payloadCard); break; case "games": ui.gamesSection.appendChild(payloadCard); break; case "linux": ui.linuxSection.appendChild(payloadCard); break; default: ui.toolsSection.appendChild(payloadCard); break; } }); } // Handling cache function DLProgress(e) { Percent = (Math.round(e.loaded / e.total * 100)); document.title = languages[currentLanguage].title + " " + Percent + "%"; } function DisplayCacheProgress() { setTimeout(function () { document.title = "\u2713"; }, 1000); setTimeout(function () { window.location.href = document.referrer; }, 3000); }