{"ctor":"BitburnerSaveObject","data":{"PlayerSave":"{\"ctor\":\"PlayerObject\",\"data\":{\"hp\":{\"current\":10,\"max\":10},\"skills\":{\"hacking\":806,\"strength\":1,\"defense\":1,\"dexterity\":1,\"agility\":1,\"charisma\":1,\"intelligence\":0},\"exp\":{\"hacking\":9189331.266697507,\"strength\":0,\"defense\":0,\"dexterity\":0,\"agility\":0,\"charisma\":0,\"intelligence\":0},\"mults\":{\"hacking_chance\":1.6873167773231517,\"hacking_speed\":1.6788898181379042,\"hacking_money\":2.8194382449161703,\"hacking_grow\":1.6884885884035035,\"hacking\":2.5752815702926197,\"strength\":1.553409501331223,\"defense\":1.3507908707228027,\"dexterity\":1.553409501331223,\"agility\":1.3507908707228027,\"charisma\":1.3507908707228027,\"hacking_exp\":3.3999323851619616,\"strength_exp\":1.7087504514643455,\"defense_exp\":1.7087504514643455,\"dexterity_exp\":1.7087504514643455,\"agility_exp\":1.7087504514643455,\"charisma_exp\":1.7087504514643455,\"company_rep\":1.3507908707228027,\"faction_rep\":1.3507908707228027,\"crime_money\":1.3507908707228027,\"crime_success\":1.3507908707228027,\"hacknet_node_money\":3.406821212607037,\"hacknet_node_purchase_cost\":0.5663331916012635,\"hacknet_node_ram_cost\":0.7403048256225666,\"hacknet_node_core_cost\":0.7403048256225666,\"hacknet_node_level_cost\":0.6292591017791815,\"work_money\":1.3507908707228027,\"bladeburner_max_stamina\":1,\"bladeburner_stamina_gain\":1,\"bladeburner_analysis\":1,\"bladeburner_success_chance\":1},\"augmentations\":[{\"level\":1,\"name\":\"Hacknet Node NIC Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Hacknet Node Core Direct-Neural Interface\"},{\"level\":1,\"name\":\"Hacknet Node Kernel Direct-Neural Interface\"},{\"level\":1,\"name\":\"Hacknet Node CPU Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Hacknet Node Cache Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Neurotrainer II\"},{\"level\":1,\"name\":\"CashRoot Starter Kit\"},{\"level\":1,\"name\":\"BitWire\"},{\"level\":15,\"name\":\"NeuroFlux Governor\"},{\"level\":1,\"name\":\"Neural-Retention Enhancement\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen I\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen II\"},{\"level\":1,\"name\":\"Embedded Netburner Module\"},{\"level\":1,\"name\":\"Artificial Synaptic Potentiation\"},{\"level\":1,\"name\":\"DataJack\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen III\"},{\"level\":1,\"name\":\"CRTX42-AA Gene Modification\"},{\"level\":1,\"name\":\"Synaptic Enhancement Implant\"},{\"level\":1,\"name\":\"Neurotrainer I\"},{\"level\":1,\"name\":\"Embedded Netburner Module Core Implant\"},{\"level\":1,\"name\":\"Neuralstimulator\"},{\"level\":1,\"name\":\"Enhanced Myelin Sheathing\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen IV\"},{\"level\":1,\"name\":\"The Black Hand\"}],\"queuedAugmentations\":[{\"level\":1,\"name\":\"PCMatrix\"},{\"level\":1,\"name\":\"Speech Processor Implant\"},{\"level\":1,\"name\":\"Wired Reflexes\"},{\"level\":16,\"name\":\"NeuroFlux Governor\"},{\"level\":17,\"name\":\"NeuroFlux Governor\"},{\"level\":18,\"name\":\"NeuroFlux Governor\"},{\"level\":19,\"name\":\"NeuroFlux Governor\"},{\"level\":20,\"name\":\"NeuroFlux Governor\"},{\"level\":21,\"name\":\"NeuroFlux Governor\"},{\"level\":22,\"name\":\"NeuroFlux Governor\"},{\"level\":23,\"name\":\"NeuroFlux Governor\"}],\"city\":\"Aevum\",\"bitNodeN\":1,\"corporation\":null,\"gang\":null,\"bladeburner\":null,\"currentServer\":\"run4theh111z\",\"factions\":[\"BitRunners\",\"The Black Hand\",\"NiteSec\",\"Aevum\",\"CyberSec\"],\"factionInvitations\":[\"Netburners\"],\"hacknetNodes\":[{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50763.9999998223,\"ram\":64,\"totalMoneyGenerated\":1277306991.8540735,\"name\":\"hacknet-node-0\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50762.999999822314,\"ram\":64,\"totalMoneyGenerated\":1274954251.2607567,\"name\":\"hacknet-node-1\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50761.99999982233,\"ram\":64,\"totalMoneyGenerated\":1272578285.1231139,\"name\":\"hacknet-node-2\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50760.99999982234,\"ram\":64,\"totalMoneyGenerated\":1266241524.4103959,\"name\":\"hacknet-node-3\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50759.99999982236,\"ram\":64,\"totalMoneyGenerated\":1264753239.0922387,\"name\":\"hacknet-node-4\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50758.99999982237,\"ram\":64,\"totalMoneyGenerated\":1262991607.2706017,\"name\":\"hacknet-node-5\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50757.99999982239,\"ram\":64,\"totalMoneyGenerated\":1262011730.8253064,\"name\":\"hacknet-node-6\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50756.9999998224,\"ram\":64,\"totalMoneyGenerated\":1260964528.4376652,\"name\":\"hacknet-node-7\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":50755.999999822416,\"ram\":64,\"totalMoneyGenerated\":1260229065.8713453,\"name\":\"hacknet-node-8\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":48720.19999985204,\"ram\":64,\"totalMoneyGenerated\":1258232181.8769774,\"name\":\"hacknet-node-9\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":47739.59999986631,\"ram\":64,\"totalMoneyGenerated\":1256615577.7225482,\"name\":\"hacknet-node-10\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":47413.39999987106,\"ram\":64,\"totalMoneyGenerated\":1255353930.0637376,\"name\":\"hacknet-node-11\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":46753.799999880655,\"ram\":64,\"totalMoneyGenerated\":1253992624.680975,\"name\":\"hacknet-node-12\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":44072.399999919675,\"ram\":64,\"totalMoneyGenerated\":1249762837.3914013,\"name\":\"hacknet-node-13\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":41959.39999995042,\"ram\":64,\"totalMoneyGenerated\":1243530580.364322,\"name\":\"hacknet-node-14\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":41824.599999952385,\"ram\":64,\"totalMoneyGenerated\":1242095157.5243604,\"name\":\"hacknet-node-15\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":40884.19999996607,\"ram\":64,\"totalMoneyGenerated\":1230396525.5598474,\"name\":\"hacknet-node-16\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":40131.59999997702,\"ram\":64,\"totalMoneyGenerated\":1214231813.5986192,\"name\":\"hacknet-node-17\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":39355.59999998828,\"ram\":64,\"totalMoneyGenerated\":1196083422.8569808,\"name\":\"hacknet-node-18\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":37245.00000001899,\"ram\":64,\"totalMoneyGenerated\":1143127210.2830174,\"name\":\"hacknet-node-19\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":33513.40000007329,\"ram\":64,\"totalMoneyGenerated\":1038971265.1100429,\"name\":\"hacknet-node-20\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":29872.000000073604,\"ram\":64,\"totalMoneyGenerated\":930034389.3997577,\"name\":\"hacknet-node-21\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":28014.000000066844,\"ram\":64,\"totalMoneyGenerated\":872191370.2273606,\"name\":\"hacknet-node-22\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":31245.010773112223,\"onlineTimeSeconds\":25117.200000056306,\"ram\":64,\"totalMoneyGenerated\":781686064.3801374,\"name\":\"hacknet-node-23\"}}],\"has4SData\":false,\"has4SDataTixApi\":false,\"hashManager\":{\"ctor\":\"HashManager\",\"data\":{\"capacity\":0,\"hashes\":0,\"upgrades\":{\"Sell for Money\":0,\"Sell for Corporation Funds\":0,\"Reduce Minimum Security\":0,\"Increase Maximum Money\":0,\"Improve Studying\":0,\"Improve Gym Training\":0,\"Exchange for Corporation Research\":0,\"Exchange for Bladeburner Rank\":0,\"Exchange for Bladeburner SP\":0,\"Generate Coding Contract\":0,\"Company Favor\":0}}},\"hasTixApiAccess\":false,\"hasWseAccount\":false,\"jobs\":{},\"karma\":0,\"numPeopleKilled\":0,\"location\":\"ECorp\",\"money\":11740090843.54444,\"moneySourceA\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-566272,\"codingcontract\":0,\"corporation\":0,\"crime\":0,\"gang\":0,\"hacking\":9508077433.753838,\"hacknet\":28568336177.20725,\"hacknet_expenses\":-8906007362.673157,\"hospitalization\":0,\"infiltration\":0,\"sleeves\":0,\"stock\":0,\"total\":11739090843.544268,\"work\":0,\"servers\":-44000000,\"other\":-57400000,\"augmentations\":-17329349132.23761}},\"moneySourceB\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-108646192,\"codingcontract\":0,\"corporation\":0,\"crime\":0,\"gang\":0,\"hacking\":21818168931.354847,\"hacknet\":134173444248.21136,\"hacknet_expenses\":-53054531145.39608,\"hospitalization\":0,\"infiltration\":0,\"sleeves\":0,\"stock\":0,\"total\":36214525363.48558,\"work\":59809.33699541738,\"servers\":-220000000,\"other\":-638499973.8107806,\"augmentations\":-65755470365.55094}},\"playtimeSinceLastAug\":50773400,\"playtimeSinceLastBitnode\":370513200,\"lastAugReset\":1693585524363,\"lastNodeReset\":1693265783929,\"purchasedServers\":[\"home-0\",\"home-1\",\"home-2\",\"home-3\",\"home-4\",\"home-5\",\"home-6\",\"home-7\",\"home-8\",\"home-9\",\"home-10\",\"home-11\",\"home-12\",\"home-13\",\"home-14\",\"home-15\",\"home-16\",\"home-17\",\"home-18\",\"home-19\",\"home-20\",\"home-21\",\"home-22\",\"home-23\",\"home-24\"],\"scriptProdSinceLastAug\":9508077433.753838,\"sleeves\":[],\"sleevesFromCovenant\":0,\"sourceFiles\":{\"ctor\":\"JSONMap\",\"data\":[[1,1]]},\"exploits\":[\"N00dles\",\"UndocumentedFunctionCall\",\"Bypass\"],\"achievements\":[{\"ID\":\"NS2\",\"unlockedOn\":1662595895471},{\"ID\":\"FIRST_HACKNET_NODE\",\"unlockedOn\":1662596015477},{\"ID\":\"FROZE\",\"unlockedOn\":1662606229026},{\"ID\":\"BRUTESSH.EXE\",\"unlockedOn\":1662608449026},{\"ID\":\"FTPCRACK.EXE\",\"unlockedOn\":1662632539212},{\"ID\":\"CYBERSEC\",\"unlockedOn\":1662654522875},{\"ID\":\"WORKOUT\",\"unlockedOn\":1662654762877},{\"ID\":\"HACKNET_NODE_10M\",\"unlockedOn\":1662699713290},{\"ID\":\"INSTALL_1\",\"unlockedOn\":1662736673277},{\"ID\":\"NITESEC\",\"unlockedOn\":1662820759873},{\"ID\":\"TOR\",\"unlockedOn\":1662827397785},{\"ID\":\"HOSPITALIZED\",\"unlockedOn\":1662832140786},{\"ID\":\"RELAYSMTP.EXE\",\"unlockedOn\":1662845880787},{\"ID\":\"HTTPWORM.EXE\",\"unlockedOn\":1662845880789},{\"ID\":\"TRAVEL\",\"unlockedOn\":1662862621580},{\"ID\":\"MAX_HACKNET_NODE\",\"unlockedOn\":1662949451779},{\"ID\":\"SQLINJECT.EXE\",\"unlockedOn\":1662949691784},{\"ID\":\"THE_BLACK_HAND\",\"unlockedOn\":1662965892986},{\"ID\":\"FORMULAS.EXE\",\"unlockedOn\":1663053707392},{\"ID\":\"BITRUNNERS\",\"unlockedOn\":1663226317042},{\"ID\":\"DONATION\",\"unlockedOn\":1663453433269},{\"ID\":\"DRAIN_SERVER\",\"unlockedOn\":1663459433299},{\"ID\":\"REPUTATION_10M\",\"unlockedOn\":1664194330396},{\"ID\":\"DAEDALUS\",\"unlockedOn\":1664194510488},{\"ID\":\"SF1.1\",\"unlockedOn\":1693265834474},{\"ID\":\"N00DLES\",\"unlockedOn\":1693405977626},{\"ID\":\"UNDOCUMENTEDFUNCTIONCALL\",\"unlockedOn\":1693571157628},{\"ID\":\"BYPASS\",\"unlockedOn\":1693571277636}],\"terminalCommandHistory\":[\"analyze\",\"ls\",\"home\",\"ls\",\"alias -g backdoor2NiteSec='connect home; ./backdoor-command.js avmnite-02h'\",\"alias -g backdoor3BlackHand='connect home; ./backdoorCommand.js I.I.I.I'\",\"alias -g backdoor4BitRunners='connect home; ./backdoorCommand.js run4theh111z'\",\"backdoor1CSEC\",\"connect sigma-cosmetics; connect CSEC; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor2NiteSec \",\"connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor3BlackHand \",\"alias\",\"alias -g backdoor3BlackHand='connect home; ./backdoor-command.js I.I.I.I'\",\"backdoor3BlackHand \",\"connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect I.I.I.I; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor4BitRunners \",\"alias -g backdoor4BitRunners='connect home; ./backdoor-command.js run4theh111z'\",\"backdoor4BitRunners \",\"connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect icarus; connect nova-med; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"analyze\",\"darkweb\",\"home\",\"buy -l\",\"buyHTTP \",\"buySQL \",\"backdoor4BitRunners \",\"connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect icarus; connect nova-med; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"buy\",\"alias\",\"alias -g global alias buy1FTP='buy FTPCrack.exe'\",\"alias -g alias buy1FTP=\\\"buy FTPCrack.exe\\\"\",\"alias -g buy1FTP=\\\"buy FTPCrack.exe\\\"\",\"alias -g buy2SMTP=\\\"buy relaySMTP.exe\\\"\",\"alias -g buy3HTTP=\\\"buy HTTPWorm.exe\\\"\",\"alias -g buy4SQL=\\\"buy SQLInject.exe\\\"\",\"help alias\",\"alias\",\"unalias buyFTP\",\"unalias buySMTP\",\"unalias buyHTTP\",\"unalias buySQL\",\"unalias backdoorCSEC1\",\"alias\",\"buy-all \"],\"lastUpdate\":1693636297620,\"lastSave\":1693636245823,\"totalPlaytime\":31041131200,\"currentWork\":{\"ctor\":\"FactionWork\",\"data\":{\"type\":\"FACTION\",\"singularity\":false,\"cyclesWorked\":109145,\"factionWorkType\":\"hacking\",\"factionName\":\"Aevum\"}},\"focus\":false,\"entropy\":0,\"identifier\":\"38aadbdb6216\"}}","AllServersSave":"{\"home\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"home\",\"httpPortOpen\":true,\"ip\":\"75.8.0.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"hackers-starting-handbook.lit\",\"j0.msg\",\"j1.msg\",\"csec-test.msg\",\"j2.msg\",\"nitesec-test.msg\",\"j3.msg\",\"j4.msg\",\"19dfj3l1nd.msg\"],\"organizationName\":\"Home PC\",\"programs\":[\"NUKE.exe\",\"b1t_flum3.exe\",\"BruteSSH.exe\",\"fl1ght.exe\",\"FTPCrack.exe\",\"relaySMTP.exe\",\"HTTPWorm.exe\",\"ServerProfiler.exe\",\"DeepscanV1.exe\",\"DeepscanV2.exe\",\"AutoLink.exe\"],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"home\"}}],[\"run-simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    let host = ns.args[0];\\n    let remote = ns.args[1];\\n    let script = 'simple-hack.js';\\n\\n    if (!ns.serverExists(host)) {\\n        ns.print(`Host '${host}'' doesn't exist!`);\\n        return 1;\\n    }\\n\\n    if (!ns.serverExists(remote)) {\\n        ns.print(`Remote '${remote}'' doesn't exist!`);\\n        return 2;\\n    }\\n\\n    if (!ns.fileExists(script, host)) {\\n        if (!ns.fileExists(script, 'home')) {\\n            ns.print(`Script '${script}' doesn't exist!`);\\n            return 3;\\n        }\\n\\n        ns.scp(script, host, 'home');\\n    }\\n\\n    let serverMaxRam = ns.getServerMaxRam(host);\\n    let serverUsedRam = ns.getServerUsedRam(host);\\n    let serverFreeRam = serverMaxRam - serverUsedRam;\\n    let scriptRam = ns.getScriptRam(script, host);\\n    let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n    if(maxThreads == 0)\\n    {\\n        ns.print(`Not enough ram to run '${script}', ${scriptRam}/${serverFreeRam}!`)\\n    }\\n\\n    ns.scriptKill(script, host);\\n\\n    if (!ns.exec(script, host, maxThreads, remote)) {\\n        ns.tprint(`Exec error running script '${script} on '${host}!`);\\n    }\\n\\n    \\n}\\n\",\"filename\":\"run-simple-hack.js\",\"server\":\"home\"}}],[\"auto-nuke.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n        await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n    }\\n\\n    /**\\n     * @constant\\n     * @default\\n     */\\n    const EXPLOITS = [\\n        'BruteSSH.exe',\\n        'FTPCrack.exe',\\n        'relaySMTP.exe',\\n        'HTTPWorm.exe',\\n        'SQLInject.exe'\\n    ];\\n\\n    /** @function maxPortsToHack\\n     * Calculate how many ports you're able to open\\n     * @returns {number} number of ports you're able to open\\n     */\\n    function maxPortsToHack() {\\n        let maxPorts = 0;\\n        EXPLOITS.forEach(exploit => {\\n            if (ns.fileExists(exploit)) ++maxPorts;\\n        });\\n        // ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);\\n        return maxPorts;\\n    }\\n\\n    /** @function analyzeServer\\n     * Analyze server requirements\\n     * @param {string} server \\n     * @returns {object} object containing server information\\n     */\\n    function analyzeServer(server) {\\n        let requiredHacking = ns.getServerRequiredHackingLevel(server);\\n        let requiredPorts = ns.getServerNumPortsRequired(server);\\n        let currentHacking = ns.getHackingLevel();\\n\\n        return {\\n            \\\"rootAccess\\\": ns.hasRootAccess(server),\\n            \\\"requiredHacking\\\": requiredHacking,\\n            \\\"requiredPorts\\\": requiredPorts,\\n            \\\"nukeAvailable\\\": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts)\\n        };\\n    }\\n\\n    /** @function runHack\\n     * Recursively scan, try to nuke and hack servers in the network\\n     * @param {string} server server to nuke and hack\\n     * @returns {Promise<number>} exit code; if negative error, if positive hack script PID, if 0 already running\\n     */\\n    async function runNuke(server) {\\n        let serverStatus = analyzeServer(server);\\n        ns.print('INFO ', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess && serverStatus.nukeAvailable) {\\n            ns.print(`\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n            for (let i = 0; i < maxPortsToHack(); ++i) {\\n                switch (EXPLOITS[i]) {\\n                    case 'BruteSSH.exe':\\n                        ns.brutessh(server);\\n                        break;\\n\\n                    case 'FTPCrack.exe':\\n                        ns.ftpcrack(server);\\n                        break;\\n\\n                    case 'relaySMTP.exe':\\n                        ns.relaysmtp(server);\\n                        break;\\n\\n                    case 'HTTPWorm.exe':\\n                        ns.httpworm(server);\\n                        break;\\n\\n                    case 'SQLInject.exe':\\n                        ns.sqlinject(server);\\n                        break;\\n\\n                }\\n            }\\n            ns.nuke(server);\\n        }\\n    }\\n\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n        ns.print('INFO ', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (serverStatus.rootAccess && serverStatus.nukeAvailable) {\\n            if (!ns.fileExists(script, 'home')) {\\n                ns.print(`ERROR Script '${script}' doesn't exist!`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                await runNuke(nextServer);\\n                if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) {\\n                    let hackExitCode = await runHack(nextServer);\\n\\n                    // if (hackExitCode == 0) {\\n                    //     ns.print('INFO ' + `\\\"Hack already running on ${nextServer}\\\"`);\\n                    // } else if (hackExitCode == -6) {\\n                    //     ns.print('ERROR ' + `\\\"No root access to ${nextServer}!\\\"`);\\n                    // } else if (hackExitCode == -4) {\\n                    //     ns.print('WARN ' + `\\\"Not enough RAM to run script on ${nextServer}!\\\"`);\\n                    // } else {\\n                    //     if (hackExitCode < 0) {\\n                    //         ns.print('ERROR ' + `\\\"Hack exec ERROR on '${nextServer}': ${hackExitCode}!\\\"`);\\n                    //     } else {\\n                    //         ns.print('INFO ' + `\\\"Hack started on '${nextServer}'\\\"`);\\n                    //     }\\n                    // }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n        await ns.sleep(10);\\n    }\\n\\n    ns.write('nuke-log.js', '', 'w');\\n    if (!ns.scriptRunning('simple-hack.js', 'n00dles')) ns.write('hack-log.js', '', 'w');\\n    ns.tprint(`TERMINAL = \\\"Running scan\\\"`);\\n\\n    while (true) {\\n        ns.print(`INFO Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(60000);\\n    }\\n}\\n\",\"filename\":\"auto-nuke.js\",\"server\":\"home\"}}],[\"hacknet-bot.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    const nodeCostThreshold = ns.args.length > 0 ? ns.args[0] : 0.2;\\n    const upgradeCostThreshold = ns.args.length > 1 ? ns.args[1] : 0.1;\\n    const upgradeCount = ns.args.length > 2 ? ns.args[2] : 1;\\n    const helperBuyThreshold = ns.args.length > 3 ? ns.args[3] : 0.2;\\n    const nodeCap = 24;\\n    const levelCap = 200;\\n    const ramCap = 64;\\n    const coreCap = 16;\\n    const serverRAM = 32;\\n    ns.tprint(`Bot started {nodeCostThreshold: ${nodeCostThreshold}, upgradeCostThreshold: ${upgradeCostThreshold}, upgradeCount: ${upgradeCount}}`);\\n\\n    \\n\\n    while (true) {\\n        let currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n\\n        let nodePurchaseCost = ns.hacknet.getPurchaseNodeCost();\\n        let nodeCount = ns.hacknet.numNodes();\\n\\n        if (nodeCount < nodeCap && nodePurchaseCost / Math.abs(currentMoney) < nodeCostThreshold) {\\n            ns.hacknet.purchaseNode();\\n            currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            ++nodeCount;\\n        }\\n\\n        for (let index = 0; index < nodeCount; ++index) {\\n            let nodeStats = ns.hacknet.getNodeStats(index);\\n\\n            if (nodeStats.level < levelCap && ns.hacknet.getLevelUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeLevel(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n\\n            if (nodeStats.ram < ramCap && ns.hacknet.getRamUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeRam(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n\\n            if (nodeStats.cores < coreCap && ns.hacknet.getCoreUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeCore(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n        }\\n\\n        let serverCost = ns.getPurchasedServerCost(serverRAM);\\n\\n        if (serverCost < currentMoney * helperBuyThreshold) {\\n            let newServer = ns.purchaseServer('home', serverRAM);\\n            if (newServer != '') {\\n                ns.tprint(`Bought a server`);\\n                ns.scp('grow-helper.js', newServer);\\n                ns.scp('constants.js', newServer);\\n                let execExitCode = ns.exec('grow-helper.js', newServer, 10, 20);\\n                ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);\\n            }\\n        }\\n\\n\\n\\n\\n        // let logFiles = ['hack-log.js', 'nuke-log.js'];\\n\\n        // for (let index = 0; index < logFiles.length; index++) {\\n        //     const logFile = logFiles[index];\\n        //     let portData = ns.readPort(index + 1);\\n        //     if (portData != 'NULL PORT DATA') ns.write(logFile, portData, 'a');\\n        // }\\n\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"hacknet-bot.js\",\"server\":\"home\"}}],[\"kill-all-simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) ns.scriptKill('simple-hack.js', nextServer);\\n                scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    ns.tprint(`Running scan`);\\n    scanServer('home');\\n}\\n\",\"filename\":\"kill-all-simple-hack.js\",\"server\":\"home\"}}],[\"kill-hacknet.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    \\n    ns.scriptKill('hacknet-bot.js', 'home');\\n}\",\"filename\":\"kill-hacknet.js\",\"server\":\"home\"}}],[\"hack-log.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"\",\"filename\":\"hack-log.js\",\"server\":\"home\"}}],[\"kill-nuke.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    ns.scriptKill('auto-nuke.js', 'home');\\n}\",\"filename\":\"kill-nuke.js\",\"server\":\"home\"}}],[\"nuke-log.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"\",\"filename\":\"nuke-log.js\",\"server\":\"home\"}}],[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home\"}}],[\"buy-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    \\n    let serverCost = ns.getPurchasedServerCost(16);\\n    let currentMoney = ns.get\\n    if(ns.getPurchasedServerCost(16)\\n}\",\"filename\":\"buy-server.js\",\"server\":\"home\"}}],[\"buy-grow-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    let serverCost = ns.getPurchasedServerCost(16);\\n    let currentMoney = ns.getServerMoneyAvailable('home');\\n\\n    if (serverCost < 0.1 * currentMoney) {\\n        let newServer = ns.purchaseServer('home', 16);\\n        if (newServer != '') {\\n            ns.tprint(`Bought a server`);\\n            ns.scp('grow-helper.js', newServer);\\n            let execExitCode = ns.exec('grow-helper.js', newServer, 5, 20);\\n            ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);\\n        }\\n    }\\n}\",\"filename\":\"buy-grow-server.js\",\"server\":\"home\"}}],[\"start-grow-helpers.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    let script = 'grow-helper.js';\\n\\n\\n    let serverMaxRam = ns.getServerMaxRam(`home`);\\n    let serverUsedRam = ns.getServerUsedRam(`home`);\\n    let serverFreeRam = serverMaxRam - serverUsedRam;\\n    let scriptRam = ns.getScriptRam(script, `home`);\\n    let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n    ns.scp(script, `home`, 'home');\\n    ns.exec(script, `home`, maxThreads);\\n\\n    for (let server = 0; ns.serverExists(`home-${server}`); server++) {\\n        let serverMaxRam = ns.getServerMaxRam(`home-${server}`);\\n        let serverUsedRam = ns.getServerUsedRam(`home-${server}`);\\n        let serverFreeRam = serverMaxRam - serverUsedRam;\\n        let scriptRam = ns.getScriptRam(script, `home-${server}`);\\n        let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n        ns.scp(script, `home-${server}`, 'home');\\n        ns.exec(script, `home-${server}`, maxThreads);\\n    }\\n}\",\"filename\":\"start-grow-helpers.js\",\"server\":\"home\"}}],[\"backdoor-command.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, targetServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        if (currentServer == targetServer) {\\n            return [currentServer];\\n        } else {\\n            let availableServers = ns.scan(currentServer);\\n\\n            for (let i = 0; i < availableServers.length; ++i) {\\n                let nextServer = availableServers[i];\\n\\n                if (nextServer != currentServer && nextServer != previousServer) {\\n                    let result = scanServer(nextServer, targetServer, currentServer);\\n\\n                    if (result != null) {\\n                        return [currentServer].concat(result);\\n                    }\\n                }\\n            }\\n\\n            return null;\\n        }\\n    }\\n\\n    let targetPath = scanServer('home', ns.args[0]);\\n    ns.tprint(targetPath);\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n    let backdoorCommand = '';\\n\\n    for (let index = 1; index < targetPath.length; index++) {\\n        const server = targetPath[index];\\n\\n        backdoorCommand += `connect ${server}; `;\\n    }\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    backdoorCommand = 'run BruteSSH.exe; ';\\n    backdoorCommand += 'run FTPCrack.exe; ';\\n    backdoorCommand += 'run relaySMTP.exe; ';\\n    backdoorCommand += 'run HTTPWorm.exe; ';\\n    backdoorCommand += 'run SQLInject.exe; ';\\n    backdoorCommand += 'run NUKE.exe; ';\\n    backdoorCommand += 'backdoor';\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"backdoor-command.js\",\"server\":\"home\"}}],[\"download-all-lit.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let litFiles = ns.ls(nextServer, 'lit');\\n                ns.tprint(`Download from '${nextServer}': ${litFiles}`);\\n                if (ns.args[0] && litFiles.length) {\\n                    ns.scp(litFiles, 'home', nextServer);\\n                }\\n\\n                scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    scanServer('home');\\n}\",\"filename\":\"download-all-lit.js\",\"server\":\"home\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home\"}}],[\"auto-nuke-v2.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\n\\n\\n/**\\n * get all servers\\n * for servers ram > 0 get ram, get money\\n * home ram substract ram needed for bots\\n * get available threads for each server for hack/grow/weaken\\n * sum all money\\n * run with proportion to the money available\\n */\\n\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n        await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n    }\\n\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n        await writeLog('ANALYZE', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess) {\\n            if (serverStatus.nukeAvailable) {\\n                await writeLog('NUKE', `\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n                for (let i = 0; i < maxPortsToHack(); ++i) {\\n                    switch (EXPLOITS[i]) {\\n                        case 'BruteSSH.exe':\\n                            ns.brutessh(server);\\n                            break;\\n\\n                        case 'FTPCrack.exe':\\n                            ns.ftpcrack(server);\\n                            break;\\n\\n                        case 'relaySMTP.exe':\\n                            ns.relaysmtp(server);\\n                            break;\\n\\n                        case 'HTTPWorm.exe':\\n                            ns.httpworm(server);\\n                            break;\\n\\n                        case 'SQLInject.exe':\\n                            ns.sqlinject(server);\\n                            break;\\n\\n                    }\\n                }\\n                ns.nuke(server);\\n            }\\n        }\\n\\n        serverStatus = analyzeServer(server);\\n\\n        if (serverStatus.rootAccess) {\\n            if (!ns.fileExists(script, 'home')) {\\n                await writeLog('ERROR', `\\\"Script '${script}' doesn't exist!\\\"`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n        let result = [];\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                result.concat(scanServer(nextServer, currentServer));\\n            }\\n        }\\n\\n        return [currentServer].concat(result);\\n    }\\n\\n    while (true) {\\n        let network = scanServer('home');\\n\\n        await ns.sleep(100);\\n    }\\n}\",\"filename\":\"auto-nuke-v2.js\",\"server\":\"home\"}}],[\"grow.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    \\n}\",\"filename\":\"grow.js\",\"server\":\"home\"}}],[\"hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    \\n}\",\"filename\":\"hack.js\",\"server\":\"home\"}}],[\"weaken.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    let target;\\n    \\n    if(ns.args.length == 1) {\\n        target = JSON.parse(ns.args[0]);\\n    }\\n}\",\"filename\":\"weaken.js\",\"server\":\"home\"}}],[\"kill-all-grow-helpers.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    for (let server = 0; ns.serverExists(`home-${server}`); server++) {\\n        ns.scriptKill('grow-helper.js', `home-${server}`);\\n    }\\n}\\n\\n\\n\\n\\n\",\"filename\":\"kill-all-grow-helpers.js\",\"server\":\"home\"}}],[\"scan-network.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {\\n        let availableServers = ns.scan(currentServer);\\n        let nextConnectString = connectString + `connect ${currentServer}; `;\\n        ns.tprint(`${'┃  '.repeat(scanLevel)}┣${currentServer}: ${nextConnectString}`);\\n        ns.write('scan.txt', `${'┃  '.repeat(scanLevel)}┣━${currentServer}: ${nextConnectString}`+'\\\\n', 'a');\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                scanServer(nextServer, currentServer, nextConnectString, scanLevel+1);\\n            }\\n        }\\n    }\\n\\n    ns.tprint(`Running scan`);\\n    ns.write('scan.txt', ``, 'w');\\n    scanServer('home');\\n}\\n\",\"filename\":\"scan-network.js\",\"server\":\"home\"}}],[\"connect-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, targetServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        if (currentServer == targetServer) {\\n            return [currentServer];\\n        } else {\\n            let availableServers = ns.scan(currentServer);\\n\\n            for (let i = 0; i < availableServers.length; ++i) {\\n                let nextServer = availableServers[i];\\n\\n                if (nextServer != currentServer && nextServer != previousServer) {\\n                    let result = scanServer(nextServer, targetServer, currentServer);\\n\\n                    if (result != null) {\\n                        return [currentServer].concat(result);\\n                    }\\n                }\\n            }\\n\\n            return null;\\n        }\\n    }\\n\\n    let targetPath = scanServer('home', ns.args[0]);\\n    ns.tprint(targetPath);\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n    let backdoorCommand = '';\\n\\n    for (let index = 1; index < targetPath.length; index++) {\\n        const server = targetPath[index];\\n\\n        backdoorCommand += `connect ${server}; `;\\n    }\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    // backdoorCommand = 'run BruteSSH.exe; ';\\n    // backdoorCommand += 'run FTPCrack.exe; ';\\n    // backdoorCommand += 'run relaySMTP.exe; ';\\n    // backdoorCommand += 'run HTTPWorm.exe; ';\\n    // backdoorCommand += 'run SQLInject.exe; ';\\n    // backdoorCommand += 'run NUKE.exe; ';\\n    // backdoorCommand += 'backdoor';\\n\\n    // ns.tprint(backdoorCommand);\\n    // terminalInput.value = backdoorCommand;\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"connect-server.js\",\"server\":\"home\"}}],[\"backdoor-all.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n\\n    async function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {\\n        let availableServers = ns.scan(currentServer);\\n        let nextConnectString = connectString + `connect ${currentServer}; `;\\n\\n        let backdoorCommand = nextConnectString;\\n        backdoorCommand += 'run BruteSSH.exe; ';\\n        backdoorCommand += 'run FTPCrack.exe; ';\\n        backdoorCommand += 'run relaySMTP.exe; ';\\n        backdoorCommand += 'run HTTPWorm.exe; ';\\n        backdoorCommand += 'run SQLInject.exe; ';\\n        backdoorCommand += 'run NUKE.exe; ';\\n        backdoorCommand += 'backdoor';\\n\\n        terminalInput.value = backdoorCommand;\\n        terminalInput[handler].onChange({ target: terminalInput });\\n        terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n        await ns.sleep(60000)\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                await scanServer(nextServer, currentServer, nextConnectString, scanLevel + 1);\\n            }\\n        }\\n    }\\n    \\n    await scanServer('home');\\n    terminalInput.value = 'home';\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"backdoor-all.js\",\"server\":\"home\"}}],[\"test.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    eval(\\\"ns.bypass(document)\\\");\\n}\",\"filename\":\"test.js\",\"server\":\"home\"}}],[\"document-bypass.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n\\n    terminalInput.value = \\\"COMMAND\\\";\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"document-bypass.js\",\"server\":\"home\"}}]]},\"serversOnNetwork\":[\"n00dles\",\"foodnstuff\",\"sigma-cosmetics\",\"joesguns\",\"hong-fang-tea\",\"harakiri-sushi\",\"iron-gym\",\"home-0\",\"home-1\",\"home-2\",\"home-3\",\"home-4\",\"home-5\",\"home-6\",\"home-7\",\"home-8\",\"home-9\",\"home-10\",\"home-11\",\"home-12\",\"home-13\",\"home-14\",\"home-15\",\"home-16\",\"home-17\",\"home-18\",\"home-19\",\"home-20\",\"home-21\",\"home-22\",\"home-23\",\"home-24\",\"darkweb\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[[\"INFO.txt\",{\"ctor\":\"TextFile\",\"data\":{\"filename\":\"INFO.txt\",\"text\":\"{server: \\\"the-hub\\\", status: {\\\"rootAccess\\\":true,\\\"requiredHacking\\\":313,\\\"requiredPorts\\\":2,\\\"nukeAvailable\\\":false}}\"}}],[\"scan.txt\",{\"ctor\":\"TextFile\",\"data\":{\"filename\":\"scan.txt\",\"text\":\"┣━home: connect home; \\n┃  ┣━n00dles: connect home; connect n00dles; \\n┃  ┃  ┣━max-hardware: connect home; connect n00dles; connect max-hardware; \\n┃  ┃  ┃  ┣━silver-helix: connect home; connect n00dles; connect max-hardware; connect silver-helix; \\n┃  ┃  ┃  ┃  ┣━netlink: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; \\n┃  ┃  ┃  ┃  ┃  ┣━zb-institute: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━alpha-ent: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect alpha-ent; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━snap-fitness: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect alpha-ent; connect snap-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━aevum-police: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━galactic-cyber: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━unitalife: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━defcomm: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━infocomm: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; connect infocomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━titan-labs: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; connect infocomm; connect titan-labs; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━helios: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; connect infocomm; connect titan-labs; connect helios; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━.: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; connect infocomm; connect titan-labs; connect helios; connect .; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nwo: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; connect infocomm; connect titan-labs; connect helios; connect .; connect nwo; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━powerhouse-fitness: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; connect infocomm; connect titan-labs; connect helios; connect .; connect powerhouse-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━ecorp: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; connect infocomm; connect titan-labs; connect helios; connect .; connect powerhouse-fitness; connect ecorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━The-Cave: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect galactic-cyber; connect unitalife; connect defcomm; connect infocomm; connect titan-labs; connect helios; connect .; connect powerhouse-fitness; connect The-Cave; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━global-pharm: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect global-pharm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnia: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect zb-institute; connect aevum-police; connect global-pharm; connect omnia; \\n┃  ┃  ┃  ┃  ┃  ┣━I.I.I.I: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect I.I.I.I; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━millenium-fitness: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect netlink; connect I.I.I.I; connect millenium-fitness; \\n┃  ┃  ┃  ┃  ┣━johnson-ortho: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect johnson-ortho; \\n┃  ┃  ┃  ┃  ┃  ┣━rothman-uni: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect johnson-ortho; connect rothman-uni; \\n┃  ┃  ┃  ┃  ┣━avmnite-02h: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; \\n┃  ┃  ┃  ┃  ┃  ┣━summit-uni: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━lexo-corp: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━aerocorp: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━deltaone: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━icarus: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect icarus; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nova-med: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect icarus; connect nova-med; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━run4theh111z: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect icarus; connect nova-med; connect run4theh111z; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━vitalife: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect icarus; connect nova-med; connect run4theh111z; connect vitalife; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━univ-energy: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect univ-energy; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zb-def: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect univ-energy; connect zb-def; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━solaris: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect solaris; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zeus-med: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━taiyang-digital: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━microdyne: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumtech: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnitek: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; connect omnitek; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━b-and-a: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; connect omnitek; connect b-and-a; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━4sigma: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; connect 4sigma; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━blade: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; connect 4sigma; connect blade; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumassets: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; connect 4sigma; connect blade; connect fulcrumassets; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━kuai-gong: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; connect kuai-gong; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━clarkinc: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; connect kuai-gong; connect clarkinc; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━megacorp: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect microdyne; connect fulcrumtech; connect kuai-gong; connect clarkinc; connect megacorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━applied-energetics: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect applied-energetics; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━stormtech: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect lexo-corp; connect aerocorp; connect deltaone; connect zeus-med; connect taiyang-digital; connect applied-energetics; connect stormtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━rho-construction: connect home; connect n00dles; connect max-hardware; connect silver-helix; connect avmnite-02h; connect summit-uni; connect rho-construction; \\n┃  ┣━foodnstuff: connect home; connect foodnstuff; \\n┃  ┃  ┣━zer0: connect home; connect foodnstuff; connect zer0; \\n┃  ┣━sigma-cosmetics: connect home; connect sigma-cosmetics; \\n┃  ┃  ┣━CSEC: connect home; connect sigma-cosmetics; connect CSEC; \\n┃  ┣━joesguns: connect home; connect joesguns; \\n┃  ┣━hong-fang-tea: connect home; connect hong-fang-tea; \\n┃  ┣━harakiri-sushi: connect home; connect harakiri-sushi; \\n┃  ┣━iron-gym: connect home; connect iron-gym; \\n┃  ┃  ┣━nectar-net: connect home; connect iron-gym; connect nectar-net; \\n┃  ┃  ┃  ┣━neo-net: connect home; connect iron-gym; connect nectar-net; connect neo-net; \\n┃  ┃  ┃  ┃  ┣━computek: connect home; connect iron-gym; connect nectar-net; connect neo-net; connect computek; \\n┃  ┃  ┃  ┃  ┃  ┣━catalyst: connect home; connect iron-gym; connect nectar-net; connect neo-net; connect computek; connect catalyst; \\n┃  ┃  ┃  ┣━phantasy: connect home; connect iron-gym; connect nectar-net; connect phantasy; \\n┃  ┃  ┃  ┃  ┣━the-hub: connect home; connect iron-gym; connect nectar-net; connect phantasy; connect the-hub; \\n┃  ┃  ┃  ┣━omega-net: connect home; connect iron-gym; connect nectar-net; connect omega-net; \\n┃  ┃  ┃  ┃  ┣━crush-fitness: connect home; connect iron-gym; connect nectar-net; connect omega-net; connect crush-fitness; \\n┃  ┃  ┃  ┃  ┃  ┣━syscore: connect home; connect iron-gym; connect nectar-net; connect omega-net; connect crush-fitness; connect syscore; \\n┃  ┣━home-0: connect home; connect home-0; \\n┃  ┣━home-1: connect home; connect home-1; \\n┃  ┣━home-2: connect home; connect home-2; \\n┃  ┣━home-3: connect home; connect home-3; \\n┃  ┣━home-4: connect home; connect home-4; \\n┃  ┣━home-5: connect home; connect home-5; \\n┃  ┣━home-6: connect home; connect home-6; \\n┃  ┣━home-7: connect home; connect home-7; \\n┃  ┣━home-8: connect home; connect home-8; \\n┃  ┣━home-9: connect home; connect home-9; \\n┃  ┣━home-10: connect home; connect home-10; \\n┃  ┣━home-11: connect home; connect home-11; \\n┃  ┣━home-12: connect home; connect home-12; \\n┃  ┣━home-13: connect home; connect home-13; \\n┃  ┣━home-14: connect home; connect home-14; \\n┃  ┣━home-15: connect home; connect home-15; \\n┃  ┣━home-16: connect home; connect home-16; \\n┃  ┣━home-17: connect home; connect home-17; \\n┃  ┣━home-18: connect home; connect home-18; \\n┃  ┣━home-19: connect home; connect home-19; \\n┃  ┣━home-20: connect home; connect home-20; \\n┃  ┣━home-21: connect home; connect home-21; \\n┃  ┣━home-22: connect home; connect home-22; \\n┃  ┣━home-23: connect home; connect home-23; \\n┃  ┣━home-24: connect home; connect home-24; \\n\"}}]]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1.016,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{},\"filename\":\"auto-nuke.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":50764.0099998223,\"ramUsage\":5.6,\"server\":\"home\",\"scriptKey\":\"auto-nuke.js*[]\",\"title\":\"auto-nuke.js \",\"threads\":1,\"temporary\":false}},{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{},\"filename\":\"hacknet-bot.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":50764.0099998223,\"ramUsage\":10.1,\"server\":\"home\",\"scriptKey\":\"hacknet-bot.js*[]\",\"title\":\"hacknet-bot.js \",\"threads\":1,\"temporary\":false}},{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,3,0],\"max-hardware\":[0,0,30,0],\"foodnstuff\":[0,0,36,0],\"zer0\":[0,0,33,0],\"sigma-cosmetics\":[0,0,36,0],\"joesguns\":[0,0,27,0],\"hong-fang-tea\":[0,0,36,0],\"harakiri-sushi\":[0,0,24,0],\"iron-gym\":[0,0,36,0],\"nectar-net\":[0,0,36,0],\"neo-net\":[0,0,36,0],\"phantasy\":[0,0,24,0],\"the-hub\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"silver-helix\":[0,0,30,0],\"netlink\":[0,0,18,0],\"millenium-fitness\":[0,0,15,0],\"rothman-uni\":[0,0,15,0],\"summit-uni\":[0,0,15,0],\"rho-construction\":[0,0,15,0],\"catalyst\":[0,0,15,0],\"alpha-ent\":[0,0,15,0],\"aevum-police\":[0,0,15,0],\"lexo-corp\":[0,0,12,0],\"global-pharm\":[0,0,3,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":24253.077676314395,\"onlineMoneyMade\":0,\"onlineRunningTime\":50764.0099998223,\"ramUsage\":3.15,\"server\":\"home\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":3,\"temporary\":false}}]}},\"ecorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"ecorp\",\"httpPortOpen\":false,\"ip\":\"13.9.3.3\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"ECorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"powerhouse-fitness\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":56151551044,\"moneyMax\":1403788776100,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1363,\"serverGrowth\":99,\"runningScripts\":[]}},\"megacorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-435517.cct\",\"type\":\"Compression III: LZ Compression\",\"data\":\"TeO8OOxeOK7JA7QjwA7QjjwA7QjKjHQCbupbupepepepep7pOEhXCipOEhXCipgVg\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"megacorp\",\"httpPortOpen\":false,\"ip\":\"9.7.4.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"MegaCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"clarkinc\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":52007203940,\"moneyMax\":1300180098500,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1338,\"serverGrowth\":99,\"runningScripts\":[]}},\"b-and-a\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"b-and-a\",\"httpPortOpen\":false,\"ip\":\"52.6.0.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Bachman & Associates\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"omnitek\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":82,\"hackDifficulty\":82,\"minDifficulty\":27,\"moneyAvailable\":15689867227,\"moneyMax\":392246680675,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":984,\"serverGrowth\":64,\"runningScripts\":[]}},\"blade\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-226712-TheBlackHand.cct\",\"type\":\"Array Jumping Game II\",\"data\":[2,0,2,3,1,2,2,3,0,0,1,1,5,2,2,2,3,5,1],\"reward\":{\"type\":0,\"name\":\"The Black Hand\"}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"blade\",\"httpPortOpen\":false,\"ip\":\"0.0.2.6\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"beyond-man.lit\"],\"organizationName\":\"Blade Industries\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"4sigma\",\"fulcrumassets\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":89,\"hackDifficulty\":89,\"minDifficulty\":30,\"moneyAvailable\":36662862528,\"moneyMax\":916571563200,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1185,\"serverGrowth\":85,\"runningScripts\":[]}},\"nwo\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"nwo\",\"httpPortOpen\":false,\"ip\":\"43.3.2.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"NWO\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\".\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":22671161601,\"moneyMax\":566779040025,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":950,\"serverGrowth\":81,\"runningScripts\":[]}},\"clarkinc\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-418628.cct\",\"type\":\"Algorithmic Stock Trader II\",\"data\":[168,48,193,70,34,14,97,7,162,27,117,172,130,186,80,108,127,15,81,24,29,112,174,21,134,105,176,153,158,43],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"clarkinc\",\"httpPortOpen\":false,\"ip\":\"55.9.2.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"beyond-man.lit\",\"cost-of-immortality.lit\"],\"organizationName\":\"Clarke Incorporated\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"kuai-gong\",\"megacorp\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":60,\"minDifficulty\":20,\"moneyAvailable\":24551713963,\"moneyMax\":613792849075,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":985,\"serverGrowth\":51,\"runningScripts\":[]}},\"omnitek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"omnitek\",\"httpPortOpen\":false,\"ip\":\"81.6.7.8\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"coded-intelligence.lit\",\"history-of-synthoids.lit\"],\"organizationName\":\"OmniTek Incorporated\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"fulcrumtech\",\"b-and-a\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":93,\"hackDifficulty\":93,\"minDifficulty\":31,\"moneyAvailable\":19700478652,\"moneyMax\":492511966300,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":980,\"serverGrowth\":99,\"runningScripts\":[]}},\"4sigma\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"4sigma\",\"httpPortOpen\":false,\"ip\":\"72.4.8.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Four Sigma\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"fulcrumtech\",\"blade\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":65,\"minDifficulty\":22,\"moneyAvailable\":24359494049,\"moneyMax\":608987351225,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1136,\"serverGrowth\":98,\"runningScripts\":[]}},\"kuai-gong\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"kuai-gong\",\"httpPortOpen\":false,\"ip\":\"27.5.2.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"KuaiGong International\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"fulcrumtech\",\"clarkinc\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":28732837709,\"moneyMax\":718320942725,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1062,\"serverGrowth\":92,\"runningScripts\":[]}},\"fulcrumtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"fulcrumtech\",\"httpPortOpen\":false,\"ip\":\"45.5.6.6\",\"isConnectedTo\":false,\"maxRam\":1024,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"Fulcrum Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"microdyne\",\"omnitek\",\"4sigma\",\"kuai-gong\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":84,\"hackDifficulty\":84,\"minDifficulty\":28,\"moneyAvailable\":1594019498,\"moneyMax\":39850487450,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1163,\"serverGrowth\":99,\"runningScripts\":[]}},\"fulcrumassets\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"fulcrumassets\",\"httpPortOpen\":false,\"ip\":\"31.0.9.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Fulcrum Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"blade\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":1000000,\"moneyMax\":25000000,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1188,\"serverGrowth\":1,\"runningScripts\":[]}},\"stormtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"stormtech\",\"httpPortOpen\":false,\"ip\":\"75.7.8.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Storm Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"applied-energetics\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":85,\"hackDifficulty\":85,\"minDifficulty\":28,\"moneyAvailable\":1177374319,\"moneyMax\":29434357975,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1059,\"serverGrowth\":90,\"runningScripts\":[]}},\"defcomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"defcomm\",\"httpPortOpen\":false,\"ip\":\"61.6.6.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"DefComm\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"unitalife\",\"infocomm\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":91,\"hackDifficulty\":91,\"minDifficulty\":30,\"moneyAvailable\":801921636,\"moneyMax\":20048040900,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":908,\"serverGrowth\":53,\"runningScripts\":[]}},\"infocomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-568826.cct\",\"type\":\"Algorithmic Stock Trader I\",\"data\":[174,38,47,157,174,188,159,98,133,49,27,89,185,31,181,118,142,14],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"infocomm\",\"httpPortOpen\":false,\"ip\":\"92.4.3.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"InfoComm\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"defcomm\",\"titan-labs\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":77,\"hackDifficulty\":77,\"minDifficulty\":26,\"moneyAvailable\":803320595,\"moneyMax\":20083014875,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":885,\"serverGrowth\":41,\"runningScripts\":[]}},\"helios\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"helios\",\"httpPortOpen\":false,\"ip\":\"74.5.6.5\",\"isConnectedTo\":false,\"maxRam\":256,\"messages\":[\"beyond-man.lit\"],\"organizationName\":\"Helios Labs\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"titan-labs\",\".\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":87,\"hackDifficulty\":87,\"minDifficulty\":29,\"moneyAvailable\":590431639,\"moneyMax\":14760790975,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":849,\"serverGrowth\":78,\"runningScripts\":[]}},\"vitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"vitalife\",\"httpPortOpen\":false,\"ip\":\"13.3.2.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"A-Green-Tomorrow.lit\"],\"organizationName\":\"VitaLife\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"run4theh111z\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":87,\"hackDifficulty\":87,\"minDifficulty\":29,\"moneyAvailable\":717186760,\"moneyMax\":17929669000,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":879,\"serverGrowth\":74,\"runningScripts\":[]}},\"icarus\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"icarus\",\"httpPortOpen\":false,\"ip\":\"99.6.2.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Icarus Microsystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"deltaone\",\"nova-med\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":87,\"hackDifficulty\":87,\"minDifficulty\":29,\"moneyAvailable\":924957816,\"moneyMax\":23123945400,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":859,\"serverGrowth\":95,\"runningScripts\":[]}},\"univ-energy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"univ-energy\",\"httpPortOpen\":false,\"ip\":\"52.7.5.3\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[],\"organizationName\":\"Universal Energy\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"deltaone\",\"zb-def\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":84,\"hackDifficulty\":84,\"minDifficulty\":28,\"moneyAvailable\":1132384274,\"moneyMax\":28309606850,\"numOpenPortsRequired\":4,\"openPortCount\":0,\"requiredHackingSkill\":894,\"serverGrowth\":81,\"runningScripts\":[]}},\"titan-labs\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-107195.cct\",\"type\":\"Encryption II: Vigenère Cipher\",\"data\":[\"DEBUGARRAYLOGICCACHEMACRO\",\"FLAMING\"],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"titan-labs\",\"httpPortOpen\":false,\"ip\":\"8.0.0.9\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"coded-intelligence.lit\"],\"organizationName\":\"Titan Laboratories\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"infocomm\",\"helios\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":71,\"hackDifficulty\":71,\"minDifficulty\":24,\"moneyAvailable\":843760380,\"moneyMax\":21094009500,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":807,\"serverGrowth\":77,\"runningScripts\":[]}},\"microdyne\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"microdyne\",\"httpPortOpen\":false,\"ip\":\"59.5.6.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"synthetic-muscles.lit\"],\"organizationName\":\"Microdyne Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"taiyang-digital\",\"fulcrumtech\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":70,\"hackDifficulty\":70,\"minDifficulty\":23,\"moneyAvailable\":593631895,\"moneyMax\":14840797375,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":805,\"serverGrowth\":79,\"runningScripts\":[]}},\"taiyang-digital\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"taiyang-digital\",\"httpPortOpen\":false,\"ip\":\"99.9.5.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"A-Green-Tomorrow.lit\",\"brighter-than-the-sun.lit\"],\"organizationName\":\"Taiyang Digital\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"zeus-med\",\"microdyne\",\"applied-energetics\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":79,\"minDifficulty\":26,\"moneyAvailable\":821481376,\"moneyMax\":20537034400,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":945,\"serverGrowth\":73,\"runningScripts\":[]}},\"galactic-cyber\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-70134.cct\",\"type\":\"Algorithmic Stock Trader IV\",\"data\":[10,[158,42,193,26,9,60,90,26,10,90,93,166,39,136,91,182,35,53,84,10,101,68,165,181,119,180,69,76,96,128,6,63,138,113,185,118,136,99,52,25,80,33,86,180,5,8,181,192]],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"galactic-cyber\",\"httpPortOpen\":false,\"ip\":\"95.0.5.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Galactic Cybersystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"aevum-police\",\"unitalife\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":55,\"hackDifficulty\":55,\"minDifficulty\":18,\"moneyAvailable\":813408758,\"moneyMax\":20335218950,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":867,\"serverGrowth\":86,\"runningScripts\":[]}},\"aerocorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"aerocorp\",\"httpPortOpen\":false,\"ip\":\"87.6.9.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"man-and-machine.lit\"],\"organizationName\":\"AeroCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"lexo-corp\",\"deltaone\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":86,\"hackDifficulty\":86,\"minDifficulty\":29,\"moneyAvailable\":1166201684,\"moneyMax\":29155042100,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":857,\"serverGrowth\":55,\"runningScripts\":[]}},\"omnia\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-824499-BitRunners.cct\",\"type\":\"Algorithmic Stock Trader IV\",\"data\":[2,[130,33,70,77,142,162,89,127,68,122,157,7,126,196,4,186,190,93,91,12,82,115,111,121,179,153,116,8,66]],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-737536.cct\",\"type\":\"Subarray with Maximum Sum\",\"data\":[0,0,-6,-4,6,3,-3,-7,9,-5,0,2,-6,-7,-8],\"reward\":{\"type\":1}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-956630-BitRunners.cct\",\"type\":\"Unique Paths in a Grid I\",\"data\":[2,3],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"omnia\",\"httpPortOpen\":false,\"ip\":\"87.1.6.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"history-of-synthoids.lit\"],\"organizationName\":\"Omnia Cybersystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"global-pharm\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":93,\"hackDifficulty\":93,\"minDifficulty\":31,\"moneyAvailable\":902314290,\"moneyMax\":22557857250,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":898,\"serverGrowth\":65,\"runningScripts\":[]}},\"zb-def\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zb-def\",\"httpPortOpen\":true,\"ip\":\"64.4.2.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"synthetic-muscles.lit\"],\"organizationName\":\"ZB Defense Industries\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zb-def\"}}]]},\"serversOnNetwork\":[\"univ-energy\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":60,\"minDifficulty\":20,\"moneyAvailable\":910269576,\"moneyMax\":22756739400,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":786,\"serverGrowth\":68,\"runningScripts\":[]}},\"applied-energetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"applied-energetics\",\"httpPortOpen\":false,\"ip\":\"71.7.6.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Applied Energetics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"taiyang-digital\",\"stormtech\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":75,\"hackDifficulty\":75,\"minDifficulty\":25,\"moneyAvailable\":857969308,\"moneyMax\":21449232700,\"numOpenPortsRequired\":4,\"openPortCount\":0,\"requiredHackingSkill\":850,\"serverGrowth\":73,\"runningScripts\":[]}},\"solaris\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"solaris\",\"httpPortOpen\":false,\"ip\":\"58.5.2.8\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"A-Green-Tomorrow.lit\",\"the-failed-frontier.lit\"],\"organizationName\":\"Solaris Space Systems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"deltaone\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":74,\"minDifficulty\":25,\"moneyAvailable\":823694278,\"moneyMax\":20592356950,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":806,\"serverGrowth\":78,\"runningScripts\":[]}},\"deltaone\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"deltaone\",\"httpPortOpen\":false,\"ip\":\"74.1.0.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"DeltaOne\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"aerocorp\",\"icarus\",\"univ-energy\",\"solaris\",\"zeus-med\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":79,\"minDifficulty\":26,\"moneyAvailable\":1590601657,\"moneyMax\":39765041425,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":883,\"serverGrowth\":50,\"runningScripts\":[]}},\"global-pharm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"global-pharm\",\"httpPortOpen\":true,\"ip\":\"10.0.4.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"A-Green-Tomorrow.lit\"],\"organizationName\":\"Global Pharmaceuticals\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"global-pharm\"}}]]},\"serversOnNetwork\":[\"aevum-police\",\"omnia\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":85,\"hackDifficulty\":83.66600000000027,\"minDifficulty\":28,\"moneyAvailable\":1982546202.434919,\"moneyMax\":39426557900,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":768,\"serverGrowth\":80,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"global-pharm\"],\"dataMap\":{\"global-pharm\":[0,0,26,65]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":8817.724640917546,\"onlineMoneyMade\":0,\"onlineRunningTime\":17003.61000002679,\"ramUsage\":2.4,\"server\":\"global-pharm\",\"scriptKey\":\"simple-hack.js*[\\\"global-pharm\\\"]\",\"title\":\"simple-hack.js global-pharm\",\"threads\":13,\"temporary\":false}}]}},\"nova-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"nova-med\",\"httpPortOpen\":false,\"ip\":\"2.5.4.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Nova Medical\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"icarus\",\"run4theh111z\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":79,\"minDifficulty\":26,\"moneyAvailable\":1247519101,\"moneyMax\":31187977525,\"numOpenPortsRequired\":4,\"openPortCount\":0,\"requiredHackingSkill\":808,\"serverGrowth\":83,\"runningScripts\":[]}},\"zeus-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-178305.cct\",\"type\":\"Unique Paths in a Grid I\",\"data\":[6,10],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"zeus-med\",\"httpPortOpen\":false,\"ip\":\"4.1.8.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Zeus Medical\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"deltaone\",\"taiyang-digital\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":70,\"hackDifficulty\":70,\"minDifficulty\":23,\"moneyAvailable\":1368343719,\"moneyMax\":34208592975,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":809,\"serverGrowth\":76,\"runningScripts\":[]}},\"unitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-364755.cct\",\"type\":\"Total Ways to Sum\",\"data\":68,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"unitalife\",\"httpPortOpen\":true,\"ip\":\"78.1.0.7\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"UnitaLife Group\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"unitalife\"}}]]},\"serversOnNetwork\":[\"galactic-cyber\",\"defcomm\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":74,\"minDifficulty\":25,\"moneyAvailable\":1039311561,\"moneyMax\":25982789025,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":806,\"serverGrowth\":78,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"unitalife\"],\"dataMap\":{},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":144.81000000000031,\"ramUsage\":2.4,\"server\":\"unitalife\",\"scriptKey\":\"simple-hack.js*[\\\"unitalife\\\"]\",\"title\":\"simple-hack.js unitalife\",\"threads\":26,\"temporary\":false}}]}},\"lexo-corp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"lexo-corp\",\"httpPortOpen\":true,\"ip\":\"3.4.3.7\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"LexoCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"lexo-corp\"}}]]},\"serversOnNetwork\":[\"summit-uni\",\"aerocorp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":76,\"hackDifficulty\":65.07200000000066,\"minDifficulty\":25,\"moneyAvailable\":1126025471.0261362,\"moneyMax\":17653479975,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":709,\"serverGrowth\":56,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"lexo-corp\"],\"dataMap\":{\"lexo-corp\":[0,0,156,312]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":41052.14359139961,\"onlineMoneyMade\":0,\"onlineRunningTime\":31910.41000008102,\"ramUsage\":2.4,\"server\":\"lexo-corp\",\"scriptKey\":\"simple-hack.js*[\\\"lexo-corp\\\"]\",\"title\":\"simple-hack.js lexo-corp\",\"threads\":26,\"temporary\":false}}]}},\"rho-construction\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rho-construction\",\"httpPortOpen\":false,\"ip\":\"51.0.4.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Rho Construction\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"rho-construction\"}}]]},\"serversOnNetwork\":[\"summit-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":40,\"hackDifficulty\":26.33999999999992,\"minDifficulty\":13,\"moneyAvailable\":2377621584.6402674,\"moneyMax\":16123041425,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":487,\"serverGrowth\":51,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rho-construction\"],\"dataMap\":{\"rho-construction\":[636739132.7452959,91,637,429]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":59005.82654448581,\"onlineMoneyMade\":636739132.7452959,\"onlineRunningTime\":42492.20999994267,\"ramUsage\":2.4,\"server\":\"rho-construction\",\"scriptKey\":\"simple-hack.js*[\\\"rho-construction\\\"]\",\"title\":\"simple-hack.js rho-construction\",\"threads\":13,\"temporary\":false}}]}},\"alpha-ent\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"alpha-ent\",\"httpPortOpen\":true,\"ip\":\"25.4.3.9\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"sector-12-crime.lit\"],\"organizationName\":\"Alpha Enterprises\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"alpha-ent\"}}]]},\"serversOnNetwork\":[\"zb-institute\",\"snap-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":40.62200000000006,\"minDifficulty\":20,\"moneyAvailable\":3158270825.809476,\"moneyMax\":18647899775,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":548,\"serverGrowth\":57,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"alpha-ent\"],\"dataMap\":{\"alpha-ent\":[1512805545.9591565,265,1908,636]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":206234.7985853466,\"onlineMoneyMade\":1512805545.9591565,\"onlineRunningTime\":39135.40999999148,\"ramUsage\":2.4,\"server\":\"alpha-ent\",\"scriptKey\":\"simple-hack.js*[\\\"alpha-ent\\\"]\",\"title\":\"simple-hack.js alpha-ent\",\"threads\":53,\"temporary\":false}}]}},\"aevum-police\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-805454.cct\",\"type\":\"HammingCodes: Integer to Encoded Binary\",\"data\":67905907211423,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aevum-police\",\"httpPortOpen\":true,\"ip\":\"4.4.1.3\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"Aevum Police Headquarters\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"aevum-police\"}}]]},\"serversOnNetwork\":[\"zb-institute\",\"galactic-cyber\",\"global-pharm\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":55.2320000000005,\"minDifficulty\":26,\"moneyAvailable\":639248936.4000744,\"moneyMax\":9856212700,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":407,\"serverGrowth\":42,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"aevum-police\"],\"dataMap\":{\"aevum-police\":[0,0,468,598]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":96769.55553295683,\"onlineMoneyMade\":0,\"onlineRunningTime\":39135.209999991486,\"ramUsage\":2.4,\"server\":\"aevum-police\",\"scriptKey\":\"simple-hack.js*[\\\"aevum-police\\\"]\",\"title\":\"simple-hack.js aevum-police\",\"threads\":26,\"temporary\":false}}]}},\"rothman-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-307125.cct\",\"type\":\"Compression III: LZ Compression\",\"data\":\"c1y3SGLKh5EEEEEEEEEE7ke666666666i6666WhsTemwZDWWTemwZDFJJJJJJJJJlJjSmJJl8OXh\",\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-83631.cct\",\"type\":\"Compression I: RLE Compression\",\"data\":\"KKddbbbbQQXIIIIIIIIIFFFFFFFHHHHHHHHHSJGG6ccccccccccrrrrrrrrrrri11wffDDXpppppaaaaaaDD\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rothman-uni\",\"httpPortOpen\":false,\"ip\":\"30.9.1.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"secret-societies.lit\",\"the-failed-frontier.lit\",\"tensions-in-tech-race.lit\"],\"organizationName\":\"Rothman University\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"rothman-uni\"}}]]},\"serversOnNetwork\":[\"johnson-ortho\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":52,\"hackDifficulty\":33.685999999999936,\"minDifficulty\":17,\"moneyAvailable\":441688940.7047447,\"moneyMax\":5338780800,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":375,\"serverGrowth\":35,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rothman-uni\"],\"dataMap\":{\"rothman-uni\":[0,0,494,507]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":63301.9811063765,\"onlineMoneyMade\":0,\"onlineRunningTime\":42492.40999994267,\"ramUsage\":2.4,\"server\":\"rothman-uni\",\"scriptKey\":\"simple-hack.js*[\\\"rothman-uni\\\"]\",\"title\":\"simple-hack.js rothman-uni\",\"threads\":13,\"temporary\":false}}]}},\"zb-institute\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-566152.cct\",\"type\":\"Array Jumping Game\",\"data\":[2,7,8,1,0,8,10,0,0,4,0,5,1,5,4],\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-201980.cct\",\"type\":\"Minimum Path Sum in a Triangle\",\"data\":[[8],[3,7],[2,1,2],[4,3,8,2],[7,9,6,1,3],[1,7,8,7,3,2],[4,8,2,5,5,5,2],[1,2,1,2,1,8,5,6],[4,4,4,1,9,8,3,9,5]],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"zb-institute\",\"httpPortOpen\":false,\"ip\":\"43.6.8.1\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"ZB Institute of Technology\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"netlink\",\"alpha-ent\",\"aevum-police\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":67,\"hackDifficulty\":67,\"minDifficulty\":22,\"moneyAvailable\":800177027,\"moneyMax\":20004425675,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":762,\"serverGrowth\":75,\"runningScripts\":[]}},\"summit-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"summit-uni\",\"httpPortOpen\":false,\"ip\":\"96.9.1.8\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"secret-societies.lit\",\"the-failed-frontier.lit\",\"synthetic-muscles.lit\"],\"organizationName\":\"Summit University\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"summit-uni\"}}]]},\"serversOnNetwork\":[\"avmnite-02h\",\"lexo-corp\",\"rho-construction\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":55,\"hackDifficulty\":52.81199999999999,\"minDifficulty\":18,\"moneyAvailable\":501235468.809789,\"moneyMax\":7136027250,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":462,\"serverGrowth\":43,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"summit-uni\"],\"dataMap\":{\"summit-uni\":[0,0,138,156]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":19491.812364133526,\"onlineMoneyMade\":0,\"onlineRunningTime\":42492.40999994267,\"ramUsage\":2.4,\"server\":\"summit-uni\",\"scriptKey\":\"simple-hack.js*[\\\"summit-uni\\\"]\",\"title\":\"simple-hack.js summit-uni\",\"threads\":6,\"temporary\":false}}]}},\"syscore\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"syscore\",\"httpPortOpen\":true,\"ip\":\"73.2.5.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"SysCore Securities\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"syscore\"}}]]},\"serversOnNetwork\":[\"crush-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":71,\"hackDifficulty\":71,\"minDifficulty\":24,\"moneyAvailable\":526407281,\"moneyMax\":13160182025,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":630,\"serverGrowth\":65,\"runningScripts\":[]}},\"catalyst\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-229432.cct\",\"type\":\"Algorithmic Stock Trader II\",\"data\":[83,69,2,127,19,67,20,18,190,136,34,98,139,95,116,198,73,15,93,11,1,86,9,174,122,127,114,66,163,197,185,4,151,163,90,149,171,199,142,48,103,144,131,190,157,32],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"catalyst\",\"httpPortOpen\":false,\"ip\":\"21.4.2.7\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"tensions-in-tech-race.lit\"],\"organizationName\":\"Catalyst Ventures\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"catalyst\"}}]]},\"serversOnNetwork\":[\"computek\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":67,\"hackDifficulty\":64.66800000000087,\"minDifficulty\":22,\"moneyAvailable\":873813419.5391107,\"moneyMax\":13324404575,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":424,\"serverGrowth\":47,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"catalyst\"],\"dataMap\":{\"catalyst\":[0,0,102,156]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":20262.91702908826,\"onlineMoneyMade\":0,\"onlineRunningTime\":42492.009999942675,\"ramUsage\":2.4,\"server\":\"catalyst\",\"scriptKey\":\"simple-hack.js*[\\\"catalyst\\\"]\",\"title\":\"simple-hack.js catalyst\",\"threads\":6,\"temporary\":false}}]}},\"the-hub\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-450292.cct\",\"type\":\"Array Jumping Game\",\"data\":[1,0,4,2,5,1,1,1,5],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"the-hub\",\"httpPortOpen\":false,\"ip\":\"44.6.7.7\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"The Hub\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"the-hub\"}}]]},\"serversOnNetwork\":[\"phantasy\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":45,\"hackDifficulty\":34.30400000000011,\"minDifficulty\":15,\"moneyAvailable\":489216505.22821766,\"moneyMax\":4394523950,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":318,\"serverGrowth\":53,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"the-hub\"],\"dataMap\":{\"the-hub\":[40998333.62234697,18,312,342]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":37698.45028667588,\"onlineMoneyMade\":40998333.62234697,\"onlineRunningTime\":49122.009999846196,\"ramUsage\":2.4,\"server\":\"the-hub\",\"scriptKey\":\"simple-hack.js*[\\\"the-hub\\\"]\",\"title\":\"simple-hack.js the-hub\",\"threads\":6,\"temporary\":false}}]}},\"computek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"computek\",\"httpPortOpen\":false,\"ip\":\"98.4.6.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"man-and-machine.lit\"],\"organizationName\":\"CompuTek\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"computek\"}}]]},\"serversOnNetwork\":[\"neo-net\",\"catalyst\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":57,\"hackDifficulty\":57,\"minDifficulty\":19,\"moneyAvailable\":249146090,\"moneyMax\":6228652250,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":389,\"serverGrowth\":47,\"runningScripts\":[]}},\"netlink\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"netlink\",\"httpPortOpen\":false,\"ip\":\"64.1.5.8\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"NetLink Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"netlink\"}}]]},\"serversOnNetwork\":[\"silver-helix\",\"zb-institute\",\"I.I.I.I\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":61,\"hackDifficulty\":58.851999999999975,\"minDifficulty\":20,\"moneyAvailable\":647515256.8848726,\"moneyMax\":6875000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":414,\"serverGrowth\":62,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"netlink\"],\"dataMap\":{\"netlink\":[0,0,120,174]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":21291.056582361245,\"onlineMoneyMade\":0,\"onlineRunningTime\":42492.80999994266,\"ramUsage\":2.4,\"server\":\"netlink\",\"scriptKey\":\"simple-hack.js*[\\\"netlink\\\"]\",\"title\":\"simple-hack.js netlink\",\"threads\":6,\"temporary\":false}}]}},\"johnson-ortho\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"johnson-ortho\",\"httpPortOpen\":false,\"ip\":\"95.6.2.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Johnson Orthopedics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"johnson-ortho\"}}]]},\"serversOnNetwork\":[\"silver-helix\",\"rothman-uni\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":54,\"hackDifficulty\":54,\"minDifficulty\":18,\"moneyAvailable\":80987867,\"moneyMax\":2024696675,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":274,\"serverGrowth\":52,\"runningScripts\":[]}},\"n00dles\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-168145-CyberSec.cct\",\"type\":\"Encryption I: Caesar Cipher\",\"data\":[\"LOGIC ENTER SHIFT TRASH POPUP\",18],\"reward\":{\"type\":0,\"name\":\"CyberSec\"}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"n00dles\",\"httpPortOpen\":false,\"ip\":\"94.8.2.3\",\"isConnectedTo\":false,\"maxRam\":4,\"messages\":[],\"organizationName\":\"Noodle Bar\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"n00dles\"}}]]},\"serversOnNetwork\":[\"home\",\"max-hardware\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1.979999999999686,\"minDifficulty\":1,\"moneyAvailable\":1709928.1296432384,\"moneyMax\":1750000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":1,\"serverGrowth\":3000,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"n00dles\"],\"dataMap\":{\"n00dles\":[315749495.02443796,16504,1665,774]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":212536.23326796922,\"onlineMoneyMade\":315749495.02443796,\"onlineRunningTime\":50764.0099998223,\"ramUsage\":2.4,\"server\":\"n00dles\",\"scriptKey\":\"simple-hack.js*[\\\"n00dles\\\"]\",\"title\":\"simple-hack.js n00dles\",\"threads\":1,\"temporary\":false}}]}},\"foodnstuff\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"foodnstuff\",\"httpPortOpen\":false,\"ip\":\"94.4.5.5\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"sector-12-crime.lit\"],\"organizationName\":\"FoodNStuff\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"foodnstuff\"}}]]},\"serversOnNetwork\":[\"home\",\"zer0\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":87.816000000005,\"minDifficulty\":3,\"moneyAvailable\":5206940.167229657,\"moneyMax\":50000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":1,\"serverGrowth\":5,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"foodnstuff\"],\"dataMap\":{\"foodnstuff\":[11231918.850073768,444,35796,1428]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":771808.450958349,\"onlineMoneyMade\":11231918.850073768,\"onlineRunningTime\":50763.40999982231,\"ramUsage\":2.4,\"server\":\"foodnstuff\",\"scriptKey\":\"simple-hack.js*[\\\"foodnstuff\\\"]\",\"title\":\"simple-hack.js foodnstuff\",\"threads\":6,\"temporary\":false}}]}},\"sigma-cosmetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"sigma-cosmetics\",\"httpPortOpen\":false,\"ip\":\"3.0.2.5\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Sigma Cosmetics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"sigma-cosmetics\"}}]]},\"serversOnNetwork\":[\"home\",\"CSEC\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":71.43600000000235,\"minDifficulty\":3,\"moneyAvailable\":6326451.385165196,\"moneyMax\":57500000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":5,\"serverGrowth\":10,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"sigma-cosmetics\"],\"dataMap\":{\"sigma-cosmetics\":[29655940.716653958,594,24576,864]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":531450.2309894349,\"onlineMoneyMade\":29655940.716653958,\"onlineRunningTime\":50702.609999823195,\"ramUsage\":2.4,\"server\":\"sigma-cosmetics\",\"scriptKey\":\"simple-hack.js*[\\\"sigma-cosmetics\\\"]\",\"title\":\"simple-hack.js sigma-cosmetics\",\"threads\":6,\"temporary\":false}}]}},\"joesguns\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-559810-NiteSec.cct\",\"type\":\"Compression I: RLE Compression\",\"data\":\"KKKKKKKKKKKKVVVVVVVVVVVVVVO3333XX6wXWqqqqXXXIMMjHHHHHHHHHHHHHuuuuuXllyyiFFzzzz\",\"reward\":{\"type\":0,\"name\":\"NiteSec\"}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-767481.cct\",\"type\":\"Array Jumping Game\",\"data\":[7,0,2,7,4,10,0,5,8,0],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"joesguns\",\"httpPortOpen\":false,\"ip\":\"55.6.7.8\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Joe's Guns\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"joesguns\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.395999999995828,\"minDifficulty\":5,\"moneyAvailable\":44068482.44586619,\"moneyMax\":62500000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":10,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"joesguns\"],\"dataMap\":{\"joesguns\":[471681038.78793716,2292,27846,2448]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":830926.475271585,\"onlineMoneyMade\":471681038.78793716,\"onlineRunningTime\":50702.609999823195,\"ramUsage\":2.4,\"server\":\"joesguns\",\"scriptKey\":\"simple-hack.js*[\\\"joesguns\\\"]\",\"title\":\"simple-hack.js joesguns\",\"threads\":6,\"temporary\":false}}]}},\"zer0\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"zer0\",\"httpPortOpen\":false,\"ip\":\"49.1.0.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"ZER0 Nightclub\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zer0\"}}]]},\"serversOnNetwork\":[\"foodnstuff\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":16.811999999999674,\"minDifficulty\":8,\"moneyAvailable\":49455588.61202486,\"moneyMax\":187500000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":75,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zer0\"],\"dataMap\":{\"zer0\":[461558063.57356936,1547,12454,1287]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":545770.7461957553,\"onlineMoneyMade\":461558063.57356936,\"onlineRunningTime\":50702.609999823195,\"ramUsage\":2.4,\"server\":\"zer0\",\"scriptKey\":\"simple-hack.js*[\\\"zer0\\\"]\",\"title\":\"simple-hack.js zer0\",\"threads\":13,\"temporary\":false}}]}},\"nectar-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-702208.cct\",\"type\":\"Compression I: RLE Compression\",\"data\":\"OOOOOOOOOOCJhhoVVVUUUUUUUUUUUUUttttttttt55XXXXXXXXXXXXYYYYYYaaa77SSBB\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"nectar-net\",\"httpPortOpen\":false,\"ip\":\"68.9.8.1\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Nectar Nightclub Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"nectar-net\"}}]]},\"serversOnNetwork\":[\"iron-gym\",\"neo-net\",\"phantasy\",\"omega-net\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":15.063999999997382,\"minDifficulty\":7,\"moneyAvailable\":11172028.191233875,\"moneyMax\":68750000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":20,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"nectar-net\"],\"dataMap\":{\"nectar-net\":[133290323.21885136,1428,17016,1620]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":613946.1903829525,\"onlineMoneyMade\":133290323.21885136,\"onlineRunningTime\":50702.4099998232,\"ramUsage\":2.4,\"server\":\"nectar-net\",\"scriptKey\":\"simple-hack.js*[\\\"nectar-net\\\"]\",\"title\":\"simple-hack.js nectar-net\",\"threads\":6,\"temporary\":false}}]}},\"neo-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-730185.cct\",\"type\":\"Compression I: RLE Compression\",\"data\":\"NN0LLLLLLLLLDDDDDDDDDDDDDDDDDDDD7700llffffffffffgsshhYRR455QQQv1zz2222222222PPVVV\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"neo-net\",\"httpPortOpen\":false,\"ip\":\"35.8.2.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"Neo Nightclub Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"neo-net\"}}]]},\"serversOnNetwork\":[\"nectar-net\",\"computek\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":30.715999999999564,\"minDifficulty\":8,\"moneyAvailable\":16713261.879354028,\"moneyMax\":125000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":50,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"neo-net\"],\"dataMap\":{\"neo-net\":[121101640.87494338,949,14781,1209]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":604710.2740587341,\"onlineMoneyMade\":121101640.87494338,\"onlineRunningTime\":50702.4099998232,\"ramUsage\":2.4,\"server\":\"neo-net\",\"scriptKey\":\"simple-hack.js*[\\\"neo-net\\\"]\",\"title\":\"simple-hack.js neo-net\",\"threads\":13,\"temporary\":false}}]}},\"silver-helix\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"silver-helix\",\"httpPortOpen\":false,\"ip\":\"8.4.6.2\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"new-triads.lit\"],\"organizationName\":\"Silver Helix\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"silver-helix\"}}]]},\"serversOnNetwork\":[\"max-hardware\",\"netlink\",\"johnson-ortho\",\"avmnite-02h\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":22.287999999999514,\"minDifficulty\":10,\"moneyAvailable\":160834664.707709,\"moneyMax\":1125000000,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":150,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"silver-helix\"],\"dataMap\":{\"silver-helix\":[929573564.2384852,884,10400,1144]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":507052.31619351835,\"onlineMoneyMade\":929573564.2384852,\"onlineRunningTime\":49122.809999846184,\"ramUsage\":2.4,\"server\":\"silver-helix\",\"scriptKey\":\"simple-hack.js*[\\\"silver-helix\\\"]\",\"title\":\"simple-hack.js silver-helix\",\"threads\":26,\"temporary\":false}}]}},\"hong-fang-tea\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-136414.cct\",\"type\":\"HammingCodes: Encoded Binary to Integer\",\"data\":\"1010000000000010000000000000000000011111010001101011101000010110\",\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"hong-fang-tea\",\"httpPortOpen\":false,\"ip\":\"69.9.8.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"brighter-than-the-sun.lit\"],\"organizationName\":\"HongFang Teahouse\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"hong-fang-tea\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.219999999997457,\"minDifficulty\":5,\"moneyAvailable\":16185514.295318455,\"moneyMax\":75000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":30,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"hong-fang-tea\"],\"dataMap\":{\"hong-fang-tea\":[177907568.09908575,1500,16494,1566]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":498770.0809032713,\"onlineMoneyMade\":177907568.09908575,\"onlineRunningTime\":50702.609999823195,\"ramUsage\":2.4,\"server\":\"hong-fang-tea\",\"scriptKey\":\"simple-hack.js*[\\\"hong-fang-tea\\\"]\",\"title\":\"simple-hack.js hong-fang-tea\",\"threads\":6,\"temporary\":false}}]}},\"harakiri-sushi\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"harakiri-sushi\",\"httpPortOpen\":false,\"ip\":\"29.7.4.2\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"HaraKiri Sushi Bar Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"harakiri-sushi\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.023999999998056,\"minDifficulty\":5,\"moneyAvailable\":90682672.89722438,\"moneyMax\":100000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":40,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"harakiri-sushi\"],\"dataMap\":{\"harakiri-sushi\":[1507277577.2370021,2376,13554,1296]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":439254.2645010053,\"onlineMoneyMade\":1507277577.2370021,\"onlineRunningTime\":50702.4099998232,\"ramUsage\":2.4,\"server\":\"harakiri-sushi\",\"scriptKey\":\"simple-hack.js*[\\\"harakiri-sushi\\\"]\",\"title\":\"simple-hack.js harakiri-sushi\",\"threads\":6,\"temporary\":false}}]}},\"phantasy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"phantasy\",\"httpPortOpen\":false,\"ip\":\"15.9.6.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Phantasy Club\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"phantasy\"}}]]},\"serversOnNetwork\":[\"nectar-net\",\"the-hub\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":14.005999999999574,\"minDifficulty\":7,\"moneyAvailable\":143366059.31972757,\"moneyMax\":600000000,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":100,\"serverGrowth\":35,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"phantasy\"],\"dataMap\":{\"phantasy\":[1305495194.0183046,1339,10738,1092]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":402963.38622178236,\"onlineMoneyMade\":1305495194.0183046,\"onlineRunningTime\":49122.009999846196,\"ramUsage\":2.4,\"server\":\"phantasy\",\"scriptKey\":\"simple-hack.js*[\\\"phantasy\\\"]\",\"title\":\"simple-hack.js phantasy\",\"threads\":13,\"temporary\":false}}]}},\"max-hardware\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"max-hardware\",\"httpPortOpen\":false,\"ip\":\"24.7.4.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Max Hardware Store\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"max-hardware\"}}]]},\"serversOnNetwork\":[\"n00dles\",\"silver-helix\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.33399999999933,\"minDifficulty\":5,\"moneyAvailable\":74025130.43685049,\"moneyMax\":250000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":80,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"max-hardware\"],\"dataMap\":{\"max-hardware\":[1276475287.7787912,2496,17563,1651]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":553593.9906140016,\"onlineMoneyMade\":1276475287.7787912,\"onlineRunningTime\":50703.209999823186,\"ramUsage\":2.4,\"server\":\"max-hardware\",\"scriptKey\":\"simple-hack.js*[\\\"max-hardware\\\"]\",\"title\":\"simple-hack.js max-hardware\",\"threads\":13,\"temporary\":false}}]}},\"omega-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omega-net\",\"httpPortOpen\":false,\"ip\":\"80.9.4.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"the-new-god.lit\"],\"organizationName\":\"Omega Software\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"omega-net\"}}]]},\"serversOnNetwork\":[\"nectar-net\",\"crush-fitness\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":32,\"hackDifficulty\":23.001999999999857,\"minDifficulty\":11,\"moneyAvailable\":268207010.04663938,\"moneyMax\":1589153775,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":219,\"serverGrowth\":37,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omega-net\"],\"dataMap\":{\"omega-net\":[451280781.9384644,325,3133,546]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":171527.94880437443,\"onlineMoneyMade\":451280781.9384644,\"onlineRunningTime\":49122.009999846196,\"ramUsage\":2.4,\"server\":\"omega-net\",\"scriptKey\":\"simple-hack.js*[\\\"omega-net\\\"]\",\"title\":\"simple-hack.js omega-net\",\"threads\":13,\"temporary\":false}}]}},\"crush-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"crush-fitness\",\"httpPortOpen\":false,\"ip\":\"20.3.5.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Crush Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"crush-fitness\"}}]]},\"serversOnNetwork\":[\"omega-net\",\"syscore\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":44,\"hackDifficulty\":44,\"minDifficulty\":15,\"moneyAvailable\":41145393,\"moneyMax\":1028634825,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":253,\"serverGrowth\":31,\"runningScripts\":[]}},\"iron-gym\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"iron-gym\",\"httpPortOpen\":false,\"ip\":\"63.5.8.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Iron Gym Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"iron-gym\"}}]]},\"serversOnNetwork\":[\"home\",\"nectar-net\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":31.73799999999975,\"minDifficulty\":10,\"moneyAvailable\":52472846.18873887,\"moneyMax\":500000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":100,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"iron-gym\"],\"dataMap\":{\"iron-gym\":[125256027.07054946,312,6955,637]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":322476.7868678419,\"onlineMoneyMade\":125256027.07054946,\"onlineRunningTime\":50702.4099998232,\"ramUsage\":2.4,\"server\":\"iron-gym\",\"scriptKey\":\"simple-hack.js*[\\\"iron-gym\\\"]\",\"title\":\"simple-hack.js iron-gym\",\"threads\":13,\"temporary\":false}}]}},\"millenium-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-139566.cct\",\"type\":\"Total Ways to Sum\",\"data\":47,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"millenium-fitness\",\"httpPortOpen\":false,\"ip\":\"28.1.9.7\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Millenium Fitness Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"millenium-fitness\"}}]]},\"serversOnNetwork\":[\"I.I.I.I\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":45,\"hackDifficulty\":41.612,\"minDifficulty\":15,\"moneyAvailable\":413323749.05402464,\"moneyMax\":6250000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":522,\"serverGrowth\":31,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"millenium-fitness\"],\"dataMap\":{\"millenium-fitness\":[0,0,138,180]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":17839.4452249448,\"onlineMoneyMade\":0,\"onlineRunningTime\":42492.609999942666,\"ramUsage\":2.4,\"server\":\"millenium-fitness\",\"scriptKey\":\"simple-hack.js*[\\\"millenium-fitness\\\"]\",\"title\":\"simple-hack.js millenium-fitness\",\"threads\":6,\"temporary\":false}}]}},\"powerhouse-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"powerhouse-fitness\",\"httpPortOpen\":false,\"ip\":\"5.9.8.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Powerhouse Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\".\",\"ecorp\",\"The-Cave\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":65,\"minDifficulty\":22,\"moneyAvailable\":900000000,\"moneyMax\":22500000000,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":994,\"serverGrowth\":54,\"runningScripts\":[]}},\"snap-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-405176.cct\",\"type\":\"Array Jumping Game II\",\"data\":[3,1,1,1,2,3,6,1,2,4,3,0,1,1,3,3,5,3,4,4],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"snap-fitness\",\"httpPortOpen\":true,\"ip\":\"34.2.5.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Snap Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"snap-fitness\"}}]]},\"serversOnNetwork\":[\"alpha-ent\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":52,\"hackDifficulty\":52,\"minDifficulty\":17,\"moneyAvailable\":450000000,\"moneyMax\":11250000000,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":686,\"serverGrowth\":56,\"runningScripts\":[]}},\"run4theh111z\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"run4theh111z\",\"httpPortOpen\":true,\"ip\":\"39.2.6.0\",\"isConnectedTo\":true,\"maxRam\":128,\"messages\":[\"simulated-reality.lit\",\"the-new-god.lit\"],\"organizationName\":\"The Runners\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"nova-med\",\"vitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":508,\"serverGrowth\":1,\"runningScripts\":[]}},\"I.I.I.I\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-831499.cct\",\"type\":\"HammingCodes: Integer to Encoded Binary\",\"data\":32,\"reward\":{\"type\":1}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-748796-Aevum.cct\",\"type\":\"Find All Valid Math Expressions\",\"data\":[\"53935949209\",-21],\"reward\":{\"type\":0,\"name\":\"Aevum\"}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-969965-TheBlackHand.cct\",\"type\":\"Algorithmic Stock Trader IV\",\"data\":[8,[6,197,81,54,47,143,75,183,43,62,103,152,47,98,137,150,19,6,145,88,134,102,142,37,54,172,95,23,22,97,146,178,134,139,126,42,44,15,31,179,124,68,44]],\"reward\":{\"type\":0,\"name\":\"The Black Hand\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"I.I.I.I\",\"httpPortOpen\":false,\"ip\":\"29.8.2.0\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"I.I.I.I\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"netlink\",\"millenium-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":358,\"serverGrowth\":1,\"runningScripts\":[]}},\"avmnite-02h\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"avmnite-02h\",\"httpPortOpen\":false,\"ip\":\"72.3.0.8\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"NiteSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"silver-helix\",\"summit-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":214,\"serverGrowth\":1,\"runningScripts\":[]}},\".\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-229396.cct\",\"type\":\"Unique Paths in a Grid II\",\"data\":[[0,0,0,0,0],[0,0,0,0,0],[1,0,0,0,0],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,1,0,0],[0,0,1,0,0]],\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-930381.cct\",\"type\":\"Total Ways to Sum II\",\"data\":[40,[1,2,5,6,7,9,11,13]],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\".\",\"httpPortOpen\":true,\"ip\":\"72.7.7.1\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\".\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\".\"}}]]},\"serversOnNetwork\":[\"helios\",\"nwo\",\"powerhouse-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":546,\"serverGrowth\":1,\"runningScripts\":[]}},\"CSEC\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"CSEC\",\"httpPortOpen\":false,\"ip\":\"65.1.2.7\",\"isConnectedTo\":false,\"maxRam\":8,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"CyberSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"sigma-cosmetics\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":53,\"serverGrowth\":1,\"runningScripts\":[]}},\"The-Cave\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-865703-Aevum.cct\",\"type\":\"Compression I: RLE Compression\",\"data\":\"66SSSSSSSLL22222222FFFFFF44444444UUMLLbb6ewGySS1QQQQQQQQQXWW\",\"reward\":{\"type\":0,\"name\":\"Aevum\"}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"The-Cave\",\"httpPortOpen\":false,\"ip\":\"67.2.8.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"alpha-omega.lit\"],\"organizationName\":\"Helios\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"powerhouse-fitness\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":925,\"serverGrowth\":1,\"runningScripts\":[]}},\"w0r1d_d43m0n\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"w0r1d_d43m0n\",\"httpPortOpen\":false,\"ip\":\"51.5.2.3\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"w0r1d_d43m0n\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":3000,\"serverGrowth\":1,\"runningScripts\":[]}},\"darkweb\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"darkweb\",\"httpPortOpen\":false,\"ip\":\"86.5.8.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"darkweb\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[]}},\"home-0\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-0\",\"httpPortOpen\":false,\"ip\":\"39.4.7.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-0\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-0\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":52273.96042186512,\"onlineMoneyMade\":0,\"onlineRunningTime\":42438.409999943455,\"ramUsage\":3.15,\"server\":\"home-0\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-1\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-1\",\"httpPortOpen\":false,\"ip\":\"94.4.9.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-1\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-1\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":52018.96549297798,\"onlineMoneyMade\":0,\"onlineRunningTime\":42418.409999943746,\"ramUsage\":3.15,\"server\":\"home-1\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-2\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-2\",\"httpPortOpen\":false,\"ip\":\"52.4.6.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-2\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-2\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":52018.96549297798,\"onlineMoneyMade\":0,\"onlineRunningTime\":42415.20999994379,\"ramUsage\":3.15,\"server\":\"home-2\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-3\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-3\",\"httpPortOpen\":false,\"ip\":\"8.9.2.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-3\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-3\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":52018.96549297798,\"onlineMoneyMade\":0,\"onlineRunningTime\":42395.20999994408,\"ramUsage\":3.15,\"server\":\"home-3\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-4\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-4\",\"httpPortOpen\":false,\"ip\":\"71.6.4.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-4\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-4\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,50,0],\"aevum-police\":[0,0,50,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":52018.96549297798,\"onlineMoneyMade\":0,\"onlineRunningTime\":42375.00999994438,\"ramUsage\":3.15,\"server\":\"home-4\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-5\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-5\",\"httpPortOpen\":false,\"ip\":\"49.7.1.2\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-5\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-5\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51111.183546139735,\"onlineMoneyMade\":0,\"onlineRunningTime\":42360.009999944596,\"ramUsage\":3.15,\"server\":\"home-5\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-6\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-6\",\"httpPortOpen\":false,\"ip\":\"74.3.5.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-6\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-6\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51111.183546139735,\"onlineMoneyMade\":0,\"onlineRunningTime\":42345.8099999448,\"ramUsage\":3.15,\"server\":\"home-6\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-7\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-7\",\"httpPortOpen\":false,\"ip\":\"50.4.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-7\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-7\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":50856.18861725259,\"onlineMoneyMade\":0,\"onlineRunningTime\":42337.80999994492,\"ramUsage\":3.15,\"server\":\"home-7\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-8\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-8\",\"httpPortOpen\":false,\"ip\":\"80.7.0.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-8\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-8\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51621.17340391402,\"onlineMoneyMade\":0,\"onlineRunningTime\":42310.609999945314,\"ramUsage\":3.15,\"server\":\"home-8\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-9\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-9\",\"httpPortOpen\":false,\"ip\":\"62.5.0.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-9\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-9\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51366.17847502688,\"onlineMoneyMade\":0,\"onlineRunningTime\":42283.40999994571,\"ramUsage\":3.15,\"server\":\"home-9\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-10\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-10\",\"httpPortOpen\":false,\"ip\":\"50.9.0.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-10\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-10\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51621.17340391402,\"onlineMoneyMade\":0,\"onlineRunningTime\":42255.20999994612,\"ramUsage\":3.15,\"server\":\"home-10\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-11\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-11\",\"httpPortOpen\":false,\"ip\":\"82.5.1.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-11\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-11\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51366.17847502688,\"onlineMoneyMade\":0,\"onlineRunningTime\":42248.20999994622,\"ramUsage\":3.15,\"server\":\"home-11\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-12\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-12\",\"httpPortOpen\":false,\"ip\":\"11.6.5.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-12\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-12\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51366.17847502688,\"onlineMoneyMade\":0,\"onlineRunningTime\":42225.00999994656,\"ramUsage\":3.15,\"server\":\"home-12\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-13\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-13\",\"httpPortOpen\":false,\"ip\":\"41.4.4.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-13\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-13\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51366.17847502688,\"onlineMoneyMade\":0,\"onlineRunningTime\":42199.80999994693,\"ramUsage\":3.15,\"server\":\"home-13\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-14\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-14\",\"httpPortOpen\":false,\"ip\":\"63.8.2.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-14\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-14\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,50,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51366.17847502688,\"onlineMoneyMade\":0,\"onlineRunningTime\":42182.809999947174,\"ramUsage\":3.15,\"server\":\"home-14\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-15\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-15\",\"httpPortOpen\":false,\"ip\":\"86.4.9.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-15\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-15\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":50856.18861725259,\"onlineMoneyMade\":0,\"onlineRunningTime\":42167.609999947395,\"ramUsage\":3.15,\"server\":\"home-15\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-16\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-16\",\"httpPortOpen\":false,\"ip\":\"54.9.0.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-16\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-16\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":50856.18861725259,\"onlineMoneyMade\":0,\"onlineRunningTime\":42164.60999994744,\"ramUsage\":3.15,\"server\":\"home-16\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-17\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-17\",\"httpPortOpen\":false,\"ip\":\"53.5.7.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-17\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-17\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":50856.18861725259,\"onlineMoneyMade\":0,\"onlineRunningTime\":42163.60999994745,\"ramUsage\":3.15,\"server\":\"home-17\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-18\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-18\",\"httpPortOpen\":false,\"ip\":\"57.2.1.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-18\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-18\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,50,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51111.183546139735,\"onlineMoneyMade\":0,\"onlineRunningTime\":42146.6099999477,\"ramUsage\":3.15,\"server\":\"home-18\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-19\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-19\",\"httpPortOpen\":false,\"ip\":\"7.9.7.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-19\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-19\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51060.1845603623,\"onlineMoneyMade\":0,\"onlineRunningTime\":42131.40999994792,\"ramUsage\":3.15,\"server\":\"home-19\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-20\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-20\",\"httpPortOpen\":false,\"ip\":\"64.1.0.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-20\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-20\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":50805.18963147517,\"onlineMoneyMade\":0,\"onlineRunningTime\":42106.20999994829,\"ramUsage\":3.15,\"server\":\"home-20\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-21\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-21\",\"httpPortOpen\":false,\"ip\":\"29.4.4.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-21\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-21\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,30,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,40,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,20,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":50550.194702588014,\"onlineMoneyMade\":0,\"onlineRunningTime\":42087.209999948565,\"ramUsage\":3.15,\"server\":\"home-21\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-22\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-22\",\"httpPortOpen\":false,\"ip\":\"43.7.9.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-22\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-22\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,40,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51468.17644658175,\"onlineMoneyMade\":0,\"onlineRunningTime\":42063.00999994892,\"ramUsage\":3.15,\"server\":\"home-22\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-23\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-23\",\"httpPortOpen\":false,\"ip\":\"29.4.9.2\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-23\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-23\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,40,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51213.181517694604,\"onlineMoneyMade\":0,\"onlineRunningTime\":42048.009999949136,\"ramUsage\":3.15,\"server\":\"home-23\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-24\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-24\",\"httpPortOpen\":false,\"ip\":\"32.7.2.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-24\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Netburners',\\n    'NiteSec',\\n    'The Black Hand',\\n    'Aevum',\\n    'Sector-12',\\n    'Volhaven',\\n    'Tian Di Hui'\\n];\",\"filename\":\"constants.js\",\"server\":\"home-24\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"silver-helix\":[0,0,60,0],\"netlink\":[0,0,60,0],\"millenium-fitness\":[0,0,50,0],\"rothman-uni\":[0,0,50,0],\"summit-uni\":[0,0,50,0],\"rho-construction\":[0,0,50,0],\"foodnstuff\":[0,0,50,0],\"zer0\":[0,0,40,0],\"sigma-cosmetics\":[0,0,50,0],\"joesguns\":[0,0,20,0],\"hong-fang-tea\":[0,0,40,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,50,0],\"nectar-net\":[0,0,50,0],\"neo-net\":[0,0,50,0],\"catalyst\":[0,0,50,0],\"phantasy\":[0,0,30,0],\"the-hub\":[0,0,50,0],\"omega-net\":[0,0,50,0],\"alpha-ent\":[0,0,40,0],\"aevum-police\":[0,0,40,0],\"lexo-corp\":[0,0,40,0],\"global-pharm\":[0,0,20,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":51468.17644658175,\"onlineMoneyMade\":0,\"onlineRunningTime\":42034.00999994934,\"ramUsage\":3.15,\"server\":\"home-24\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}}}","CompaniesSave":"{\"ECorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"MegaCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Bachman & Associates\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Blade Industries\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"NWO\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Clarke Incorporated\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"OmniTek Incorporated\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Four Sigma\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"KuaiGong International\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Fulcrum Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Storm Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"DefComm\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Helios Labs\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"VitaLife\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Icarus Microsystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Universal Energy\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Galactic Cybersystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"AeroCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Omnia Cybersystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0.6406,\"playerReputation\":0}},\"Solaris Space Systems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"DeltaOne\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Global Pharmaceuticals\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Nova Medical\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Central Intelligence Agency\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"National Security Agency\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Watchdog Security\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"LexoCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Rho Construction\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Alpha Enterprises\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Aevum Police Headquarters\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"SysCore Securities\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"CompuTek\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"NetLink Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Carmichael Security\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"FoodNStuff\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Joe's Guns\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Omega Software\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Noodle Bar\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}}}","FactionsSave":"{\"Illuminati\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Daedalus\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Covenant\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"ECorp\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"MegaCorp\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Bachman & Associates\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Blade Industries\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"NWO\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Clarke Incorporated\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"OmniTek Incorporated\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Four Sigma\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"KuaiGong International\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Fulcrum Secret Technologies\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"BitRunners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":1.2626,\"isBanned\":false,\"isMember\":true,\"playerReputation\":23805.446925979893}},\"The Black Hand\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":113.0361,\"isBanned\":false,\"isMember\":true,\"playerReputation\":58491.08822253713}},\"NiteSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":124.3925,\"isBanned\":false,\"isMember\":true,\"playerReputation\":61681.0273268564}},\"Aevum\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":2.3171,\"isBanned\":false,\"isMember\":true,\"playerReputation\":183233.88397016295}},\"Chongqing\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":true,\"isMember\":false,\"playerReputation\":0}},\"Ishima\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":true,\"isMember\":false,\"playerReputation\":0}},\"New Tokyo\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":true,\"isMember\":false,\"playerReputation\":0}},\"Sector-12\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":62.0917,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Volhaven\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":true,\"isMember\":false,\"playerReputation\":0}},\"Speakers for the Dead\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Dark Army\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Syndicate\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Silhouette\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Tetrads\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Slum Snakes\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Netburners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":60.4502,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Tian Di Hui\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":3.1503,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"CyberSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":60.4738,\"isBanned\":false,\"isMember\":true,\"playerReputation\":30595.03053635654}},\"Bladeburners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Church of the Machine God\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Shadows of Anarchy\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}}}","AliasesSave":"{\"kill-nuke\":\"home; run kill-nuke.js\",\"kill-hack\":\"home; run kill-all-simple-hack.js\",\"hacknet\":\"home; run hacknet-bot.js\",\"kill-bot\":\"home; run kill-hacknet.js\",\"nuke\":\"home; run auto-nuke.js\",\"flight\":\"home; run fl1ght.exe\",\"start-grow-helpers\":\"home; run start-grow-helpers.js\",\"backdoor-server\":\"home; run backdoor-command.js\",\"darkweb\":\"connect darkweb; buy -l\",\"buy-all\":\"buy FTPCrack.exe; buy relaySMTP.exe; buy HTTPWorm.exe; buy SQLInject.exe; buy ServerProfiler.exe; buy DeepscanV1.exe; buy DeepscanV2.exe; buy AutoLink.exe\"}","GlobalAliasesSave":"{\"startAll\":\"home; ./auto-nuke.js; ./start-grow-helpers.js; ./hacknet-bot.js;\",\"killAll\":\"home; ./kill-all-simple-hack.js; ./kill-all-grow-helpers.js; ./kill-hacknet.js; ./kill-nuke.js;\",\"connectServer\":\"connect home; ./connect-server.js\",\"backdoor1CSEC\":\"connect home; ./backdoor-command.js CSEC\",\"backdoor2NiteSec\":\"connect home; ./backdoor-command.js avmnite-02h\",\"backdoor3BlackHand\":\"connect home; ./backdoor-command.js I.I.I.I\",\"backdoor4BitRunners\":\"connect home; ./backdoor-command.js run4theh111z\",\"buy1FTP\":\"buy FTPCrack.exe\",\"buy2SMTP\":\"buy relaySMTP.exe\",\"buy3HTTP\":\"buy HTTPWorm.exe\",\"buy4SQL\":\"buy SQLInject.exe\"}","StockMarketSave":"{\"lastUpdate\":0,\"Orders\":{},\"storedCycles\":0,\"ticksUntilCycle\":0}","SettingsSave":"{\"ActiveScriptsServerPageSize\":100,\"ActiveScriptsScriptPageSize\":10,\"AutoexecScript\":\"\",\"AutosaveInterval\":60,\"CodeInstructionRunTime\":20,\"DisableASCIIArt\":false,\"DisableHotkeys\":false,\"DisableTextEffects\":false,\"DisableOverviewProgressBars\":false,\"EnableBashHotkeys\":false,\"EnableHistorySearch\":false,\"TimestampsFormat\":\"\",\"Locale\":\"en\",\"MaxRecentScriptsCapacity\":50,\"MaxLogCapacity\":50,\"MaxPortCapacity\":50,\"MaxTerminalCapacity\":500,\"RemoteFileApiPort\":0,\"SaveGameOnFileSave\":true,\"SuppressBuyAugmentationConfirmation\":false,\"SuppressFactionInvites\":false,\"SuppressMessages\":false,\"SuppressTravelConfirmation\":false,\"SuppressBladeburnerPopup\":false,\"SuppressTIXPopup\":false,\"SuppressSavedGameToast\":false,\"SuppressAutosaveDisabledWarnings\":false,\"UseIEC60027_2\":true,\"ShowMiddleNullTimeUnit\":false,\"ExcludeRunningScriptsFromSave\":false,\"IsSidebarOpened\":true,\"theme\":{\"primarylight\":\"#28CF28\",\"primary\":\"#21A821\",\"primarydark\":\"#177317\",\"successlight\":\"#1CFF1C\",\"success\":\"#16CA16\",\"successdark\":\"#0D910D\",\"errorlight\":\"#FF3B3B\",\"error\":\"#C32D2D\",\"errordark\":\"#8E2121\",\"secondarylight\":\"#B3B3B3\",\"secondary\":\"#838383\",\"secondarydark\":\"#676767\",\"warninglight\":\"#FFFF3A\",\"warning\":\"#C3C32A\",\"warningdark\":\"#8C8C1E\",\"infolight\":\"#64CBFF\",\"info\":\"#3399CC\",\"infodark\":\"#246D91\",\"welllight\":\"#404040\",\"well\":\"#1C1C1C\",\"white\":\"#C3C3C3\",\"black\":\"#0A0B0B\",\"hp\":\"#C62E2E\",\"money\":\"#D6BB27\",\"hack\":\"#ADFF2F\",\"combat\":\"#E8EDCD\",\"cha\":\"#8B5FAF\",\"int\":\"#537CC8\",\"rep\":\"#E8EDCD\",\"disabled\":\"#5AB5A5\",\"backgroundprimary\":\"#0C0D0E\",\"backgroundsecondary\":\"#121415\",\"button\":\"#252829\"},\"styles\":{\"lineHeight\":1.5,\"fontFamily\":\"Lucida Console, Lucida Sans Unicode, Fira Mono, Consolas, Courier New, Courier, monospace, Times New Roman\"},\"overview\":{\"x\":-9,\"y\":8,\"opened\":true},\"EditorTheme\":{\"common\":{\"accent\":\"B5CEA8\",\"bg\":\"1E1E1E\",\"fg\":\"D4D4D4\"},\"syntax\":{\"tag\":\"569CD6\",\"entity\":\"569CD6\",\"string\":\"CE9178\",\"regexp\":\"646695\",\"markup\":\"569CD6\",\"keyword\":\"569CD6\",\"comment\":\"6A9955\",\"constant\":\"569CD6\",\"error\":\"F44747\"},\"ui\":{\"line\":\"1E1E1E\",\"panel\":{\"bg\":\"252526\",\"selected\":\"252526\",\"border\":\"1E1E1E\"},\"selection\":{\"bg\":\"ADD6FF26\"}},\"base\":\"vs-dark\",\"inherit\":true},\"OwnedAugmentationsOrder\":0,\"PurchaseAugmentationsOrder\":0,\"MonacoTheme\":\"monokai\",\"MonacoInsertSpaces\":true,\"MonacoTabSize\":2,\"MonacoDetectIndentation\":false,\"MonacoFontFamily\":\"Lucida Console\",\"MonacoFontSize\":15,\"MonacoFontLigatures\":false,\"MonacoVim\":false,\"MonacoWordWrap\":\"off\",\"MonacoCursorStyle\":\"line\",\"MonacoCursorBlinking\":\"blink\",\"hideTrailingDecimalZeros\":false,\"hideThousandsSeparator\":false,\"useEngineeringNotation\":false,\"disableSuffixes\":false}","VersionSave":"34","AllGangsSave":"","LastExportBonus":"1693636297815","StaneksGiftSave":"{\"ctor\":\"StaneksGift\",\"data\":{\"fragments\":[],\"isBonusCharging\":false,\"storedCycles\":0}}"}}