From bb6c2cd79e7380a35eb335a7357c0e17fa807098 Mon Sep 17 00:00:00 2001 From: lethern Date: Mon, 17 Jan 2022 23:53:44 +0100 Subject: [PATCH 01/85] Update NetscriptFunctions.ts --- src/NetscriptFunctions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index ae122b980..dfa931e6c 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -522,7 +522,7 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { if (isNaN(hackAmount)) { throw makeRuntimeErrorMsg( "hackAnalyzeThreads", - `Invalid growth argument passed into hackAnalyzeThreads: ${hackAmount}. Must be numeric.`, + `Invalid hackAmount argument passed into hackAnalyzeThreads: ${hackAmount}. Must be numeric.`, ); } From 1dcae1aeec751d87afd493f9b61b2a979576f557 Mon Sep 17 00:00:00 2001 From: lethern Date: Tue, 18 Jan 2022 16:15:40 +0100 Subject: [PATCH 02/85] Update NetscriptDefinitions.d.ts grow/weaken/hack: removed threads part from example - confuses newbies --- src/ScriptEditor/NetscriptDefinitions.d.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 16a778fc5..4a566a6c7 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -4196,13 +4196,11 @@ export interface NS extends Singularity { * ```ts * // NS1: * var earnedMoney = hack("foodnstuff"); - * earnedMoney = earnedMoney + hack("foodnstuff", { threads: 5 }); // Only use 5 threads to hack * ``` * @example * ```ts * // NS2: * let earnedMoney = await ns.hack("foodnstuff"); - * earnedMoney += await ns.hack("foodnstuff", { threads: 5 }); // Only use 5 threads to hack * ``` * @param host - Hostname of the target server to hack. * @param opts - Optional parameters for configuring function behavior. @@ -4230,16 +4228,14 @@ export interface NS extends Singularity { * @example * ```ts * // NS1: - * var availableMoney = getServerMoneyAvailable("foodnstuff"); + * var currentMoney = getServerMoneyAvailable("foodnstuff"); * currentMoney = currentMoney * (1 + grow("foodnstuff")); - * currentMoney = currentMoney * (1 + grow("foodnstuff", { threads: 5 })); // Only use 5 threads to grow * ``` * @example * ```ts * // NS2: - * let availableMoney = ns.getServerMoneyAvailable("foodnstuff"); + * let currentMoney = ns.getServerMoneyAvailable("foodnstuff"); * currentMoney *= (1 + await ns.grow("foodnstuff")); - * currentMoney *= (1 + await ns.grow("foodnstuff", { threads: 5 })); // Only use 5 threads to grow * ``` * @param host - Hostname of the target server to grow. * @param opts - Optional parameters for configuring function behavior. @@ -4265,14 +4261,12 @@ export interface NS extends Singularity { * // NS1: * var currentSecurity = getServerSecurityLevel("foodnstuff"); * currentSecurity = currentSecurity - weaken("foodnstuff"); - * currentSecurity = currentSecurity - weaken("foodnstuff", { threads: 5 }); // Only use 5 threads to weaken * ``` * @example * ```ts * // NS2: * let currentSecurity = ns.getServerSecurityLevel("foodnstuff"); * currentSecurity -= await ns.weaken("foodnstuff"); - * currentSecurity -= await ns.weaken("foodnstuff", { threads: 5 }); // Only use 5 threads to weaken * ``` * @param host - Hostname of the target server to weaken. * @param opts - Optional parameters for configuring function behavior. From 61cea12ca237b85e3b86fcff0028b8fcadebb13d Mon Sep 17 00:00:00 2001 From: lethern Date: Wed, 19 Jan 2022 19:09:33 +0100 Subject: [PATCH 03/85] purchaseServer: improved error message for ram > maxRam --- src/NetscriptFunctions.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index dfa931e6c..faafef35c 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -1631,7 +1631,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { const cost = getPurchaseServerCost(ram); if (cost === Infinity) { - workerScript.log("purchaseServer", () => `Invalid argument: ram='${ram}' must be a positive power of 2`); + if(ram > getPurchaseServerMaxRam()){ + workerScript.log("purchaseServer", () => `Invalid argument: ram='${ram}' must not be greater than getPurchaseServerMaxRam`); + }else{ + workerScript.log("purchaseServer", () => `Invalid argument: ram='${ram}' must be a positive power of 2`); + } + return ""; } From 5c7ac9ab8e8d2b48134763d204d2b4c68c5cc435 Mon Sep 17 00:00:00 2001 From: pigalot Date: Wed, 19 Jan 2022 18:44:48 +0000 Subject: [PATCH 04/85] Fix for corp product cost --- src/Corporation/ui/ProductElem.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Corporation/ui/ProductElem.tsx b/src/Corporation/ui/ProductElem.tsx index 2d83dc8c7..f8240b92a 100644 --- a/src/Corporation/ui/ProductElem.tsx +++ b/src/Corporation/ui/ProductElem.tsx @@ -81,7 +81,7 @@ export function ProductElem(props: IProductProps): React.ReactElement { ); } else if (product.sCost) { if (isString(product.sCost)) { - const sCost = (product.sCost as string).replace(/MP/g, product.pCost + ""); + const sCost = (product.sCost as string).replace(/MP/g, product.pCost + product.rat / product.mku + ""); sellButtonText = ( <> {sellButtonText} @ From 4a3ee95b63789d426d94cd939e8c31e75e541138 Mon Sep 17 00:00:00 2001 From: Xi-Lin Yeh Date: Thu, 20 Jan 2022 00:03:07 -0800 Subject: [PATCH 05/85] Enhanced API Server interface - Used restful patterns for handling server calls (GET/PUT/DELETE) - Utilized Server interface for saves rather than reimplementing code - Exposed operations for getting codebase of scripts on the home server and deleting files. - Added a common response structure --- electron/api-server.js | 74 +++++++++++++++++++++++++++++++++++++----- src/Electron.tsx | 74 +++++++++++++++++++++++++++++++----------- 2 files changed, 120 insertions(+), 28 deletions(-) diff --git a/electron/api-server.js b/electron/api-server.js index 3a9f06bca..eadda17a4 100644 --- a/electron/api-server.js +++ b/electron/api-server.js @@ -12,10 +12,12 @@ async function initialize(win) { window = win; server = http.createServer(async function (req, res) { let body = ""; + res.setHeader('Content-Type', 'application/json'); req.on("data", (chunk) => { body += chunk.toString(); // convert Buffer to string }); + req.on("end", () => { const providedToken = req.headers?.authorization?.replace('Bearer ', '') ?? ''; const isValid = providedToken === getAuthenticationToken(); @@ -24,8 +26,11 @@ async function initialize(win) { } else { log.log('Invalid authentication token'); res.writeHead(401); - res.write('Invalid authentication token'); - res.end(); + + res.end(JSON.stringify({ + success: false, + msg: 'Invalid authentication token' + })); return; } @@ -35,17 +40,68 @@ async function initialize(win) { } catch (error) { log.warn(`Invalid body data`); res.writeHead(400); - res.write('Invalid body data'); - res.end(); + res.end(JSON.stringify({ + success: false, + msg: 'Invalid body data' + })); + return; } - if (data) { - window.webContents.executeJavaScript(`document.saveFile("${data.filename}", "${data.code}")`).then((result) => { - res.write(result); - res.end(); - }); + + switch(req.method) { + // Request files + case "GET": + window.webContents.executeJavaScript(`document.getFiles("${data.filename}", "${data.code}")`).then((result) => { + res.end(JSON.stringify({ + success: result.res, + msg: result.msg, + data: result.data + })); + }); + break; + + // Create or update files + // Support POST for VScode implementation + case "POST": + case "PUT": + if (!data) { + log.warn(`Invalid script update request - No data`); + res.writeHead(400); + res.end(JSON.stringify({ + success: false, + msg: 'Invalid script update request - No data' + })); + } + + window.webContents.executeJavaScript(`document.saveFile("${data.filename}", "${data.code}")`).then((result) => { + res.write(result); + + if (!result.res) { + //We've encountered an error + res.writeHead(JSON.stringify({ + success: result.res, + msg: result.msg, + data: result.data + })); + } + + res.end(); + }); + break; + + // Delete files + case "DELETE": + window.webContents.executeJavaScript(`document.deleteFiles("${data.filename}", "${data.code}")`).then((result) => { + res.end(JSON.stringify({ + success: result.res, + msg: result.msg, + data: result.data + })); + }); + break; } + }); }); diff --git a/src/Electron.tsx b/src/Electron.tsx index b4f4ba684..ea7fb10d4 100644 --- a/src/Electron.tsx +++ b/src/Electron.tsx @@ -1,10 +1,8 @@ import { Player } from "./Player"; -import { isScriptFilename } from "./Script/isScriptFilename"; -import { Script } from "./Script/Script"; import { removeLeadingSlash } from "./Terminal/DirectoryHelpers"; import { Terminal } from "./Terminal"; import { SnackbarEvents } from "./ui/React/Snackbar"; -import { IMap } from "./types"; +import { IMap, IReturnStatus } from "./types"; import { GetServer } from "./Server/AllServers"; export function initElectron(): void { @@ -18,32 +16,70 @@ export function initElectron(): void { } function initWebserver(): void { - (document as any).saveFile = function (filename: string, code: string): string { + interface IReturnWebStatus extends IReturnStatus { + data?: { + [propName: string]: any; + }; + } + function normalizeFileName(filename: string): string { filename = filename.replace(/\/\/+/g, "/"); filename = removeLeadingSlash(filename); if (filename.includes("/")) { filename = "/" + removeLeadingSlash(filename); } + return filename; + } + + (document as any).getFiles = function (): IReturnWebStatus { + const home = GetServer("home"); + if (home === null) { + return { + res: false, + msg: "Home server does not exist." + } + } + return { + res: true, + data: { + files: home.scripts.map((script) => ({ + filename: script.filename, + code: script.code + })) + } + } + }; + + (document as any).deleteFile = function (filename: string): IReturnWebStatus { + filename = normalizeFileName(filename); + const home = GetServer("home"); + if (home === null) { + return { + res: false, + msg: "Home server does not exist." + } + } + return home.removeFile(filename); + }; + + (document as any).saveFile = function (filename: string, code: string): IReturnWebStatus { + filename = normalizeFileName(filename); + code = Buffer.from(code, "base64").toString(); const home = GetServer("home"); - if (home === null) return "'home' server not found."; - if (isScriptFilename(filename)) { - //If the current script already exists on the server, overwrite it - for (let i = 0; i < home.scripts.length; i++) { - if (filename == home.scripts[i].filename) { - home.scripts[i].saveScript(Player, filename, code, "home", home.scripts); - return "written"; - } + if (home === null) { + return { + res: false, + msg: "Home server does not exist." } - - //If the current script does NOT exist, create a new one - const script = new Script(); - script.saveScript(Player, filename, code, "home", home.scripts); - home.scripts.push(script); - return "written"; } + const result = home.writeToScriptFile(Player, filename, code); - return "not a script file"; + return { + res: result.success, + data: { + overwritten: result.overwritten + } + }; }; } From 5386f8e02747b3840fff21cf613a5b988aed23e4 Mon Sep 17 00:00:00 2001 From: Xi-Lin Yeh Date: Thu, 20 Jan 2022 00:14:42 -0800 Subject: [PATCH 06/85] Commonalize Api-server response handling - Fixed issue with error headers - Aggregated response handling --- electron/api-server.js | 48 ++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/electron/api-server.js b/electron/api-server.js index eadda17a4..8fdfe3f9c 100644 --- a/electron/api-server.js +++ b/electron/api-server.js @@ -18,7 +18,7 @@ async function initialize(win) { body += chunk.toString(); // convert Buffer to string }); - req.on("end", () => { + req.on("end", async () => { const providedToken = req.headers?.authorization?.replace('Bearer ', '') ?? ''; const isValid = providedToken === getAuthenticationToken(); if (isValid) { @@ -48,17 +48,11 @@ async function initialize(win) { return; } - + let result; switch(req.method) { // Request files case "GET": - window.webContents.executeJavaScript(`document.getFiles("${data.filename}", "${data.code}")`).then((result) => { - res.end(JSON.stringify({ - success: result.res, - msg: result.msg, - data: result.data - })); - }); + result = await window.webContents.executeJavaScript(`document.getFiles("${data.filename}", "${data.code}")`); break; // Create or update files @@ -72,36 +66,30 @@ async function initialize(win) { success: false, msg: 'Invalid script update request - No data' })); + return; } - window.webContents.executeJavaScript(`document.saveFile("${data.filename}", "${data.code}")`).then((result) => { - res.write(result); - - if (!result.res) { - //We've encountered an error - res.writeHead(JSON.stringify({ - success: result.res, - msg: result.msg, - data: result.data - })); - } - - res.end(); - }); + result = await window.webContents.executeJavaScript(`document.saveFile("${data.filename}", "${data.code}")`); break; // Delete files case "DELETE": - window.webContents.executeJavaScript(`document.deleteFiles("${data.filename}", "${data.code}")`).then((result) => { - res.end(JSON.stringify({ - success: result.res, - msg: result.msg, - data: result.data - })); - }); + result = await window.webContents.executeJavaScript(`document.deleteFiles("${data.filename}", "${data.code}")`); break; } + if (!result.res) { + //We've encountered an error + res.writeHead(400); + log.warn(`Api Server Error`, result.msg); + } + + res.end(JSON.stringify({ + success: result.res, + msg: result.msg, + data: result.data + })); + }); }); From 861fcf70c405bca86412e6f5d875c07cfd96af38 Mon Sep 17 00:00:00 2001 From: Xi-Lin Yeh Date: Thu, 20 Jan 2022 09:39:50 -0800 Subject: [PATCH 07/85] Clean invocation of get/delete --- electron/api-server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/electron/api-server.js b/electron/api-server.js index 8fdfe3f9c..22cd347b7 100644 --- a/electron/api-server.js +++ b/electron/api-server.js @@ -52,7 +52,7 @@ async function initialize(win) { switch(req.method) { // Request files case "GET": - result = await window.webContents.executeJavaScript(`document.getFiles("${data.filename}", "${data.code}")`); + result = await window.webContents.executeJavaScript(`document.getFiles()`); break; // Create or update files @@ -74,7 +74,7 @@ async function initialize(win) { // Delete files case "DELETE": - result = await window.webContents.executeJavaScript(`document.deleteFiles("${data.filename}", "${data.code}")`); + result = await window.webContents.executeJavaScript(`document.deleteFiles("${data.filename}")`); break; } From b4a78c26f35d0b69fe46e58c44f23b834ecd7849 Mon Sep 17 00:00:00 2001 From: nickofolas Date: Thu, 20 Jan 2022 10:35:43 -0600 Subject: [PATCH 08/85] Implement editor tab actions --- src/ScriptEditor/ui/ScriptEditorRoot.tsx | 71 ++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/src/ScriptEditor/ui/ScriptEditorRoot.tsx b/src/ScriptEditor/ui/ScriptEditorRoot.tsx index c21681b4c..00e71e36a 100644 --- a/src/ScriptEditor/ui/ScriptEditorRoot.tsx +++ b/src/ScriptEditor/ui/ScriptEditorRoot.tsx @@ -33,6 +33,7 @@ import Typography from "@mui/material/Typography"; import Link from "@mui/material/Link"; import Box from "@mui/material/Box"; import SettingsIcon from "@mui/icons-material/Settings"; +import SyncIcon from '@mui/icons-material/Sync'; import Table from "@mui/material/Table"; import TableCell from "@mui/material/TableCell"; import TableRow from "@mui/material/TableRow"; @@ -692,17 +693,55 @@ export function Root(props: IProps): React.ReactElement { } } + function onTabUpdate(index: number): void { + const openScript = openScripts[index]; + const serverScriptCode = getServerCode(index); + if (serverScriptCode === null) return; + + if (openScript.code !== serverScriptCode) { + PromptEvent.emit({ + txt: "Do you want to overwrite " + openScript.fileName + " with the contents saved on the server?", + resolve: (result: boolean) => { + if (result) { + // Save changes + openScript.code = serverScriptCode; + + if (editorRef.current !== null && openScript !== null) { + if (openScript.model === undefined || openScript.model.isDisposed()) { + regenerateModel(openScript); + } + editorRef.current.setModel(openScript.model); + + editorRef.current.setPosition(openScript.lastPosition); + editorRef.current.revealLineInCenter(openScript.lastPosition.lineNumber); + editorRef.current.setValue(openScript.code); + updateRAM(openScript.code); + editorRef.current.focus(); + } + rerender(); + } + }, + }); + } + } + function dirty(index: number): string { + const openScript = openScripts[index]; + const serverScriptCode = getServerCode(index); + if (serverScriptCode === null) return " *"; + + // The server code is stored with its starting & trailing whitespace removed + const openScriptFormatted = Script.formatCode(openScript.code); + return serverScriptCode !== openScriptFormatted ? " *" : ""; + } + + function getServerCode(index: number): string | null { const openScript = openScripts[index]; const server = GetServer(openScript.hostname); if (server === null) throw new Error(`Server '${openScript.hostname}' should not be null, but it is.`); const serverScript = server.scripts.find((s) => s.filename === openScript.fileName); - if (serverScript === undefined) return " *"; - - // The server code is stored with its starting & trailing whitespace removed - const openScriptFormatted = Script.formatCode(openScript.code); - return serverScript.code !== openScriptFormatted ? " *" : ""; + return serverScript?.code ?? null; } // Toolbars are roughly 112px: @@ -754,6 +793,10 @@ export function Root(props: IProps): React.ReactElement { > + )} From bc50f5180abacdea0951263364b5352e27ee600c Mon Sep 17 00:00:00 2001 From: nickofolas Date: Thu, 20 Jan 2022 11:05:12 -0600 Subject: [PATCH 09/85] Refactor --- src/ScriptEditor/ui/ScriptEditorRoot.tsx | 142 +++++++++++------------ 1 file changed, 69 insertions(+), 73 deletions(-) diff --git a/src/ScriptEditor/ui/ScriptEditorRoot.tsx b/src/ScriptEditor/ui/ScriptEditorRoot.tsx index 00e71e36a..249da8f36 100644 --- a/src/ScriptEditor/ui/ScriptEditorRoot.tsx +++ b/src/ScriptEditor/ui/ScriptEditorRoot.tsx @@ -34,6 +34,7 @@ import Link from "@mui/material/Link"; import Box from "@mui/material/Box"; import SettingsIcon from "@mui/icons-material/Settings"; import SyncIcon from '@mui/icons-material/Sync'; +import CloseIcon from '@mui/icons-material/Close'; import Table from "@mui/material/Table"; import TableCell from "@mui/material/TableCell"; import TableRow from "@mui/material/TableRow"; @@ -42,6 +43,7 @@ import { PromptEvent } from "../../ui/React/PromptManager"; import { Modal } from "../../ui/React/Modal"; import libSource from "!!raw-loader!../NetscriptDefinitions.d.ts"; +import { Tooltip } from "@mui/material"; interface IProps { // Map of filename -> code @@ -700,7 +702,7 @@ export function Root(props: IProps): React.ReactElement { if (openScript.code !== serverScriptCode) { PromptEvent.emit({ - txt: "Do you want to overwrite " + openScript.fileName + " with the contents saved on the server?", + txt: "Do you want to overwrite " + openScript.fileName + " with the contents saved on the server? This cannot be undone.", resolve: (result: boolean) => { if (result) { // Save changes @@ -718,7 +720,6 @@ export function Root(props: IProps): React.ReactElement { updateRAM(openScript.code); editorRef.current.focus(); } - rerender(); } }, }); @@ -773,79 +774,74 @@ export function Root(props: IProps): React.ReactElement { overflowX: "scroll", }} > - {openScripts.map(({ fileName, hostname }, index) => ( - - {(provided) => ( -
- - - -
- )} -
- ))} + style={{ + ...(currentScript?.fileName === openScripts[index].fileName ? { + background: Settings.theme.button, + borderColor: Settings.theme.button, + color: Settings.theme.primary + } : { + background: Settings.theme.backgroundsecondary, + borderColor: Settings.theme.backgroundsecondary, + color: Settings.theme.secondary + }) + }} + > + {hostname}:~/{fileName} {dirty(index)} + + + + + + + )} + + ) + })} {provided.placeholder} )} From 32ba81883fb5158ee0598855b596309e3dd8d27c Mon Sep 17 00:00:00 2001 From: SagePtr Date: Thu, 20 Jan 2022 23:59:54 +0200 Subject: [PATCH 10/85] Force achievements recalculation on bitnode completion --- src/ui/GameRoot.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/GameRoot.tsx b/src/ui/GameRoot.tsx index 2e7a265cc..5823f39a5 100644 --- a/src/ui/GameRoot.tsx +++ b/src/ui/GameRoot.tsx @@ -72,6 +72,7 @@ import { LogBoxManager } from "./React/LogBoxManager"; import { AlertManager } from "./React/AlertManager"; import { PromptManager } from "./React/PromptManager"; import { InvitationModal } from "../Faction/ui/InvitationModal"; +import { calculateAchievements } from "../Achievements/Achievements"; import { enterBitNode } from "../RedPill"; import { Context } from "./Context"; @@ -286,6 +287,7 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme toBitVerse: (flume: boolean, quick: boolean) => { setFlume(flume); setQuick(quick); + calculateAchievements(); setPage(Page.BitVerse); }, toInfiltration: (location: Location) => { From 99ef71de4a7551bed99cee45b1bf08561884494b Mon Sep 17 00:00:00 2001 From: nickofolas Date: Thu, 20 Jan 2022 17:14:38 -0600 Subject: [PATCH 11/85] Update prompt message content --- src/ScriptEditor/ui/ScriptEditorRoot.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ScriptEditor/ui/ScriptEditorRoot.tsx b/src/ScriptEditor/ui/ScriptEditorRoot.tsx index 249da8f36..03887abb5 100644 --- a/src/ScriptEditor/ui/ScriptEditorRoot.tsx +++ b/src/ScriptEditor/ui/ScriptEditorRoot.tsx @@ -702,7 +702,8 @@ export function Root(props: IProps): React.ReactElement { if (openScript.code !== serverScriptCode) { PromptEvent.emit({ - txt: "Do you want to overwrite " + openScript.fileName + " with the contents saved on the server? This cannot be undone.", + txt: "Do you want to overwrite the current editor content with the contents of " + + openScript.fileName + " on the server? This cannot be undone.", resolve: (result: boolean) => { if (result) { // Save changes From a5ad97f47d3a8af4f3c0132d8904a6ba01b700f2 Mon Sep 17 00:00:00 2001 From: nickofolas Date: Thu, 20 Jan 2022 17:28:19 -0600 Subject: [PATCH 12/85] Remove unnecessary editor code --- src/ScriptEditor/ui/ScriptEditorRoot.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ScriptEditor/ui/ScriptEditorRoot.tsx b/src/ScriptEditor/ui/ScriptEditorRoot.tsx index 03887abb5..ab7d58baa 100644 --- a/src/ScriptEditor/ui/ScriptEditorRoot.tsx +++ b/src/ScriptEditor/ui/ScriptEditorRoot.tsx @@ -715,8 +715,6 @@ export function Root(props: IProps): React.ReactElement { } editorRef.current.setModel(openScript.model); - editorRef.current.setPosition(openScript.lastPosition); - editorRef.current.revealLineInCenter(openScript.lastPosition.lineNumber); editorRef.current.setValue(openScript.code); updateRAM(openScript.code); editorRef.current.focus(); From aae3851d5971f267424f1ee2184cbe3e77d58950 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 19 Jan 2022 10:51:36 -0500 Subject: [PATCH 13/85] Add webpack file-loader to handle images It lets us bundle static files such as images. Allows us to `imports img from "./img.png"` to retrieve an image's path. Note that we'll have to add other entries in the global.d.ts file if we want to handle other extensions than .png. Adds mocks to Jest tests so that we don't fail tests when loading static assets. --- jest.config.js | 4 ++++ package.json | 1 + src/@types/global.d.ts | 6 ++++++ test/__mocks__/fileMock.js | 1 + test/__mocks__/styleMock.js | 0 webpack.config.js | 8 ++++++++ 6 files changed, 20 insertions(+) create mode 100644 test/__mocks__/fileMock.js create mode 100644 test/__mocks__/styleMock.js diff --git a/jest.config.js b/jest.config.js index 2be488205..af66d7809 100644 --- a/jest.config.js +++ b/jest.config.js @@ -8,4 +8,8 @@ module.exports = { '.cypress', 'node_modules', 'dist', ], testEnvironment: "jsdom", + moduleNameMapper: { + "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/test/__mocks__/fileMock.js", + "\\.(css|less)$": "/test/__mocks__/styleMock.js" + } }; diff --git a/package.json b/package.json index ab72e91fd..62e5e1318 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "electron": "^14.0.2", "electron-packager": "^15.4.0", "eslint": "^7.24.0", + "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^6.3.3", "html-webpack-plugin": "^3.2.0", "http-server": "^13.0.1", diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 2eed8c77e..8840ea1b8 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -1,2 +1,8 @@ // Defined by webpack on startup or compilation declare let __COMMIT_HASH__: string; + +// When using file-loader, we'll get a path to the resource +declare module "*.png" { + const value: string; + export default value; +} diff --git a/test/__mocks__/fileMock.js b/test/__mocks__/fileMock.js new file mode 100644 index 000000000..86059f362 --- /dev/null +++ b/test/__mocks__/fileMock.js @@ -0,0 +1 @@ +module.exports = 'test-file-stub'; diff --git a/test/__mocks__/styleMock.js b/test/__mocks__/styleMock.js new file mode 100644 index 000000000..e69de29bb diff --git a/webpack.config.js b/webpack.config.js index 2b72bb10e..4a62292dd 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -156,6 +156,14 @@ module.exports = (env, argv) => { test: /\.s?css$/, use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"], }, + { + test: /\.(png|jpe?g|gif|jp2|webp)$/, + loader: 'file-loader', + options: { + name: '[contenthash].[ext]', + outputPath: 'dist/images', + }, + }, ], }, optimization: { From a9e2e35446129a0a868b076f1e9479ac429b32f7 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 19 Jan 2022 07:02:58 -0500 Subject: [PATCH 14/85] Move theme related things into its own subfolder This will make contributions easier and less prone to conflicts. --- src/NetscriptFunctions/UserInterface.ts | 4 +- src/Settings/Settings.ts | 2 +- src/Settings/Themes.ts | 613 ------------------ src/Themes/README.md | 17 + src/Themes/Themes.ts | 55 ++ src/Themes/data/dark-blue/index.ts | 42 ++ src/Themes/data/dark-plus/index.ts | 43 ++ src/Themes/data/default-lite/index.ts | 43 ++ src/Themes/data/default/index.ts | 39 ++ src/Themes/data/discord-like/index.ts | 43 ++ src/Themes/data/dracula/index.ts | 42 ++ src/Themes/data/index.ts | 14 + src/Themes/data/light/index.ts | 42 ++ src/Themes/data/mayukai-dark/index.ts | 43 ++ src/Themes/data/monokai-ish/index.ts | 41 ++ src/Themes/data/muted-gold-blue/index.ts | 42 ++ src/Themes/data/one-dark/index.ts | 42 ++ src/Themes/data/purple/index.ts | 43 ++ src/Themes/data/smooth-green/index.ts | 43 ++ src/Themes/data/warmer/index.ts | 42 ++ src/{ui/React => Themes/ui}/Theme.tsx | 0 .../React => Themes/ui}/ThemeEditorModal.tsx | 4 +- src/engine.tsx | 2 +- src/index.tsx | 2 +- src/ui/React/GameOptionsRoot.tsx | 2 +- src/ui/React/StyleEditorModal.tsx | 2 +- 26 files changed, 685 insertions(+), 622 deletions(-) delete mode 100644 src/Settings/Themes.ts create mode 100644 src/Themes/README.md create mode 100644 src/Themes/Themes.ts create mode 100644 src/Themes/data/dark-blue/index.ts create mode 100644 src/Themes/data/dark-plus/index.ts create mode 100644 src/Themes/data/default-lite/index.ts create mode 100644 src/Themes/data/default/index.ts create mode 100644 src/Themes/data/discord-like/index.ts create mode 100644 src/Themes/data/dracula/index.ts create mode 100644 src/Themes/data/index.ts create mode 100644 src/Themes/data/light/index.ts create mode 100644 src/Themes/data/mayukai-dark/index.ts create mode 100644 src/Themes/data/monokai-ish/index.ts create mode 100644 src/Themes/data/muted-gold-blue/index.ts create mode 100644 src/Themes/data/one-dark/index.ts create mode 100644 src/Themes/data/purple/index.ts create mode 100644 src/Themes/data/smooth-green/index.ts create mode 100644 src/Themes/data/warmer/index.ts rename src/{ui/React => Themes/ui}/Theme.tsx (100%) rename src/{ui/React => Themes/ui}/ThemeEditorModal.tsx (99%) diff --git a/src/NetscriptFunctions/UserInterface.ts b/src/NetscriptFunctions/UserInterface.ts index 55827c334..ead063a9f 100644 --- a/src/NetscriptFunctions/UserInterface.ts +++ b/src/NetscriptFunctions/UserInterface.ts @@ -4,8 +4,8 @@ import { IPlayer } from "../PersonObjects/IPlayer"; import { getRamCost } from "../Netscript/RamCostGenerator"; import { GameInfo, IStyleSettings, UserInterface as IUserInterface, UserInterfaceTheme } from "../ScriptEditor/NetscriptDefinitions"; import { Settings } from "../Settings/Settings"; -import { ThemeEvents } from "../ui/React/Theme"; -import { defaultTheme } from "../Settings/Themes"; +import { ThemeEvents } from "../Themes/ui/Theme"; +import { defaultTheme } from "../Themes/Themes"; import { defaultStyles } from "../Settings/Styles"; import { CONSTANTS } from "../Constants"; import { hash } from "../hash/hash"; diff --git a/src/Settings/Settings.ts b/src/Settings/Settings.ts index ddb18d8c1..d0563f604 100644 --- a/src/Settings/Settings.ts +++ b/src/Settings/Settings.ts @@ -1,6 +1,6 @@ import { ISelfInitializer, ISelfLoading } from "../types"; import { OwnedAugmentationsOrderSetting, PurchaseAugmentationsOrderSetting } from "./SettingEnums"; -import { defaultTheme, ITheme } from "./Themes"; +import { defaultTheme, ITheme } from "../Themes/Themes"; import { defaultStyles } from "./Styles"; import { WordWrapOptions } from "../ScriptEditor/ui/Options"; import { OverviewSettings } from "../ui/React/Overview"; diff --git a/src/Settings/Themes.ts b/src/Settings/Themes.ts deleted file mode 100644 index eed026a57..000000000 --- a/src/Settings/Themes.ts +++ /dev/null @@ -1,613 +0,0 @@ -import { IMap } from "../types"; - -export interface ITheme { - [key: string]: string | undefined; - primarylight: string; - primary: string; - primarydark: string; - successlight: string; - success: string; - successdark: string; - errorlight: string; - error: string; - errordark: string; - secondarylight: string; - secondary: string; - secondarydark: string; - warninglight: string; - warning: string; - warningdark: string; - infolight: string; - info: string; - infodark: string; - welllight: string; - well: string; - white: string; - black: string; - hp: string; - money: string; - hack: string; - combat: string; - cha: string; - int: string; - rep: string; - disabled: string; - backgroundprimary: string; - backgroundsecondary: string; - button: string; -} - -export interface IPredefinedTheme { - colors: ITheme; - name?: string; - credit?: string; - description?: string; - reference?: string; -} - -export const defaultTheme: ITheme = { - primarylight: "#0f0", - primary: "#0c0", - primarydark: "#090", - successlight: "#0f0", - success: "#0c0", - successdark: "#090", - errorlight: "#f00", - error: "#c00", - errordark: "#900", - secondarylight: "#AAA", - secondary: "#888", - secondarydark: "#666", - warninglight: "#ff0", - warning: "#cc0", - warningdark: "#990", - infolight: "#69f", - info: "#36c", - infodark: "#039", - welllight: "#444", - well: "#222", - white: "#fff", - black: "#000", - hp: "#dd3434", - money: "#ffd700", - hack: "#adff2f", - combat: "#faffdf", - cha: "#a671d1", - int: "#6495ed", - rep: "#faffdf", - disabled: "#66cfbc", - backgroundprimary: "#000", - backgroundsecondary: "#000", - button: "#333", -}; - -export const getPredefinedThemes = (): IMap => ({ - Default: { - colors: defaultTheme, - }, - Monokai: { - description: "Monokai'ish", - colors: { - primarylight: "#FFF", - primary: "#F8F8F2", - primarydark: "#FAFAEB", - successlight: "#ADE146", - success: "#A6E22E", - successdark: "#98E104", - errorlight: "#FF69A0", - error: "#F92672", - errordark: "#D10F56", - secondarylight: "#AAA", - secondary: "#888", - secondarydark: "#666", - warninglight: "#E1D992", - warning: "#E6DB74", - warningdark: "#EDDD54", - infolight: "#92E1F1", - info: "#66D9EF", - infodark: "#31CDED", - welllight: "#444", - well: "#222", - white: "#fff", - black: "#000", - hp: "#F92672", - money: "#E6DB74", - hack: "#A6E22E", - combat: "#75715E", - cha: "#AE81FF", - int: "#66D9EF", - rep: "#E69F66", - disabled: "#66cfbc", - backgroundprimary: "#272822", - backgroundsecondary: "#1B1C18", - button: "#333", - }, - }, - - Warmer: { - credit: "hexnaught", - description: "Warmer, softer theme", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/921999581020028938", - colors: { - primarylight: "#EA9062", - primary: "#DD7B4A", - primarydark: "#D3591C", - successlight: "#6ACF6A", - success: "#43BF43", - successdark: "#3E913E", - errorlight: "#C15757", - error: "#B34141", - errordark: "#752525", - secondarylight: "#AAA", - secondary: "#888", - secondarydark: "#666", - warninglight: "#E6E69D", - warning: "#DADA56", - warningdark: "#A1A106", - infolight: "#69f", - info: "#36c", - infodark: "#039", - welllight: "#444", - well: "#222", - white: "#fff", - black: "#000", - hp: "#dd3434", - money: "#ffd700", - hack: "#adff2f", - combat: "#faffdf", - cha: "#AD84CF", - int: "#6495ed", - rep: "#faffdf", - disabled: "#76C6B7", - backgroundprimary: "#000", - backgroundsecondary: "#000", - button: "#333", - }, - }, - - "Dark+": { - credit: "LoganMD", - description: "VSCode Dark+", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/921999975867617310", - colors: { - primarylight: "#E0E0BC", - primary: "#CCCCAE", - primarydark: "#B8B89C", - successlight: "#00F000", - success: "#00D200", - successdark: "#00B400", - errorlight: "#F00000", - error: "#C80000", - errordark: "#A00000", - secondarylight: "#B4AEAE", - secondary: "#969090", - secondarydark: "#787272", - warninglight: "#F0F000", - warning: "#C8C800", - warningdark: "#A0A000", - infolight: "#69f", - info: "#36c", - infodark: "#039", - welllight: "#444", - well: "#222", - white: "#fff", - black: "#1E1E1E", - hp: "#dd3434", - money: "#ffd700", - hack: "#adff2f", - combat: "#faffdf", - cha: "#a671d1", - int: "#6495ed", - rep: "#faffdf", - disabled: "#66cfbc", - backgroundprimary: "#1E1E1E", - backgroundsecondary: "#252525", - button: "#333", - }, - }, - - "Mayukai Dark": { - credit: "Festive Noire", - description: "Mayukai Dark-esque", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/922037502334889994", - colors: { - primarylight: "#DDDFC5", - primary: "#CDCFB6", - primarydark: "#9D9F8C", - successlight: "#00EF00", - success: "#00A500", - successdark: "#007A00", - errorlight: "#F92672", - error: "#CA1C5C", - errordark: "#90274A", - secondarylight: "#AAA", - secondary: "#888", - secondarydark: "#666", - warninglight: "#D3D300", - warning: "#cc0", - warningdark: "#990", - infolight: "#69f", - info: "#36c", - infodark: "#039", - welllight: "#444", - well: "#00010A", - white: "#fff", - black: "#020509", - hp: "#dd3434", - money: "#ffd700", - hack: "#8CCF27", - combat: "#faffdf", - cha: "#a671d1", - int: "#6495ed", - rep: "#faffdf", - disabled: "#66cfbc", - backgroundprimary: "#080C11", - backgroundsecondary: "#03080F", - button: "#00010A", - }, - }, - - Purple: { - credit: "zer0ney", - description: "Essentially all defaults except for purple replacing the main colors", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/922091815849570395", - colors: { - primarylight: "#BA55D3", - primary: "#9370DB", - primarydark: "#8A2BE2", - successlight: "#BA55D3", - success: "#9370DB", - successdark: "#8A2BE2", - errorlight: "#f00", - error: "#c00", - errordark: "#900", - secondarylight: "#AAA", - secondary: "#888", - secondarydark: "#666", - warninglight: "#ff0", - warning: "#cc0", - warningdark: "#990", - infolight: "#69f", - info: "#36c", - infodark: "#039", - welllight: "#444", - well: "#222", - white: "#fff", - black: "#000", - hp: "#dd3434", - money: "#ffd700", - hack: "#adff2f", - combat: "#faffdf", - cha: "#a671d1", - int: "#6495ed", - rep: "#faffdf", - disabled: "#66cfbc", - backgroundprimary: "#000", - backgroundsecondary: "#000", - button: "#333", - }, - }, - - "Smooth Green": { - credit: "Swidt", - description: "A nice green theme that doesn't hurt your eyes.", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/922243957986033725", - colors: { - primarylight: "#E0E0BC", - primary: "#B0D9A3", - primarydark: "#B8B89C", - successlight: "#00F000", - success: "#6BC16B", - successdark: "#00B400", - errorlight: "#F00000", - error: "#3D713D", - errordark: "#A00000", - secondarylight: "#B4AEAE", - secondary: "#8FAF85", - secondarydark: "#787272", - warninglight: "#F0F000", - warning: "#38F100", - warningdark: "#A0A000", - infolight: "#69f", - info: "#36c", - infodark: "#039", - welllight: "#444", - well: "#2F3C2B", - white: "#fff", - black: "#1E1E1E", - hp: "#dd3434", - money: "#4AA52E", - hack: "#adff2f", - combat: "#faffdf", - cha: "#a671d1", - int: "#6495ed", - rep: "#35A135", - disabled: "#66cfbc", - backgroundprimary: "#1E1E1E", - backgroundsecondary: "#252525", - button: "#2F3C2B", - }, - }, - - Dracula: { - credit: "H3draut3r", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/922296307836678144", - colors: { - primarylight: "#7082B8", - primary: "#F8F8F2", - primarydark: "#FF79C6", - successlight: "#0f0", - success: "#0c0", - successdark: "#090", - errorlight: "#FD4545", - error: "#FF2D2D", - errordark: "#C62424", - secondarylight: "#AAA", - secondary: "#8BE9FD", - secondarydark: "#666", - warninglight: "#FFC281", - warning: "#FFB86C", - warningdark: "#E6A055", - infolight: "#A0A0FF", - info: "#7070FF", - infodark: "#4040FF", - welllight: "#44475A", - well: "#363948", - white: "#fff", - black: "#282A36", - hp: "#D34448", - money: "#50FA7B", - hack: "#F1FA8C", - combat: "#BD93F9", - cha: "#FF79C6", - int: "#6495ed", - rep: "#faffdf", - disabled: "#66cfbc", - backgroundprimary: "#282A36", - backgroundsecondary: "#21222C", - button: "#21222C", - }, - }, - - "Dark Blue": { - credit: "Saynt_Garmo", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/923084732718264340", - colors: { - primarylight: "#023DDE", - primary: "#4A41C8", - primarydark: "#005299", - successlight: "#00FF00", - success: "#D1DAD1", - successdark: "#BFCABF", - errorlight: "#f00", - error: "#c00", - errordark: "#900", - secondarylight: "#AAA", - secondary: "#888", - secondarydark: "#666", - warninglight: "#ff0", - warning: "#cc0", - warningdark: "#990", - infolight: "#69f", - info: "#36c", - infodark: "#039", - welllight: "#444", - well: "#040505", - white: "#fff", - black: "#000000", - hp: "#dd3434", - money: "#ffd700", - hack: "#adff2f", - combat: "#faffdf", - cha: "#a671d1", - int: "#6495ed", - rep: "#faffdf", - disabled: "#66cfbc", - backgroundprimary: "#091419", - backgroundsecondary: "#000000", - button: "#000000", - }, - }, - - Discord: { - credit: "Thermite", - description: "Discord inspired theme", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/924305252017143818", - colors: { - primarylight: "#7389DC", - primary: "#7389DC", - primarydark: "#5964F1", - successlight: "#00CC00", - success: "#20DF20", - successdark: "#0CB80C", - errorlight: "#EA5558", - error: "#EC4145", - errordark: "#E82528", - secondarylight: "#C3C3C3", - secondary: "#9C9C9C", - secondarydark: "#4E4E4E", - warninglight: "#ff0", - warning: "#cc0", - warningdark: "#990", - infolight: "#69f", - info: "#36c", - infodark: "#1C4FB3", - welllight: "#999999", - well: "#35383C", - white: "#FFFFFF", - black: "#202225", - hp: "#FF5656", - money: "#43FF43", - hack: "#FFAB3D", - combat: "#8A90FD", - cha: "#FF51D9", - int: "#6495ed", - rep: "#FFFF30", - disabled: "#474B51", - backgroundprimary: "#2F3136", - backgroundsecondary: "#35393E", - button: "#333", - }, - }, - - "One Dark": { - credit: "Dexalt142", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/924650660694208512", - colors: { - primarylight: "#98C379", - primary: "#98C379", - primarydark: "#98C379", - successlight: "#98C379", - success: "#98C379", - successdark: "#98C379", - errorlight: "#E06C75", - error: "#BE5046", - errordark: "#BE5046", - secondarylight: "#AAA", - secondary: "#888", - secondarydark: "#666", - warninglight: "#E5C07B", - warning: "#E5C07B", - warningdark: "#D19A66", - infolight: "#61AFEF", - info: "#61AFEF", - infodark: "#61AFEF", - welllight: "#4B5263", - well: "#282C34", - white: "#ABB2BF", - black: "#282C34", - hp: "#E06C75", - money: "#E5C07B", - hack: "#98C379", - combat: "#ABB2BF", - cha: "#C678DD", - int: "#61AFEF", - rep: "#ABB2BF", - disabled: "#56B6C2", - backgroundprimary: "#282C34", - backgroundsecondary: "#21252B", - button: "#4B5263", - }, - }, - - "Muted Gold & Blue": { - credit: "Sloth", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/924672660758208563", - colors: { - primarylight: "#E3B54A", - primary: "#CAA243", - primarydark: "#7E6937", - successlight: "#82FF82", - success: "#6FDA6F", - successdark: "#64C364", - errorlight: "#FD5555", - error: "#D84A4A", - errordark: "#AC3939", - secondarylight: "#D8D0B8", - secondary: "#B1AA95", - secondarydark: "#736E5E", - warninglight: "#ff0", - warning: "#cc0", - warningdark: "#990", - infolight: "#69f", - info: "#36c", - infodark: "#039", - welllight: "#444", - well: "#111111", - white: "#fff", - black: "#070300", - hp: "#dd3434", - money: "#ffd700", - hack: "#adff2f", - combat: "#faffdf", - cha: "#a671d1", - int: "#6495ed", - rep: "#faffdf", - disabled: "#66cfbc", - backgroundprimary: "#0A0A0E", - backgroundsecondary: "#0E0E10", - button: "#222222", - }, - }, - - "Default Lite": { - credit: "NmuGmu", - description: "Less eye-straining default theme", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/925263801564151888", - colors: { - 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", - }, - }, - - Light: { - credit: "matt", - reference: "https://discord.com/channels/415207508303544321/921991895230611466/926114005456658432", - colors: { - primarylight: "#535353", - primary: "#1A1A1A", - primarydark: "#0d0d0d", - successlight: "#63c439", - success: "#428226", - successdark: "#2E5A1B", - errorlight: "#df7051", - error: "#C94824", - errordark: "#91341B", - secondarylight: "#b3b3b3", - secondary: "#9B9B9B", - secondarydark: "#7A7979", - warninglight: "#e8d464", - warning: "#C6AD20", - warningdark: "#9F8A16", - infolight: "#6299cf", - info: "#3778B7", - infodark: "#30689C", - welllight: "#f9f9f9", - well: "#eaeaea", - white: "#F7F7F7", - black: "#F7F7F7", - hp: "#BF5C41", - money: "#E1B121", - hack: "#47BC38", - combat: "#656262", - cha: "#A568AC", - int: "#889BCF", - rep: "#656262", - disabled: "#70B4BF", - backgroundprimary: "#F7F7F7", - backgroundsecondary: "#f9f9f9", - button: "#eaeaea", - }, - }, -}); diff --git a/src/Themes/README.md b/src/Themes/README.md new file mode 100644 index 000000000..0638cf74b --- /dev/null +++ b/src/Themes/README.md @@ -0,0 +1,17 @@ +# Themes + +Feel free to contribute a new theme by submitting a pull request to the game! + +See [CONTRIBUTING.md](/CONTRIBUTING.md) for details. + +## How create a new theme + +1. Duplicate one of the folders in `/src/Themes/data` and give it a new name (keep the hyphenated format) +2. Modify the data in the new `/src/Themes/data/new-folder/index.ts` file +3. Add the import/export into the `/src/Themes/data/index.ts` file + +The themes are ordered according to the export order in `index.ts` + +## Other resources + +There is an external script called `theme-browser` which may include more themes than those shown here. Head over the [bitpacker](https://github.com/davidsiems/bitpacker) repository for details. diff --git a/src/Themes/Themes.ts b/src/Themes/Themes.ts new file mode 100644 index 000000000..63de312bf --- /dev/null +++ b/src/Themes/Themes.ts @@ -0,0 +1,55 @@ +import { IMap } from "../types"; +import * as predefined from "./data"; + +export interface ITheme { + [key: string]: string | undefined; + primarylight: string; + primary: string; + primarydark: string; + successlight: string; + success: string; + successdark: string; + errorlight: string; + error: string; + errordark: string; + secondarylight: string; + secondary: string; + secondarydark: string; + warninglight: string; + warning: string; + warningdark: string; + infolight: string; + info: string; + infodark: string; + welllight: string; + well: string; + white: string; + black: string; + hp: string; + money: string; + hack: string; + combat: string; + cha: string; + int: string; + rep: string; + disabled: string; + backgroundprimary: string; + backgroundsecondary: string; + button: string; +} + +export interface IPredefinedTheme { + colors: ITheme; + name?: string; + credit?: string; + description?: string; + reference?: string; +} + +export const defaultTheme: ITheme = { + ...predefined.Default.colors, +}; + +export const getPredefinedThemes = (): IMap => ({ + ...predefined, +}); diff --git a/src/Themes/data/dark-blue/index.ts b/src/Themes/data/dark-blue/index.ts new file mode 100644 index 000000000..3c509d00b --- /dev/null +++ b/src/Themes/data/dark-blue/index.ts @@ -0,0 +1,42 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Dark Blue", + credit: "Saynt_Garmo", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/923084732718264340", + colors: { + primarylight: "#023DDE", + primary: "#4A41C8", + primarydark: "#005299", + successlight: "#00FF00", + success: "#D1DAD1", + successdark: "#BFCABF", + errorlight: "#f00", + error: "#c00", + errordark: "#900", + secondarylight: "#AAA", + secondary: "#888", + secondarydark: "#666", + warninglight: "#ff0", + warning: "#cc0", + warningdark: "#990", + infolight: "#69f", + info: "#36c", + infodark: "#039", + welllight: "#444", + well: "#040505", + white: "#fff", + black: "#000000", + hp: "#dd3434", + money: "#ffd700", + hack: "#adff2f", + combat: "#faffdf", + cha: "#a671d1", + int: "#6495ed", + rep: "#faffdf", + disabled: "#66cfbc", + backgroundprimary: "#091419", + backgroundsecondary: "#000000", + button: "#000000", + }, +}; diff --git a/src/Themes/data/dark-plus/index.ts b/src/Themes/data/dark-plus/index.ts new file mode 100644 index 000000000..7288f40ca --- /dev/null +++ b/src/Themes/data/dark-plus/index.ts @@ -0,0 +1,43 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Dark+", + credit: "LoganMD", + description: "VSCode Dark+", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/921999975867617310", + colors: { + primarylight: "#E0E0BC", + primary: "#CCCCAE", + primarydark: "#B8B89C", + successlight: "#00F000", + success: "#00D200", + successdark: "#00B400", + errorlight: "#F00000", + error: "#C80000", + errordark: "#A00000", + secondarylight: "#B4AEAE", + secondary: "#969090", + secondarydark: "#787272", + warninglight: "#F0F000", + warning: "#C8C800", + warningdark: "#A0A000", + infolight: "#69f", + info: "#36c", + infodark: "#039", + welllight: "#444", + well: "#222", + white: "#fff", + black: "#1E1E1E", + hp: "#dd3434", + money: "#ffd700", + hack: "#adff2f", + combat: "#faffdf", + cha: "#a671d1", + int: "#6495ed", + rep: "#faffdf", + disabled: "#66cfbc", + backgroundprimary: "#1E1E1E", + backgroundsecondary: "#252525", + button: "#333", + }, +}; diff --git a/src/Themes/data/default-lite/index.ts b/src/Themes/data/default-lite/index.ts new file mode 100644 index 000000000..71e299db5 --- /dev/null +++ b/src/Themes/data/default-lite/index.ts @@ -0,0 +1,43 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Default-lite", + description: "Less eye-straining default theme", + credit: "NmuGmu", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/925263801564151888", + colors: { + 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", + }, +}; diff --git a/src/Themes/data/default/index.ts b/src/Themes/data/default/index.ts new file mode 100644 index 000000000..b5cd04722 --- /dev/null +++ b/src/Themes/data/default/index.ts @@ -0,0 +1,39 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + colors: { + primarylight: "#0f0", + primary: "#0c0", + primarydark: "#090", + successlight: "#0f0", + success: "#0c0", + successdark: "#090", + errorlight: "#f00", + error: "#c00", + errordark: "#900", + secondarylight: "#AAA", + secondary: "#888", + secondarydark: "#666", + warninglight: "#ff0", + warning: "#cc0", + warningdark: "#990", + infolight: "#69f", + info: "#36c", + infodark: "#039", + welllight: "#444", + well: "#222", + white: "#fff", + black: "#000", + hp: "#dd3434", + money: "#ffd700", + hack: "#adff2f", + combat: "#faffdf", + cha: "#a671d1", + int: "#6495ed", + rep: "#faffdf", + disabled: "#66cfbc", + backgroundprimary: "#000", + backgroundsecondary: "#000", + button: "#333", + }, +}; diff --git a/src/Themes/data/discord-like/index.ts b/src/Themes/data/discord-like/index.ts new file mode 100644 index 000000000..91e65aee7 --- /dev/null +++ b/src/Themes/data/discord-like/index.ts @@ -0,0 +1,43 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Discord-like", + description: "Discord inspired theme", + credit: "Thermite", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/924305252017143818", + colors: { + primarylight: "#7389DC", + primary: "#7389DC", + primarydark: "#5964F1", + successlight: "#00CC00", + success: "#20DF20", + successdark: "#0CB80C", + errorlight: "#EA5558", + error: "#EC4145", + errordark: "#E82528", + secondarylight: "#C3C3C3", + secondary: "#9C9C9C", + secondarydark: "#4E4E4E", + warninglight: "#ff0", + warning: "#cc0", + warningdark: "#990", + infolight: "#69f", + info: "#36c", + infodark: "#1C4FB3", + welllight: "#999999", + well: "#35383C", + white: "#FFFFFF", + black: "#202225", + hp: "#FF5656", + money: "#43FF43", + hack: "#FFAB3D", + combat: "#8A90FD", + cha: "#FF51D9", + int: "#6495ed", + rep: "#FFFF30", + disabled: "#474B51", + backgroundprimary: "#2F3136", + backgroundsecondary: "#35393E", + button: "#333", + }, +}; diff --git a/src/Themes/data/dracula/index.ts b/src/Themes/data/dracula/index.ts new file mode 100644 index 000000000..31eec5273 --- /dev/null +++ b/src/Themes/data/dracula/index.ts @@ -0,0 +1,42 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Dracula", + credit: "H3draut3r", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/922296307836678144", + colors: { + primarylight: "#7082B8", + primary: "#F8F8F2", + primarydark: "#FF79C6", + successlight: "#0f0", + success: "#0c0", + successdark: "#090", + errorlight: "#FD4545", + error: "#FF2D2D", + errordark: "#C62424", + secondarylight: "#AAA", + secondary: "#8BE9FD", + secondarydark: "#666", + warninglight: "#FFC281", + warning: "#FFB86C", + warningdark: "#E6A055", + infolight: "#A0A0FF", + info: "#7070FF", + infodark: "#4040FF", + welllight: "#44475A", + well: "#363948", + white: "#fff", + black: "#282A36", + hp: "#D34448", + money: "#50FA7B", + hack: "#F1FA8C", + combat: "#BD93F9", + cha: "#FF79C6", + int: "#6495ed", + rep: "#faffdf", + disabled: "#66cfbc", + backgroundprimary: "#282A36", + backgroundsecondary: "#21222C", + button: "#21222C", + }, +}; diff --git a/src/Themes/data/index.ts b/src/Themes/data/index.ts new file mode 100644 index 000000000..cef542782 --- /dev/null +++ b/src/Themes/data/index.ts @@ -0,0 +1,14 @@ +export { Theme as Default } from "./default"; +export { Theme as DefaultLite } from "./default-lite"; +export { Theme as Monokai } from "./monokai-ish"; +export { Theme as Warmer } from "./warmer"; +export { Theme as DarkPlus } from "./dark-plus"; +export { Theme as MayukaiDark } from "./mayukai-dark"; +export { Theme as Purple } from "./purple"; +export { Theme as SmoothGreen } from "./smooth-green"; +export { Theme as Dracula } from "./dracula"; +export { Theme as DarkBlue } from "./dark-blue"; +export { Theme as DiscordLike } from "./discord-like"; +export { Theme as OneDark } from "./one-dark"; +export { Theme as MutedGoldBlue } from "./muted-gold-blue"; +export { Theme as Light } from "./light"; diff --git a/src/Themes/data/light/index.ts b/src/Themes/data/light/index.ts new file mode 100644 index 000000000..fc8b4b0b0 --- /dev/null +++ b/src/Themes/data/light/index.ts @@ -0,0 +1,42 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Light", + credit: "matt", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/926114005456658432", + colors: { + primarylight: "#535353", + primary: "#1A1A1A", + primarydark: "#0d0d0d", + successlight: "#63c439", + success: "#428226", + successdark: "#2E5A1B", + errorlight: "#df7051", + error: "#C94824", + errordark: "#91341B", + secondarylight: "#b3b3b3", + secondary: "#9B9B9B", + secondarydark: "#7A7979", + warninglight: "#e8d464", + warning: "#C6AD20", + warningdark: "#9F8A16", + infolight: "#6299cf", + info: "#3778B7", + infodark: "#30689C", + welllight: "#f9f9f9", + well: "#eaeaea", + white: "#F7F7F7", + black: "#F7F7F7", + hp: "#BF5C41", + money: "#E1B121", + hack: "#47BC38", + combat: "#656262", + cha: "#A568AC", + int: "#889BCF", + rep: "#656262", + disabled: "#70B4BF", + backgroundprimary: "#F7F7F7", + backgroundsecondary: "#f9f9f9", + button: "#eaeaea", + }, +}; diff --git a/src/Themes/data/mayukai-dark/index.ts b/src/Themes/data/mayukai-dark/index.ts new file mode 100644 index 000000000..95b9ea491 --- /dev/null +++ b/src/Themes/data/mayukai-dark/index.ts @@ -0,0 +1,43 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Mayukai Dark", + description: "Mayukai Dark-esque", + credit: "Festive Noire", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/922037502334889994", + colors: { + primarylight: "#DDDFC5", + primary: "#CDCFB6", + primarydark: "#9D9F8C", + successlight: "#00EF00", + success: "#00A500", + successdark: "#007A00", + errorlight: "#F92672", + error: "#CA1C5C", + errordark: "#90274A", + secondarylight: "#AAA", + secondary: "#888", + secondarydark: "#666", + warninglight: "#D3D300", + warning: "#cc0", + warningdark: "#990", + infolight: "#69f", + info: "#36c", + infodark: "#039", + welllight: "#444", + well: "#00010A", + white: "#fff", + black: "#020509", + hp: "#dd3434", + money: "#ffd700", + hack: "#8CCF27", + combat: "#faffdf", + cha: "#a671d1", + int: "#6495ed", + rep: "#faffdf", + disabled: "#66cfbc", + backgroundprimary: "#080C11", + backgroundsecondary: "#03080F", + button: "#00010A", + }, +}; diff --git a/src/Themes/data/monokai-ish/index.ts b/src/Themes/data/monokai-ish/index.ts new file mode 100644 index 000000000..f947ecf7b --- /dev/null +++ b/src/Themes/data/monokai-ish/index.ts @@ -0,0 +1,41 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Monokai'ish", + description: "Monokai'ish", + colors: { + primarylight: "#FFF", + primary: "#F8F8F2", + primarydark: "#FAFAEB", + successlight: "#ADE146", + success: "#A6E22E", + successdark: "#98E104", + errorlight: "#FF69A0", + error: "#F92672", + errordark: "#D10F56", + secondarylight: "#AAA", + secondary: "#888", + secondarydark: "#666", + warninglight: "#E1D992", + warning: "#E6DB74", + warningdark: "#EDDD54", + infolight: "#92E1F1", + info: "#66D9EF", + infodark: "#31CDED", + welllight: "#444", + well: "#222", + white: "#fff", + black: "#000", + hp: "#F92672", + money: "#E6DB74", + hack: "#A6E22E", + combat: "#75715E", + cha: "#AE81FF", + int: "#66D9EF", + rep: "#E69F66", + disabled: "#66cfbc", + backgroundprimary: "#272822", + backgroundsecondary: "#1B1C18", + button: "#333", + }, +}; diff --git a/src/Themes/data/muted-gold-blue/index.ts b/src/Themes/data/muted-gold-blue/index.ts new file mode 100644 index 000000000..7683de8e3 --- /dev/null +++ b/src/Themes/data/muted-gold-blue/index.ts @@ -0,0 +1,42 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Muted Gold & Blue", + credit: "Sloth", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/924672660758208563", + colors: { + primarylight: "#E3B54A", + primary: "#CAA243", + primarydark: "#7E6937", + successlight: "#82FF82", + success: "#6FDA6F", + successdark: "#64C364", + errorlight: "#FD5555", + error: "#D84A4A", + errordark: "#AC3939", + secondarylight: "#D8D0B8", + secondary: "#B1AA95", + secondarydark: "#736E5E", + warninglight: "#ff0", + warning: "#cc0", + warningdark: "#990", + infolight: "#69f", + info: "#36c", + infodark: "#039", + welllight: "#444", + well: "#111111", + white: "#fff", + black: "#070300", + hp: "#dd3434", + money: "#ffd700", + hack: "#adff2f", + combat: "#faffdf", + cha: "#a671d1", + int: "#6495ed", + rep: "#faffdf", + disabled: "#66cfbc", + backgroundprimary: "#0A0A0E", + backgroundsecondary: "#0E0E10", + button: "#222222", + }, +}; diff --git a/src/Themes/data/one-dark/index.ts b/src/Themes/data/one-dark/index.ts new file mode 100644 index 000000000..d4862e377 --- /dev/null +++ b/src/Themes/data/one-dark/index.ts @@ -0,0 +1,42 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "One Dark", + credit: "Dexalt142", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/924650660694208512", + colors: { + primarylight: "#98C379", + primary: "#98C379", + primarydark: "#98C379", + successlight: "#98C379", + success: "#98C379", + successdark: "#98C379", + errorlight: "#E06C75", + error: "#BE5046", + errordark: "#BE5046", + secondarylight: "#AAA", + secondary: "#888", + secondarydark: "#666", + warninglight: "#E5C07B", + warning: "#E5C07B", + warningdark: "#D19A66", + infolight: "#61AFEF", + info: "#61AFEF", + infodark: "#61AFEF", + welllight: "#4B5263", + well: "#282C34", + white: "#ABB2BF", + black: "#282C34", + hp: "#E06C75", + money: "#E5C07B", + hack: "#98C379", + combat: "#ABB2BF", + cha: "#C678DD", + int: "#61AFEF", + rep: "#ABB2BF", + disabled: "#56B6C2", + backgroundprimary: "#282C34", + backgroundsecondary: "#21252B", + button: "#4B5263", + }, +}; diff --git a/src/Themes/data/purple/index.ts b/src/Themes/data/purple/index.ts new file mode 100644 index 000000000..5baeaa381 --- /dev/null +++ b/src/Themes/data/purple/index.ts @@ -0,0 +1,43 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Purple", + credit: "zer0ney", + description: "Essentially all defaults except for purple replacing the main colors", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/922091815849570395", + colors: { + primarylight: "#BA55D3", + primary: "#9370DB", + primarydark: "#8A2BE2", + successlight: "#BA55D3", + success: "#9370DB", + successdark: "#8A2BE2", + errorlight: "#f00", + error: "#c00", + errordark: "#900", + secondarylight: "#AAA", + secondary: "#888", + secondarydark: "#666", + warninglight: "#ff0", + warning: "#cc0", + warningdark: "#990", + infolight: "#69f", + info: "#36c", + infodark: "#039", + welllight: "#444", + well: "#222", + white: "#fff", + black: "#000", + hp: "#dd3434", + money: "#ffd700", + hack: "#adff2f", + combat: "#faffdf", + cha: "#a671d1", + int: "#6495ed", + rep: "#faffdf", + disabled: "#66cfbc", + backgroundprimary: "#000", + backgroundsecondary: "#000", + button: "#333", + }, +}; diff --git a/src/Themes/data/smooth-green/index.ts b/src/Themes/data/smooth-green/index.ts new file mode 100644 index 000000000..dbd69077c --- /dev/null +++ b/src/Themes/data/smooth-green/index.ts @@ -0,0 +1,43 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + name: "Smooth Green", + description: "A nice green theme that doesn't hurt your eyes.", + credit: "Swidt", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/922243957986033725", + colors: { + primarylight: "#E0E0BC", + primary: "#B0D9A3", + primarydark: "#B8B89C", + successlight: "#00F000", + success: "#6BC16B", + successdark: "#00B400", + errorlight: "#F00000", + error: "#3D713D", + errordark: "#A00000", + secondarylight: "#B4AEAE", + secondary: "#8FAF85", + secondarydark: "#787272", + warninglight: "#F0F000", + warning: "#38F100", + warningdark: "#A0A000", + infolight: "#69f", + info: "#36c", + infodark: "#039", + welllight: "#444", + well: "#2F3C2B", + white: "#fff", + black: "#1E1E1E", + hp: "#dd3434", + money: "#4AA52E", + hack: "#adff2f", + combat: "#faffdf", + cha: "#a671d1", + int: "#6495ed", + rep: "#35A135", + disabled: "#66cfbc", + backgroundprimary: "#1E1E1E", + backgroundsecondary: "#252525", + button: "#2F3C2B", + }, +}; diff --git a/src/Themes/data/warmer/index.ts b/src/Themes/data/warmer/index.ts new file mode 100644 index 000000000..f2a2f894a --- /dev/null +++ b/src/Themes/data/warmer/index.ts @@ -0,0 +1,42 @@ +import { IPredefinedTheme } from "../../Themes"; + +export const Theme: IPredefinedTheme = { + credit: "hexnaught", + description: "Warmer, softer theme", + reference: "https://discord.com/channels/415207508303544321/921991895230611466/921999581020028938", + colors: { + primarylight: "#EA9062", + primary: "#DD7B4A", + primarydark: "#D3591C", + successlight: "#6ACF6A", + success: "#43BF43", + successdark: "#3E913E", + errorlight: "#C15757", + error: "#B34141", + errordark: "#752525", + secondarylight: "#AAA", + secondary: "#888", + secondarydark: "#666", + warninglight: "#E6E69D", + warning: "#DADA56", + warningdark: "#A1A106", + infolight: "#69f", + info: "#36c", + infodark: "#039", + welllight: "#444", + well: "#222", + white: "#fff", + black: "#000", + hp: "#dd3434", + money: "#ffd700", + hack: "#adff2f", + combat: "#faffdf", + cha: "#AD84CF", + int: "#6495ed", + rep: "#faffdf", + disabled: "#76C6B7", + backgroundprimary: "#000", + backgroundsecondary: "#000", + button: "#333", + }, +}; diff --git a/src/ui/React/Theme.tsx b/src/Themes/ui/Theme.tsx similarity index 100% rename from src/ui/React/Theme.tsx rename to src/Themes/ui/Theme.tsx diff --git a/src/ui/React/ThemeEditorModal.tsx b/src/Themes/ui/ThemeEditorModal.tsx similarity index 99% rename from src/ui/React/ThemeEditorModal.tsx rename to src/Themes/ui/ThemeEditorModal.tsx index 299471e4e..da16628c3 100644 --- a/src/ui/React/ThemeEditorModal.tsx +++ b/src/Themes/ui/ThemeEditorModal.tsx @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { Modal } from "./Modal"; +import { Modal } from "../../ui/React/Modal"; import Button from "@mui/material/Button"; import Typography from "@mui/material/Typography"; import Tooltip from "@mui/material/Tooltip"; @@ -11,7 +11,7 @@ import PaletteSharpIcon from "@mui/icons-material/PaletteSharp"; import { Color, ColorPicker } from "material-ui-color"; import { ThemeEvents } from "./Theme"; import { Settings, defaultSettings } from "../../Settings/Settings"; -import { getPredefinedThemes } from "../../Settings/Themes"; +import { getPredefinedThemes } from "../Themes"; import { UserInterfaceTheme } from "../../ScriptEditor/NetscriptDefinitions"; interface IProps { diff --git a/src/engine.tsx b/src/engine.tsx index f660beb39..e3f67223f 100644 --- a/src/engine.tsx +++ b/src/engine.tsx @@ -30,7 +30,7 @@ import { Player } from "./Player"; import { saveObject, loadGame } from "./SaveObject"; import { initForeignServers } from "./Server/AllServers"; import { Settings } from "./Settings/Settings"; -import { ThemeEvents } from "./ui/React/Theme"; +import { ThemeEvents } from "./Themes/ui/Theme"; import { updateSourceFileFlags } from "./SourceFile/SourceFileFlags"; import { initSymbolToStockMap, processStockPrices } from "./StockMarket/StockMarket"; import { Terminal } from "./Terminal"; diff --git a/src/index.tsx b/src/index.tsx index 962bfc469..1c15adcde 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,7 +1,7 @@ import React from "react"; import ReactDOM from "react-dom"; -import { TTheme as Theme, ThemeEvents, refreshTheme } from "./ui/React/Theme"; +import { TTheme as Theme, ThemeEvents, refreshTheme } from "./Themes/ui/Theme"; import { LoadingScreen } from "./ui/LoadingScreen"; import { initElectron } from "./Electron"; initElectron(); diff --git a/src/ui/React/GameOptionsRoot.tsx b/src/ui/React/GameOptionsRoot.tsx index e1ce714a6..acc1835bb 100644 --- a/src/ui/React/GameOptionsRoot.tsx +++ b/src/ui/React/GameOptionsRoot.tsx @@ -26,7 +26,7 @@ import SaveIcon from "@mui/icons-material/Save"; import { FileDiagnosticModal } from "../../Diagnostic/FileDiagnosticModal"; import { dialogBoxCreate } from "./DialogBox"; import { ConfirmationModal } from "./ConfirmationModal"; -import { ThemeEditorModal } from "./ThemeEditorModal"; +import { ThemeEditorModal } from "../../Themes/ui/ThemeEditorModal"; import { StyleEditorModal } from "./StyleEditorModal"; import { SnackbarEvents } from "./Snackbar"; diff --git a/src/ui/React/StyleEditorModal.tsx b/src/ui/React/StyleEditorModal.tsx index 94b9950c6..b8213f199 100644 --- a/src/ui/React/StyleEditorModal.tsx +++ b/src/ui/React/StyleEditorModal.tsx @@ -9,7 +9,7 @@ import TextField from "@mui/material/TextField"; import ReplyIcon from "@mui/icons-material/Reply"; import SaveIcon from "@mui/icons-material/Save"; -import { ThemeEvents } from "./Theme"; +import { ThemeEvents } from "../../Themes/ui/Theme"; import { Settings } from "../../Settings/Settings"; import { defaultStyles } from "../../Settings/Styles"; import { Tooltip } from "@mui/material"; From 61d6e43b379cdcc16bfa9ac7608f60650b842020 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 19 Jan 2022 11:18:30 -0500 Subject: [PATCH 15/85] Add theme screenshots & make some fields required - Description, Name & Author is now mandatory - Add screenshots - Add dist/images to electron build --- package.sh | 1 + src/Themes/Themes.ts | 7 ++++--- src/Themes/data/dark-blue/index.ts | 3 +++ src/Themes/data/dark-blue/screenshot.png | Bin 0 -> 119206 bytes src/Themes/data/dark-plus/index.ts | 2 ++ src/Themes/data/dark-plus/screenshot.png | Bin 0 -> 120193 bytes src/Themes/data/default-lite/index.ts | 2 ++ src/Themes/data/default-lite/screenshot.png | Bin 0 -> 113544 bytes src/Themes/data/default/index.ts | 5 +++++ src/Themes/data/default/screenshot.png | Bin 0 -> 114634 bytes src/Themes/data/discord-like/index.ts | 2 ++ src/Themes/data/discord-like/screenshot.png | Bin 0 -> 122869 bytes src/Themes/data/dracula/index.ts | 3 +++ src/Themes/data/dracula/screenshot.png | Bin 0 -> 123486 bytes src/Themes/data/light/index.ts | 3 +++ src/Themes/data/light/screenshot.png | Bin 0 -> 122924 bytes src/Themes/data/mayukai-dark/index.ts | 2 ++ src/Themes/data/mayukai-dark/screenshot.png | Bin 0 -> 121361 bytes src/Themes/data/monokai-ish/index.ts | 3 +++ src/Themes/data/monokai-ish/screenshot.png | Bin 0 -> 120868 bytes src/Themes/data/muted-gold-blue/index.ts | 3 +++ src/Themes/data/muted-gold-blue/screenshot.png | Bin 0 -> 120362 bytes src/Themes/data/one-dark/index.ts | 3 +++ src/Themes/data/one-dark/screenshot.png | Bin 0 -> 122513 bytes src/Themes/data/purple/index.ts | 2 ++ src/Themes/data/purple/screenshot.png | Bin 0 -> 124012 bytes src/Themes/data/smooth-green/index.ts | 2 ++ src/Themes/data/smooth-green/screenshot.png | Bin 0 -> 121635 bytes src/Themes/data/warmer/index.ts | 3 +++ src/Themes/data/warmer/screenshot.png | Bin 0 -> 120332 bytes 30 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 src/Themes/data/dark-blue/screenshot.png create mode 100644 src/Themes/data/dark-plus/screenshot.png create mode 100644 src/Themes/data/default-lite/screenshot.png create mode 100644 src/Themes/data/default/screenshot.png create mode 100644 src/Themes/data/discord-like/screenshot.png create mode 100644 src/Themes/data/dracula/screenshot.png create mode 100644 src/Themes/data/light/screenshot.png create mode 100644 src/Themes/data/mayukai-dark/screenshot.png create mode 100644 src/Themes/data/monokai-ish/screenshot.png create mode 100644 src/Themes/data/muted-gold-blue/screenshot.png create mode 100644 src/Themes/data/one-dark/screenshot.png create mode 100644 src/Themes/data/purple/screenshot.png create mode 100644 src/Themes/data/smooth-green/screenshot.png create mode 100644 src/Themes/data/warmer/screenshot.png diff --git a/package.sh b/package.sh index 866be1700..2d7992961 100755 --- a/package.sh +++ b/package.sh @@ -8,6 +8,7 @@ cp index.html .package cp -r electron/* .package cp -r dist/ext .package/dist cp -r dist/icons .package/dist +cp -r dist/images .package/dist # The css files cp dist/vendor.css .package/dist diff --git a/src/Themes/Themes.ts b/src/Themes/Themes.ts index 63de312bf..847c6fb3e 100644 --- a/src/Themes/Themes.ts +++ b/src/Themes/Themes.ts @@ -40,9 +40,10 @@ export interface ITheme { export interface IPredefinedTheme { colors: ITheme; - name?: string; - credit?: string; - description?: string; + name: string; + credit: string; + screenshot: string; + description: string; reference?: string; } diff --git a/src/Themes/data/dark-blue/index.ts b/src/Themes/data/dark-blue/index.ts index 3c509d00b..b6cf0a623 100644 --- a/src/Themes/data/dark-blue/index.ts +++ b/src/Themes/data/dark-blue/index.ts @@ -1,9 +1,12 @@ import { IPredefinedTheme } from "../../Themes"; +import img1 from "./screenshot.png"; export const Theme: IPredefinedTheme = { name: "Dark Blue", + description: "Very dark with a blue/purplelly primary", credit: "Saynt_Garmo", reference: "https://discord.com/channels/415207508303544321/921991895230611466/923084732718264340", + screenshot: img1, colors: { primarylight: "#023DDE", primary: "#4A41C8", diff --git a/src/Themes/data/dark-blue/screenshot.png b/src/Themes/data/dark-blue/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9233080f3a1bc0d3404bd5f4c0e3617fd9a37182 GIT binary patch literal 119206 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 literal 0 HcmV?d00001 diff --git a/src/Themes/data/dark-plus/index.ts b/src/Themes/data/dark-plus/index.ts index 7288f40ca..84ebb6dfe 100644 --- a/src/Themes/data/dark-plus/index.ts +++ b/src/Themes/data/dark-plus/index.ts @@ -1,10 +1,12 @@ import { IPredefinedTheme } from "../../Themes"; +import img1 from "./screenshot.png"; export const Theme: IPredefinedTheme = { name: "Dark+", credit: "LoganMD", description: "VSCode Dark+", reference: "https://discord.com/channels/415207508303544321/921991895230611466/921999975867617310", + screenshot: img1, colors: { primarylight: "#E0E0BC", primary: "#CCCCAE", diff --git a/src/Themes/data/dark-plus/screenshot.png b/src/Themes/data/dark-plus/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..44324a041147354208c3b63762d214a8211f4f1e GIT binary patch literal 120193 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�ot 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%0D?74;yipgRNDPb#;Rb|O7RFZFPL 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 ZXdv4_a{=5JH literal 0 HcmV?d00001 diff --git a/src/Themes/data/discord-like/index.ts b/src/Themes/data/discord-like/index.ts index 91e65aee7..0962d83a8 100644 --- a/src/Themes/data/discord-like/index.ts +++ b/src/Themes/data/discord-like/index.ts @@ -1,10 +1,12 @@ import { IPredefinedTheme } from "../../Themes"; +import img1 from "./screenshot.png"; export const Theme: IPredefinedTheme = { name: "Discord-like", description: "Discord inspired theme", credit: "Thermite", reference: "https://discord.com/channels/415207508303544321/921991895230611466/924305252017143818", + screenshot: img1, colors: { primarylight: "#7389DC", primary: "#7389DC", diff --git a/src/Themes/data/discord-like/screenshot.png b/src/Themes/data/discord-like/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..16b9ef5587bc2ad415af3eee2e2f6c0a2e961251 GIT binary patch literal 122869 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

+b_>W3(0Q+_{O`yF@LT{F|LKAM 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

{hRDf3uuC4J(@? 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 z zRFeCYqUU2WtrW+x06yyW=~zZ+gMv>Fi|-Y0-I4{&@(U+ur_6G4&HPMyB(JaaqvoSE zQF^ZwZW(h|h+AFjjtx#%?k-D=A*7p}l07;kJ!5({%^4@iR`287W%x=w>K(j%NqbF& zHcBs;&W*Ls+eiL?SCvh%$96s&5f3>}vlb1TwbVjCYR*#{KY$KAPsC+%kJoo_Gi(|# zDrZqa4hTNQD6Kvld*CRTawpifJ!J>^i<8|(Punim%SycTANrtDz^_VZ8J^}jjyLf{ zINA1Vh^cf3hI;*=PsXRw!IGl4&{f}}yw*`2cZOoU@s3ncd}`h)Sp`I0KP%?q|FUn` zWZL=fVk@=J*N9wCZ#NmbUAp1VFFe@cvbDKx#@g_}u8q4e3&(Lo#2k11;DxCXK|V2v?d@d$z+*K3y*Qu~x&M_;_z6p_hn4dhhXuzy z)Lybgw)nLybLUAhFM)7F7`P_I25`Z}4!Y05S9hTzk8>OAUKWZ0q~qpDy_-4?uj=cH z>=MB$`I0afiKt-9MRpV2oxJ#PU>ENyc(~~E++~eViqECh{*eu(OX|)DhnH?OQdCoL znR6DlQL4)4h}0+IhOq$q95xJ~tAQ?2=b{A@x3t+`w!QKd2oN>U+ku2DjBYoOX}6GH ziqLDN3M58(BlQ`h8a&SLJcCg#D|5AJxK+$T$FkNvUG||h4TPq;HeH61E-gHtjX8)oLE!#th9jbp{kU2v-Dv&9WkHnn?h~IIWiBrK zO1xI>j#9Mo(WX4Pk|3F_DVyCT%zrgVK-L@0919|8; ztDoCd(CUco3f2jNTiE{whHO_d_B$PGkSQI4wgbm4Sm~)G_!9XnCtJQMdb_h?%Kq+ z{=!NUxTfp}t4=AUdPq-rw0A_zHXMb(J^BF+au3XCY!)=3RsM7!? ctuj|Id@==b*E}Lu2>82UWOlXiio>)227;Pr_W%F@ literal 0 HcmV?d00001 diff --git a/src/Themes/data/dracula/index.ts b/src/Themes/data/dracula/index.ts index 31eec5273..c1cdf19e8 100644 --- a/src/Themes/data/dracula/index.ts +++ b/src/Themes/data/dracula/index.ts @@ -1,9 +1,12 @@ import { IPredefinedTheme } from "../../Themes"; +import img1 from "./screenshot.png"; export const Theme: IPredefinedTheme = { name: "Dracula", + description: "Dracula Look-alike", credit: "H3draut3r", reference: "https://discord.com/channels/415207508303544321/921991895230611466/922296307836678144", + screenshot: img1, colors: { primarylight: "#7082B8", primary: "#F8F8F2", diff --git a/src/Themes/data/dracula/screenshot.png b/src/Themes/data/dracula/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..51264adb1b74a3d729109691b2ae104c7b380b4e GIT binary patch literal 123486 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
a16 z|7=r+Gg6Q7=;i=AGtxCoBWTU5L9+L7w}_Q|NYL$4oCwI5^^Fk(OG`d|OZHJ}n=QTB z(4+GZJ@FB$LQgl|ObY;krKJ{o$pm1$fVJ$<&Q1dg9%q8$b;sQmKS?3 zLX2NQ^hI~DzPW81Wmloa^~ZFM?fNdM@>-YxRbSiEdkih^$}A1HXH|xk=;B{RF6T@x zE9AtL&^F%l_u1}wBSiXcYvR6jf&OaHf|GqAw-c(|dTTf~0pDKD-_ds^orKaqmX*20 zNIl6TQE45mHFMf}SGh(Td+KISU2{nWd-E_JffwoRjMAvG7C>(qyA1SwogE_Ry$bFi z8$#IN&RY8ATqCY#8EAzwR?IQ3n9ds2zX{}Jo&qVH|A-~ZVT?0R^XPi2@!MQ@<4hMo ziOoG2w5ROEwwhM8R9Q%UQ@bi)b>WT6B5x{%rZ18cmV6~<{aB_Ul3RunfK{DRql@L8 zBVDeLp!Mp_E+WanX17y_wq#yWPD=5&$U-H|t47qhs%OxJZlx3n!O?raOYL=UG!5Wk z%C8ef&npm8ul=Z4`{JAdj^9SFqt_8IyZ%LX=Z)aZG6wdsXwM1x3od^0PS@3WiXD`>Z~;iRvOdMxM|R@}rDWPGU9<%p z-f!?oK=M(*$9tq(mlsdoE@Fh&BQb{Gv#CE`D;O@2Pg16rCTM%)u4f|L-(SwwQ!M3G zsEhAA4HcnrBa8Mc*@7{Ki#rXE)7eHfe7?2I5qjX^(YnwXN$_(E0W?%F8+Y!ooLy+# z=mc8FMr1=qsF?=eSm;B%C_vas+cd07kaI7uwreJnTar-CT1S$mdA$h-3g$cvLGokv z+z&NfzAQCw^Qr7-jnElp_jSAH3UQB1D9!mT=iKj^G{?Wb!F1jz{(7nv8L``JoOkMN z&k9*NS0zF)9!aZAPWipY&dfSBn$Pg`1_6U7SWa`Yfxo3=`C1pmuUnR6Fd(hRnQ+Lr zx;VIO&uf&Dib+ZzL0ENIQ2v**ZJvB!E#j+HHoLIRFbF0TIuyY{WNSo9EK<;HW)5Le zWO^D|zYSe=n#_A?#RcZ@s8jOx2quyOMY}KuSlza6#Oe`rxgF1?jmi#=JFqH{Bu4nti3>jC&M-;V5QTl6I7)qx+lq4YZFgMv z8P$N*SkB(Ew^`YQAB&Ky{tbxAxHteLVG>g6@BxJme)0&XKL zU9RU{YyJ*w_-(e_3(p`RfH`;}<*#X6wW-guT?)PjP|Bs=q53R8G|5;&eg zowNGvEmwq3eV2C`6W9}^WZ~i3y1yl?=LvMP!%-#fSOOJ%#g~!1G%h7mlf`@;V#mWs z-5_b>+8f?Ta6W;_>p;SZGZuMM_aD>aLX}Q3vk!?;a=O)J12D2pH!gf_NVaXCEZy6m zVg%NkRTmxH9sYb@iNl4oK3%r-%O)>$OmKzDj}e*ctY_37h-X|L+q$*7mZ$L;p1}Uo zAK!qKT#l;f2WO)ics1*l&FXZBk`eLs_b=2X-yoVve6Q%+E$2U+AF2~2hyx+ALEkT2 z1Opb2A{jzAwT;oFEYn6Y{Y_$$KjQI*eAg9jkP1?1@4ni#m*p;m6(N)vk`&Bu2NLnw zHvEPaW=g@|vDQ8Q4B=l<^YLA>^6qVf0W->E#Xj zElzNogX%!;r|{m?1LHsd*D-|+_m#rU;$3#j*;f^yN-xLSxli2}VeOCge74RVlE7kv zAJjxCb&p5A9QG=bWZ($$k9&61-j!OWT0VFLfQEch4_V~OxO0NZ8ig4U9S;nvW~Q9!2DC0hZHtTdWTZU+)i>Z2;7(N zU#1zWw?#Z81IOlcz$HO+P7Ww-=@?EU!>bZY*%SQzAHbq(qk9YA|Y^!9Ld+5cCiokiY zS5)UbEBSsvd$!|8kb$?s8s=;;zC1-Y5qXDUd0+P=2^-kscCsx^6}{t5k@u?t-Btw5 zxn}{ABoEB$cR(Kn>E@bRfU_M^TsL$$v~nk32I^u@*RXkZ_KEtk$^4HeYPzwn$lwiS zH4UvF%WBJ9hApf`j);TnS83InKIuCOBaH_skfu@!4mBdD5O=a-YOLh{QnXuehH!un zNX%KLRlrnT)+eo6%iPiXU(24{bX18iL#yN`-#jZ?umeH0J6J19gBFl?prCd03pK76 zxtuY%o=r&C9z}kM^U4+n%fUX z17>L_07}1x%yQ<9C;^M@4b}TqJWsgv?GoT3k>BgM6ogATH{^V5kZZCBu22Gewd!|s zPO9Pl2E4{Ve1$JCO(5v+q(})U-=W!lQ*;`A79>;7H0i@9vrxMw*{^1MKo+VSa0oDg zBjV@2U~%o!pFsevG{V#8C3uUlT(ffW(UUw(XAvlSru`s|dN&=)l9^=Yy3if_{N6Lq zt~JukykO~IyGM$J<+mAdq}^Bl#wgyrX$@sa*f~J8IuIcutydwRQwj}~b0*;-&b)mM ziUBMO68Vi4WK*dq5J06=@XmRr7uwF%K9rKwXN}`xAJ=>fbWuOTW5~0u!zD%?ba)B#MT1=3;ARnV%RD5{3B4wsep%xbO<^gH{SzT9gaVR&vcn8djx8=n?5qVsj2_ zuLYzb2|r7yBIu4S=DU+(ooU0G(Qc!JOb~FINiEF%1<04$D{8c677vk!d|3rE=8LTP zs%Ga3YaA&p7+O%?$;zWpgre;k&00}@^|J3T9(*7UX z-aD?z^L_gdShPjaRs{#k)+#C>B0`u+-E|;U6d6L$FlC8sLI`TrDoaH`WJE>5frJ@k z1_wle5D{es2!arhgdvawvVPZ{gkfvH-@cyT^YF*#)sKWb_q^`wI?v;HA8-SW(xSXE ztD#sIs&;cap|(R9N|bh18g_ZFC%-X-dl+E1;7c zOajBBcol?F7rwBi`4m+KtY<*E3(#!taUe~-Rm=xs?ovZFTHKNfj|tv*1}EImOo?1* z4IAt`(g%NX8BQ;GQ=sfqY7^6~;#KQ?b6w}F&^B-Qo9hm79bL)HYFa%Wi3scP#h)2l zl!6qTs0ncfWzf8RecZCQ*qwE;xxC8(9K{6t&KAMqh>Ctj2R*&t6)EJ$_Fn#?QLA9m zNu4OLVAv96TGVxwPxWnBp=GJ1SzwQ=o=`$3rK6eLXH*}{=k9~sMmuX7LxhE&Rgxe0 zg^H>O!x|yIA6U2yHdX*%Co)Hb z2`>bOS}L=()CD{omp4Yh-=C7nO5WFz^SSz+w?QGr`%od4+4sIN#25)qpO?cn(qsVq zOFA!=?k1Q=){AKYj>u5-qx&HL^5Zz zU{*jsjSuOp-rvTl*hh1vbxw@r zves>gs0DWONbdyJ{G+(5-Ubux-mh7cw*ts53Z6ut@G(qqoC?LK?xg~u9DzaLSVQY+ z!;$$DQwEc^FlJMT3%GXqoBd8XaOI5C!JN=%jFzwU?t~I6LU8{?j!JIINYy#|P|-k& z^-3;hYa2X4Ghz4O*&hIM$~mTk(~`Rh(UUt`0qU)246cvE^JodjQ9OY{frRiXipoz) zI47KNqFRKSAxtLBa*9hb>~X58K4ZHWt<86_p=ND9eu8FwWHpu!FV1klm939(7gt?3 zM(Az25MT;wZ)dIm3weii8|7h#7EeH=jPZ8U{2P^vBE7x6!lA3RP&qAo(C2+LPF2Vc zUYkm33ddE@7l5J96}X>~gIhKF#24(k7Lg^r3O;~}%*Vq}L;cl(%=vnSiQ zs-}he1fQN&VD<>6rkUEq#%}+|pLMm^yKe~a zjNbzG{oNBzgoa)qA|wq36xA(k&uZ!T6Pk#y5qBYw(!73XmjAVl9BR7Gg%O@-LFRa1 zjYJP|li*o5fng8h6RNc(gZf`e+CT+32DB5EN5tPl1`XhZJeB8x(47W!nWO8r^y(Z+ zCx9(+8Awb(aIO9E%cVmlPawZ_r{OH#@7ZML@JjEpQSxPVUatC+9kWez&%PJWN0=Ho zbnw6fk-__^yEz^JgG|-W9zub4=XgT6EgvD<736;)JMSuDJ3zJ=iaP>H4`i zK?zkw`c*)^LhFA3Ya(zTO}?T3p1*>$$8DkwmH~0xS`YSar&tL0Ohb7f2`6L(A61{r zCVZ>G$lLm0+KK{>W$yN&)y^Er$3~K2JP5(|L@x+c{rl6pT$T&7{KN5zFPyzV*Y4Bn3fQrdKR>vYe9fp5h)kr9 z*UIlf;W}U~ZiY-an(>i4Vb+l|xCe=d;U{0pg)chgv-;4c2rng{m2V%rA}0q2*icP$ zTFD3%hHt`!Aqggw4XtLj=Okov=ZH`O&dO06%wGQH}r03?y~Y#RXl zN^U=Jj*>fpleA?l*yr9@*!t++{iesMJ^JUAt{FW6FRmaUy0n%uM8Pt2uFR5B(oxAH zUuQLPygff!`m7(%*iO#2+x0;uSwGOsv1Z(5yGZE5J3Y6cU8iC}_fSn{=_PEex$8+f zZ1A*J!|^IWg4v5KHT|lUcCJk&y%8-=c2WWrB$q>0cisaqUx9Y#<^Gi-LCnSI1|m>R z3PEGR!as(X>W}>H;15Z0YyBcRZiV(a&QLm5R7S!VMv6{v1Fm{oe&VCZ!O7;X0ZK$i zKaZS7bf>o{&qFg@eYQqX-l7Go=yzb2u0BdkdXN3w3U|EG^%&*a<>^L)U*2rM2Tqby z|FEk~${)m?27E*g+@(VhooUlfzjI6*n6<_GnHTogs+;jz_ZEF2-F6r&q^Pfr^w2t> z>{#8&U(gqNK|&MAbCUix?&qZ*kU#B*>O&!~(kWDF|(K9TXfb5Xwq zC6@db&hnnkDCPSt&O*w0C-Qp;9MGH9Bk2>=r2NjasJWVZG1ATRqwKAFO?s})BF|)_ z1Z6aY#AOVu?4UXE78PGmf+}|BjsQ2L9^0XYXxA52p7<_M70?73S)J3<)(bdKpn0Yb>4~ONi`QMe9%LWXw z1R#WsG1_S1k5zTGkvnL!M0!?R1m@cUam(D5IB+-fB}s9L8=$g!p!yBxXrdi(tK?;k za&{%y*);W^s9AYXHOX)5)&&nUAJjeHBz{4GCuk0lvHav)bMgII-MPiu2GWuGa3>5a z&bs#fko}|%cxs3bc3K#lG zY8`#%Qur98*M{7+o=E3K?86q&X#&Fr#>{#8={4)yS+@p*>y7=%`C9pcWxa>3O0=?l z`AC163~;UhX4jKYHG2(#tgvWE;ez)UR$m9wL8IdE%5)p8Yxgu<1sQWW4_1Bsyr3iN z-7m#hZg%EH=efn1%4Xb8l$@2zJY{AnB>ep2G(fZ3#6ZP))}-}%_hcQL?vQ(a1+4o# za5AnNC4;wzv2Cr&w2untO#B8rxAaFxcz5;m1X!=BLYPpJFa6UVecB1cv}1za{c=90 zA;lA)D|aPs>p}>B0G_+|CDf0?`TcAC@?;+XhA27&&Fk??U)6?Sx4TIIkyq=CR)Jfj z@yJ)Vh#lwB_Jy~IZwJ%~FJ(8f?ZX-!|CsQ z!R>?Mo3?{-1~*Sj^5k2x>U7cMDc-Gs)*jdEW^O+u<%2icdq9(z89t#>J?D~4R39PU8-BL=>x(z_-3k|&;%j2Awg^tA~8l;kh^Tgg4z z3L3ec8H|}N{qOFB8SYD1+p<_%LP_3>kgpObQ!-Fc};1fzMBE?>4+W8 zN&vR?>zvt<|6v&2cgu-qVO#ih%7K73NzA_MF?vZxTo{JXt8n_+y|$e*A_B3_Rx*Vw zoHK=lK1rw;?VHT(%iHR#3~KYz`5M;-oU%A4BgwoRs*OYTg#JEz_}B{9@IE~1>C`?) zF=?^vWDb1e*HYB>urbw_(Qsj~ZFkxw7k8kp1ZE?t`M55hba*1Ja;B2MUtHneAD2kt zD<0dwYR;_rlo9Z^oB<}_nK>6EQ0y4y@C@7z|WrYDl%l#Iav@AZ9Mj|5?KUET8}0gAi}gQ)gkC{N8D)zE!`Yp2Lq2axWLxrkz{^#tS_QQe zN!_G;Q-n_$_fopW%Zedwp98T*ORU~H9KMcWT-ZzVdCT6bexlXkbJoJHCrdiu?Oz`5 zA9$k4v;CVdJHLEm1a=ZL_T1zhx;|2|Ak?eketB=bx=Oa`6p&6mYBiAW(rW}Dm@p>c z5@gEur@OnS^||nDM<&Q3CvLxe?0sIw9>N&ZDCk&luwk=U7ym7ZwA_r_ zEyq&C%5v|LV-z!w50Q-9&ywW3$T5I0dNc=XcJ@eX=n)y_Lbo>v->l|t!bZ5+{lU#_ zS3>O=*#(d`?g-dVo(kx$Ddj|S2U5*AuvB9GqoM?#J>|RB$#><0dP9?EoDm+w$-Jaf zJ`8d`n*7AFVHnIyTszf?Kw$?}_g|=LBdm9#9PIigK%BXmK zai;;{ieh>*U9YtIqXA{S_n~~t4b)ETJCAqaNNNolXAS{`kvuh(1ae>szWmJ~@)0a{ zLqy_+2r3x!ZKp3!L;^JVwqH>>_J#8XmFhpKX$7O7VO$tHZ@K%yRf?S&Hk3I0`Ov~H zCg1w;{U^FJzwmXpb=NZ#_+*WHUJVbzQR%tvdleP3P?rIG%pAZu?#MWAJlG*iMJcy>MT~Du{1$eYmk~s{G$qx4>`7POx74wI}TJBZC0{>$qq5D@2mFPrPsr$$I*K@ zztLDB?JHcXnzymd{^FldHDQyqbDnbjatBDfdt@P_U6~gYmW+o>imGd%vUwZ-yOFxV z;mH+aONX;HZ~1kyyX3lxXn!h9*gsaPj~0|4Mht~DkxNC$^QKaJslLK%Coh!PJNxw;n41$ zvF;!TVZB<>QDIHVji5xioED9<`K#dVAps6~4&g_e9h9;(6bXYhCmTH2y!?>l<&~k~ z?*@zfx;0`7%^6j!cV}fhoi8hHuo6C6IqDoK`tUH&)9NPom-PuZx(O$F0)28#V*I`8 za)ejx?uUw|xhtkOqiT4J{7TSWL`w-yySl=}!MQdA4^xUq26}6qk8x3}U#W@g84DngQ5M}EwG|86 zTzEZ`2JkcnBkkz#lSyrW1M8b1d_Otrp_Y#34=y-8Ch~4W(-^qT1!lrhABHk-6@037 zl;_1WK>A3oO9a$D&_}@{5iE}?hXZ(i)wV)gn8i8yRr|?fnZF#&!%98}gMo+RX{4<6 zQT`F(z4`K8lq!pX*347B2qrF;d*!tBQGyl7c%J`x9~ylz0!s&cS&iHu|0F{5@eA!snpro^D-Z9h1c^ zt`d6|Z03pqOS{#+von?0!>?6H6`7~1cLcE@Etb?^BqIyReGk9VLR?P-Atc&}iK1s|IEA#UKWcgl(CNd+wA@a8Oa_p> zd%d9Kqoj>qSKqz5_TI`{TY*3s$MBf5qz3hrq}_Y6bgq)mZdhIWv*TllD-;F`l%hV) z6Bl-QT<(1hm-!^htc{>V<5GVsSM>Uo9Y;MYST`}^ zk%W5)(tzZo#n7n@5w7)FFb8o(Zz&w;Y0VOdxhsih$?9u2*;Y(Eb#~Wd@1s}gH?8=s zGGwDRdKbQqmI3LYB&7*4kT%JDzg=>YVDI|0-uM_QdmiJdm=p=LP$1)O8tdL(vUSh8 zzv6QNqm?xp7nC~^eK7}+Ynjz!uMmZMS6$d>GPnbB>qsGLz#$FLPgkqYZm2o?{jJ+g zlDR$vSrXr>;u>7dO2ti^c69e_2!Fg80SDq&G&LG3-1|8`K4kg2Y~%&~e*PgT?@Sy3 zqv^-@Q_UQ9Hbtnp()~!K?SOA9k1?h^k?rg5*dPrd6kLP zgR83fLye)~P1Zkrckr;5lPAxlbFy-zHrCWAOvn+P2_CJ&83snxkLnqG9T`;6ffM~| zVx`B|wds4sTsq^mo^u(XdS-T%%o*c~Yj4<*;R=Hbah#$tv;)8Gcq1B^N@vdYti^iv zVFJ;Dl*84q(vuet5~)0jg{X=DOauAlU4WCXu$zxxb-e-PZX4t7o73PpqD6DkLtRb3U=lD>v;6v;#isj)1+*ccWycF?7&n z`Nz-=#58pO$@-5?LHyc}3QL4FXC@xG_KjQ993~nQ8zp9m2QSZm>eUgQD=7O%y$ig$ zbhW)_f=9%AB7S>kP0Dg1`wnEkn?qm*Hj^0fyXE5tc&9W^WT&1!1kBrj7Dq-v0(QUA zcgl@lv+-b(S38)8`4qG33z+tM8BY1IMyO)-aAi`W?&WnOwJ71$O}ld-I?ieKy{KH- z{xG#4Nqzd%PTHVnDhyNmgY#Bvd|B+>y zJ_ z-5m(4^0gdQ`r-ur^d~J7Rd*it3p9}YwVLG9c2=@ugLi^FXtFJ(C;L99FF67u{+6o9FmsR6-CfB zHctwjxXZg_r*_OYG{7093A9EF9eMukRkUL_t#$K*5kb~jDmrdpSs;!Fk*hmJWNQ-^ ziVtYIRyAj?0-S9=C1I|%F@Oe%HS%0X2v;pYHXWR>tb|ieU_a+>x~L&{rWk>cDbv~) zv;StuM)ZUIMyaJ6PAcgMfSFC~cZLvv5_%peHb65O8$Y>`r^DQf@xKH`)i|aCn5u_W z3Q}$mlo?8W2_!~tx>xQRvw>w*zC*p3ZGOd~FLfY{D2TaIu-}z76wB#7o3d6IFl96P zEMT3!+{nPfF6STewVY$bi6al{zHRju-^epxudK$8kN_b!E<;3TPr_~qV^9q8pkQ6Huhl_{%joS|( zCK_K>7$P*~eRqcc;Vl|8w4eUL-VhNBvM~R%RCmr~5HMzazG&V##{b-MfMa%T2+k8~ z-T{znVyp1@!Lc8@PVAde{J;#vtCQm}`cw>RW!~22d^G4px=glO9<~KpPp+ed2|z8< z{D#=PDI)(}l31%EzB1q~4I)XvW2;y>Rf+6uNro%iG; zNT)UH09C5DdG_rLH>jcpyJGyzvisFc=M5rQFtvn0RBaxkL|ux~T^z z8cBvYV8MpL8g~FeP5{ki@wy*#@Z8n~5gpLdAAGtu!DIMfq?!!qGpqT`d6nMM!7MNPJGGsYk#T_1FlaIPj)%k)P&>DT337GRSeaV$&)C*1JDjlL zxEQ%e4nO&V5v|7a(~k4R)vd*4J0}q*CwGL*V=k$^dP||ZNEzqdE&_GIPc4Ban`^hi zcn3I|2$P#X5q+45y;PRkUNX(M%@w2qu0_=H%NxSz%&9i;;PD4#-c|s)FXvD=2}#AT ztyxV{hvkU9+5R$GQ^)F)`Kgu0mr%SY^MVtwNHtpb`3^3KuTEzSiL14FZamhfn{lt$Y%DS3W@tDBz(K2%>zb)2hqMe05*OADN2wTMUaKtY7}bc zn;2;B56kWk#_xu)lZSM}a+Nugyd^k%`oRW-b4>3|5NJ}XVq(x2mqt5CV-!^l%JyFl zuV{9Tp~~a%YsqJSDJznNr2t@tnMVc8U{jC}WZ4s&m}hvbf@PJhW6!J|7cOP1!1iyj z(6aPAY*~CNQb9L1tgqkHj%ykk9-LO+;CtP^)-@?c)$UiBx9ZO4sPWu(rM+nHerj%3 zPF;g;pecChpVuUK;;HI5JQ`O&9JzQn2&DWnD4dJG?B$i;@^eyrt05?hbw0#zZN_Mb zPQ+rNIG*1i9ln^^>Wq>H8o5PX1vfPkHkNLP5EQ4en$eV%&^O|5DF}y2D&sLF~zWSDU08te6Lc0w^pE&dgL7i1N0T{>KEq52o?9y;9jZ1)eTj1@Wz>dRj)B9Aj|_t3&RW%^P4Vh(j8v-jc#JtozY#AO-i zr7dtIO>!)Bm8*yR#!uit%wZ^#Vf#@tVY@+NOk+r!dVW-v?9|o-qqZSjCssylR7J4w zhefdDS@JjJ0nVAi%#I^72b1jo>u=qW<0Ak$Ma&O|gqk22&M0@hmT z&;!$g9$E2nV`em(MymqVdWApPPR0=pCJ@rl-@gg_W-Ry9{Sy!?{H+k*zyJA6SLoZ! z!)X)zwDfR}Wb406{UitVpT&is`SbsH=l>h15u7Tijed^iaOQkr6+t>m9H`pxn-{LQ zjC*$G?%ySb!R#xb>?0i0y!26o>8PtE`geqVod~1G|CIW2xMF`9Aj4(M}b4`)*4b+!k`GR-;e6&BsRb(E{6cWxsP z#7UKoNj*3R=VW~A>ZCZEL_c4pqzjK`WRO5z$PBZfdE(j`lSb8@uFkw_5Pnc@(0Tl> z+?-9yIk;V$2#C#Cu{xld%rRR{7 zIl5?{#rMpW=KE6sxJ>~w?>Z}%8Q|=5gy}*16fjStA^D=YsN58y7QPBe5F;<2*0uUy zKf*{94(FtpIlw%;>wYlN@s7>+_pU3rp)zmlQ}J#UJmIC7M|Uv#ahjmu#nD=khe-ga z4$s?3l^K#`)q$*GKZ6H0rLR@qoQ=%+8v#mkU+i zZ<&}CUqJv%A0;Kx2RCpA3b;C!5a925Bc-ro7mqyHzY@E|!Z?uG*U>2SeEy=d>}Hw! zN)s!BW%Eb#d8c#W3zLPIkkyjKrQ3G)uW5kxn5Q1kwb+HMYME5WsB;us~r%d&ThaWdN5cPAr3 z?8`NN!c$32A0~wp^9ATbC7tePHELCU4*KK3f6`ehdjOp!pF-+*ri{7pqfdoE*Vq*t zSxY;2&rUy9nK^x1i?Xb$I;T}XxG}r?TkkMg-Y9J1uZ11BM zjdj;?GhPhqwRz`Tgf`xpG|zR9}X;M2E^JgTiLi%au0yeY1z!)SgJyU0j@&8bk)lrTWf*@H=yTc z4*cO=37E6~3qqqaw!gT3lomy7eyzfy{|a0)@83$c;TnKPPyRxrgbTrBGh3fXZHe;4 zyV2Jtt^Kr^_+gHUu6#~Z5Rmchp?mWMXbU*qS7ryiV@j=!Qe+nE1M~L|9PIoVhGl^|24BG=R zvIGqC_HP-|Ja6Yi_lF5FMU2t#7g4?EW6TC@5hezA0lGboEKneRI3PYNV94pQadF~o zY^(64Mk94RNj520Yuj#47wia0&>IV!PQ7-E@k%X4109V^(Vhy)>8#7drlm z&Asu$JFiFihfsiDrt!zB<_8`;`1&&UN_WpMF3%fryQjXD z60QqfPzJ`n+HKE?6zjgWQIF5Iqt-r5+qUeGP*ZjZAoe;*$qH6|PGp|x2$Ip+0)XYw zoI}vVnmvrNcmr$sa=l)2RwKOdvkp%SH*fzA}IH z`?LMI`~MWnmATJRaf2kPC>D?^3tR5}*|12pr%2ncJ2=fP1{mi$TVyZw@l0*%5NS!t;bsxz zlALltYNb}NC-FElPV3=Nd^#Gvco#ZpY3fbC9o3G?kg64oM^+pocG_#kHRnszP3bI< z_Oq}4x>3s>i|I$T-nznxvu3K8!^qCx9JGJy-q)%rR*_#{zz*g49Z|ICQk=>FMv>DR zUDgp63q;FAFbLUkGJZSMHk>-15dl{)e3~EL2-M!wxz#`r?*v9wigluHtL%A~(?p$! zLe~AP)fjVMEB5XEXBSx@ z02a{E7#{~_xPXv5tTy!`3>02j-REIfXS8(z?ejV@_9nlCy2|7blGjQ!$FT#l`?6_8 z`})2wzTgEw7h)-Kz+o5)`#CAvi6Q$F6zC2PMS;{&2mAr-0iH88;H4LRXX#`;cq%jO zX?zN%thmUgHCZu#$b2W;hJ+I*-1C)yJPDy|%(^=iqvz*KoKOcl+X@Woy5 zl7zN5f~U+H(Qim|0lfmsu=GaVu3#p{g+eFf9;3~BRh%;*Rq?zAo%9Y$4i=y_rghVh zViY<^^TG~O9(h&iPb@$R#Xx@@bL9u z@^{5%Z(mn|Ep-|qlXu!OTGX*#WI# zKfd6STXG+uJ$q;=(TKGwSBmu#{G1k_b~lq;<}&Jatsv9XOmuf3HP0o=Ay#z|b(uAm zv7eXMz@e&|4_dH)Ge!s2v)-pNrYGJX7x_qnE`PC@Uu zI`+)7tvulg9OJ@(E=Y$JtE*v#s-ldaX*yHKw(Iaa==HG>TgN=s21-(y&Dr_vVI-xv zJ|svGL;s-BidEa7QU%y%yKI>WfBcX_8Il7fS3nE?&uU}nNr7a-68<+}#207pz+1JvGT&q5 zl1z(2x%=z?LKXpiI|;1zZ@3ZhO~eXSmad0P~wcusk&zojd!&Je#_K%?m3%cJ7K0UWYe%nT;tkeC^C zb;S2IXb_-EhR=m;pSq1N_Yk(rcgFR%G?({+A>{T)*F#kj4*WAf(^JAB3W7VXWB0e< zu!#&*4|YsY0VD1(QbUuYDSz=*MhO%L&P0AQi~1AhX*eoO01Wnn5B2HUApnc7p1Lg3 zx0Fb^$`efVq^Xgm)wTjrf(q zVfD$UAL$6e@Fh|2fGB|56Dxc^A`1VsWc|^9RbNvXF)io!9DzHYtQH@X8 z+xz8p$R<0od>8l1Da~VE#C|^0l013>!~wsvojgtEZnYX?aqZM@+xrkvJZ6bau?op2 zuuhwUG@xaVDbXfE^DS%$yzfSOZ48m)++{Dzm*7I*0rH7|@G=of=fuHCkorVJ)sp7J z8i7p>QXy9!5KS()(M?=DZM1`MFe9ZpJ zrBJ%*BacJ~Je<8Z@;;3$e^gd*w(+V1%G>rzvf|UUzWx)aw{7fPKX8y)PVt5Z2&}6J zxs)*D=K2ZzP$BwN;)~oL>)EZ%@mRCb2|$0;P;qTitUP`chWjMa70mSIt{m_=IGtey z1o+~n3^WM1racRJs}Ybd8w4UITmgkH87y<5aJrC@WkL1dLLiSl!3P`s?O=_TlnKyt zqOc?ePM3v_4Vl4EkyS;IS_zglswN*SgjeO?Xm0v-FJhGk`C&m+mG?HQ@iY*Z%4T9V zjRsRVz1cN1=7ekhE@w}zEBY_9dlq(a2UFJa)S?y3GdD&|Xx>_m{_5HyFB=%qtB6S)r$ErONe#{v6MslUIMSDfN{JIA_i*v z&Z*zzrWD>bT7tkZ_>Cp{R~^67vU}+Jg-^7)J_%oHJ?kA6Z?8)~QX{-6*5K~Uin zPhWn(^IJdOO{N?0X_+F_7-=3C`FR*tAsSmY_5VybZ@;|qo(0FH_mLYau>PiXu94Ld z+mp7S#{BH#kY3_=6|j>$H}P&$Dvm#6qvM1>=_hK;6^O!$+Q zs9OND4&itHZwl~15!`xwBONrGw&-Z?jj>nqA>s$t??_{~r9J*QAbuo%1 zR%fT~y{kFEv#k={?z;_A9fk=SgYrEABm-lN;2t6OJ}e=Zw6G;+qjm(&NhxnZtnl3# z7TEjQv0EWlkZiMoL5-*s=|j5ND{!Sq(2L)i2#oTz1FUSdm6HN&r~0O`}s-Ev3_rGe;`Nu_Fke2 z+x6nKA`*R;C-|sHx~@JdN(>#>X*PE4LF-T7CC#e@GfYtYtow8KAz9XWWC$KYcnE z>itQ6rn?c}P+$Jd6#$h_-O6FY*=RPfh0qzrzY2|A9E3Z)62QF4M6aFs;efy0h((3c zT^T&{z`FJ0`u&~SG_eG~MI1H{$kFW4WtFyDKJ0KIg5WR5(|NMbh(K=N5Dq{F;Kyy* zjK&B2zeXt`q6K8QhC&Fsr%IK!VcRzO3lQ<8R$tn5+q@$a4x6gOKqZEHjr)Xg>~ssl z#EPaJ8K%Z6c_s4}froFxVP%+OziL`~;YWG=;_l&djpt@%xlwW{#cySUYRvV&V7trW)X5vaGhOMmixuYQwip@?uqEToGVpNT8fv(#`2;; z+85ru1b3ChT7&T#+`6SR&Y7?Z+TU~~V!*10tZ=DpIYnLCg<==NTtxdb&P?2{ zN?9_!)m)g8_R-ZWz~o-DS`!|nxF(ILiMhGY*94Z;qgN$-dEL7DbBLBDy7LuAg@lR? zs8I933y-?A3WJA#wUN<6ui6l(&~Q+C{?w)C4>YUiRo=9bNnuHC3H9=`_fHOh20*6< zw7fxh**Fwt@D0S*^k-)I_2BXAIuKN*2s42A0bdg-AnA(J?3tdcLzc2E=AzpEr8x!d z(liqd?9n)s!P$BcwlZ$!>%KwUViq zjJ{n#!9`0=2UdvIxrwmE$h75^4?nhA2t!NCp}5!Co(QN$9I8FLk>*iEFt+UqN($<}h z^Bg}x*CBaDfj9_jBcj_Q*3zP?$&$X!E6hNkleYF%?}FM$ z_Bt=Spzg3$RoP>~)HzAbz_^x|(uQmd?8vQa@aX6*|1qatqRZq#(GviNUooLd$~gk_ zunPnnnr{=BPZa#}9uSxJ?pzG26 zLz}#_qTaBdrW1bdJH~2`6*Nf_#6bBx-EUl=BUrMl$!MeBh6rDWIaxkgty1Y^Z=1@`jau8n@eYLg zqB6}8LFIaBaVu-ckLhX$h`;Q1byvRbXp1>2k(Bs_myb#0mK-!)4Ari{Kp!F44p~%y zU=?Vu(CY{~SRmpzt9KdFlka)}w1Q!3awD6xf0^ojp{7i_^H4yvrwY0sswQgNhPEjc z(e8b=);+Z_4+KZJOg5jq7>jJ`<9UT543@22wqkehzsk#Nr+Y>#Yi|Z1(}k||G$1RY zxRp|KqMUaVscs}3CGZg67_4V1_esdn1K@zPP_KxsR8j};FN$)l!SMaM27P^v(hRDS zSrhTrmERsE%mSnVY^h$DO+RAEFFp74&k4d9aE2a=?Rfv;@{qE3$aqp~4=`?C8+-t( z2oB+pWNn+Ri?%$j+F>^`9!qK2;c{a9eK={vEi!@K-tx->?GtLKU{#S*O5ear62)cm z;_)klb%;c+F)(mP-fK9ZgGF=8siN)ia__*?Dh*u904Z_S1~>Up)hE6bV41en^;Gto z5|FJPbh~*;@Z4H6wTD_jbjO=DtAN5%6u2dsw;>Z$8o7DN&C}X5VO0>KUmPGH4v^5? zS8ftMn%LKyUH0)gYG3S6lpK`0nVdxGiM~isd;uJvvOyCm=6}EvK>$X33ka$+BH zq_jt{Bb}ao@om=fhEa6n^}w>x{JfrZn_pekj&fnP8JKM5ws}|wnOAz|ZTLLUxOF(B z>$-nahP2=SjWtAyO8&mhzo)E4Xz+b?7yN>WZbhupMBjw#4jW(vzX2MDctq-k^l1!a z-+?mv8<*(TU;Xkh8}UYLV~ZNNBY+7*b6N37;E@fpayPMpx#B;o@(M=YgCqhDN_8{U zp&62rdh$SRiB}*PY2FHAGOl)KULG6{@eGf_npJ$FAoejQci70~(i6+)w|;7TQ{l-b zXxA4Io>Nzs4u$jsfLL*umD~tKbN@?wbv5}qkzlvd%>DYrec4^SfDj+5HX;PT;tCJUQ(({Q38X^zX-k+FkXd=n-lgc>Pr}&(1GCutYU>Oq z-Y$ZNmK|SzBCHX!+3}#*yCEG(Y+$v>^3lxssL$Cv6KqeWID#aToSJBTBb(-0<)QV* zvCb(A`Q+7dBQ4Bl9SHL*3k_ZmA2>V(mOG@ebJhiNyF`Y0ReMNh9y8G714OrtxrVt_ z)Mp*YqTMab(6;b*lcCzi)oC=-yD8hRG-}0E{L=!l)^8W`<&-d55arT(l0J580nw*p z;uT<7y>f`dqn)YN`*uPdEJ=$afn(H0U?u3||69SP34xVZ8=xj+4wFY4jeVnS&qG*0(epEwVe9`#ls(3bN(2 z57`=hRCo2<-Wa8QZ?*Ogmq_SR-QxAP(Sql+SbZ8U$Ro=_~fX}zPV`-lz<|VsH+ZYwpH)l0^Vs%HSz}z5v zU0}+am}mkW^d3#OWW>)-5iE+?sta1oqVm4)emp8_KC{zo6ko+siKB!HZFA2gdCNI`9^ArpJ-y94}B z1bCsWVfee_c^32SY(7V}1;~B24oP0637|leOPjL?P_*?RE9$3O53feidS711KnAQr zut>hERo{B0T;R^g^j7xoWbDUC-0dM{u;!TVN&=@xDaeY1f=`_m=a^X5tAN3d2`%8j zQCn9dKG>b=psxyZ$Qqd-=p~fwtr|3or3i2G4dW;(ylq3)GFr)HMDvA?$ejk-52-+2 z-Uq%eV>`~rfr$Ou>oT{6VL15JwVdE^9Kc)M`CPwR>=m-BpPi%J$WeqgEgb>PNYjqV zlv%4x%;M6er)s9O42|Iuc^24r@gfV@x2+u}rf8S#vdhQ%n+-{z6JQbP=+%e-IW_?? z^%MEF;1R|E{ZHcJ6`FL;01oKH{!yBTJ4_9V;VsgjUonqGbO0s(?B8Qxv?KJ2DtcB} z$vc8ctCynO$PnnPO2I5D?V?9wR}2Ww0L1e<+ET3z(C?+0LsfLi#=u1xY{Ay!M7!qT zTEG!SECTD>reh#9x1$nF6T)@9yjD~;$0%(qbPG8gnJy}_I41Zt$HhIvMMr6mmoEEj zKMM-WZk=0HK61)PvzR*hcA131E>R55taqf#g4-)9(x7A)^#7eCK#-li<&T{p5AH?b z$9G{Lk3`#`{E;uJR069?OOpVsVj_PbrRGVu|~!g zeoI#DT#;Ys6JjsUC)|~?7tj`=2IX`~b?$~hY;AC{V@SarBh;Egx%#ulLAh&6ZVeD* z#2089r4ClsQqCdx+nI%PCiv4eB`4OHwOLix+i6|fT#u@keS2HHw46=<1Ikdpq#q(v z*7(6BW)<v)K|eN_c5Wbs^E3_tN@7-mnf9% z9~`H|Ra!|Aakj2Fx1az3!_txqEQ0dydgMDZRmVHi9%D%;A2@;kBYFKBWtjn>47!{g zett#>9nsb&H)8P+R&gu4A@L5Z`aRe*D7iqJhJL0^=8m?&4m2iOCbk_xzX)(wNCS&G zP!>J^Xn7@J@=@f=SW+KRY%t^ZKM6k_+#6fr!o998_yPJj^mAsvtw;0i(x%SB`Gi7l zSadkx$lqEGs-w3K$&_)IkHm^zJ$)IC6gIwm;#1=MagXG$V6Z=!XHxAwhHNo}(E-$5 z$u2&>Dc^N5670~_6@1zB2VumF?xI7JfR!TItiz1c1eS4CcBLhNihux)=}$XaNGf3Ki8F z=Qc*@>H`_~mUvlfQE!7e(pPi#ip0CK>^(;GK>(FZ)T6uL^t&ro5`b4g`ek?WcFXWX zd%V=q_LZC{P?#sWW0yKrmcv8zfc`c(vL0QK( zzlld=D+jvylEYSbkoqP4W7w3$LdGYuUIOFm^p?dpbqVP3d7iBcSqa>85Z_0| zJLD)~@^cvIXosJ9c8~C}e!<>YD0UA`rGUlbfg<#y2{FRomkW$N$wMCT6&VtSPelXg zB)0_xS&Sq<$xu0v&0bas<_*f45xXBe#lC2+>EvGNvX=MgRK&`2M~c0ac}`mrxZj;I zgG&9EspUM&feLdhNa`e}`KBG>nY}eKhI`Lk*9ex_VgyhqVQ&Uw)oJ0KAYiYD5FQg& z{A4WbaMq1m7NWE$*=K1W_#7cf_VSUNIb1QQo>+v35gC@b1B3{otfA)BwW=5!9DVpB zT_I~naNHQ%{t1}eZtq#RSMkyqYN4QlTFdn8z*1 zeo@GvWyTc+rV}V~v$`lQofSH?@EGs*MDTw4JY;SD@C6o!Ts3@MWX#0e>1h^V9LX&q zXWw~4 ztSOM!NVI7MsXu-bEy!j(NbM80aD$eRn~yvmZzPR|0#bN!-#~GNl`2R#@JM^d`HjJC zc4JPl%K_ws;KRf?GNQp=@K|MBXg&u0gzf<450;mVN)f&&3r73`Pbi0AO2BG1EMxT% zBSkYX& z__vqfmi$^_)nGuI9v90YqdV}f(xKqG{q2nV^o*9UASlUOE8HXT2(|J~{g z_RL_*gj!hBgP22?OV!YN|7@T_k+};)plD%JoPwEg$&n;ADpqE*>}FmAl@-!L{WrRH zZ%;{R=h8!t*x71Z0{J8*{ut@M!n|sm-kJTQ5#nY?Oc?s-3!Ii$=r0YA1?`0{5xo;b zJ`i|5SQZ^h zH4gZEv}Cxc48G(0pa1+(`aikPHewGH^~+kdqL~?zp$mQMVRs;`_^+BQ8#F7~0HVRptYBCA(Kto=O0l_%X)j z87!QQCUs8CyIB)HS&O^zg+4iSV52A>FDkR}S(>9wEVt%9Ax$0cu)c9aZL*b$OYq+l zy>T$HX3xoX^kS2TOG;mhCQuA+uvrB0N2JK~2Y#8xc-&iD?L)sCXy;MZIgs}CJ@HEL zFT-9IH;8^1+bBJkhZjmx^e!|l8-E)Gf!hZy*6=C&7~SFUxC73+cBMe(rOL0wz8iKl~+?C`Fwu zgr`Zed_b(E5E1h~ckqmx9a@cij25cS3}jaA>w;LY{03tlc`QnYdMa^3K0Z4UnA-}! z3I`lA;(wh?#ogWs)9OzP@xsOKc50wco8JNTT z#+*StYxv%Rat7H6Z6G%bsd!tiWo}<=YsfF2=v=$>D@Bv)jt>t91yB|n*ENc3|uZC{@jd>Ql zjjY%^=#6@YO7aSV_5=)*-c}`Sip|>I9(x?}snkNbFRffqrxVd4tv}E>L%5g^9P~9~ zy^aDeL490@quLW2Mn$9L?@eGOIOKYX7WRBVt(xtrIFba z6M5Onk$)uEz_9w-M)r-5Gsgl3aBuF(+hzZ2iFddU`17u$Z!yFSs;D!nYG=}HA_gOM zb-znTr+t*PHZ3tkK6Bk?pB)mgS5{xCQ{Ly=iQo=BAA^sL;>y%=7vRd) zdQg#P>uFK#R_=V;o`kWLaDA0?Ry?E*#yuJRu3d&NDT5@vAu8puh;VMC37nK#jH-rEgGT@sz8`R0?R*$P}i zY=ps(i%ECmX;_Er96#Bw&$fT*7t6UIPk5tK+J}}g!`OB4nlg+;;zG4al_Dj48%!gA zSqm#k4H=N{lO%m=fYi`4CLZ?CR!^k#_!u#)xD=e_ zPUy1b+e4``h))MK;h<6dkB!$F48;T4pmR9do`px{p=k}C&y~ZM4|SZr(+5Zhew7?% zQ6wBAm&5KkwQ-fh&EFXG#Yh~K#3Fv{<%1uo!psw5<_O99Z>OUgW$U@yhM15q5HGo~ zKU96~10|f};H@RlOP}NHRK|Y*xFBPo`t^g(vdpzWy1kNrnR+2!16<+pEl}mL{u(={ z`V^^RLyf3(S0xz#fr3X@+#cS)nkH?EMm-kP3;s&4Z5aUr2}5l00ey#|Zf30Rr#Kev zw%G?Lrcemqjv3Z%KobJJ;-j#Hd(0|91{){O7m09^ml zXR>0}o(XSKW!nB|vw}KrOOkd&Om&jqMA0dj&ZuOGNjq08!h4uC-1(dsT7{&R=Nz#k z%kcDinszMj8*+%gz7Tw1#0UJNApiQ9qPH^B##C`BR7ZS-v5u~hO5lGe9+|I;1FF-q zSB*Z<%&3Xq@!+v77qvF@Wq)(rctOdM=w`D5!Vy)!c5{l9Tb>`Ls_xpHnO2JBK4O{! zF!vXa`dc7?FsKeC9PN&&|ncG}4Q{d%-RL z7+nJFRFX3u`itZP)GpD7JZF*{&dO(JQ8}vO*V%Bt z;2OR+cL)ut-p)GyU6Ni?P=C>0%6*Alqdh|({VvzkN8so`H4Mku`om-MEg8w@IuDMU zEc^KP2CCT%8_LYf_Oyz0Z`QE%aHe5&E39K_0>s{SE$0ItGv)Cb`Nu{$QkC?fhKEU~ z;=XGai=d8blh{gYULi1JU87{_`yQ_OEt{CXXn2@qd>->&8myXSe-{vfF(xYQU#d~3 z4}SXSys?ivDx8Q}!+xu%b>GOYxqHhRb3JX_&Dg^Ov@0-HmF1PReY76tZ8GuMV768L zoc4#LP*3~?!Al)kpJ3|#xW3dq@feiKrY1oP3&k6)?ZixM*H$^<2OP7m&HMafe#~R~ zOG3oEK0@NY+$7a4Qsl|rlA&3aoghcf`POT~Cq_%{r%3*iK5^8SRmrb1i>gf21!2!Z zc3@I*oqY}m0>pBcPs7$sH{%6y7-q@9HuOCBXD;)JK}9d-tsPqEsQ>A?{9Gl@kNwEN z3@Dg9kGZqYfGc5^;rJa@EgX^DL`JXb`UXl5D$HhFOJh~so~IR6&eHVsu7cpjV&r?$ z{+YI{Oo7hgxzteeVXG>Nr8YFTi*zvam**kU`;3V^DOdodpS%1_1VgwtzLhL^hBlzD%cje!?3CK91U_ziKMBVA6G+Xfon-m_{%aeAY9 zobu&peOTd+o{GRd18Txk=Nq?_&aL=#pv#x8NU{y?UDca*a#}L;O}L$EI;e6c(hIj# zT>u%TWq7qV>8mTU!f!?RBO_XEyP)6~$jQ!*p09-{-`&`k!V;H#0ZNd}PEys6TczWN z3hdqt$ghHrGxJ$|muUN7`{v^bBCnA8ar7i--n+%dSCJb`|KV(w4HcGmzS2K$0y*Ew zEdl+xN(aaWMl~0=!+$uFt=f&_9ZbBm@AY;z?y7QruKa6`bTQx5bLrj^>D>&pPTxu{ zepKZQ{tw5aSHpn<6dn=mQ58_dio(CtG)OUh9%U}fM9 zVnkWKcf4>ji82>{?!Te*B_6Bfj?07Uj>PN>^PcuZ&)9o}`n1nOvd`=Ll@#2Z2tc>& z!Ng2ncDw_aZj+w*>X`2BaKpj7i%)iNlWn>qPc|6X`-V-lX?C`O_OWmd%nc;yJP=JtANIcTjG|*0iFC<)9MoHhk)E6O z?3_rIyyKK++Lv$wNLAs^pmab%Ba$Vsmk;PSm^CAcg@U0;w9h4;N2xQI*U5H+=KI@^ z+OcHkJnm8t+=1Iw`PHYl7cJnZ3TB-A3NTHl5NTCF-=Yc-8p?b2j zFUz?*_qWv*dY-7glN&}jw461cG}<6?mG&#tJDL6dlGuaJyygGM32R(*<0=$ZuYE8j z9$|#mIfu7pb#cQy?JL#Zq17_RvjG_w?#AP_8%&+%z56PK)z^hZn5mr)x}AHJvrmvK zW*sSKb$$Z)mF-wPQqzd&6u*61z6-%q#_`i^C*hjRLRIEmOc*u%GGVB$|MK+>?5v7! zN#o78*1+hlYpLd)NP2DGQrNN%-2KdJLM!O3X9pvGH5a#J0D8BWbJ(zieOM8`tW)iN z0-5L2w!UuK8bvjk#XX%%=!6X2_?}*a-YCa7T`O6g6TK|QfAU62cxxb7q z4}8>QSSs!#%b)zS#H15r^qQnNrg8=_e)oV=gLP01ORC;hFSz{ndFvW+N5N(YgOPlr z8@Y}E#eu_JEJRA1=e2Y0`E~&gA&-RtqTEWNuk02!Z7FeYmYbpUvI_49+2eYwVODVa z%G^)hsh4HU8kDW<35HAd08qxmd6mw$yTFKLmm=_TtUDrRy?|FM7kFdT*8&V~wfHuf zDqR#@iK5AQbPN}EPafwi@urh(Ya889)DD*JjSw}iYF7o3M9H0G1}A(Lmq+}v2kcos zFI@!b{6;`2ZdUASHnf4gE6BGStgT@Ne4{XBV71Ibs&9mc%hLQmj=95Lg9q8$g#Ocy zViLFjHC^2lM^We$&mS#Ix-a|L~U4Ky={=I_W;{=!dvU1UP zx1+S#oo$WVMD%AkXXlfM^a<9r&TK%}iw0d>S1guo;N`1fpB4lCQG>Ry_4roqks~%c z{cjd!I~d8mgVJ#ntn0t^c-B<&%Q#~`_xphOOIm+EVZmw&XA;*`qF-QVy`4SpJ9SIv zT1lGutSaE!GkR@u)A8CSv1nlJd&Wd6P*965-O0Z#x6C*U)vl-(pfm0$e%l}3s>+n2 zTW+RM0A}!HV<}snnaqNu;I9&*6SMyL37BpJy*QaC1*`UHYl8P3x$rtO8rtGbNYmXI ztTBkIsih$OR;4$l3swVUGKRMgPjRGt+TbKVS?;ZuyeK_I4StlubGI^EFs3goNd9fN zi|s!4rOKAs$g)+DU;X9dvXit)agru&!Ci@<^Mbjn{0LDb|0 zcGoNd84l*@y4Ma-n!f1YEpfRpU{0+aE%O<4={IVPcE%Q*yH1uKXXyV`vaV|AVT&<) zwCuy-otV(>7EEl06$cGyztflA90g|||MvowzN}K4afS^NcHLS!c2w5!vXj-AF1Bz` z!GQ$oS=+cqO<2`^c(~#7-mznWa?jmfDd|sa>Ru5Ol&3-jb2gbRXFP_bKp}aeWW5}` zkfbI(Tj61C6ZWi7;h{CfODp9vdTKT7m7(Rne32(YtzQBkugI;?DBn~LnD|$)TboSs z#s;Tz>In}$+;Trq=vQP_06g=j?_tNkBlW8d0Mz(Q&ictkF(P{7B|yv+o=n|0AOp5* z6&99PIo?=|ZG-@QTf{ywzT)?E+28fmxc5rHidb3>>DZaRGg_o8=RAHSg%AX74WN%I;+QQ*OTTIld(*nl1#L zFWv7ZOL2SyNGJ?0F>t8w)P|gj6Q9LkP}0YBzrVExby5ArP+w4@aVdhk+LiD!Oq#3A zxBG*6ODWO8x`lnDprN~tQ~tv=Ki%n)=$`P~0xP*z519qI=SCz|4bTU|Lpq0JK-Qby zZj^ai-vB7pe_A3IUa9REa{PZnnOE_@0F;3B7!8fhlO3sgqvE*X&C>%O z9$V}EFY75Hi}1e7O_dB+3%x)$SHy}4DBH8(o{yEgSn}*_BfD2h zHRVdj&S3+Uxx17p4s*Q2oWtbYb8ZmNWqTB?4xiEOj3#Vb#%RLEwdG4el~Z5vM+4 zdf&L$%R4QX{0hN}@>G`9ts3%4zC3!9!QSSW(@z5qDg^)yz?UjX-_lNa?K6Z5-?ZnD zK=$*HEbdLKOiVWAwf;Hftv{E>^)F8M9!Fv_GphwU{UisnvX2=Y1A;LPwHgfU9AhzQ z9c?BqOBB5}rPLG{TJJ7e4vz-()lQ!Gd~IcBIHqBbqv?%p7SB2#5ET{`xu?tB*%0bZ z-)jH4j2hJO3%Mnj>mEi8_ksr}%kFnfoMNhlSE_Eus3hlSyG?kAg-!qPe21|siFVRN zR{jOt$u;_r7XCnHyGR1E@p8)=?HLZa? zT-$Vf%b<;8bT6n@UPa`%IEG@hBkwV*=|u&Z*?}2>wWsJ|ed1Wipl&d^_nbf6w5m$m(}vnsa~32@}YKOX@Dty#PSS z+`)0`-v20PDe`tc81=T0gPP2U+gUfI6VyHzRD!p5exIf_~W{ zrBpM@GTm{s*0gXommof-`^d1RfS{c9+ju)t^OZ`X!gy4NVTU&m|QQT=toI$fD?~COaElen#{}L~9i2;KYA90I1f9l=gde;Mzvb0#& zEIds5Uc2$wu{in8Zcr@LJWdA*bj0Wd{bLjH2lWpx;nKsU!1!Y^W7E|SmMd6wmU^cO zUfLO|N8Lq9El!v^m7X}3?qf-)Xz6jI`@0g8SCPjWd)ubMExtgt3~K5@KfOcbb?m|0{)bV(~`5I8BKw zVmNEt8+xODj!%3K)4KE+O=n-5pX(SzgYGpM#-|}ieG%ysraSy(@k;Cfx{C|B6Zea9 z>#R{6v+A;FZyLf&5}whM>oDqRh8CHmW$Ur+!AOVl;X2#)t#pUi8V$~HU53xD*Q0)w z{FbVhl4QbA^VNOJ#`XC|o5P_048$T=s=hsUrzRnL$G6JxJ3TPe?j8!2r(e4uD-bkc9^G`>1&ZhK$z4@3S*G+}6)pmDp1L zgQU|c0-a15{h-Z|pc#h=Mzzrb5c$Ut3wq#oO~>kAB?d>nZ4PqIc;VvfRB;OK~ z{SUq^>9wdl)q6+OXYrdgEC0WcYR8n?vcLBq%4HS%O)E}^cNfpp5?YV)4=S|*en0;2 z!{-=^oJ!W^TVj;#Z*V9T*Wvdm)+&lnl9p(NZ#g^pusw5T$X!GOGDHQkClCJnX_v|W zV2}*v#FtRkW2{0?c1NOS)_`|jI4zXv!LF3vAD z11Z93O_A@KB`1$eMztT9dFf7laynv3#6trA4?JY?k_7vytyLnWK~3c-kJHm#}25x1P*b2P32R)oJEeG%LK&4apwpXwlfGp5e0{8h||^VQ$1>Ck9=|I1XJV)qe7jICE} zbpqd07`}oexGi5fdH0|nIsj!=)IE9601sy|P|Qruwp>D*M&O^nSypK3O6AutnLQH{ zBwOk(Xin$kUAOJ=^ReHu_f?cOTEGrAIE+JQs0s(qq>h}-JS!fqkF@qJ{z>)BWrXK6 z_BYZ{r80tpgqZVFA@tZJna&i3*Uc*dL6XU4;q=op(8G>?yGR<20puky&rgjO>IaR$ z1+wDFR-@+kWjoQ&=>7wz>n^(U0@rB@=jNIGri!KJQE|9On{(HACv?S9R+(*aU-gZ{ zAzFFkg@cr9)RVuN-*}kI2bv7KUV?8b_FeO#2m7#XM!uXJt*JJU^}NM)z?plZ|5zp_)c2fvxNNigVIce< z+u$p|5Tot%{=n%BCiX^JL}Of2!u+M-=uY4c_Mgd0mve!Nq)S!(i!FHrn&FgbMeuaE zXk{;C(}{kM_=P4mjq|MbxA!aGKLHX>6b^T;nq!LTKQz30xx>dkb@V}+)#;47nsrEX zL1*Kt&M{-a7p1F7{{4^v72$F(#2xG`#&4i1&^TXWl$VJyJ7V6D=q|^@ns;=*JF`M5 zyni(_XUseyk3Qk&a5f@BO=9FpL1uKm2bN1(i#gtawnpck7mi<=Qm-3~Cl_~m-*`~u za5nM}T)+rt2^Xt+2cb9}BVoIBVWcW4DNTiO(=NdqT;3Uy_nWQkjoztZ;#ojK=Nm!{ z#cS%Q?xW@^BCh>*URdm#YGCooHOSW-VvS1TZ_oGFsW{jm+aDh9wcO+aAY)CUU!Q7V{I!EQPlh+TOr>2AXDNXgwUE%*aytn_I<4D zw|x<4fEdj7c+P%lq+OEzC;zZt_}zH_?{f6eD|Ck5nS2%7dF2n>BOOa}7g)tYWb!p` zBk^1d>D$NDAr~hRX_oSvi4>=bQ*$yiH_tREDL#$N{gR>r{`9Inb?dM-15XKG8XG>G z_?i?RFnm6DP%Cp^r3EQM=2Kb|Om=RwgdTHC_59|06zm=T55RQ;4ZpbN4S|g zr2A^->dc6mW}**T{ng4LG=!*b_)%0CtD1Vb^5+9hQDcez)!!{7BG(;7?d-?RUVX^!5q!@c*>t?8~2OPr)5?CIUw?L)o zg^>o_z(^fcY7@NL-CjwhQ}Ra2urXmDv|)RM8J2YpxTnE?>j2%(C&;HywCd?#oR>;bi0LuCHq3m4tKUsF$3Vnc*h1_A3dSR#xvCA8@H2~=foJk1 z2WwdK0f4<>mX()MVAsDiWcOH~BdqcYo_s0z=M__8iTjLY!?LLviFtF1lIl9#2*FL^ z<3q03C+g#&o=8`_gf+qa(+yj9c6VH(T8V&$?_Q-g1e(_{?EY1=3T_icdjd%0U2WEy z()f8*9D6HbbFBE^;+z6Pyv2WNtWFtt$Y`#(K~?SQbjW#Q;nUL{^*HxKD`w2hnMK(Z z0O||3f5xne`+)s@1s`t29Xg^X*C9d@zK`fxKa+NPF7Rz+=b~gR)wv}X4umd5bD$Rx zIvzL-ah%PDTXtrfW?aMLp0fUNgdT6;7GsD%E|q=sE(AKdxRdR?1i=PIZw6}p&m&~0 zao>9?=A|f4s7=vQE|Ydn#(QuzH^E{y2);KR<-Ke+t zV^f}K15=e+O)D)+UBx2d6FIKOw*nqw+RQ7HH0ECcBa_^Z?qFFnNazIfp0z+i@~BpS z(NIg(eL$2u*rU%b3}l#p;oUn5)ozsQ)0p!5iC}$$BLNBX$T(-hyHAzZ8m$+x>OKQ5 z`uI>UdS++Ync%?I@&DSMnVAndRwd1eA63xE6dGCt7O%+t?q&MWEC#yY`(x&v8V(r-03W>tTh^Fa zxn2dZ%SU)dt&|%*37+2gy2gkFlcpAIkZpQbei?}v4aaoaT(&jh!(QT(f^59zasuqf zNsf(Y5nf3Fqvz5(xvE`iJ65dVDFw?-*SE9i@&?#D#mx9i@P5M7cM{(M9YL1!yp?!e z4aCC90+UM`X6ep?L6Bz~f+ReFsI6j#B?uCe4PB9@(3(^A{yvr#S+1^Alf{^9@p+lG~l3* zXZB|YPZ`K)KV&INXwCRzy}`83*S8H%c_~Drw2PA=Z$13`Anu-*V#ikZR=bCbFH;Zs zc>8u;P*5h_CW&%yAMy^Cn%olQ@J~(NH%ye8XJVao8m#KMq?dAm4deEq!O~;vf0OC_ zQ_M_*3TFvZ!z@)dH$e0Nsww)C+Q|#ky)AZ*K4QwaeELnd56*9-mlGhhT9vZIyDImP z5fy=-`^%%{2Z2jRPHCu#sfZ9H-e|M=viVGNKCm(X_tF5IWzl5R zsiW~cd;!&0{ij{rDtq;7xEjhE8n4w(PM{4INTy<@B_{SF66N)`ooo12ULbp{A1DWG zUg}<(D+S^s@#*Q(2A z40-6UmU_G*Ig-`ED%lULcA1YDu8A*LEk!vm`)Orml^cG{Lrd2$GTvRr8eht*jbjD6 z_k6&$tZGhFHnsQ$2D)jKi})}kCS{MP&vTr-9etO&a9#p-JCI&0Etvn3-MP1L5+`l= zQK6cyH&$n%Q_h_&d!w?@KtK7AAG2|zesL~J$_W{2hHn8BUWQiiy_%hZAeO1-xR-6n z@_G|gn_X%=jAgpKkMffzH>laQE@u|SVg;JtQ~Ei+)NkZSp%vjh@c5Gp8Mpn*?hp5_ z%T+4O4d;=>AY3^2;OO^2`($g=O#m3!0UlN@q!;)WC@sx?BJcCLRG!sImcB@wev((MW;+C={^2cli`m7x|K|2 znFCLZ&f$7s_v?zt{d9p2R(NHfS@3dg>3vo6aKYmghrq#Ovv5?dE)j(KVK;BG;zUje z1p|oADzaUb>OD5-u-1*qPbYk0;rzo5lte$8>hCue{jO_btywYavE>hKd-3NnZ&y{{AA=8xOCNW=b ze22Vw&{yt-J*X>uH0S?6h{RqAK-TSAnwJvg(_RhxPXig{UtG&OyE{=2R&KTcZ6{`P zoS8m1^%Nc1(Ng4CUyf%hX`9`WS*%b{@#`Yz4Asy}xDYH;K`9bCGWxEc)eIC^>K8+E z8s!f&h)s_4m==L0^Y9iVGj6I0fYNA8(RjFfU&ZjNE&S=ufu8p=g0gllK5By7byVFc zkw}cnn3u&3^w?LeBy>Z?MV&oc`1ZzYkHQjQ+Wqo2qvk#>CfJHV-)QyHa>G^~iPyL- z<wFygQ}#G0B#6`$HLrTOZqCPyd@l$9Zm?kqpk+&%oBUga z7DTD01w)MiqnoW1f^KT zr5Lr7j6&5I-)NzkjHQ|5s$~f~yR(~T9qpKVuj&S_J$x0H6-u_N@;p#=BD#D2j3xBv z^#h<&j+8mesdBi&^Vj*c3>loF7F2xUoAz$9bx&gBV$BCzZge zaK@X4#8omYFl1QiKc@?1B#=W0y)k;pzky$7Hpr3u5P>qVAqqktm9%grXZ6 z8*{*GVcwq8=6DHNLB3ZFwwBGQb(t}G=`eoYtB6NLO-xR+w20eNRW-~wRMq1!5~CrlUbWu zdo&WIeARsRadklNrw0q29rJu4R#Xalb?&z(I_@qO?1~gElArNy#*4*ZCaRt>@_=)V ziX_>^T#TYOMn2hcXZ_9QhvOdur&+f|ITKkyIQt^_F&4_SnW^&FDqd>{W>2jlS{Jv5 zBX$By_SR`Jg=U0sspr%}WFk zFW#y%9VT>W%qPt8)GeRXAWdHjU8`M{@=2pL5iyICaF^H%9BQ>eK*#OyrU=uGTLprX zmavKrzX>~in)$GYXakA|-Xm)~6o@QnZ44L1>Y{*Qk7xw{BZPE!Y?0p4dPa1B$4T1O zY9>QQz}z@S9W)*&zq}4ar7|ds;1gM2gK1_3weYNc6V+upKJEdpnnZjh+85R8-UBUg zaVx0I{Tha?Yyysyz_G0!&6O9_a!b{Ft?#sM8}ew>43T6d+NIjPJRb?yRb@sY`BQ^s zBMi+lZ;eqN(?F}e|KJz?4;J`OEd5-kpPq9A7LIMvtTogwi81lGLS;#6(MZ%l0H*I_ z2la$V=#PZjS96UmSRGl)d9|MOAyD9W6xGy;Oj_y=Y^?Xz8m$S}LVmK1ofC)}OCTWH zjaAuA><#qpHQ31?fBW5>WedH{PxI#Zu1a&9EB$!IEJ^UR;*u+@&GfJO0DjwPeCX0m zl{}+X=#`@xRPLS$o6mvxUyzBBEWcb?o8n>x+ZuoO14ruD!x1Nuu=0tI3>Tg`+#K~*ERqt#}hA{A)jh7bb zn^VLy@rEs}C#HgK4lCjs5Pe~Ydsu8Mdm0$dn}1T_d{LCC(l-}#`~XYDj401?{y@`Q zn3QSV^%E%FFQ;s-kc^Jpee!VS;#R;Ss`zb%}yrt8UYXp;S1FF*pP zw{NlOG;-$3t_OY(NSB?F*+7`3ahM-fD4a?b3M2i9EmuXQy$uoR@N`#{OrQ|>6T(Ks z8BxKKu!+=H9p9}Aa<}C+6Z|IkPDlK>Fhg;+IDmYIE zRaF3eh4Z!+ZesX4e`a&IX|)2Wtk*5pFwJl2S|WAFtae(p9IW(|FY9&mgwFeUu z-aX0a1&J>9tqolQe*1@^cl6MzxuhFmzKlRf&CWHaInPxrF-u;2^4P(A{nj(ix2_{% zIjjd4`VK~aV+sp>^%*2s>{V&3!i{9tVqjM}E(0S&gj5})a2J57p`9xV(3TEM zzwz39tMXo`!g`+Ty|xAfV`Nn$XO&^rxgBgP++OJ>r$i@1g7M!^TPkn5rkXF=FISHr{0f>E!5v(97PA$MSH#x<(Z3t{wG zYJpC`?**tyt~RGp{k&)s<~-X_3jp1fCs@DJ*kBbiC(t?v<32Yo4DPDUGj*-n3S^9_ zm%Xgj&UR)NlW~^S7#KRbLN%x6{~Hw*!yk8AsC&YFSRvkH8r2n##}D5Q(gk#?c@BrWPi?iesf%_t<=BRyHkbErcl& zeCgLtdn7ZoGKO3Q0yRf5)Nw-vCX0UU__ zd0N7(DWjXVq$LD8eSgY?3M^S&9~j?wD}uGf!<8u^*FO6R?oX(PL)1{EeFSg#eiuY~ z{x#A%Gcb1Y!kT#{tQi-A?@)i*x;yqy-(fN8-;2LLHA~I>MOnFTd|glB?b(tbb^b+j zPtG#OFD;8PeJW0^$}ZYn#n#I#!J%DHK8rt`xL!|y*P9QodLFRlGq+QQtN{Gl2q}(R zxcXpX6}e7WJg_eSiv2X3~Zva-bYs3zi`Z-59ceK&-pCh$} zS3#bZOI*&jL1`RT?>Si55<)i=u&Q#5f19rq&#i3{e-78rNf+e>M-72{Qm0=c zWZ7?z;uQ#Lk^WzJbt>(&fyR?9w3oPc+@}}==t@&$V({c9W^JefbO;XR;W}2QINcAA z@R1_eEbtTqw^AGaM9CmRgLi15l#U=+Kb1Q0E4)c|<5t)VUY+f51#Gq#A+f><{Jd@z z*-0d?m+kBTPI1cCh8Kpx6N20s;FR!nh9+Qmk}CRYsvc|;}OEZ$cqy?!a!^9G|ngR6(0ZT!@1UNH`wf=O*hDaojd2+ zFoeH4L9@eo>{uilv6|tL(B-+Azw2zLI zTJ*HS-o3sx-RpO_7`_DVeR*nm?w~_9>xZF3XSTuoi;2)&>FP}SoH;#`w8|yvUf5-p zclz7X+sTRcu=0JVaS+`NQHfxUC!8J3PJ^9;OxAI{JLJ_ zTsEn(%=FLl6SdK)&(v}oS)#3Z3(};H+9}E(taHmxi2GjX(qA*g2c8YN#-HBdCo_=I z6gFQPi34ft?dFNPr+a6B7TcLY>XbDGZ{y3JSwx61*!dlbHZMGrx`nb><6vSCthV4% zKeKs9BDWR#Nm$w(vf`JEcF))vGNzhFbFEC4j|jJb%j3ZkOK&}}+Bj+7YTU-8`o_3t zPmvp|Hk-vG)%ww6u{MG@xsYB?Be&X4ZOn>?mS6gzz!*GIN#n`5)xBW2f=RtTf9%$r zbp>dxNB6`C-pDTdT>WW6!qbZ&BNS*+rBN`L;2gvdL*D~LPc%Sy=2|?`u&;Rz?zGP% zju*+Nz;qmIeu-m3jm3vC79>TtPnn1|#dXp9>C#KX2(H`*+310-31;*dF3%eb#ULuV zTR8=-Ujru4*`x&yXZXvOH{hE`7yk^05+xP$rrS{>ZBtF%I9tZ)VFW5k@}b} z;kx_6QSKo;pV*+C^tZ(~pl`U=k~crpvlcchTuZgHdT@zw0XEXl5z%tbmhD)3R-ZLa z;ho+!nvbSwar5YiPXSn&53*)XiBWA*Jzi;ZfdDP2-Nx0*3PB!CS7dYy3tpI@fCN}5 zgy{N><4xDE_)OMF^8zIek060{9p>EpG0Rfn@s7wB9#erQGs6oZ6Bk^&K{P)osJEQE zb5M7ACMwZlwkQq#;;ptt2YCTJ58z5P>a5QDm=r8lH3XBc!sXO4Q^VDK$Z&^_mpD*#0k3$p!kqs<}Ft0r3~>2o#ioyS+{g0OU- z9i9+%$UFUKq3@P;d0$!Sy7<@XXp3b?RHChz@^9}0L*=_(hc`}C1Xxz@*bAIH< zxODSR)u(<=vw)TDhukqC#SFB^13GFotky>Tgz#e%Gwl-nPQkPVi`3Yw&7fPclO;26 zj}BbM3SvccUB^sr>K|;`Vo^_m4Px6BD>!*9MU<+4_`0pAryD;UEFSzVSX|_cND+a? zjKS+28de2LLB=beA4EltvGbi<&G@rpTdZu)txp;7RmW8Txp7V~Q<4K0jsYG6r?%tQT64D7M4hJH zM`8L)Fry_O4;VdjRi50$foY}f_a$RYI@{k>=l8~j&SI54Z??(qnfH4R-e6-W8mNDb&`|yEEtikt8CB66eq_s8=dUn}MNBr>Ylwo;GQZDnJ zn(+l8JLucSESXSZob9_oq{Tes)}ZbLja6}do6hcoTMocOZtXVeauL16Q@?kj4f7@i zGi19z*N*Z8UvEeWkK<0CQ|5h*_^HdX9*IZ%Go$OUAXb;K-+*mtLb^RIdd5wGlzwEp z4$0DYx|hb8jZ~FfI)@7PlJ!A?`uhEZgG!sv^q`_SoK*oUx!k^Ix1*dr|O`1N+%Re3OGl`<2#BK(_u zKiO=K{M3idG*%~LX~i>U4V|s)18I+elY&6@k5*t39w-lPp*G$~G>t(Gz-!w z!g?B64HIsYr__M>@Ct4W6`7CW6Z+~jtH@*{xYOjtvoMV@;lM}WF062{N)uSf7*YdX z1$9)dl9_?al6>wzo6>OTUvo1`fnPyfNrabZTVlt4xZV?tj#ci0is0|(hBK1O`U0oC z-o;xBBMI0+!PhCgh8laAak|umoJ6sSg#I;ZiJj5qUz!TWE+uG5nFwFZN^dlR*Ugi{ zLz_cjmtxnH4Oo(bu} z!3F#Td{?m?`m;H%A{$}Y?FHPPJ-c3T1IduwzAOAJNB{X6WGSVGan+^9g6<+_WP5)o zb}E8C3)8)miR#>x5N`L1-Cru{UxU*jcgcg&C@c56XP82}J}O!t^+mB3rJW#mN65RL ztRsj+tpQ=Tl{bk>89pA@fMJwKAp4Hr6^44k7ix4SE$r5Dt6f-oA%}f>A6J}rPboYU z{2ALQj9xjKX0TACFb|ynN1YT|+6v&wKyd~CaO&6-OspyLJ+;rdiZ>c{wKZU7w-2wL zSPJ}B^EY(3QF+c2Gw=R`5LwEPq!^b(mKjIrcIvl7zn`9Oiwy3VR%Ym5+&1$+HFtJ% zE?^@%*(AmMdUBO*jV^XK6}XWjExPfWB5%R(dv3z{MF&0$w>QFECns@|!_@@O19W+r z0^YVeUPEZF#Mljc1g@6lh4HNo8Sv-KLB^IvzDXXToA8Rv< z^UgWn@|9Od#-A&-*$dO9G0{TPYnQCDzGF@saS-vpFv-~PfsJlzu5-U!lDClVi!OS z*fIn_hAR$jzuYyDhPS%JRZ2H^berQUfG|=f zOd+I{0CSIZ0?;wsC_k{@H2PFfm@L|XI|rZD6<8|-m&lS+SSNS}LCyy2g;{Y`j?rDe zudSvcg$MQy5gwhV!dxYN*VsRh`-j3HL%Tj=Z$TNnl!Hm-&}?05x{D1@VFk#pN;K${ zH|x8DLTt^U2I1v;6fLD^`PsD*$EM)oTTe!yt8U+XCMC-|Cda>-H-j8^oKuY&bPm&SqR6K9)lu3Be=tk~pOsX1D|0M>N$Xkfj zP}U_0yyVx>i*@b`;R?gTPW49+;;2F1fAPq$xQYf0vM`FSm;J);eqc5~6n%^rbeQ~3en|}- zEi_ZkU%Q}vKLLZCmf_$6E=IVOVO*!fEXVrf%oegZBSmTYwF{E0Q1vpfdvpU<p60s{@PYf`dxEA{};$8ZJnPPhv`bqTYW>L%n{fDH)OX&p|)S75ae&NiyG})YlJtnlJ6?hbV zglq$EX#PAMp1`DMN$co|%Jqf7hcMg_hCf+PXcN25)Ni`Cg7W`MnD`Q-#0s5v*V&7G zqT+KioMjusDdh&K(f852j-!f+gP9qb3%sZz?!%s~-+diYf4%7~5`>aPp7CV_zL9jPzX782SNQ9t;I{g^jNYo@py{*Tt4$!3LBgye}kMovZ_^o7>|_ zK$9!#;&xYi4fwiSmhGy5TMwvjT65RJu8lB?zyb|G5_DIrLLQfq5df*%cpG=zw)^<9 z6V^^CFIw3ygA z-aN$XMz!IKwb9VENXh#Tp-BuJG|p1qk}gys4xR(4M)@{-Pz4a}KpT?2_QY5hG)@z%{q;FOyEwRD(@fw2gP-TSHqrul z$Kvqb`<;L8Qe>@vYqya=Pva_EI81>_Lx0|1%pP6pjUX)o7K&qQOegE|6mY*I&C>40 zO{hk$|It?Kl7=vXxg#+1Y9Aj@71|naNy>9?rU?*_)w^FtPJ~4i6I*qU?W*kx0cB#R zQ)Zfh=W=H@SyQhEF4P@lymxQiS_^v!azl~3tMv7^?qz|;UuMpEvgN0Bu;! zA`|7PMyRK{E|5iJPaB?UUH)p<4k85`p?t5Zmel6T>^WC!iR#F zYm3n8tuLn&);$r?v#W>bVo@{h&Q_-%tZvuF;dRd}HOsRMG1Bcbw#qB{p`I7yX-`Es z6X&mapUjn#&}mlg@a7w~ZBQ;cIn(|4t^O_1aZ^iix=e%p*!)^uMz?aGlMx?lPnZ1M z{vboz^M-Huvkfp~+G2-Vtab+M>dP#-Xn`PSo*DR-2J6*y^1P@|@7vhG@~u(Lu?69& zU|29bC>UCtjyuK@;E6+-yJVL252wcJCMc;Fw|eFh7t9V1JOuex;XSdTBL9_CMQ7!oLQ0d9#k$?bFB9}U@*CQ8N&jxCik`MmkpOE|_ z{a?n?)E7>XDtbZbh~!uR zw|-LYUR@38fs)wpURNEzzhoog-OX?6pxX{io^l?Qf_pB0ZjvmlITb`ZR2c!S-?iul ztJnRZnyEpwz07U1-0r!Y2X||<`Gj;T1dZOtnkcWo`K)HU(x}r`>YnZuA7OLnt*cdU znVu^rHvl!W?ONlUkR`Wdi8ZxQCI%?^*;Xy}+cfC4<&~y+iFg%k<4FvU5ID zuPr7yvSuG0N!OXRU0!l}xBf=7Yf^0qr8wBRR@e~ufa9u0em^p_pzEBT4W>NEEE8Sw zzi6SKRBD5i17F0$hl5ca+BiI6Jb{`p%X}~@J8)w}yHPX*Y9t<&M%_Z}FAwG3#L;VD zltwS@B+~}7j14o370hd2AH!m_T)z8yw6x>T7-wZ;V!CgvrkCh2X{f%jss4U!UHpfR zSmPfy8t1xh^y?!YDl>%sp(i=@UJZ>}v;~!-G$oVyoAWv!wViE{{a+@Z2aG|F+F%H7 zlWs{AQQ{aYeANgp zTt-0+-K2&;>dtA?UzuhSs|)6xOAq;qn{B-ERMJA%C##|TRK4JM<*m1_Gkvew%P*bM z%{52+;(*e-tfb8pedOIF7Tn!!h?VV(NGd~AGzd8vZ7){3WWuOYMK;S%8f{_~+t<~G zca`tEi96WnJo81apDaEro{E>X%kb+uPA;q0xyqqr$<|bl+KgtPu|&9g3EUZMfG6It z49LyYdaRyV;;oi6h@NSnSEl;9S<1$zQ3vgZ$j&@cZ^kD6QfhRZpw~ZktP<&MTQldJ zN6zfPmg&4vS>ngkrmQ>&(0i?eW}TY+A-p0=#mq`fO8D1nv4=)YB1{gKs`eNlJO|9u z&yvwo1n$|NwezRMv+H#>5NLe-E$YWr+TOLyXQ#41%J*nQn2c^GuF5d#&*fm{$vj-W zyK$fn@6Wyn(e=#bK4W5jl%Hdpj_C#D4?jG7rW%+T;M#dAl?+`U1KrpiDz0W zwc;mDNZlUfq(ULt$#b)PU*FdS(?-4yzNxPJsHZh#M7fF}A(&l1!*sUdhbKsLFp7@9 z9oP$@Fzt=EX<=OfFGwuS`*~T633;gd0R9LB$_#u&La~e&MJE#D3-=Fz{R6Ak7NUCOzDWZWF<8xtN90@f z^SRAE&;&P|O5M>@6R{zT1AsS-zYLUOoNct(J&kZS;ek&>LNw&xs(Y|cW=w;$j;Ga3 z&v?)Yy-i{IX>t(lCAP<%k<}t?fD>z`C55HNVvme?P2HJHlqlR^nX&Pr1*rT<*V=m9 zLWxR!b@NrKe>!*tPJg=E zxKA=X;s_{IVtri+w)t+kJ07w>?(*tLytQm*S@c$f8GLD1p8>I&{ZrZYppE}h>+=DB z)2KI-DNL`E43|R%j+<H(r5LkXgC-yk53D?t1I)Y*+7&bX76KA{QZ~3_dj9T0~ zYU6GSpJ%@rb+&!H`RN^(OoR-VsCV6M%N&dkWNiX7e=F_>R>urv1O^7E;`YPzTpJzJ z51xVNRUM&pEE**Wbd2B2^s@+{sj(TurkO!IOD;ywbv<{o7e&5{ckGxyZxQ$U)XVnIWK$uRq50L3!S&)_ z9CD;?N%=j3q^9z9XF-Bk+A&SDB|?hjR3K)(Bnfh2qL-plUz3cQ0HYQuQ%T zADU*EI6l%{T_W7h6hSgFQPu$yY2+xKCu0XD&q-c}1UbbCpZ8fa5!pwEdv?d@CNtLl zfb5n-%9VC>b!Wx(kq0!+u+AsPq*oxNsV`jkhSP`tH;+==Fet;H5uWn zcG;;J@tLqaU4iT=%QM{&QxcI_eTp~oMm({#{E_k$`9b;(OM^;1{T1IQTN$EmxAK&g z>w_xcy|L*lY8yS?g^X*_f{rsGvg`5QUqx|f^XnBC3@R@diPFEYqiF#42kKw~+C69M zz2Mc0$%aia`nGANJsWA&_5-bxHA+ycn^suz2U3J#vz)T+p%ty^At^Gs3FT}(K3NmM zUDax4uavn*I)6W)g56$L)!(t!3uvnJK#NW=MV@h0KH9mV1g1M5VFu#SBD z^Uf@rO4T+C9<3_wCEjZ2*a`);rR6hZLZ44;wmDADo{vRW7EGH+4xQCG?6~ToV<;9c zo5>9rm07RVb_|hn+g5WOjGdW6?NkAHx9E72#{N8!rcvjo-(c!4dt+VACC=}oEg4RnnDjlOOualnO;h72qOBe<&n)GSvIh{iRJ{Yw0Z5h$I7ib zE30-R5%RI{Q2h_1gh$jqUGt<)%;wZ3Aq!4@wk&iGik(K9jO49o&VDKf;GZf$SbX~`o+hDj z8C)1gTn+2X+}Y=TO!jzWrTskK_EjT;ld4pt!+qh=>(W2m5T5}1WV+A3I(dvJtIJ~{H+?d)Qy=Jt zl1m3Rt!F68;X8ewX*+ddW0TI$*5fo!S{(!h8~UZkSNRN7KW~pc52dYLA;dV_fD1M0 zQ!wvaJA0AMG0s+*kY0UM_K9KDF2MKs?&wED8ICW zkP%OZxD&MsuY2;No@nVR<{*zm8-Nq=XIsy~ZKWIoZPI$@-P&nw#1!x8A;EcH)6~jR zQ?1^fvY%yVY;9iO`&qK~`o_nCk2fSGQsEBL4uLj67xMi2uH8t`&Q?f{t{429)~)j= zd$jtrOaN~XH3bTk#Cc;Bca1~f>o!*Bd3`8ov)E_(r`qNXyf8W9VDi8wUB!Lcbx0yy-1Es@`^Co-L>B?}+TS z53GY|ZX^(xik%nyE(T#Qzc@dSuUE@MLV!7WHwo2GF1{H5I5|S074VnH60K{d|H@3s zizfPt^vER1b@kmnQ~}RG2Daow;YXJgV(U?Mo{ja<+mq#sU&iH)0U=B=)4py#`~F;* zkNHYVdyY63juKzrO+MLFepyu;qaUpoEw~nFe0A`>d0w^7Y*w8gCMLT~dnvfk^+Ng| zggNh_%yoF&`nx20^H;S>)nUHk!LQ`^8K{a<(H~crlqs|n6m=lekezZmLo(VEZc=Qr zW>qp%#fTr^1qKkKkr#890wME$Z7$?G(Jc}3kL}^3x^hFs6;YQtkFTfQz{vdUh>=*Y zj`sfDd+TXcLoa;DC3L-+0L*xD)yf?Hetj0mXD$#Hh;{f04drt>;ug=c(RE6_lskS~X7L)8|;{JJgzXzHpxw8I4 zg!twkG!f0om(xw%!?8E~1+~@X4_8dC`Ex4RJnoVPrd4NW&SH45j2ibUhUMM$sPdWd zqsp)^WSa7O|M2wmC_DCeW0eTbU2ysmvqdi!q)gR>rS(jfGn;p7>T)N93Fb3aervOn z1Lqdem{vCzSX5PU`Vu|18UbVy0N> zlMCmDn{RzD8hvGIDHI5m06Of%hY$94);1ZKkJGl8G5XJ@)n(;ltuf}{go}7@SK0W6 zpwRi>#%}B*<(H}%S<2fcZEcJ+LK~S14fq0WRouCi)JLa_ytfLOb&q`0h}V=(NNg(H zh;(|9n%ew9IvI&}7hIH`O0o7Pq?OO+6XZSn`rd=Dog!h)?+UiRa>&%S?|r56)hnAs z4k}n0d_~B1RKl;izEHV;?P7I?(h6Q5pWyp2E8nvDRxbLvX}Up3HJ;>v=$P-YS6RWk z7a*KnYm|G&8C>s3VCem3L|&Cc(as-7QDsQNM1jdXDk8rUU%JP~p)ufcad=#mch8D| zaLTe$|G|N~?!3?rvdQ6!PTfN)E>8%uW!y-DW~)}6-9ksIeWdqtvTua{w)ffo`$lob zTTDo(mQ*j>#%xUEbMbuh_j#lH1g+_|)SfTyuCD-)*_e^+aG25DLxkS(i0hoc#T~>W zdNYhqRYd!GRw#ybOp#0F&EQCFBP7e45~!_ig5v4yZBfJfKFf6O`SXO%0PLE(mEQ$3 z%il4vbX`zIgeELE5Nuw+M0ue}hlX(tFQgo7zxHJSK6+2fri7Lo-r%{JU)oDeEw3p> znf?mI+v|2@;R)MCp&r&@8_(*SjLzwT{S2YoLSm_+;xh^LIm@JBO6TVHIR0LG?7C z9l>wg^M|@<*DKN!9~R=Rz2opVndZ4!@`I;ePHG%25aA4$I-s6hee(U2akVO333^qz zRUP*mY*cT5o~JIkoR^@%2vo4C_DXn0CO@4c!_Jmp1JNO+7VtAPm)CJS+5Q zl=_9wc`xC&G!@_Zj!B@qt$7OMU)Drm+IT+uS7H{$y{ot|j3pNBr$I;gA5~{n0q2iWzYGQeEyybJdIPRpiNsz}qhU%TP9o z$vrFJ8bw}v`O~tgKUCw2dY%um4ey^~9(xu$(4t!n^B$j$aFkU)9zva8&GwgVIg1O> zx5DSBT@f+KXbvo#%XID-?5T{P6EfIi8NjzV_+E=X$>4{{rYdPF7h~!4exseefQKUe z;*FWUH(Uv_4O@{L&Kb1fhGC7Fab{~PHJ3S-#G5JO5^Z6+KzV!1UQ(1DSN*iQH}~r5 zoNq*SjQoUYz%Wa0AG;nCEIbut5JWQa=z%$hHCL=0R?`npw~URfATHw`nXh8bPEUlz zoD-6h6@`0j85KWSYMw>MOg1?luwG3)kHiTh0Gq29jfttZ`aiSaLk$M3))d>% z4nY!-a^3PWW?)C**$>ju(mgS-(Etw%&>Eye>5#5zP``_O#nH}IDgD~YrvMloa(dMC zDd+Qpr{_wbkEXRJmO}4dxtr%Ry7qN3d&i-cwYX^lgi%C&3Os-H2uLS1Dv1 zi`88!FLvuCl$4&6FR+|?|D>a^w`Wr8H(KMB5qrl$exa~q+wz(cvgN#<9l07ZEMI55 zBA8a7<3H; zf9PcXb$KG;Pp#xP+#517hS>>QKEC?4BH^B8o;gO*u`xMQS~}6vjN94Si&|yu#zXdt z-1Y}gol2nXNdn-O-5<@|K{rufIk<%H4@#BAqy28mC}=xPDP1$aB!J-*v^BRk&o$ zdfGGkR4jg{!zlXIij&8@$$2qX)}mK{@t%lpswL#_@y)phhVe!^HwWB>YhyJ(k{(Ey z);W&YPd9Qz_ij__sYV`+4cp2)&H$6iVXakIMTLA92gc%obekwo%6^fc4 z79~*|zrRj^=uW)bFiJlLb0Z_9J)qPT;j& zikvi{I*X&J3LKBMK)(x&zp5L_4mo{N7TxmPp2Ko;bhaM3Ac|nOIHVezA8-KF z1dCz_BdK2*M#WV4_VFDlI8#wT3VNI~nx`P)ZSU$9eMQ?}u!^GUawpT-3R(Wh_;)D9vkhVm~#}m`u#;7y- zL5lncaYG%o9NxYp+dW3s@Zl%ErLPGE-?)QSru`I*;-1mcOJhk+7KxS?5?4Q#i3N}Q z#j?C^f&NQW%h>S{`%Dx)b00klHHhH}G&gLofVC8IgqE>Kb+cp_xiBg@CbXUrOEnbS zlBGkw|E{9dAL(+#@H{Y^?BHh{E!ERi=T)p@!$C)Fz4hXK<_ur&+qcX7chB#p4~&hy z1)Rq-v8?$1J0U&RA!5Bd@F23^E+*-BjAgOb*Fl8n9-$&bb^4%l=4xqDz3Xujl3Fiu zH=IlPI$*OX{gFboNiRQDT;?-g|AFJBHK?3Ot@W>Vg*B0eq!@4T+#~7@#O+%4*ey`a z-SE03%05zndiv*WoTg&9Ix%^k$%yM5Gw5%p?z`Q2t6QXn_}^p8MIpI^iK-UAB|@xg z^6kMd!5V8mKH?i0!*%-Nfp%uJJL5o^N|>QE7u$_XVAQ z=wes*VN8NCMN zVqeyVZMZjjyhvS^Mo|URYo0${aZtb?hIKBcad9*|t+i?*GJ->o zgPlf&i~6YO8PUHXE}T8{$Um`!c7H_2k8t{KRW>q{?(9J<9VCA5yz2+&2_vnU4)fe(i#9_96)1bmY8U1g&9aTQRUc#8ndN@BZC-RtHu z)S)$?P`_hZZ6?2L7c35_oVAef6&=wY_(~z1QP1!zECd2qg-_{ z-DO+tb;Vq+*Oz=ZB1UE){D4e<_@R?`pM8BKy3%JYH+&f>6n>y2$hW-SMFPh++l?-$ ze9U>9kNsoN0Pe@OTA0y12nkjqJB*8!ZI-yp9En_Pd(&>#akmJr=^71lE&ypxG!{Sj z*;b5pl#MV?^f^+14caQzym#;D@Q((XeZL*g)k?9s&JsLb;!Dnzih85c;Ii_?Mp`s> zk);{eUl`{N#r;8?4b75wKweO_l~>0Frp#&;My`iTxm)d0YLJrYnEd%!+xvWCk+sBd zq^GSM{=sO?IeQnpB$?{Kk7jhCbIPIb8i?6?E$1Y|L`$ z*~0o+n)H3?#$$V-P4wq}w}g;K`@tLcaK80tR`|E&#O627u$83yEamAh+&;*+C8}zj zkd+-cLnv@6xp5@Juq&*-p8f~p(R&BzAFqyFMN;ZbhOk|khdhaYmUua7p3e9hd1uKv ztte89C8`B^rf3<0$v@=y-1FMBxNj1kRiz47Xpl%4%De*ju}k5G!-rt(E zaiYUoC$IXjTQitSb^!cc)(+--CU)%a%pj<73@RKUUv5$p)G~V*;^A3ctCCwKHCB8y zY4U?B@5KC-qdp!b&!b>g*^{Mf!9H6R_skFbszU~~t!pN|V%#QQOG^56U9l$FfO}(J zow|j&WAw4s+zyB`-~O;tz>y}_#88$`(faB>Q!lvgFF3a1zVG6yzQmqs@j}XitS(Gd zK7)zY1!q%$)V!B)r^TJZU&W4r#d!PbMIVBEheezo5Hsue(wS~JH74lMuxu^kTZto0 ztw~`O>$GBpApx+;TcCAuCq9-X43T9`(of+Wm~M^C%mUI8gf$-nqViI`hA+0j-0vo- z0cB>6wRa;``0A00T~I8_k4~BXoTwq=)PcOH(%F-V5wq>9FmI>QDB%gf3|iE{l34Oo zHTFD8wo}smWN*%y873*ZBC+Ls)j?b<6f)^?OJuw1Z1_qdi7>R$?Mt)rYBE9IGLVL^ z6&gxTJnEU9Ozf0#Fmk}&n_kn#ox=&zu4djVvPj46m24z`aCMActZ++hT9PucGI|_- zqaZ@~`$7Db-%@Yc12$oXon{*(&5#Fj+s98?s%KY+>OlNG-^T{Nka8caffc+^nNx%Y z!^S;Q8r+6)QuDr^vCspll?9-a_X>^NvP+(q;EtVksJEYfTkPA8+lc$!4(xqLvJnaS z-+7&~Eg!XV9PLSrn!je{PLjM=_~#qff*0FU-)Mn9m+sICG&Pr#xJRkz$zXw`+$U9h zI7Cxpjx?l4^o5Gg=_HVO>DhGUm(=lYp{j#6rDttDrc8Z){>9ddeN&Pi+KVW#sBm!V zDdSiyFoo^Ddn{IoNKUlh%dSo#{KnQ0fvGQ?yueemt#J)p_HN+AN!g8CN)m^U-D(); zddhlO$hRk6v1E4M9_Ok$Os7DCwXv_F5ab3Of;ihT^jz|1&lQEZr z0C4A-*oWN&J|MGF{4?a7&7W+yZb6R}duZ^fP;|3+(t~ZvXzhimu;hBFW_Rpe>x8W{ zJY^IL4Qm8~za`1mDme?YtmHV_sh?jVUAgg&vrP75#l_`H7n z2f3(O$2YlhElf1%3TCzA>=qapFkga=w628s zXqMzY>#zGUUUd@w-yO8(Pj7BheCIx$EaNRG;L$FJp+RYR=?TZ5P@u=Vgm4KQ@y>htik`osTCgvIrH%Qk%G+t_N5mePWF|D&VVY~|XF$J$>(d?u8k zKd&b}YB0HT`wdd2V?FTq9m7Jx7UB#fK5dlMAu?Jvzp*cT5@Kd9j&lvndT zZp!cxAKZ=Mw>ktyra+cTXd9A^i3Wr#(E|mYzW>8gvxFzM!b-lvey0@E`mE%@Z?gcX z;ln>tn|)zuVOLeW`_rFtx$;uEU+mpXB$$6e|4@;s0F_Ar_6~Nl(tobys7$sM7Fd`s^dB)FD51jGJq49cAox}T!F`# z(q!dvMv{#wz=TAgrFuG4GNFb~9vqn!^BF3c_1+ipKYg9`rx?kW!?07TS>fYG zg<4h@c4;=l6~5H)Rn&aYjm~p8Z*y>fHa+d)sJdid=fj`ovLVxWOCQr#ts80IAT|We zNeI;Kmc|IS|kBR{`SpV|BIp%C<^ zn0Kp>jzVl&^NYm*JK1WX$jOWURDnPJ`CZA8^b@)97d_<=BLWA9C+&Vo!izuJ3kF%s z8G>)GBu!cMi#G>r9?1wS{3Cbz88TQ(bjLeAI}xI`)9N01_aDdw7r5iQE=6CD2dx7g z`7QYi0HodvGx$W11|oggfq(I7(({5IAFY5)SZX)n<#F&FDg`(duzNQEG50DSHy8y7 zA~A=GZ~vF!0m=n)^9WyPt^*DZGK#JXu{+Z^PaOxGKBr*HT~afaAT24`kB#cWj`1*Q2^}<}h&TA@JnA zdz>TT9XnSYJP*LWOGdAEXc@&8*U*0v->*06Ff<|39T5mz6@Tg1QVmT14PF2olaWlC zBI`61kd)~^MZNTQqTZQQdMVN+RP8c&Zs)4~{}J+kg#1gBsaiVTO;;vU*1-#2KMHGK zJQ04Cszgk~c$ozlo$y-;EVOx@Uz z9MV!FsLj6qu9jyjml26T6#VJiownvuW==E#RQ%Sz(O!l~21(rF9oX&dPG|+pMiJQ) zvGv=I?L_`4$xB!J_1jj?-$Qg5^4$66bM z($q%$If20_uLh`zWY2cJZbV}hac6>@;_tiu)_1681BVFWU-e`j!{HN@J+>;ZVUWIx zI}g=zX^->wY($5E)p8=_qT;-~#ipbL&fU3oc$*rMA@{is@5YML ze%y(gQ6XEJ&Q;VQ@9a7aEhs9iH-ROEhlgvZm&S6wo1Zh>5ja2$)FD#sebP^Xd>!vnd}_B^vpEd ze3RjFC)AfRz_p2J>K*3*Yz%5!R}{(5;OCVLHR)FVK)VxP_Sj4@sH3$WE?qqS+D`O+ zhH)F|I7Q^V*_Q*gj3MU5#~cSauo5!S?D#XW^;X~&ka(+ccQdu#`xCM;w+}L|ZO2)V z={76xb1(;mE$MO<B%M6xawd*uBl4f{0ufa@h{maw=|h=3a>Ldwf-UPFk{=tq4Z2hru{h2DjUmtkj0T zxET683>;S=ia1XK2{&SnmNxqHx?7r(X#x>M(2GE`CDtRvGo~Mhba(3q=zJH07~QEL z1E_zn+Wj8z+`fL`vPL7j^nC7rF{{f)_&44 zT`AXP{HRw@Xo5=3m{8vKZrq(aJPcj3S^y@V}blA3Mm#5l-x z3}5*StUtHt|05hs)++G~{GSBa0iN@ee#G0N$el~Blx)m-;#ahpRNqJ~89`dCFoH5v*uuKL+nOJ> zr>~;GkaVX|!ta{PCoE4z9;=-b6SK>{IXz};4JF^;K$38y^( z3cTI$6*DGi3v((^C%0Ut@BY=y_(~asK1-JWHvvW1j;qjVc!T@W74h;mDqm_|@btzW zl#bMf;?vb0zXb4%yE;!-4;5DKb2eu_VO^UZu#vfIi^ijy9d)L8?>Vey{Zs`@Dn#@UH$KlgsXuvT)T*bPS(PBma>-N^-1$$jK6rGE0k@m4Gyy6Ye>*fqWH1V z+;>G4^4m*9#4v(-a;*>Aon2&{|JmQ$)$wO;MxBo*1#{O?hof0iq+02Aw^I;sAbEcu z=6(1@b^_G5L7u{6=<_Xs&EDFz%(f=b1Xmzf2oa!B&9{eX_swrFB2t7Uc99v1lCTC1 z<^Pq*3`p>4RKTEY>mdkpb2)T})WP-KzRfVoaKq0Z1qWEq;ia}a7IPD@7@J=fQ-{xl zW|uRzf#O8lK+9129rTQoHJc#>7)lxV&C(OFQ2NIlRR1(llJ_muYvbNdFm{1~=SAop z0MH7h+w^DIEEbd^b=qh=kzvjdHgi~=vwe& z7K)B_=^4mPV22$*K8QEfkwP>E{HZ&9FF}clABYo{I!3<~`R}qHKYpF43B9M>LzQBe zZioH~7C>6RT&;@p4wp<}X*tl&EVWjPIne%H@}+FJXzL5$kp&^=?+)9)00gaAiYU!i zGUdpYRPEper0Cx&=dbe~c92pj=@+6g*HKOM#&NeCtho?00AN}&^#0bifAIo4&`mY` z7sUEq`9DbLKXCIGnf4z{|9|!X|AXoOe~1&{R51b6X@F|#-jk-NX?We~!Y}4T{hyr3 zo_{bilK)T4%*B83LxTUp4@Iy4IwVKx4Zu?YuPE|X_rGvH|9a;$g~AhWP7dtsR{~o% z_pXTUoCkBb_>XisO}#y+ih>^vvZb?*cXfMl8p+evjzpm&<5a|mJ1#a zTFSD1;D7t|0O42v!3Ujb`E>{N9WVXioG@osRm(Tvzb}XMq`>wc8{YYKu|q2CwHv@8 oeeihzFl;2X6kuFI;wn$TmKgY@;@p}jAMj&v<;La0OLkBH7xfKWe*gdg literal 0 HcmV?d00001 diff --git a/src/Themes/data/light/index.ts b/src/Themes/data/light/index.ts index fc8b4b0b0..7755efb70 100644 --- a/src/Themes/data/light/index.ts +++ b/src/Themes/data/light/index.ts @@ -1,9 +1,12 @@ import { IPredefinedTheme } from "../../Themes"; +import img1 from "./screenshot.png"; export const Theme: IPredefinedTheme = { name: "Light", + description: "Cobbled Together Light Theme", credit: "matt", reference: "https://discord.com/channels/415207508303544321/921991895230611466/926114005456658432", + screenshot: img1, colors: { primarylight: "#535353", primary: "#1A1A1A", diff --git a/src/Themes/data/light/screenshot.png b/src/Themes/data/light/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..3f03552d7a10fd635d669edcc60de1828921a266 GIT binary patch literal 122924 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%0A)98;N;{SJ_UJ^Wp?*u{6^&kKobrx1Z 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

GAEP6du`jIs$x2%pd4{jS*k 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%0ALO5wUkWk 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 literal 0 HcmV?d00001 diff --git a/src/Themes/data/mayukai-dark/index.ts b/src/Themes/data/mayukai-dark/index.ts index 95b9ea491..427c8f971 100644 --- a/src/Themes/data/mayukai-dark/index.ts +++ b/src/Themes/data/mayukai-dark/index.ts @@ -1,10 +1,12 @@ import { IPredefinedTheme } from "../../Themes"; +import img1 from "./screenshot.png"; export const Theme: IPredefinedTheme = { name: "Mayukai Dark", description: "Mayukai Dark-esque", credit: "Festive Noire", reference: "https://discord.com/channels/415207508303544321/921991895230611466/922037502334889994", + screenshot: img1, colors: { primarylight: "#DDDFC5", primary: "#CDCFB6", diff --git a/src/Themes/data/mayukai-dark/screenshot.png b/src/Themes/data/mayukai-dark/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3040dced601b6cee255abdf9df6e7c9cf381d6 GIT binary patch literal 121361 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

c@to$y9^I*YRIQeQmgzS|n>oa)WE~kHltC{spGL zXyObr5zR)_4?J1Zuhng@77(${>;#hNj6|qz%e13N5Inr6oV;43U4Lsi!SmAIfOmN_ zU9oh*>KnCw%-(1F&G=?t8%2LVp(PgFb(WOkRneq(Mx}c0Ja$E1Vls z&P;QeCf8FuWrm~6rDmHSf~q=+MhVIASP8;6$5w4@Jp)hiha$NSYzB;%8_K{Nx^E}e zg^<|hL&c9g-W94hnFXA@0l7q2Q=L$a<$5IEC#q)t)Dy}RY3>*G%1Pr193LvgwbR9R z*xN|ylv5Ds7Y5=HF=0b^9`w>uN%O*EP8a`>;qrJ+3G->;bjddwB6x)ghX6@XZybA` z&~|vo9h7o24Lg_AIst}cqUDeBvJ-O6l}_eT4K-W$H(9@2@xK6`TnV_Au9tHcTw}zN zY?JA?pAN1D)t71jX(5zw2g&>CVe?bVtZ+tY2Vxn*m))tn|EbO;>!mdy)MX5QyzBwO zaU&f&-WmWO40g-4$Q=k8iKP{`Xr@qQOM<>0zalxp+i&d>$Wtz5K1U`cb0#seAUeV-P-c-fCjHGP{=GGXIu1w$#aG3P3#r>+Coz z58TrG%#cDg6rs(sW+&*0?`Cp}fwJ?%X!*R2%k_r5f@PTws~1lwZb zL6092nl<)gEvfp>M9_2QL}4#1nu~f*PM>w?Gg&H`UPggRlM#uqSgxmI=ahL@JyVo{ zbU3qq&R^tCNu@$HCkr`Vy_$S3AA$*4LLU8#fm{siER3J=DCzrXl66$LrXfzZ7DOO! zR_J)D;mDw-hZmdWPY>xPF*d7wjx&EjyWZyb&55Rna$ zMGJ}^Hr7i6UQJ>vzGVmJe<@@%Hfqk)4Ug%IQyi9;-Rl!>zJKm-cytRlk_rnNiL2N}f zQyIs8uRWAF#Jua?Lb7Nn_%^Wem>R0%5PAU{WW1pp!nl9%-Bg*wm4&9fLo6lB@NXcq`Ko8kEe!o#09WJe=?U_43Q4hiHK6Upn&y2-c(=C0E| z=tlnyH*8lRwRG$1`NZdXTrQ67LGa?^L`9l<)Y8!Qp`METJf34XULVOM`A$M0pn8R~ zEYSF;YsmnEjAPp}xllrdmXg7wBWJ|Wmx%H7%}NW&CYJf$BL=h`WYXYOE&5Bnp(JJA zoN@zU#>8+{i|K91J#u>0HD^Wc`Hk$(`E_%e z_CSZ7DO@qZhY)0*i|bAdN6lA`GLGBx<=_7x|7Dd8 z^d69vZ(l8LMWQ^X{DV=Rr8?DmOYyrHCFWLu>JAhmyi%(3d=O+zUMPC(QjdFZ*$=)h z!@7|~DWo|OvInlVRXOLouh#=L8#LdPMUq6$3$dp|0|av)0dKfS3c3HTBZmhZm#onRZ1W8fdq&$tBgTAfwnbH>CjHE}-p~@YLF7+ zVRDnZr)@j~uQq+RoKq}T_Xbp1QPjluggWwhq;Ni3bjPeu6z-Jc*?HmiB2k;^vm~$T zlAO{}r{464kJ{TGwzJ zvt2vr%3%w5?Mb|3{i!upnF1Cr=e>4uz>>K_Kh&#rcfcsGx48d?@u0x4|5$X9?btjN z69C%Y(`4E85G>HwTdjP`QZ4UPuqD z^q9n*+(NIXPS#e;W@^Ts_0=mw3D4I`CQU_1)|hrW53k-Gr|zvojb|rK*zIMECUsls z%Bl85<5j_8C)&9jzd$5&&$92>Y-=ektb^@@#K^K zYF7~f2a!9x@4b`}>6&@=inwgU4j&r}ThF9D9p{I22WjQ z&hE(>(6vV0*6r~;Ou5~1cSRQadBZ|1Ks{#u`F64{+= z-CFS2uKdEKXnYU=_HE|Vh_D}Tb=<;Je%K>y{o^#ycg@Reycf(N0igLbAhum=CE@@t zdFRQW>y*7r@XJ2*3LWO%1Gm`f$j_9Blvo zIwGbO0=O#^x&X&>@qx;(4oQS)U$Oh<&LnNX0I_%uSl#k335?%$a!^DiRbmU+aTEi< zDgHdNLDr87${_^&aV@x91cH(ZMEsT^VtNN~Mi=Dk`A+VnN*$YNlbzN-YZx$ z1~w}?W&gM*%~2#G%Xpi9Ddsf^A#oum4v>=rK*IOuam7MiuqOHRw(!NXMngGwX7^x< z>dK&{w}_jHn(e^;!~dA-yGtE*`u3ygQ}qf`wiP z%N1-ywb3og-t@zZ{eH%t8TY<0z;_8YUjr6j(R7?^oDDpSKMx3@tH!!-0J?pJr`M$rx|;0i^uO^ z*$&^fyP;OcEk5ux!;UE0!eHI!Or+*L94vDU9T>-gH2NCuS&@$Z*8*pBfV{~3t$g{g z>+3Rxo1HwQbEQQ+SO}5^(8FQZXnMHjH;P8&CN?9&ah}1dwTo{X-ZU6BJmGZ3r9|hk z!WYvsqun!x$Q0Aqj53nj(t}S5+C0GU$X#}BqJ4McPBRh;zr72xRNz$5~2502$qD{MeBdk*2E>v7?z|S4C z4Q!GxvOoKxyALsjzg`{>l*L#X#|;$VsnssX#juN)gCP|>lqa^$?;3=)>K+P}XeRsL zyd3N(Txu5E->2-sEV+2aQea4cn1#>7_oOgQh?&RmKN}A~28?kExV5gp7IM$SH7EW# zh8wSQe8vJ>bFF4G*VUY=b12swW&$zpvfbW?)L1M|@&(o%mj=6S zx-G58WnU1(W!r6UcuB_I0K(=TzV~V>q(#GaMFK&~Q^&eGFFXt2#LYNt!4S>?ApOY; zc|0LJx-w8A&RE-Z@H4bdFcwb%szmzh8k28pewfubG zi%dJ>5_w>{L$xo^Cl^{`-G6H^>yOUn6$`Xr&4;8-A`!Cc4mKMCu6Lw*_DmhK3Q~DJ zl%N|3-!ixffLquSER6a`2)EkUp(TZ(ZRf^sl6@?FwEl!5!I~Ql`NB1pVo2jbd`g8` z$Hn`1URyR~QCAwC&0c7!&+io7c8OFS2`>*fN zoq@`DHuS4d?Q?Oqx}%DWN*$4iuDgzXgH+;)fA^JK(EsOILLj-k&7iQuL7R1|$Q)f* z_ernTA*V*8Lv%<$n3D78*lBT`NhxR&C*qs_@-nFIrYIK z1K)x^O+FvGjZy+LiHF%h3cQBX4QdIXHG9A-wwhX>X2p8m6#i-1$7&Ej=$jZ6-1>o= z=%}ngb+sJ*Yf&K1rzGdSrPFgu#|;+uMka4MiC>5jswqS(KWr||1hgkF_c~g!xYZ#N zh?+hxuoh8z%&E*cnxm%Xp#_v$1z}c0uP20yL=V3ROmb|t{Pc4KqUwF6Ail83DfPbS}N<={WimdADMoTUp{j>+5nK=V`A=I9zdH0Ff zfEc&*5wG4&u`H9k96T`}3A=)DG;;Xm+dBMC#V)=4P6apH=Iu6iN@5~pa_g{OLNy3E zT`4}Fw9djAz-D!r{L-#nC6{U*uQu@kZEYG9Yj+Mh<-y@J_jvQo&WNaB9f-2!Q18L5 zi6psXa!3%4SniEc&~kG(Qn3AET$=Y{T7pLWE__>2$c!ao zD2PvNnK(ntBN`Buj#mzkvxTU;VVgQTRBuU1h_Xc)toNRa%huzD2|Z!KQg zdhB|~iXvQaJVH<|>rorbAB;`YXc}OyGB)32Skn>!Y`Hmv%c$_794v|>HxRwCrGbC> zwoqAb7AkwF58M4YOX6OO>sG8Up9A(e%uVyQi(i%{10rNv6w=HPgJ;(+>S`n^Xk zZzpnNFfEi2e5HsNuY@AMs)n{W{$uHSrvd5b~mjQ~!e4X42C2uYl? z1%Q>$`~@GKJyt?}4c#?yUGT|GYNX2mRm)qGctNV$F_0ACwbyFW+sH0x;86jAmpa_Lh*sp8|2zufnA7!k|VZn`W!j5Qm} zZCCG}mVdb6OWKSC%~1;P9o80^R~3-1;6MENx`F}N|8N=bBYpl_y4$97bPDprFC%XM zgse9YclcNZC6|O0f$>=K1O%pJO6ja-qo10B)x?>GnQ>7keK@b|rqvZ|BK^#I$OL4< z#|gSR4NI8l^~)VqoR6vi@ezHohquuwl4;9m`KHb{ODicFfr^^uSKMqc*BYOh@~v6{ z;{;=m*_oXzc#)v|AnwR<{qFukr@z!rCt1Fu1kwXX+D-Gmz61T7l$@%pq$0xk)T~c1 zcHJ!Bzg}P{r8F;Qo0hP%!jcIZ9XxTGO1*hNcgxnQpl~B>_9KHp(*z*MakQ~5c|03Z zM`%e}cjP-|JHd%kf+f9+kuhd``2u+>NvqVzOO^q=6Fnv!m=0QGIjTD3Q^OaCbuvu5 zmgMKcp)+xK3mKI}Kzm{ex}7xA{GQF$-c-0CD9&f57l3w>)J z^dOaNCD{m9?w`1><}iH5LVMT2WQ2K&POTblQW1_{8l&|HSf3&I_!}v_4!)RzAs1)% zWFiOsNIed>qjbYQ3{H?R#vGljxyn-@oOst(^dDL}P3?dc<@HP`#Wb8DJ|*n^l|FZF zUGwJC{7$}2=WUNY`^z9cJt)dHEBVIr58+n1UL@iHAI7~a?-?F^<1Z)69F;suJ}5S* zTWs)a5sgR``e49&IV$2D^UdS>x-563inJpZWO^f!Z581ZH@qa@Y#Zh@E`BCJOR10E z?$D$7@?gStYLa-#s?|mntF&Erpi+pY>Aqm%SW;yh=E7is%_(eEQ^Bs`+!)S@zxt2+ zU4so^_RFH-5S7!c!8FB@s76nMSA6~Fb+bwz^iCSD(S@dsMa<<+nC#7=UmBUw>9@|0KG`l_)#nfr?3Nl&x@ zM~xk;DT-&Uc-PnU8Sof83%TRApjC9Q_w@Jfs+~T*r1mCKdH$g(I+?zji_SDSeA~nO zc=T5z%%W9)biK(FVCClVo(Bsz$GGH1(P(e%bw~TXD8j9a#@sA`7a+H!yM^0kZ1=(Z zSIYIw`jB}GMvGH4KXsx!eBp@_ z;q+LWv-3W&h^|v-5@djAvTo&#iIS4SqX;?q!R$WV7g?`Ff>U9*-Do2>ac)UJ6#WPR zQzrABs8+V7s6Nrb?1p%9!V~i(;)su-hb+t`v!MyR;GukG1@ZP%`{ad}(;wA}#_Uuu zjY*bOZ)NRo_G}&|>*at+-4B#I0q%zVQ8z9c0hO1%(sct%Z7o(9xh_;kweWLRH%mn; z?~|ETmyk10>|QAU-Q<~OV&V8TA1zdaF>V(FjmezecGp|(KlkE_r9QE)JrIgUj#x*tT7wTyD<&h;-@67eTkP=iOOV5yd zLhEmT^tWW|$W>i+@x)e)OW78LhF7L*2L<7vCE-viD=lU{E~wED|zSB=r{VO_#e8@Q>rxrB;M*F?{(*(<#!|U@)t6 zu5|DwqcG16f<8Z5UXifPMO^i3@vaIl#;F~3ooS*)QT<5?y9l2HjHHC<$Aj*rRGn$x z#aUf}Bocp99E;mPl)U$&ZWrN&2FJ+f{qoP56#e0A@Rk6`8=Z6eUQC3(3OxiEm^OQr zX%8Zv7HfsZrtBhmIm)JYJ%7DGz*pOul)7i&mh6rvFD}R&c|$2-e6yvEheHPvc4>95 ze#g#dDv&0dmU25e3tqy%K|1u8yKMwiZbxP|+9kX&!SD|qX7#ECgUv&Xb~UwsPf5jG z?qjz+P0B+@v53gLB|Lpg^^D?2fkd?Nz{XMSefNr`WKh$ z$Ng_D)_Q%u4ew%5QtF1pSz|I?6UV3{Naoz@#>vl=lMN z{!En8X8pkl&6#9_w9SM$0rD8Z9)>l?76U+Vyzz>irct_73FXV* zmlIC{iH~Xo=f%aUkbN(twUK=%eq6vYBEteeob*cSSQb1yf045yo4?XOi^zW}g)`l#R)zjx52d z4rE_8j86>R{kNH<9+;09%e|vltenxBdh`BbU$6ER2gI--+>}kKIF}#dF*@*w0uSn_ zvx9ywRCtGsosi1gD>I*3i%@!xVO3Kb5pX;MJMi6UtnS@uW zW+$WLuQEnIpfNr5bm*HUEr;-ul)$fHS|N2?OG3KZ6)08*Q>T|`He+5m*DPq2b$eF1 z{%`bnB=#?QwDq)YrFh|j{c{o9>bC+h=3odr1Fxb{e^<>^^gv#;h(&zPjC3IlL*Yjk zKl{zjBD7rbQ8&`Z6Dy`Ob1%y;ox>)UAPn;xD;$b=;T^%FQ*U3c0gw;#+YOvTO8+?! zGk>`0pO~d-dlKt4wHwaCQwG#9_9JnM<*!S5)C41pJ$;Err1p4|hYs3Q?2<4LOON-EiJoNUDO}c#3X`3koPxB4%wrt%SYjB)d?aXBt<%UBu>9E^?S=hH zeaNi_S2YV|qnHk5N*?(BfRc{S`@W@EEfZvV4yOEbPBQk8TUPYKpMF#tzF6Ev!l`~6W@DfcdEQP`thT=$~%s5mMJzcI7xUHxq6u&6ME^k#K{-a?|5qj zpqxxL;P7E-~dFNLG)FbI8ya59e^R*43mg zrT>?_1!)4$WA0_=dqgi7Ygsh}LVHA=C?PXRp8lDoRadnZsZ&pNZbCfP`E2E={D&;; ziUoQl%>u~r?FmkEkNTG!lcfQq^BYuqY`cn$nnGT-XR;#8^?0Cg&VwQl>{l)R!-Z!N z!2pNIDVc+OWBQm9)c0utw^}(q-UPpn*HYBj)i4;$$3g zxTIM$qGb}P2Bhf(9EdP5{^dTv3C3-3JJE%U)xu?6(z*4X??4f(cn_U7MC4lD16Boo zElvP{zq}hr+D?!HsR!GvJCkRdL?f^P8*UuGzBLC4ZgXr^%itUR_st=2+|YGCmaeI$ z{pb6NosOXk!BN3{=n)qrqyEF;m%66L1n390lpeoKy4SVmgeNLJS`m%H;LhXFHI^bL)L(y03h<-29rprdWza{N zeX@Bp>JKORbL4r!n#pZd48IpS$Y^lp|LqARFd`phVL?0MF>Xf_8HfLOSK!yG`HM&b zI|;util2EHa77Z#c|g?of8Ox;cTxXCyrJ9Z@N1~h78CQMEka6bbFSD5m=b>po1u5) zdaF-Yrr9n)Gi>K~Zo|2Ri^pKxs*51>W>!c^At470huYpMUeG8@oFzzxj|B(a5=REW!VgZo4OrWW|EHrBi$)wf5oX3;UzOEe z>TyBd3#}spgFV&I)KM`6%rBpLE-!@Lc}q*|fwA0@9qWO2m09~oE*yO4>hXp@y!)vZ zAmP17QTRO$epOAC!TfmG@P<+x&@1X|EVrDg)F2tp!M7k%XXQYA^85FNk&F<~Y0yog zLonTs&WYLg|Auk@7OYV@wyx&VICzm8}CNhiKZx*xm1xMwVWgoHNs6pu`FKD!^~b5ty#>+V-D{3NMG zf^UXz_Fu^2^RfGz8eQJ6Owr?vM87Whwzlon>SP7@LfiV;dJ8ni27USG(@yZfmIlt1 zzTfxneZy}AV?n!bep^@|4h{iq^-AvS5ml_$Ac(^2owTUW-D`a|^>?5mFw=bbdR}0L zY$_R{V)5ep5*7DFsoVu=@=n~nMMtR9Z1u==+2x2$?+tq>TYf&MlQ%C^Ben6o&AuI@ z9?DxcM?XTm==PMpeiL{h)4oa!POxAUYv@32Pb3 zOc}djhD4o^kTYL(sWSiNmK^k10QLG^o*bj)otGBB6GOuUuF zm!IY)*B@2u)9=gnkjY!L96t0;ZACYnLURX5&Rehp)P2P|-dV{%>6UI;>Fczm z+MD$%4c`#U;R8y?5sPo4DncOczS|33V-<_$^m1nIr)wWixH?T!KKgJ(EF2 z)qV)@a3f);fQ=V1Ok2YgU5Sh8fK+w{(5=aN!zt`>d*^vym%Ya zLwi6@%vyc@-hT=Ve{jPdlrLKvkgZx*EYuQgG!iJ_l!M;Mb{ujXll#a7cv}$sa zmmqf}uu_-0I0p(blnWThudHefl9T!JEl$z1*VVW*So~Bju>2)9zNr#%)&5p%?-w5% zBj+ZeZ+D#xq4|Z;38(+zPbQve0qvrp9M7Kf!xw^D1DEE;L?RgFNU`G$0>V#;7nnDJ z8OipYBFNYw!uqg=xTi?fy%oNj+y8!bd`o$WM8q)-hILYQ11#iVc2Tx_x})YRzS*-; zZMpnTA_3`7=0}#a62-MRFMPhd_$5#^+^-ThE^F&1O6k`rLCUAf>zL)F7C!kTN+5 zg=+qLK6&YNIDVIGW?14FM701xaFeY>#c=WR#1Z4tpp@##Ksg_uyN0XCJ}tzLWfuiS6An0vQdH8(F+`Z1JPA7TIAQx>ed zqd6GvLEA+)uJOWGG{Q?&7nJ)%ESpx({A)zP%L={9mH5p~%zL~R^~?NFr)Ri$wmhC2yMZ#>Nc)aLE> zU4lLO6dbsdUKT!TcO3n}Tx8-s;ltB{DVmYT2v?&T&(o}$_qN0H!V?KrUzz$3yO{ZC zg^|q4Z5)?p3_8V!p)4m6Y={n|a0G!#z70|fGOhj#;~fG16Kw(h<88i00e+)FrhK(t@-PVTL%+M9m(S zSd#c*Cy!-akQ2>uTR9kUZo(|^a;BMo*IPm*JN;DAc&nfPxC!s)( zl-5mYR{clui*>;=3Ge~L2;vXLpW`NdQ~rWkCGYjPwbk5`$1IuDzVp3V(cXy8-2RaKTWlmSN@@X6}6((mw4J9LSenhveHLhdm zutV%;?w3bSI$Eu?r|CAd!L$umg`HnRD{ei2BAPD2o3h8e@Gqr}5}+%P2(XMs4QJrK zX^I`@%odV>vPsdQVmvBUZWPd_^zPu;;@n9!SP!xe^D@1xB^SrhEUMg0Fh)$*rVKbp z4sO=Rz4;iXU82*GUg7O+u~>AuVeodO?yAJ`_$o73%xT255~iFoxWyql1GSmsNBwr2 z!d~R~wuFBxb;wE&0GTidg>yB5a4KQ-jcj|--<2avUx{OtZ*=y&N_Ko(*pPYh*Z`r3 z%nMi3G0!Lq{L*u{Q9JOjI4pf{ksdl>8fhC8O9-G8`6Z5VD(!k$?i*)y1UkDk_Z}pc z^*B_VMEOz<#-m`=9{bYfTt{qOu6!jLia0_q~oS%rfTYC86@V6Yk+3dy<^7ENY-hfz<;#kn^#NLW}@^dA9gQAbBU^NHo zf6#~FT{sWFx{+({f8=`mZP0YSvTAlipiyV6?EMO$RoCBR7YmQk=EW%knQ9bLkEa5- zxX}jq?e2bl+W>z30^1?KXL{hUfRmvf-m|)R;Vad>)>qfg0bAU8d?2m#&2f+S3ulFD zY&nIK9qkT8;lZ!OQY_rSFP^yag^)6qs=Xz6!U%(XD_ONC1mSsk#ph-~8a<47CvDO# z3o%{oK@x~>3|72x01KIKH*us(kYxX35CZX?C)V7MGT!^tx`*|7CpvN`!&v>5+os?K zs_@{x32FTP;mSq%M14*114@)=$}s|+S1qHYa$(?X)tPIGtoyHi@vD)FuKk*2cCHUJpvh^Y&84G6Jrs6*6p&tkXcZoSIyWs@tWlHE(p`W8J%M0y2g(9vpg z|9oCEe(6eDM)%c{W zQPsP-)kA$oJMyoscT4j(?>YdMd_C(UqQRDo(8K@3+na|&*}nhdH%f#QktDP#lSEmw zYZodR`<9TM?Aw^K)l;a1%388yY}v+6JlWSUBZILv82dKN7=G7ieLv6p^Zx65{2a&A z(UbeW?rXo!^L4(?*R`u?V>&@o!OhNodG_zTR%ZgpMTn6!FNu-xC^RT@eQU6vZR&uO z3H-pgChysS_rOil;o^l1-X1Fv72!F3&Hp!;ASlqXUDD2Y_OxEXVPj@F+nEe$)n}*7 zhV`u2GwJyStk}w34~*wB49=}o-@&SJoYBbWz8UVn(wtJ_%}RXLX@OIV;GKMXc3TzC z2{Y&v`Yz2-pWl3Y1m)lM<|xWPwV1`S#g&D-#iL0_#N&XZ@nlwsrGb4SdSlOSvibJ= z+RBhz?$5|Ll<0BqbdC#F(qpYwt$!i1ssCXROW*dqyIgbUJTOO%w#zBB^1i?+k*px! zRj}we-PLW<&9@h`Uz;26UJk13^7~SK7ht?R3>O)3`8Y*Qxy32q-!4r!w3f*@OniRQ zpG?FS!QAcKrKWJ&2gWn~w*>+R(NKFg6n=`{^vCoWKlp~l(0}AK+ON(M?LZYqPYr(t z1$=ereY$@p)}_sjvrP`RDA^8&i}5w?LaLU`rngf&O~qU z!hI?KPYLHox~g0rh#M8B*(QxDx}UwJ35)Opjv1AD*$I8zqm zf1neiNyW&!+g@4tD0fIU$X`7y<$`IJ){-X1y7Uz>TNQO`2nbm1DqoPVvdDr8 z9j5Iv2SoNlmFLdeoF(^Py7CxIR>)e@ zn1y^tea6v{G;C@atp^KI9THod3K*uf7a&fL9fn_9m0l&p5mMq5kMQObipNl=-D9M( zJ+K2#k)lZm4K|sW{*4QPp0E0dt~k`Xa|Jw(%fDE$WA%=d$AFyF^!j4| z`^8o;|6W3#DtN}K4N2;Z$ydT0HP_x6dB|7C2B9w}N3m8yIFDQfya|1nfl=^D$ok_l(XH$KJ_^OaWYaI;<);_7{J{3D_3C!PCZV)FIWkTMRF@t;;KB&^o1)lBO&jD$^ zp0YIbd|;5XdKm3JeGTnLIgXx9DW3`Tzz-u9-X?+W0ASp2yvq07zSR$C0XN4o3LHEr z?||cq>7Oi!{`*M-C~{n+`N;8zd~NC$!GNUal)F}l&ndCU^MS!GO0xp%{# za(-b))%si~>>sn~#h$W>8C+il1GZ%PeBs|u>OrN$X_dC7n*(d8mD7$Px{^zp!&GZOP0p$nsIY1AxM%|Lh#q2X3eob@L$0MZ)p9SG_1#ePT%9R1~XEp z_zAa&6T!q&8C2J6MaH2o@T~AYC|p31pP|621GU;Wq;Ay(d&?ffsG)p2`gOQ*5cmU--z(}up! z&-;TN!2pz|t((mt0459Adw;$%dJ%exFfZTb3wk^j#B#TDK;TryWEmV}9~OUwSN|1! zs;Zi2Fm2fBP$I*O#AX;Av|`?OTMlAWp-tRhn=;0ZrlECAmH<~@sFrM<(^*^+4VaJK?UHdGUEe4LP)y*>tuw+9k*36 zi!;%fDUn*AA1W@IDV4uw(7s`UG;r)X#lOcS{+HJ;4Eme0p0#O4i|>l=q)ny62NW{g}X8 zm_*8<=V1U90OkBy;Nvp7xo~5@9{J5T+kz+u3jO8o&#EQZ^<07sK@JWNEmi_5=%1r- zp2n&`3PKvAV0Rd$KKIG8PIerR(Y#XrjjMXt=Q(FscfcLR8!I~8{_EObF@2IH;A8*o zgL3-=pH)e+I(Lrh(Phxhk&L~IxKA}n(hmX%^y!1|!T6;e#JscMdk_=--~}2G4fD;! zDWl5ha`H#Ag^xr0i2q)F=oPR~Z8u)TCaIS-d{09F`}k5H-0X#zmJiO>CR;2(Mf+T=LY` z(i8RetvfmM*->tc26mpRt1sS6f9?nKhCo!JWu#OQUbql@P3sDEXWEZa4S>EjmWPjuK;F@*wN-x3YTFYHV@Z(~kdcgjY+ z+9R_N%6@Uf#m@Y0m-CL8Nv`Ma4pA8u+RuNqIk35$6Y}7OQn#0HtLpB^qnq=JNG;yZ z!u`fVVd7Cv<1@Sy;CeehSGOhXfvj?lmxAPsr@6Z!_S0ZkIvpT6m#k~*x8E;(fL6(V*bJv1J-5<1Ks zx?c8M7RM4>cZ?cZNk*D^z69ys3$G*kuW|^D{Y<#-kphqr2PRjxkhZ->9oAkuHb+14BcG)^LD9qT-xkK4e6Du zE{X|d4kZ=zy1NeNs+eY)M=rl5RmV=g=NPw{K0Y(b>49TtM&Y5 z-E?@9#8LT@5xP7>64qs*rWN*nDtSlWh`_Ujw9vGv4?f8oE;E0z%UR5bUb^VlA$d;8 zZ=L~VGnSiOm^r<=5S-=h5RQitR&MtdRzB1Vn^246e=v=T@%qfM} zv3pX@@rNlU1*LE0P_w*=1G(>vFO$?+bR6~eJe~}db+E5ldA4F(ywp!jm;t(F5y=SG zFb>Q!&8pEZr$QCI-BHCne1m}3C3RYZr{>zsbTTASWcUG;u~fnbuM+w zZM?HnlsVnGdpRCvvM(}@Ct8tfzgyqc0>9)9t;X^d%vxJuLnciXKLoUhrS@F7$bSFwCPV-;uHrfL4{6LtF#y7|Y?EwGou+x%rG zvtxC<@n6XN@&5Yw<&rp_gKA-~3;l0$xK_xmrMwb&WK-`=8V|bp^-a-wLw(vvD;P{A zzXdm|?iF?ht;%VFg^6fRH&VN|Ll&o5o@=&wt`|+J&>*{8lx25&$PcX4H*qG_WgBoV zOL@z=$|cOqlIo&KeKS$H*xWkQpX|{8DgKlb+?oVmhk1W%*N{Y>X5`d37z%02R3HR zbBb>Mxub6ud`3X+p`8q-)+fn4c}gJn$Cm!A*n@u1m+s8&7g%*{C4;mkQ^puvFS~&g z0O-$4k1C)i*xV#V;%2^OL{3{3Nw~D7b$7duxwqPmu5HuvE6czHPZ6+r72#O@&{+4f z97n|KFVyvwy>w0lpaVKdrc2-UoFmMpxXWKSJ=@KX!<$TJB?2KPiqj4rnJ?8 z-bLofm^8O>6E8;T{Zga!?msuO}+FrZ?d*f%^qgTje6# zEh?l{Qwz(=2>HNqos71@5O^D}rLA?rZo%1+HBO!STrf(xAO++_PGv6_B=kyEiip5C zAT@jeqQ@Pef%dwDVKo?g__6g7YyA2RLlrN@b%*G{cOa?lQ;I-YFv>Cy-eH4`q!bnz+g!E3A3d9oU|B8*dsB)c6LE>olZn(;AW*v#8NYllJ z29CaNfOGY{H0@@Wso^R#JAtB0=hvLv$BayN)brD1K^BDO_#a|R%goJi=>)l5>f!rV zQkmGCB=WnRzU;i3*`3FGA*G*NzgM6j$@uu&4<;rx+HCO7hd`PD;WJdcS4K(=RRIDX z-VWY!uy$@e7&6n3I?~`4T@i#8C-(ihS?Vqb(3|cR%8tp}QAOM7ErwQ%yM!Uk;L0lV z;xK{tS@5BB#$4NP8rjP4d=?`fLGD%kTpPK`D_q9T>XR zqMT-9$M@0ry8;WtpxBGhBzM%)p4k-i&9M)a-(m@7gnqSU6E7Kr`J zn%xri25^XvF|9;o>dCWb=j_ghc6(GhnkfQmV5T_*ryofybbr6S$_&ZtpvH2urb^P@ zfERXSIlR9Gz+`v{XeHdjzDX^hG5>kff7NZ8@4iuP-4;*_OO2IPN=g_7< zgcF`S4rKu{0A)gA4?+)x?4CvOja-zu)QaqqMGx&nQV~Q+YZExNaXFU^A9Z|QTREL0 zaO)b=2b`ata#F6!EjD3`1UN{qRd@o@gUJYdemVF*PhXjRinm+tEc+GFn-Y6A+#(4U zAd&G^qsSWziAk0OnFipP5&N`60VK06jyHeO{?SFzZB>|$C=L+%_Dc3MGO}N8>BWTQ zGMK`4ckk{_7vOE6b!O8pGi= zVDD_N+W1KJ+n$ph0Tp!%>vg}X4VY#r&}Ph@f;`uDt{Jh**W3_i)l(=j55@!1IRqMl%C$|v zm){vq9RcF*z*apGK{N2T*108ySoM7i&a5_hyLFQ9yijlo)}vj{1IQL2b2s<}{a|Xm zmw%=S!t^WPeT18wcfXBg*9W}a-b*O&Ltv0PD8oDW(++}ESZc*pe}4R)WuvU1eIOc3 zsv*M1^ejN#dDF@3&u-l-n!wK2++s7P-mhe1Qw*vsk!JPGv`1_nEqgiG$u2fl9Hl1c zy{X;s@x8wn5Cft%>5tiU%&kPB+@+Ss%Z~@gAd}$2|oyrUkP2 zR&WaQ>!~qth?s7a>0%6AD8~N5)bv*k8!WE%6OBa|FQV!J-77=!evCpqj0rZ=R%Q<>zHx7qwIBjqi08UDUv z3O1TeflGCwBnFd8zabKCr%$H6!k?~Jly5M^(~^OGplK{+#D-i9tW+WDT9l_~3#Owr zcQqY5A+NwIz2qgzScNH0jtf5w&B#F*?QHEXb^>z7R*L7Mgx-)i1abdInazKc$@1NO zI}BUr(r*(cN`Pqb^A)2i?bTg_IkR7)_%!(q>W)JEQ;>9-{kh#QxN3(c^_E19ZW6PH zw?l%Ve;!6cU!S`9Ax|xoOptdD!iTb-g)yO6=k`D(MxbOY8;oyaIkAcPGGza{!(`OG z-J8YYIZ!Espw&MO4Il+K{d~(>BrGwr6 zj@Yyd{45k?$$aP5{s6)LL`ZJAY6mSG*}`!Y_}2iAbLiY&0e|g>sy+#F zh^5II`=Ia>>@Wa_|0jO+_%PjExoG*9{LBbQhklS?5H!QX^9$t4fS?c2elfdu{G~{_9VK2Mig2l|VIIIUqa?XF|DKBW%28jGw)l=s6Yf z!EG-Lc^SyAGcx`sw$=euB-Ur=yK|%r_wWT*{{?xD?)i5GfKf4&nV>2pH*eSpl-`bj zyeNP~dGhox>$+wtOb-+^oXE2)X_Ma!t?M&GWe~GGG%xsL3HZD(Cx{I51?tA7?;P9m zM50R!1pK<>otF8MnhS?l?kuBJvpyU2x3Xm94oFT4eBSCuSKYLw%(n)v$$w&g~}g6(xCQy0|R=%COJ_E!d7y$pvNTO&EDW< z(puzw+%7Tw>Ig5y9#*62E(OhKNXv43x=R*gM*8TH+J*`rOBIWT#@Iy_IBrwHYKgj= zyzwnA&HV5bl2-irjlaHsgRw$i)G*+j@nrUiXCd!VDdwCxnc&%%8?zW(CdaxZ#!ldBaxa+zg>5aITV{F0^Hx|9K zsouK$BtiqR9O0#0;&JK_6)PFBSSDH_;o4XC*4B`ym6PqCHBoonL1J1!h#MVucHLps z;PShXdwL_bpB>s*kpV9AO$CVZ>6eHs+2Q_&=oyT*aU6?#>5iwlqbudc_x54c;?;U4 z(b3Yw@Ov@V?-kJ|HXsif_p;&<9Mq-ASoE@gaG<@EVM5M&kAqYT%(kRc*GT&^w8;$jqANI!JYuY_eZ%DiuapzxbtR`}*F(U(P zbsV*bO|x$o@)5P@TNvC1#&7sswgz9iWb`pK>&nCGBI5-^dW*{PK(1!V7m}HR`h`u- z2OPDg&{ALJ?-%-K9I`T*I{l?Z(B0Q0PE(H?J?j$Z2edqhBN@|Su?w&UfS)_>p{18u&P{H)w_vwScs4E zzBmC0_(yg|gBvh*F9qNRz4-dBUO92dglDeylS%8~&8rmEx8?vHM{og)y3WeJFkxH&RdbbCp2{#HSKJ2G?q{J32|)7 z03-28;PSN1Gv4J&F=$uV#P+Ho2~wL*fQg8s>?W)8dCQy_zh>EySxe)9x3aIX-vo@dKm*WNFbUqj4gJW6BJlVBW zJ#vPpKq4e3*W^peOE#nPicnY}w&D<^A#drFk=Sx-e!jV+g{qllvWV|1gDc;d5=i}k zU{N2!KTGL;|FJgl^sc3M(=8PA9;l9TB`rEI0zD8vRe5LJqukgB_+J(^xk%sxHl3IMyp=Nl? zay8O0Tkng1Qa^XK=?#gjBJI#2Q@+EOa4{suBT&>Cv0WTVer*+UQGrdyt7*&YO1a%D zDHWr$2HzyE$j8^q2H%9UbP{361EdDkUN*Rs)XQXnvnXR1{}+*e&*SA5dAE8FDGov@ zAmFnV(*cpu*L3d~tCW>a>uuIQYwIlzamyMm#596@A4_OR`53c^=!rY0yP%3k(|yMO&+J(wt~0} zNE%_tt~f%qX$x3npDa`$9M$!!Dl42Awr$@#iD{}P4y@~|h2eIOzrj{1wk0B1oFCb4 z4|6Vx<~~9Gl*lD#8T5Q&_zZcfDFV9X01n*yq{nAsTLA*nF2O1hdgh!uMxvfoF)w^i z@XQ82kqVqKuTo9Dx{R~rgYl{Uac8q>0kACzJg1*V(`_k;f9Fzg7=G{SuI&MC9I=v& zZ$w#&6Kc3j<-^sEA>mQ zdEt+OVfxzoP%Pp)?2(-V_RQX4jKq$(tI*^;L#va&=qZOj(XyzCHmZy7;AB6W*}a;z z%XPi`1&*9-b7`I5P^YuE9g;{B5Lz=>^RwC2q($F9*xS81@R`AsO=g+9jt%u7K)jsl z%y&yN=wT@3xEn7CRS%O!V^c^ZU!^If! zoG06Q z?!gw_;Tb>g+-`X0=j9>SR6v{)3jX{fy1cE5`aza%u07q(>tKOlBQK3SFp=KKE@?);VJ`rX=lrkn`Eihst2fpnkKLsoi_sC{Ydwiv|k z)_1Z>DQ{rkR>L6ZS@7?r1#|)@KmO}COV=S^^6J?>@-ngi;dYjm`%1tk?lvzM{ZWD- z$abPlt?|de&M}#ID!ALrJA?Eyo9F#=0D+qVGyk%&)DeCtLCQUSWWStq%^L$uC23M*Tg#pX8eD#5L0Ws}TKV>6W_VN*v&00#o)-CtG zjo{p}ijC%tVDqvQ_O!H$1KyLyG6_0xIGbsfYyQE_t^wN*0iwNE6B6mZ#J1a6EkzZVH@oXUAvrjeP_9Z^FaG8RgKN{>Z&gGJ5;WMi0H;b@3;)fz~GM~@22m^+{+}A zv>gvkqsJD*Utb35KMi|}xf`5ExiKy&R}?`4TQ~Yl;tJ7jpiHLFqA9AU(B7cGITFW9 zKWL9S?J9M!tmB}9Z+*XCo0-SbC!ap~%O-eE7*gVyJo#y0TIeA?Dc2(qV*S_zB|RnA z;qbp3Al;yoK@8Y9_B|ButpGAg{4a{`0AhJPa`;cE2Ue&XKzdKYB^6tJ<7-r*iT=1S zF4@EubIG1{S)F3K9fO$TiyDgr8H<#m9mR0`1=L1?K3$o4znuq_&8NRQRHqvbRW4Vk z&J10i@nDxKDY4oDV!}s`Et0DnGqARCh;t*dqI50-^;}0 z{x@Dnbs(#5wx)AA8bm7^YdSl)9AT;s^&R-<9BvkA`qZ$w69SzPs0&?7$(_aw1E8+m!ojtL>h_T(v*bCGML|>nzn{!7yfuIK6oIM9r zxu`y46u#^ZWtchYS_UQbhGn^{vs?yZAebB}R;xUq{e{fS+7I;Ya(?eLTZ{RarnM-< z-6jw*oqaBI8)mxXRu4PRZ0P!Ufo3gE({s4ESD}QuhJ8P?(d+K2)5cgu<=G&+UYwf; zfsHmF5vZ_N6b2yMi6c!~wuFAwN%(K>g+WFSng z934tvDj5GD1}=Ka_A&^s1?OEP15x)>qqYp&heKAs_xDg5_9^5Q;pXQH#1Q5%ZHG3a z+N!f13qogzAD|+9;C>GJibj{ zHm~`tG|qXt-)9-0?+`3q`?B4kDN5v{J+83i;(@}80SimgP?WMaE}f-ceTSoK2)n?2 z54=myLBBbEkG2kMT|nusC5$3{P$VD3!gjjm{#q99=J^+b+La`DjkaI>^1)&+RU8~d zC<-+1$D1kneBQOz-{%g*3`V6lGLs}s3w!J8|264sZ4^OP^K8Zghk-NE;LKRQ4fV~U z{bnS*bVgQK_TRP0iB!hw)13-f+MajXu4sEc>o?Mc0B zOX9A^&wvdb4zk}5|6@}x0@fV>5~jM(NUigm>WTPPe|&FTbYC}NQNF4so4{ZSUOfZ> zC06ga<%%DNGxD4`Ndq!G1x1-+qup_qo0wJwy&;sDBaiH)7}JANO;vBT0ix(uNHMUI zCX{?b{vT_@sRHCZHxN^nAf9n>OWc1P?7)rsjRpR{_zfUG)rJd%)BWJa0gl_hORc%{ zojCXZ^q1hn$lWvs-CuM${G2?u|LBA*_SkptiHpJXN5?|XKqBr>yXqhK+}+(Ym4iR{ ze*gb4-~PKP7z;#@e%c1Kn;tJKKpO*Ulzu>Q>jQY>ov5VJQL_Kpk`1BQB_}OCZm)hY zqPM(-A^x+iGI!4nPyWJvjt92!Q;6PTMRRUCtW@ zad#*xrS97P>1Q`39s&3L-mf+hyFxd&Sf}Bkct5)cV4Lku{#r8WL0o_VSHAD3pb&&K zmbe0FL;TeEz~DLsYmBnnf1;nrGR9-jhUe(z85z>NP`nzVQuvdZOSz-Mq2(7i7PTAe z>zoNs`74Jt9<8u6MMjx{9Na&_)2-K|2H`c;U}w+S&u3GFdXN=dYkeqt;MN<+6UYhu z`{{PlK(z5=fe_{FBAv;ym4=kaPkM)d0%QH*U(C0yrh2gfgWldf75*9u4Z%*3&9ZmbA+^}8N}b|s*j9DSaJ zKC#n3-9gNHk8q!6lFhscW$7QP3F+%6@ws0XD60c01qA=u1xl{TOKx*JaA6BRkPncZ#G&vB?~5dH28`<s3LumQnc| zsVjuJ~TOFw^sbzDbuW45pP1LUePDuocNZdh)mtwm2aQ zS~X&aOF|WPBV#k1nsPIit*>pP*rWY+WIv(2{X#xsK}jlszaDEL;knTEk#szWa`A5v z4{N#Xw=0#1m5&MMn*JJe*~+-zD@1eKUc}`vv3+hJ0{1!f%(E_JC%cnGeY20j7)T)( zVWE7yK%VT5G}puGf@^$vWhx4jm7S*DzsgiwlskCA4-=S?W8CcsXg#F{gl7o+h&D}a zNoeMxg+^E58=gq<59X0z#<~8`7JAA@>zk-4aLG9Biv~)B(U4dLf9>fj+p9PVvz{9W zu`jDm27f~F!P;#4+=Cu?0+UzUn6B>$EySdx`2E&kQI@-TP%wcZyw+T@Z;WZphmJ%%Z{L$;+rfsw%7-oF!xzfVGtazI}`M~4At+w8-@ zz>W2(k>!R9aeH6l^|LH;jnHd2D)laqgEu(cG_u^`oZ*+OQRL`({i~(AYop}JMRbD# z0y-65Ao7-a1r}|a==O!oIg|8PpD{1bg$0EPwAc=%*%u_&%BM0L3JX2iv(e1`m+M_N zU7E^o8u=?$W*G{6NNU?!g)KjWiB1{|)M9I8%c5L(~1X~PK#kcnu|!eCbXAozw!QkVXCV@CW=BV%rL(eQ({zaUOC(7 zD0*}mT=G&lF`Bwk2RLgR<6cZ(H7Cbips%CU(MrcLukJcNs9bFTPd)Puydi)P2=s5x z$&$kmZi#~JUKVkFYZcId8i1pm0Q)dw)7^vSN5?1iQP&wv6wA7lIu-Yw^$e{S)~htu z*X;^2C>~?Ms6KTm2j`#WbH6iQekT6j4S@-$ zCt)h$s&X99lF;_f`ihOCNzbUR^jb~pk8k$RbSm6E*qOk@wb1h>Z3)Lh8!fwKljG)8 zsAo3Z@W7@Vz+diEldKe<%0S-Hn}~hd2VJVE)g`@}2~lfx?AE0SKUyP{B>$YMDKI*x z)iNUl4*5(O&SYXNH}mT*IkM>bn6A&4vvi zPFBy1PXHYTjT=$LzXejR7I$?M?z2v7^;m7L9twFUpX>b6`gfWgi_l58JGtFr1r^tCPbwU$EPpmd*a7$u;V&B&57Xr+(y<7} zlvR@Lo9Wt1N2xe=^RTHA|AA+9WI4HDJ_Fzg=RU&&b)C(pTVKoh<7*Cdq1ONkcq+nw z!C;lspVk)1Wl!<1X?4+s3w(Ln2ko1LBSwPgax`AC-8(wV>DTrI z!Q%ogo%YHm`WWB#YJOgrZ*(%6pr2B=dqJ0Y?e)3_#c(gb8g7obH8*&Fe>dh9gJ~iT zkY_-C%wF~{`M&#?y^+K~qi%MNp@()m# zby^-d1)V`IxQ@v8vGwzT#|8d)9K?6C6I@Gt$Ssv48m~4p^uh)fhup9wA^7!{@p;^v zMnGLpx}VPb+i(K{z97OMa9IVP3ZCHwf!A&Hrdu@!f6ySvcUKtS(q#+qBXp~4t_nDu z5CWM2KqbZW2P6qSi;)Q1YgWJvS!X!EXF{n%SIk3?fOnBWAnGFpA-oB=;VLOs4--X2 zvN~j_x9xlG1Uc@1ye1Uj=~=O@v}MS#o*kJT7OzPCW;H_nd)TdG<*m2b>%-E&(j5L* zF&)AIx_n;b_KvW0hIrD*~q7?8?(2 z5b2<$X(ZzHMy~9E$3V|&c`yH!)4L6M4kJwimvlj2_tW4WY_CH$^AuCG<|@^7$a@jn`aNM}Fjw{Le}*(9F7Prlp?!v#-X4 z9U(hEJk9w1k@nF(`^R8i)U~Hq;WGBi8gt;09*Gtt$p!Qru2K-KL>OKw;^ytiEAmaFr;jAlq-C ze4){Q>QVk7`>QdSkI?Oat^WKV=}^)vzt~Lacii|U8mZC?Lcr#9X^g)s0Ww;^g<+L> zI@UQcQV=)q2^MC-eF=Nz6_ugtX7%{pfgm^9^%BszCqo0f31|CK{7Ik9x^up9%-Hs(2@NpU%@{#;x4z` z9Ab+leU6ToB!YXscMRy+q9PRNw885a&!JyG-41s$NEzaHfnL^tZ{Bk_yPqYaz3_UC z{I}Hvm%lrFX3r7F_8?lHgWJW|hMTXQ zUNX1LIp54pP!#(R@g5OZ=6dU#?`cjnLf-V~bXkcHKF^+3he90zm#r_#e1if~{xT2a z>W#84QY5TWuC3x`tT-n^HeX*2m^gDIN_InxcCB}?nrOHTm~K2EsTj<+zgOo+#7qHA zYbzwrPM33CcPA`gB!XYa_Rj6&+!lw$eNVZnd>PiflA>H2hW7qgI@s_f(aj4+_GHtlpvJ3fTkZg1vec4gaWa>TnK z+sy0#Yy?if+{!IBM}@aC{-s*^9M6Iw4(qHDM#S#HNWWdaC>?LD=P8%Ssm;GN8vU!W zN5V5nXuHKazRZ1?c~a*}&Btrxp>P>}O~6tnx`Z*|B4mdu9=6Hc)8X1WMOb%%ls>vM zr+$XY0Be);l`iJ1{&%`wNM1dOv+(yj9c}<<-0cS(u*@37S3?y; z3QDQ#S8r|>z$I<@PQDv}kGwJuDzun%ZEm2%N6I3gI~`6b-K)o_xwYBn?i(JPrdW8@ zT^Gzw50`=8Ge~jpYkh7n&cB9p^?gA?Jg2@F81hUWi3pR&AacVcB-bco2hTnzO9%En z1erQ*p*z2$Z%zn3&LoxNg4C;jJG~Qgd<8Caig+n2_5oa*D*b7Ht_s)Nh-BG@{Tfeg zOsFekUeXgg^I@@jxlDX#I_GU2>a=xAI&0%CX0W^dS@XsCZs%m}!RL~v*IW&)C2H65 zD+(M3#5n7dz{v|{sg{%i;l1CkJ+d2tloMZ1yDfQPJdaUq4K@@Sdvz!%!lCfB*nr&I z*1x98FT~1(esDyS$2Pdo;)VHLFjd~a)sQ8JYY&_`B66>zK@D_ojd|dg){@nq+KfNHR4LW^hKFnDX!3Opea`5OZK+JSn;Qzf zQvNZOMgec;UiIqq*ZzH?@rBi`E+LeKW!r1V!pLZ_{oiy%Ie%Yj;@?L7+JZ-}@qQTD zAr$3gXnnDEU#0)hhWD;Rw!YiGEOl;8A7L<4Hx=#2c}5&rHigbr#w#8VY%37hkR-m+ zZ{y9oTl&K9uH19)-Y~pmdzf(8&wYiqEhlk9nsKsRX@S;+wNI4D|qMe55(RN=CgXHa_0N=ow$|Pz8B*T z`RdDATZ1`$?f4~4)In^5XUF53xsTd)3GegA|F$SHI)0*Z{ma<`!mZTq3&|1 z%D_}(p3XZ4yH5YtWa{^QEVE5Ud>0VuZ{t&$Ts4o9V^<^un!{JUE{*Na3-o_Fx2kkL zUHXsJ(GjK(K&CXLahCvK4JtrU4XSbHmINpZ!TYV3@5V45AsY&bxQJwc)%aedbcr z_qC28@EufKDxR_pl^L?){3^uf^4|XI>ADvLGo0`=kAl5gLX*Nmtk{mY|30@YzORE@ z)vR%W*L_Zp7Q4kh(+CTWNG2Ozp$uL4fLWx#+%iV486bR=VAI#b6sW}}XK*&3 z!Qq#N?w0_L|c@uZAk!RqWJ3$kwAp|xr39(~Q;uEJ`uPmXGhRKhjN;mQIL z6#tFez%}}{{cKpVqT(w^RA<%rkh%`B7CbjbjTnM2#9Xyi>^r?or9ObCpZnFtz{pYVek~Vu%BSNjK$-IS3{=>J|D8bcNuf48cYNCn{2{c*7g=l;U ze#LX~=Fn)GgCYqe)DMrr`V9CzlPF(Y5**TwP*&|n&A{Q>g|p$?TCj0pGQzVy@Lp!3 z?{Oxd&f1T2tC&~sU_J$k2)~4v4bD%(UMs=0zaPZ?e~k|)W+rWN zYs%bdrYlLp0#6%)ew;r)$iuDSk8dXW+`Zq`%m2cgU2y@a7xk|)J`DdVBQ^T}DnqKC z^i2=fsr$#0<22vZe!$z}XFJNxivIQTL^$Mm{nu)*>k1=kmI0@hb|{x;)^4rH1z_RE zi|t4|@#mod+LPYEdl@tbV)>2?&?p>BTG0AJQ`?(Q_WR%4AHVcq%NX3+wnfY40{0I@ zDfe1_fAM=K$pP!QWw4O-i=_Fk8|uFuh#z$9R16 zxo=l)z))^YOb?UUtkrt&g8I_TZ7`^`-xz$mX8QYIf0V0|#jvGGaIJvBv_o3Vd!6}a zT*t`a5%VPfJ1PdQ{@?|>c%Eenlo(C(nnI_+q^h^vGAip{F$e(z`U7G*Li!*Pgd)D%=p}egK zafe1E4Q;db0nIsn@qsYy={GpgAJ1Arf82A30H~Pke^}T_FuJ)>pr%+s#TFg$m~wnF z1+&++XQ1wZSp4tjD=7C$Uwso^nO#`-{=^O16a(HMXa{f{fB)^L3khbxWk597plJZp zir|EvINk3W*7PQ4lrV$Z*nIb0IYH~+eD_3|fpOQ8;r!Eq1(d?DtZh~BMBFaav@zNu zD;CJ*tiQ>$l##`n0Ke;MbFN+;{f+HgAGeH?Fn;+-mK!OYv*o=IGv?p1(mc5bKZa(@ zV(b+IiUn^CvRqj9nT%=(D2jnQsJ$C)O0nRYKobyrleZj?+*~>EG24%-7LRult-SSg zY6SguTK~7Z_30Hu)g3VKy7oIkb-Dke_h`43G5gk(=z*(t(fjUI5lM^4CAXR0;Dz)Z zRpq|?Kt71(z0!V^fC2(dQUbg(81YU@O;-m_Z{T)O*W>-cucap@bawycpvOrCN(qvG zVAxVWl`LXAXCxZD3U*$g4!UYDt=AtkuqA-JntZ=BW8IYMm4f)G^J@G8hPc~OeOc=x zYv<|haB!5wh_8V3dAb5?NIb7Utd-K}1sMoX#G4Qn(pA z@<~oFKQp+()~v|d9_vnZ0mPF|2SUad2Zm{ZHhr_$6m5_!K>kV)IO4boI8-x$HwQt9 z3E#s>KMPzk%oKlu(Fv@gK7gb{+#TrpK~5o82_h}FfLL+I@dErtT7aIS5Z!!~-`=zkJ1Rj$amioR~5nhBRhek_v zp?kY!z1h|`^eJhF(b0^IHx+^L>8+y}Duakw=wU~KlRhC@j)aR^Tp}$J8^w~t6n4=1 z`5egZVD*4bF+D&z_RtSDNoBYZ+T;|y^TIN_BkI7t&l!H}l9%6PdD?T`{lY z_4H=r&`8XRfe}0XplsaU{Ko35%Kmq53vpO%|0{}e_tvcybYpHWTaz!a%Q9SEAOL)6 z*Xh1owhr|uYQE-K77DSb%wOEro*_WPv{5Ftd=nu{mlM>CCIS>lZDJX)@a5vJh>d%% z{jYzBaL=UG6LJII`Ew>@koLYYPp<`a`;WcXI+r2O*#ezfJju3u@#?`3#9714{me~d7H_YOdG=0zs?tQ80LacS&qo#K*Y?TbJ0NAh^ z!K~=d(IKi9Q}uEhqo5+B-g$hF+u<*%5zl3m$My4ALKLjV_y%Z+CCq zs5gJT_a(DR98Y({=llkh*H^B`NJmQM9oME3z6kV3X@6^aGyZafOqcVFENd-nu~2pe z+=p=*;tiTr^BQ0WXU4$Z3X?G}?Yh{x#bAHmX%wbA$ACz-I5dHZPs%6w*KTc;J>RkA z%UFg%4RD5Nvmq^RwG%XVlgGqmc!Co!8~VrZ9_|ob4A6P)wAAE!QKKl_zbr#M;bpSA z>$L-BAOw)CLO#Tq&-VAP%^!-=D~q!-{Wue#gUC+Hm_2tsRo< zTQ{5|FKub{Y?$?9WY|%e@DdJ4pkz$;Y`e%E{Dy6F;R9jDsvHaTm$bu<_QSXpeJ%3W z9dh7@8)Smea=e_yHNHXpPY(RK+4*J#Y`Y;HouX?(hKGJ!8?&Xw^O6hNoY6sa_q&c? zlCr1`5(9TbfA98fRZ1XCzZDYz#c!o$0pcgeYOq_L%3#jvbZ}WfT>`K6HussID| z1YpBC(D`8xIG!c`^}9y@6IKRIxU<$L~$Hx0*a%fh!C2zAP^g11yK~F1&vA#Eugdn)UgqY3eq7Mq$o`Uf`|}AAu3Hk z2ofYBl28OhdP0)lzC#h`InQ&>`=0-P*PH9oOH=N>?_JmWtnb>lU<(%jWyLC&b+Bfu zMFUKHb%+oEozP)X{|P`Z@YMgV?hBUii0~&_dzLYGbkzMlQch}p>-{XqIxUJ2N&Q1W za_bY4o2I|fn{-E4H2Hx)Pn+)i%QseoZ`6Wsq&q#IKCbER^OwuMc__X7Crbos)D}yj z$IFY;ms9R%L45hiTp@A)?ORLiFQ~apQ6iP2ZyDwv{}fQ?vAN4wJ^!vFBmZnq2RY)m zRMwpRR^Zp`p=s!IwFt9e-R{Q1nuU?Fz+`|4NOW0Il8#V8T=!o@&tcSMN>Aadf%|ZB z&XUvLX!Qc)3_Pz#PyY21Yhks2pMSN={qO^-vmXAV#4a+Gwk61|)!byHyzpU!-$48t z+Q9Sa=9UY|&o}ZbcgaRLx2^?2%o6_Ye8@6Ppv%dK)_o%Hm)L+khvNHHJyMXyzKet` zYNqy$8sVK!;pRqEIbsCzRJ=po9^}7Pp><72)SI_G5%TC8OgH$Xt5*Tn!5tvS1zSX;min5%;MuKbGTPJ0kQP$U%?ctCF59{}k7#($CWG3b1t6BXq=F^Z{Atq4~G})oJX%0khhs+;i~o76A8#bl0y-(}>TC`kRNQ zbP|Ka_0BwOeEG&?E4_NQn zMF3n4mOHp*=#U)+S0fkp;B5rL81T*=VTdzyLq#)Ld1au)4dyF@jt3aLD-QiP z`TV1*xGnS?94xA^+XqQ#8&_EHzx3&i1P z=wJLg>^oQ+L6iOc2zWDd@q*t<#RMnODK4*sm_?|kutt(ow0G&L?pLJSLwW_OJES#fl3I7PV)N$9Iu%E572w4^8UJeJap^OEpu?NbHE)fMHzN-zW(5F z8Gm*9k=t`*@QOP1S4^$NJ#__4(%Rz;mqhgyFCTi$jVILzgdrjWg?g<`$$h-KI__$> zMX@?$T3)>h)72DTo~C*vSx-yMxr}uVtTO;Y;GNf{>G{VQE36vpvQ|r~vv^`R(2vC+ zzmyQQ*FK_a!5Re3^W;ms_ylgW)U50SmYIm@Jul!-U^GC37!>O5Mv3@!Q1PK_u@V@u zwrrQh;R7NUZKFjIhL&LnX_b>8EDbyiUFfXB3w3d8Zxnq5r)3@jJY~A*+}ZcwwxW-O zrJUN8ha4qEUG46Sg~5_JEE>>+>$mFdo$@Na!6M(Ub|^KefG@}|Ba@{t#bmJ zS5PATBjYpqyOmxVAY7KV2$4XWW57UnfKY|TnXIU2Ue9gQ-7fyqwg+XO7z~v@o-91D;bC@EdN=kSE6$&@ zrl`5$OJ56-BT|@q3R+16Y+eYa^1y_;34P_uKm0ek7Yf#~x6M-Xg%h#o+IQ#mZJ#KX-)U9#XpAXlO-agu5z2U@{A>_M5x`;>g zMgxy$W#IggshAaAeHG)KnX&_~4e_%6bEs)kA;3Oj7tEr6xlLnf!A(oU7$w%KerRvP)rw_+ODA$q5m z-Yy_&Z!P-;6XI3evgrK9rAdtqPNx5T6HGt~clmg~-!V2+*8l8j7kl+!{db6-ERGhy zl|Gt(Sh$9dN&aF0vdb_$j~aFH&x&V`kAuKIltXVg%4 z`J3E}aCbWEb7bf#@0Dms*V5Ss412*YzHmF=fxhM>_yU+`KxiS&%^4AP@PEn9(c2wU zu`+}|?YHGA{NQ_SP$4bIgqR>-QD>E;sZ&>Z9R9ud2M+|(7>|&_)_o%{H>Zaopf3w( znIP|LTnTj2J5?dipuktMX&AnzE!K}-(DRwxD}5wPxE07e0GwV~lax)u1pgk6I2A&_ z<5YKR3B?2}Y9a}P3I$=Z%Ao_A%>9_1KZ4#ykZQCkA54hdzz$LfJ9?$VZ>#6}J>R^% zY??1T*>N4P-_W^1P!qRh59awFPs29p%3#m+db|hwxd4*wFNdS+?xbql|7L6ayIeTp z$#)$WfZi4Z{E*}`3~vPML_^76{c^8BdYbG&ef%bt3?}hO&Y8enf>gCOpRheA!Feys z*QF`!_ce|rghht)ZvBR7;-wT<0 zt%Ng7J5#p2sE66$3JwhIGyn$L;Fqi;XN@PGziFE6f6&)oe9#;Ww*hFJEMmq`C$~rd z4ngb`^3jy%YOkdRo{czZe@EwUJB{=i+xH2tN7vm=wW5m-PG2s#{`$;@URv>~ZD#fz zfwY2E+}~j|1ruN2Fv{Kx90-Irr6XEtXUWG*bQAG7#{9RDnW5mf#>OzB)3}O0KLcTriS85i+G5-c0#n$2byo#M6gpg|6?3| z+Srr-t=N4j21e0A`OvmSLr`sX&x+6 zxmQ8G_QD3y-4f8^cPi1h&CmRoK`Yp!N`W(%Q&>aLu$lv>KMxCPx=1-V8D@}!2L~dZ zL^33wLCFd`$KM8X!rN&TyseEMPh(Mv#*?G;cNcTf!hJZ+~& z!omf;wf2uHl@EWNaW{A@0Uqt8Su|le&8`YLHE44`x9jtVXRSri@LO+Zdt7nZpx;7& zD4JiJEzG^Zzkew@gUmg4svnbr7U^5|cX5xgN#l)*S{>V=Y^BiRindV-pBCGi z|7cE*3Uxy&MIdWqO9)n9fD;9;pWjuXCXP^Qai4EdU32s}V)n7t7vd3)?)TZ?yD!fK zkH<5+`U)dY#z+yN{R!saxAc-Kmhn;X{vCI{A381-)LKL?_Wv*7v3^f&msf(yFy{RE z-4j6E24TR1%@d_DwP<)O zru$Wv`xO1#!Qd(o!Z-_#fG}7Ep0EWp33h)r76-$gWm*C_$9+hvkpsfTRa>a4=(%PKIpD`wbGZoLH zW-zV)__Y=YIKNUmGEv(RFTHx%DO_IEePHPDx=EMbGJb(AB) zjuQ&Awml;(+FZi|&wk;ihfQ*~xeIOv#zRf=bWV}84X1+2bsBzCC#%=I5Tds)Uooj2 z@k0Cer1D?s7jD3qW@3LD-V#zU`S|CT#_|;hQX>be^#sCw(&w*9Ds^R_Rt#<4}3?&XR1lYK^pI3#z2;#r%C#56p*O)lFwSBsjJ zpB`ze#fn2WoctOPr?rvR0fR-8V8)HxLoP2D`8IQiq7}vQjfC0

DUs0A1ct@>;G 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
kncHET5ofDj# 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%0A}Yc zdJl{gKqV5W)!uoW)7m4QXUnnAR}m$R*i6TvIY`h%rVuNF^hSAiO})p5xYF~cQ)alZ zuJ2`(c~AAf_ifGP^3jCuPdR}&IKEX8ciFmEZ@Hu%3A*x4Enz2>^91gy09~`Dp^>Z| zGdsDf0*vptBd_y92C&@W%{2sOCzh;?S~XzArE}XTTpYn$L~mVw$umK0yAn&ChFI=O zvwiGiNCO?p0gYP2x{>p{rU{QoM$DgJtZ;A@28O94TB}JdYHmXd8eUS@wldKezO z?apR{4w?ETifI&lYG-%F^`OXYr?z&~^Z%fV6-VHFWpdUZAUl#(mey&vyaeB5d7LX2{HE+}T}K!w0e)LHvUZt0-j*<6(>JH0)^$SrQ6iBODq6|p z$$wH~TFTE|ZZt?tG2bbyAmm9>62bknwU18mdpo9$Uh{CR?m5S;<0=ke^T+y+y;$33 zc79+0!l68#HFe-e%da7slUbA~afREcrH*!5atk-xo@cg6EGBPL1$V8ml4$Vc zL2WN+AU${(6dremH2}>$$TEYKP{Vd*m3y$4vOv8+JY}_uRBBfrrFPlu-dt^vi1qZZ zVo~73D&1wnvFTG<%dL^a^XY7=01cwGY{K};hMXd~M@Hc1)ei%q<76@NGy51nh}P1l zvSvn}<(}?IKVZ7ZWP`s7z_~PY&Jno2|n=`JT-XHS$FpZhh zh4(;?)5%ez1{4o4cB#;fHuTA9HXpU&mUrV-t0o`Q)CX1#Lz+U_R45+G9^;P7gb2t1IwRkI0CzuO9^BP4Af3xXB!!od`TAie z66=~Bh^NTrua(vZKMku+6-I?uKAgwAil+ zUQ3hUeoP)+R=cS;Rj*|dXfn^41~UfP?1%y_ZJ@M1JfcWTX#wJ93EFPAwiJw?LOpJ}aKhUC_WR6ti$)~kH1OliD)}8n} z@hU(9vTix*)Wi_>kRl-Axb<#@I4A1ZU$9HO=Doxt3im26g#y#sA{(H*wuh*(#?gF_ z3%3R|Pp>-RpPcwGy!mh|Wtto01WJmJ&J;JU#luS|KNIgQV7p)$@`jR7_T z#l^AKxVd~aIW(-uUB@N*SX1)w_iq0>A=NU}Y9dO7tKbcv|re+MGN?u>DhpF zgR9BKGw^Q@N{t!5@JiGvaT%YX@$kHs@mnWj$5vpt2tO1Me1rQ102AxHu23K;#zm)5ImB>oet$ zp~H+4Eb?R@)(e3J)58y92_@(I(% zCJx^j%t5TP(^md@r+C?X54Ru6*0Mz&#d$7!3@gU6nKKE$gIM!VdlycZf4A#xJ4uN% z;vm2T7E!ovT-8QSw+tV}G_|P4;X-Y|bWcahwtD8nl`R)puq_Ey7N}Qa4PsL9gxE zXJ>@UnsLxI(7>pJmTd^zG3gs{l=wvT*^*UggO8Fxy1gfu86J50gh7R}Or#d4Aa&=# zT=K9RqpRf#T#o%(M03IfTYV_L<0S^Qsc1oY#X)EkvOblYQjsMc@@59HiUfw z$*IanIphC2m{JheG-z7Md7)3kypJjIcxq_w8Bwt?Uc^)m#;|3k*48(}_5A0-YxT zMo(AOtY(8dblH@11jHYv2e>*28h+OYw~`w>zV%|BsJaAeQ!j(i$lB6{FE#~(9gbdG z+~W~1`6|E!2)lDFxMKG+t;dsC9>GfRzz zeSF#@@#`qan;62Dj9qRtq5Bt17C72Qnvl&EO_$9yf{Yf_qe~6W+k%P-x(Pa8=-+^a z(s(EnLU`oCkcuD_&V1epJw-awhDll=mxddVsnF#@i`hMz{h?F)R9SDDbJvW$trzE} z1oAwI*VI4fQar0FhL}pU2nA*TZkzHiLa9YP)`VqVoMU$m=-lGNBM%y;Qw`PZOb`PZ zVR!SwYP5S0*D86<(oploaX+@HVX`o%qn|m-du9-sM{monk^N_us_sydUD54zfrBN1lJV5^EvU2ELbU+D~D>p>{lB1do^Q|>sNGu~cHF;q} zN8SC$DnC1=8YY1t6ufV)w~qYbmeWg8^lXo)dQa2&<&r+dXCYW@SS4z%$2pVH?6EFX z#JoDn4lD*edALM8@{=HR2pBp5K-5J*aIYBX4}N|Ntb$$-0Cqh5AJ80dNR;Oo`YPyq zd44t?vHuf`#Qer0X|r|fNNB1aIC2~aejexE+4!@=lgEt(=Kqc#7js6Iqr4+m+v?YV zZ{qMON%ln`4ES@d#u1UfRZLDJpiU*+lQTGA>1%mEP3zy^KOf)$y{bRJB)z|}`4=GoTGYHU;Q04vV5M%hW`O5= z*1y>9p~S>0j3^L$W_sJ+oglmp{0pyNKdKzuOBVw&RRbnB7-Zp&A5 zM;t7&0e=h)j#nH7R^k8{NJh6?OQ${ z{M0@ADVp(Ol#TvB<9RxRBu@zZF^7Tj#+rkdmS^z!d6ZD$>kTpg)yDwKS7RW@T83c+ zLR7Zdls^>zlIjhX;yz&toxmz2kIp~k6CL~xY2YBt;}Sfn@^Bt>An}?(=80ad;ab;qL$DV%0VvD|b=of(cS)Q_jw&Co?xvhh|KYcYkNHT!RfV zml+qAOKB3{wys{@OP;P&3|*ZCV}w-0jes5&m~j>eK(S(+M97l-)PcU8Ys_!TKr= z22~fnuG~f8b|5Spz27J>nJ&T9(gx}o>}!pj8S0qs%=E(&X8+e549{%Ll0bI1D?3KB zwREEp;IYqW+a8ZanZa7N#u}x_5*8@D786IT@X|g-;+6W~ay(7* zuB~X+{P?u1#PVtbCzLDS(O=|j)NY>@IEsmDoT)b7HT7V-5IRxuOp}sTK(=|8$QE>k z5jH6zBI7+3=igpmR^8yW*VXF$1#1+y*w*BJN3l)^ z^XQ;S^#(JS;3gA^tc^A2WA`jyW4#^?g)W5@Etj-kQUq*@-%CtCk`692&q_4=m~qEn z<$YL`K5QF+%lb;i!OuCc5+;_)-;8#Xr&>M~!dUX~&I2w*Ug;TsTB)iXK&I8D{eVrr zZKz5|l8W0q^Q>;Oq13Q@!3?;ILZuu)OUcMfk0{=pSAKSB$HL=42tx5#SH^F3UOrQOos_>|ZbnS4Dn6<8t$9Nbt{Sk;cZ3+}OBtoqx4 zX6J3H+0E$>S%CYuHHtNzt*YNDR>bGu#9ODRfW~=Xb5C?_Q(2Sgt>l?qMkwTr?<3U$ z0hF_=wA+WV(sCNz`Sfxu>hYqKi7u&BkDb77uO**q+f22Px31gAYkMYZ##=g~MSW(; z_0n<)cn~1|qwbUgFdbPuQ-0utYsVQU5?@V~J>sI4CC6=NpU;8}&c0h1H`GU^e9KCQ z%&2~N{ri-JPN5Ueu_tfbc=90}L+v@fB17f&W33`;wVinhPIv7r0#!7GVls2?s^~QB z0UD}94;>-x<{f-xWEbo*!(vUHS>bWc;mM!ISuZc#Yb!1-#&iNb7DJTjrK@r*Q6NhW zI2x(Q<2ezPTS0!G)X=p2dp|t}y-arA#u|f!6p2W{(Tc5rId6xrzbb-0;3zM`R zwyrDLBujIil#cW_?AnFBtzs3{M+n~G?gaTG=;~Z?V-q5<=%l##WT#M21KrIzUsCnr;5(O}6}J-&*X?nHiQ$8(Y0RSe)KN>1u3P%_L>IBqvx=Uo zaFV3;z?EQC{p1S2^5{(JG1rb~u6txDs+AG*X}y)O3QMmW9a)Ec8j-5dfRGYS_BByk z)h?GW1RH^)q}yF{tblgfOs9R6b+Dh_IGzHFYF@}#+CzSSDIRrtZI38U=8M9Gr1dl99-wt&M0 z;E@SJ1&|2cqT$wc72J4Nwu&WFs&QgGo|4rTJQ>9b-DS6U@>6id1BzBkXMrx#34`Fa z<#+FA-V7E`*hf2cD?jdpP*1m~emCNo6?aaVSnl_|fC#?h@8EQ0?}x6&^g(!^SA1{8 zvscTtRKKztVn!}K+Jb23n6t#0>amn^_FLul7U?Lehqc1^P5zutan<@WN_lSG-EfGy zyb(}&qR_u3;wmD1DHMOKTv(Of_ZLNGtA{krvcmmlF}-9gv|3tq#>>Y9_F(ygNV_sr zk^OYmH`Wq&E#@RPPeTA^Z`ASSeZ2Q0=DgGRPFFvn&ub4`$DN1qH`q*u)kL{<1?AJK zTjS{v5C|gnASf^ISjwA~I!r43V$dEinCe^t%$^_TGZdh=nRuKQ5NtPTn>x<+rbzT} zGS73QOpzyEq+0P{#%U1K)ZLw(%j(-}>sRZ~xI+^wnWheBO05*mL}FgU`o-afA z%!ZH_?2JVNpweY&ekGw+6q6SG83F%Me8tkh=;er?wSVYeSka5H>N97X8%M6YQGW1u zZZkJ|nnv)-QK!Ap_3G8XCG4Ht4Ba8^Y`N5vb9&}ceGJx3P7sZ=EfP;vA#%GWUw8>SKb7SPSvm8qU7yy#U?L7L@-H**dM}*l1Gp# zu8!8L*pvsh9K;u8aPlWyY2gS*g|}=<2|A>`nF9YfIbLz&);r>8 zTMND@t32Mo8UK1|yn;f?dzd$5jDUqn=)wAnOHODBa4Sd4QwhH16@kvVEy;d*?3Xqu zo7cwxo5}##l4SR#8D&j>SV_yC1f!@@)AK&RBi&aBFh=ftz*lp-x3K$?jLoHMh2hfEhMPJmo-@ z;gL!|iZD7H)pQm~b?y}5nSET5F`(+~CdpurO+J%St#iKjR5e1M3`s%?R{n89rvw32L@vRIbF;Aj58}U`mG0bii^Fm>SPbp0U@=$vn#|>h?+Kfj zoP1te?(V40?#nu%x2>gRd8nmJ0-0yyx0%`0-H1N=At7C&x8lP2AMdZmh#^baY*ow? zP8S?mId*o^0IBU!>Fr`wDjOscySt<~uaWS1@r&k-)lVm>^$Ra$dS|K#T^=Oq5`6ya z{;jK(kp3{`PSxXZkqve}$Pi+X7r~WwrG}8u1-ub-F`^m!3@Q?Ra zopzyrEM5RlWQf14POchsTT=1HFunO%ryhy9;A|82!st%;D%e|EeU1l4LFB@9g2zy` z-2-Z5Xjblk1?<+2UZUZ*-GFkcXw?DIksMU}J@<5O=yn%upal>zEFPT$vy%Hb<;#+2 z1!LRKtKA^x*=2HzE?r%MOR0N5WErF|Q`e+w$~z)^rtAI5>`{)JLwH?qo|fEEv993L zSPkwCG*?TICA}5u^K?fx7-av{_|LW*k6EZ>fQc(@A`(zDKu>hzYKuDyr{=~i9w6%b znuHJ`q@y{xUDX=2V3@q40`2vXipO^!9Q!9Jo6rYi8FjRxr#yQ z%k{P%JKb@MD)F@>kGxNv#`uA7(%fD>=7N;}9U4WQ11&yyrfkD22=8Fd$TD6mF?s1Z zbl_~)JD<18@$oO4c$J43?6V)V=g6)}kO$vjX?jf>1UOU(&A9k(v#gl~VC4W&|7;=T z+FRm`vqa4Z(aOT-tE&7gWw{|QbII4dS8uyyit1S8_$h@-9yyTL`+r-TcLW~lnbHOR866uvU(NpJ0%8>3^o^f6fr~b2-4t_0fwhz7UY3B%mt95 z9c<$r+{fxUY`(#^0LI8u`<|kvM56XLvvf!IkL)OZCQbH%dg`L*U&l>jz5Nv_6a3nQwj4Xr!0}le$BE3IIiFM zCrvf4)+3ppIj+?ZO3%{wyr08G;+lj$RKjOsUi5fw7k5%YE;g z-?&;EC~vCaD7{tH9Y5~cQ6EszUv2JjylQwpd~QLg&;t3_Xu?1c>ki8DPV=YxWFe{% zxTpHJcMIuDhRiJQq15_}YCOZH6K>+gf9DK39_umpKh!9D{HEs3#+vGI(2Z2&scUE7 z;+HQ9iS+>|Z-48)@G^jP+Qs9eJnd9(sXZ*jP%N?qYRYnz?tOQc^O8DZ^{mA*Mamkx zwaoJl_Q<11^!b18vW9nDWtmKH0&)MKD-%k;1+)bn*$`=ZC#qOH$=vtIPwfE1 z4)5q;&F)mo+zR8VmWm#XLeOzQqP)+PaBHP@@+NmT&OFTsD%RZ!yXnCU?=IWeHdboz zV_e{9++YRgh0D8Z8egr;z3-B$1CbXbL%vDiKQEFakZW|U>fe=18wPZIFqX#l{zeM+^TFp_^mAmwH^JSBz*}4F3;f|6-Vv^5+GKwlDS4R6VdTGO* zr+%pm`+h55c`P8A3w{DKVb9M@-L^!FV`}VsT^kAwH`eGb7u=fPRAa|3wiMdA9jv7H zD(rt$GPSyf_BU|oAPZ3I+1CR*-%;Q#oz9Vn-)v`}Y7I)w7@8+bBK1Dj*WQ6>X|NQ5pQcuWQOJ!%c1KQ$&!M9I30}3grs7 zl%mM4c=I|9B03<|`IOmxneq@k5*0xy3}SuRqkyZj@kvb~hLs219wpx=XZUnqgk6Ol zS_nsy58YkD`k>4Ryx&Bi2s=@(wh^&EsL?AhMatEHcGH`eSEY*VH6j2c>$pFNViBQjfI+z3(egWi?Pms25k z@>bqJQ?iK(NpvSXfzz38Q1;U7tN$hz;(0$UxTPtW{C!Lb{`qA|D^*?lNKR#S`vIAe zX6v&jr|cK|oTf9)G*3=Z^DI`X6kNG&Ij1Y|1}&bM@2+CIl7rj!}@&vCBEF1bQ~z&wpgwrmQ8#@=ao@moG(hNELD)W>Q7a+m@KubkPTA8buAf@ z%YqY0l2z4(XVnZK7ZeQBMk2bfeyZ?_FYdt&F%wI>`X)?Lf~%9&W*mxy{^X};Awgqp z8zbl89`Xyh=93Md1@vUZI(sF851bgwH$C0q5?Rc>>(!QLoi?`NDfF5~3&q>PSNL3# zYZiAMww3($Tblr2L=Uhsx&Rf@)x8NQ4t;>UtY6qUvN~iiHC1wjm%Q`9C1P`HT10gy zH;#AEk7e{-8O$u;S#gr~kY4R zhVmYO;<-F|K{UJ2Z$s--FkJJWlKAf3xX*+eRSdka)YS9#Y>o`pd0sEG+gZ$RjEh!fHhscfCYkb#=F#k1_3-g8uI%^3{BMnQ9PF zF`|JpD&2wqd)y2P=f9C(Ss*Wq%^=kE>`Wtsy|d_Q&P^XJ)5UN)yT8$kl&vTvL+*d0 zw+=$+)-yrW(S4>|zYYJVcrf^s(YQUbjF7T7$0OF|5Y_Sj)&~B6Ekl3@xPQ67f36sf zp8pk({)wRf8?^ks&Y*+e24oulzmexF2Za7}#p6&T1cdmR%bLWpJ#>7%;vV1iZW9iG zBJ6h+2mRyG9@XZ@(&`C7kEiK~9*S_FFmp-{+P6Jky8XK8`5(#`N9~1^JFh1Y^^PXm z+Zb#1zv#|8PGwKDnqOn>Sk@LSh@LpP&d!mO@NnGBGm_D<^(%INKi4Y<*pz_-fG}Bd zwKXxJyh4U@1IN4arQvO*XlcElkg0BkU3LUvH*;#?SXumRw+M1HFu+|1g@7WDj%Ol3 zujBANL0>+cfUGCw(%3K4z;Z9nMhd!)bzL8xk^q)koLYjGy4kGfu^ivv&2%=vHo7s&m-J&<>B)}+?!I`eH#w%rGUQPS!;H&tF+g-_yk zgUP;9+8WEI$}B{!J=o_zwmz7Mp)5@R?ecf<`0TI;5WF7mpo$Pr{_|DbWnohs^YvS3 z_f~l}V6mcL?&z4~ZosN0SDwov6q+~V+j;U!3cCmLh&U5|s-I@)%@-JwiexDh(|v*p zN_7KI=*naXgo<3hytw{Mcz{&KR+^k|&G|8Fe7?=2;Y$02mn2}YcQUeg_j~5YjEE%d zpi{1HY8b%_SM0(w?cOKvc(ksOchcpz37NJ>^a-Kk&bwcqZ&Y(M&L72<*EhFpPp8Fc~4scLhx1GqMp{y zn#*nfwJKZwE%J)bx6P9njZqga5w1?17C5PbzPi^yhD5WIC|SNEjMxQ%9g zV^3S`n`3wip!NZ4_afP^X>ld=&U80Fmax347n|pTr-yH@(G4S9=_`yme&}bxBefhJ zZ4U1(zOvjqYy#`EPslvO=C4zGMOyri1@{AH7xb-46k%6T21EE+F!PuKZ_h{y;371qaIzm!B)s4w@@R>HLGz8 zS}%eVW+(L>#zDD+MdjY6rzB%Sc;q8@ySt1aW<$cAXKqitY7U89X zn~Yu3`c)qW7IBq4o(U)TPqOn{w|eK+wD;u=y)kBdX`rUN=^R-inX_5p!5My$tfOrF zT!~wwaY?p0fRW8zRIu8WTZ`5>d^wR5)_q)~RK|$4M{B2D`qJ5PJe;p)*LFZe_X;p5{1v2=#^VGvS9r<#~H-=Lax zUk~e6tTZvXlRN%g!ilv7eX?E*@PMjf`%oqDij;;*SLqV4_7hPaBuIUcRbM)j*wNXp zWd>UrG3yf{#3t|CEK^pPm)C#A!aWvaDNn>`x13;A4X~`+!MhrF>z;xb<)t*vR}kv| z`Fu}NVJKrTueu%i(GB}1Sso-=J2#6v>R*4&Y@ymBT{ieE;;hLNg`sR{_fDBx4E?Qf zx_#MpV3H3ne`Ari#HI^^=U`j(sVk)VE1Q|Kkg)s0%&H#9+DE#G9>^fcK&Bks;MasY zK4%9YV}PUJJ=S3$A^$XW%D6Zd6rl!>=hv;~h>h?B_Q(s9Jqd3@w_3xbWZI#-FtR=Y zDT?F0(Y`vSyO$%ldn>0MH-EnLn0bHbD|oY1&ImPvz^aN$A&ld}d{_zorBvZMBpSfx@x11uS*M@a72d0z%_<_}ew z5Z|oFJtQT{-f%o<@ngXS5zPQK?>&#eFo``(F;He>nrDnc1~8UR%9=hNlrvh8T_~2l z6GbBp^`k4s<|KQUPtToSw4jH+ACLTW2@>Qv{iIcVw=nCYXYW1Rzmqw&Obk!H_$vz@ z&wfiCxBL{9Q*afalzF6;9j%+mm|=BEd!9 z$MFWBM&2e?_a*Xxw=wC38*7HYNdH#gS*bvW&tOAhjAXFc^sL;MvN~by4i`1d>wLai z{d327jxmLJJTIAV7%a~39&pOtAskM0cZ5I_0JC%!@re()y2^Xcl#LLYJ!o17RalAt zt|}NZ3VGl){H2^vERZ;dniUE#%KjuT^(bDH!iv9NNuVW-DG*r6PpK?nJ?vR6+!#c z$P$sMx;>y>UXYZNbpxh7+83T6eK*3&?wQt_P11;wpy<$ zY$y#SVDp&qoz>-SrX07utDALr2M)Jt3ljCXW>=F>%fHjMliXRq`}P!L8mzw}SSxJk z<8-%R&XwB)E5_4VZ|+R&XN1c84tg1d`$z*D{sL#vyKocNW?}(NPHhpx8LTpLU?rl@ zB4A-_KH}g-R>xdSX`W?IjPhYXm~gOX9AXLuYgHPWM!mH33;pp!%!PW>wBL8^A2g<% zshWBd_YS}7q~U|qfFE;nQe6J+{14=JBE7<|Q$8rDiwF1Q(z%SVXQAJ-hcY2FEpCYXo#!WV z6<%kCrFivve*eHau%tQ@Qu}>z`GHhLr=_(s-p`xXb(~GzZe!Xytx@O0KWff1y}7E( z56|fn(Hz(4zKW7i)cEarww*zI{8q4<)r?peYw^lzOr9~+a!g1*$%vnmB1C-Jy=7gz z_vQCId8AXw`%Q49^gANw?tRd+NjhEv9&KW#ey+9=M1?~*^)tIhLfPIVXYI9kOZBg) z-pr45{)19GMb?U(nmm2R8hsC@Ycw>)a-Nz=vg-=&w0@|2YB`5Pcg4SAWimw_n6Dj0 zg}m#wneyrhT`ZA4EU>{=d&FI$??9?ifK;dA3Ic#%+GBO@P`o0WA2p zrk`xFh!F1E9XMc(t3diw#5D<}uPYNP>A4jKtu20J(ZB&#|3oP*IN4m-@+ti>(sEQK zz;Yxn+p_-%jI^|L(%1AadSfmw8Bu=)`#A|$*{VqAt4iZ6p>nK9MSdU__BB}62zgv| zyf+3jylm<5bRlYLho?=@u5gn!Uuoe(_8tgM zdp#_jJ8T*<~*uALft@huHglu+T*d+Tp;Q9_ zk)_jh`UuQv@JLU(+p!#3dr82Ocv;|5+<9}MlWeWk+S!xQPGH?My0esa(9YN5RjNd> z-$_6icQDmdl#O5cp)&C*S&l^yj0+}dGA_1wxF4d+vj&jChnc-G$fs=9zz{r?6x`_D zb9Sl!dkeAJ-+(lUp!GsJdszpH49%-x*h)wy<43jsi&2Va3kmK^PjCyKn-Ox92vi>V zpd2)$vGDaQoDiIzV)|DWdZEp&qq%24_U&TiT<&t;o5xC&zm`$Zg&47~*spW@Mb5yt zbE{+i;@*XSoo8epnp)rkCWLlc`}XH|(rN`-5Ie0r^DK+Tq;ON@la$`^6q(3RS?SgL z(^!c*W+nm#l9+S(m@Ns7I)xjw`4ULyShAootA7MYz8%GKmOR*s1FPV*uLR|Q#Jg4| z?0Ohv|BB|!DSo7pk8?^vV`?zXoVK=LiZ@W!9I*E5)uqihC`-qXqo6$Ck2Kf{ZDz-p z+C76KDz?%yohh_inCnAqr2nEOmLtU1$t zQS;6W-4!oEt`qMb@b0gIF&}h*|S+?C$#hU4bh@+I}8uaT90x9A_pH z-4fs28qZ3P^$)$?S4v$hGK|qQe~YwHoVWRU3%XbvIQA4l<_xNjR%V>tn38CdnL&Ja zu5*UkOXpUPNgsRyRj_y4?jXfFd4{%Uz$L+1_^@K^DMqMh3a|S-sw=j&_ zHUfFrlpIO!%Iz*oRmVbN$Y*^7?(j=6ViUKO%~jaucH(t6)r1CQlS1^zGf8pxhD}aY z`02m)DbsY(_367Z{!|d%&U9=|HysFVuL&NkQpFpgn6iv1?WzGq4zNP8cQgkYKMwiVt~j2ek7g6nFBElNlBL+RIJ+VM|-q6m;J%OCVPnfAuDYix&#|#M&a~aN{E3?I!di{03~!lvXG@`&`a| za#g85HX0=q2bL<1TmyfVV#+On5#0uv6!{f8z0%BS)>N<&(%^Q)4O^Z!*rI4&3kEin zA-zYFc;gx{m;`2_F+3Pszoe!r^En6D~|^KDKk z-4v@uvJPF9AA3b_Pe1lZz{S?JWP3zup^_j614iRUunV%&|^zkNQ3fH{Y4^O z;5Yp$-q8~a&Fbnl{NNJs@UccQir1|J#srbF@~tm`vctTCw7tL=omMbKU@uIxmUI%l zspBr~@5=E$&|OvEj1W1d>7z#pYqxPQQc34s@PPgBwe_shF#`;wEix9K-5aX>GgmHb zwX&s_QpuyHR#F2>zO5M>;WTm*yl?S?*Sl9aXpvn=&ld8ga`3cFK(Ji_dynWb8H?OZ z8jCz6gjka7I=-{M)I-YLRAfdLq>6uoEuOvb;&^14T&#u$M;Y$uqqrdUnk`fZKZ;7aoD7z3(30YFv*F+&pWM@nX^(2Z=*+Yvx+t^2x zeM`*5V90Ll+c0Bzuc7UEp7;HI-}jH7zl!_5?rS~QIiK@6=M1@&+N4#G*3MGbOv?R2 zDkphg(e-b=I(x@3-)lBxE<2`Wp!Vzd=PdZ!OJ`-;+3NXxOBL_73M@LO5Tzj)Nj;9Y*u$Rf z&Mj*>XStd=JD1}+paF$P0RH#xyu$}m%W5!#B^|Q^6@u;b?J7an5(HXbdPFJO^gWj| zyI9U}S7lF)zyQ9hL$lGi_f6J=!WofWO zvbomNai6!3cC5{!%L9on9`pWKMVcefg`mzqFq6g$9{2E7^STIEY>o>t!l}R9lf9nv zegONzBN1JX2Hm7d;Y)G_Ufh$+z-^lID$wSs(*R8$qw5%|qfJfY>^M$E_Bg=;d7tAm znEsll_hdG=u)q}i_Jr5}h2r$PJ1))7H5X@-^%R|x%!;SQynC)W4d}=^d(Znca1T&1 z_LBwXzxqSbv~R9*`N`ayc&}2?Jo5>|M1RB0Yf ziXfnNA<7~HXJC}p&qKG2=db+O{Hijq=q_Gx!w-%Ia1iF!St1^v z4*j6PH+O*7?H9Jxs8w9nk=5HCJy41iM^443V-Hb=Wpndi1PRxv6H{y<;Rj)^k>fdH)utY zrCN02Wu)6Vgq$YP&^PQGEJ>7Dxux6d6`~0_BTfPQP#Qqx(gL#i_|vqY@bfDa!;arGl-XXsXbs9XEEb7TmG?X zH7972&u54<*Ce8%`QQC;4+L~Y&)wTQ=jrN?;VhU znkFuA5A^W{G>U$wS1Z`pB;*HD^QeIiCE8Pfz05a1-jO_Fm}@?qTl$?D;g6TWM|f9$ z3|z0{cMDoIN(Se`Ve${u>qc5x4Lfq(0YA)$#SJb-$d(UOAj(_vN{^0WRWWs36w zX+Vo&EPtCsp!?tKfr}RwCW5xkc~2-}M_tMt;xTSx87^a>0kRQv+Wykcfvk_@#~n}v zI78!PFfIJDDS3>5brxfk>miG+9H_!sc$Y>7+&~iJksFuBp%(y*9s2{D1oC#sb!%K= zBzq`vzPt{|n>GvIF;kG6jgnD{&S-NG7QF@4_-gu zjkX9n#4yeO%h?ZE*K|`3H4F$w1~h_kyL#pM^+d?2%iZkZoa^2rQt|S%o)B1A<9RB; zP0$Ma?b*9=9twxqRxt*UCr^xGp*G}g>9wqOcXf4K+PQ$60BuS+8Lar5OCPN6aZe(s zj2Y6lcWV(>1X>|mv^X$`-cwm0{tIl`sn3wlcggEKKja8>EB-7y7DSiOgV>1Yx=s`e z@gwIfXz)jI-6W8eA$!`3_Z(;ovSdu+h3Ta;~aK>EqI}R!P zT|WwyD4YL!MOq4f(qjSDA7Ba8oHOM9ThhYEkV*>ElY*Q9Ke44_FIuZwcmkNR;Iweb zTjVLNVud2@7Jk~+Db_KN4`3{Z(tihmqI@*rtI7)?E!*9n4tcVVfVw6dx_~3U`_pj@ zK`X$O0e~?OjFRy?KbLBdAOujM|JO(D=;33h$@gDM(kkLKd4T)Kjq`jDjeX+He%pfm zY*LqgY$*8D6%^!CAI>>xtMJGnhT=ZH(R#>pj-m3vSPhQamz0A{BoABlAOv*4%v8IP zf%Y6+CXk5-!TEgr;?srGl^Qfuc^;M^Eg1BI#)?CkAV9`Ufg?pQ5n@%#JgRn!>Fb z@|p0x(!a#Od;P0#qu%o7YOr1J1*qRb9qgAwK3SOHpkVMl5H`M`@SG}- zWpov><+Y=ToP!d!72zb-YSe7XH4r4yw`j!50(oN(0<{LD-t%LM{&p+$|2X{)&HNT5J!>U#rn~vQyVhp1HC+WT4Ymq^R@1avTtG%&E4u_ za?9Us-|O;UVS+H0gtf5#Xo*cRzs=Cl0?UMH++Wo#} zYcK5v?pof!R*SpT`#wv_4sTxI^S#?bk55BlN9`-^5={na-CJ*ty)ZM3AG3>I_2eUT z!@S4iw$Az`%omo(Nv$O2UD!HXA|o{t+VR43S#CL$^RgLMG(E>sKeWS4G$}#3u1apv zQP!4FX7AfO8kmTxo)DgGUr*i2<~5|2loZQ(OA@lnc6(6`SEja=8Cx0D^S2#)MUWgtmo-i zbBEZLGRrcfc27-plP`p+vj*u$D2MpZmef{le;8fJF!6n+KvK|lt6aar3}MD{P8@+; z*mS)!=VM`{N>(Na>9ZMtA02i6GP1#7_uc49Y{lNU7kzC_zARPi`l@w#t$IM&qAzY% z3NSx^bUN=bVYw%)KOCp9&ClBW>wK$?57NR5_tp>+k<~?zkt^fuvJo{46qx{I1h*x( z^dZjEzOiM=dV{jO00-I2IUcy+o zTXwGvie`Ck!qF;gY`xpfqPXU-gj|a0*kwo0yV!I$&lcZj?*_v;CwiP29gywO)&8Wf zq*^!cN8OR_mnlaU{7zKKbcN+#dO*@C&ovdEn6^qTTGsN5tdv zF%!5v5V-}@=t_bU5xjKrPCV$#28bmo?F1V(jyglhQ10xmiB5 zf$p329!w6l=X{9cr|5ei&$f8HbpLmg=DYC{^yWuz^b{x|!cfq9t89>PAKstAIgDcQ z__I`r^O4xio_9!h%cel>X@8$B%|JBHOY5$fynWYJbrJfUX6HuMBg}Q!;Y!E+m(2}7fp9t+B(LosGYaL$^sF@Jd26`n(k`UKr{_R zk2E3C$X7gPlS*W!T~~b8eUt~V^N|v`vLE@n^;o8=?-IMHG)SeEGn8h~B zTVtYTEskjR(}@K{=!pK8i)B4l6Q55vRJ>olK@@Nq>~4N6P-Ib-xUA$0dzY=O{Jt-A zW&&MU9f>x5l5n>&-xc<iI`o42}lile9#b(z@Y+MQUCOugbqAxZy+0^R(wZLrW4N;%Ek&G`S;HFeJ^5wA<0d6LlT7}f~r+p{r zFkNoO#IG~`U4w$m`C9MZoy+96cKo*9CmsXWxOi#`n`x5lbWAjL{7R67T`};8$mU%8 zP=GBgNM?dswoI*v?*o@HT?I-M`70KX|0X%^U>${x_SLR z+)T87H=t8}TM0(H_1x||Vao6{S`Bl?!05i!fECr?l{F0_V;sl`)_1{YQ$H&(QvLn# zka;9}rvFvd0p{zD3-1NqhvqZC)+)_R&D+EfXFe4#+8#%zTn*NtH6%SfZEnLITELYu zy_gP5f{Y2VD116(jM+zI?}GQ8&{mXXfRFXB_}B!gIpjstlydbs$~lCjqoz$5jzqiA ziO+VF<{Ap8zPGZfyT)J`eSa{07Un-(HYzWxU08h-#Id^gDT#KnIf%k@0!brHo^jP7 zXsN0G-wJ|&$2@fnU>rXI8;cKm4DN^65RCujLdZB6L&ccLtb&H0p}#EsG*Q+wKsrCh z83u`=|Dx>s!n}FGxiy}>C*IA#+&-ka4^ag9EVdr+amSh4>pmgK^?RpMcyx*9(!w!} zaMCpdtn-D4zRrGlhO>&?8kKcW5L0Nb1BH{p!&hvLglv!HNdC2qM(CSD2{Ol|%w;)4 z=ek*Hri3{YH_amlfecm!0w(()3M-sC&PFR;buG)iG99ES&RA_bfryCvG+hytqreHt zR^%@AGp5B9>ts}E2;F@SmpWjbY-z+GceJ#~kOr4|O$E}ec;e3STG&~e4qgXcLxcn} zk-c^z9|&`J@tK>?DDpjT2bmSR4~%R3CkASQfUcBKOqAMHh8xoPI(@O9_FpC0dP_kr zC~x4TwKc&6IOGM>#Av48D(sXJS7o3waWXTl=?m{c6jif>{wT`g%1y}+ML&4zB=lhA zeos0^$P9CIWktQqzP3h=UOZauiYQbvO_-h7Susy3sH7c@WwX?qmn zQ6m>bhs<*iXCLL@B%H|hz!^d_cr%11v0&OLH?9X^pLf1bsAS1iaVG3Jv)Z(mm1*a@ z?59_QwR+#0Ks=!xN9f_j)mT~QJn%n0tM<=~*S;DD&Kp9vc`?Y`rOHOgnCeQ|`NHfA zfomUF=Zeh?E8Zr>KK;Oa*ReAbA;1RW$ITi}YD2ek#$(nzJ&Su}o#G{0j1T{P0Gcr|H|0=57v*J~ zSF5s0fHPYqA@xIOHrGrE&~cTLiU-OW&QQ2j0d_fafEUovA~T#vX~AMYXmG7pklpsN zu}X)T7(rn|pH`51sQos94gyYvF`0%>r(6L7>tx}qavRK&SW%TyR!~Tf_qGqIh|*ZS z?d_Zy@7~9ECVi9p*-R)0H+mL~T(9xumOHa)#fpQkki#~AZhkvnIxsWwIj>i7rrFRp z6+>hmv<6~!oeuZ4vDU!+6Y1gciDr2;HCk$yRUSMK++3@BDn)-eTJ3UHavLS;HPukQ zD|jZSnuw{z9m{ssvJAqx?!;Ogl)~#m3F46Q zD<7@a2|~-Wly2t@fUJBHPW!Stq^*l1#)3rhp3aN8ptjSuG7{ri*LIHh6%GTf#$#Ex za-MeY*JDSfZk@)84KYw%2iIkyO<4iu#2 z!cFQL8*E6B(k_I3J__jc;LLx^#@{3BvyAZg5Tsg5PJv}K+e1ea)BG$D_fbN5o6_3s z8N~tuNm_M8Zq^h4;vgT=Z{}Ste~~>cy!eUzs+zk?!E1boh*RDp{zgJz^p=vZMz?nv znuFB1PyAxUZynyvSzzh0)4H@lxyxWF@rKCC z3ehoKkmf1AZ)xKkr*D8~wYive&c2u=+c<(Z#C=YkCXULq$0!&!ibhddGp&7OJXe?$ zpJ9SMv(jUm>#J@H;rOi*n2X=qsS!rvi1+fa)eA)DkSdhS(LCf&+~lRd2tZ&$+W>qv z8u;}K2&!8bEsD5?a(cDrwI6Xb-~4_T6=P0FUKQ}6PsH9;{u?SKLB>W^v6od6)R|uC zTxTpVvc9WN-{t>lf85?Zw&(tXmF(D3v~Zik!M)19*t=p-EMq8-YC70tI1{_7H$a3% zRnwKyV<~vnEc&8Gnrv||sB40Gp)kY~zN?q6i$t^54^Q`=J9BKF$>K6D?>nzh_@1hJ z=u{q`#KZp_M>`utB>+AVu*a=%!RVsKgKIPZ6Z8+JM!NIX&5!Yd)?}Al#d!x~eGjfK z`~T&#HwU55=74R$%yZEBQRS)2FDRV*rwF?Qg`*mYZ$_{b^oQOj14xGP{}Yn=jb;50 zUShQFh&@$RCZRSz|9pQ-b|acV&UPh%P8KID17atnoRCqr+C_W`8vivoZv z5B!ff4{#xXDBxqf|0A|F_XP5})$4=sz?Cc5+9%ti&M%GI|euz zyX!9e1wbh+Q7r5!WE5E7rBFXNsSEro`t^SRw;E8wStyC6w`{ejyi>nbUhlrTf3lcY zl59rC0@G*C>w9*9D)NZPKcpu+5T9>vF9W8J*6k={S$%G8;()H8-9v~Y`2MeU;adPj zv4q58^*v3vWOZ|d!v8AU%PGYvbn1{Hb&a6wf4^@Y0O-5~`7`!w4h(>3 z8kxO|9}b-?Uw-_h*suMpd+=rZvS9&ya9s7|Tv4;aocP?-q$la4V0?Ii@wkrmdV*H9SUO1DT1dsPJMm{M2-XGJ~9@q5gi zZ5X%Ro8CFmvT4SowvpWM+^G^9^WErtKPCz{G7$=>R(}I#_indegQPgr&*f{ovo9RE ztD`XfkftVhr2VZTH{>nM!~4iuY6Beos_f;7h4w{EKVyTAREw!BWh!pCrJqqG_s;z7 zV}ek7gwqZbt(pgL9~Gc2Smne?cOU&deH4^K_tc>TRth(HKtjC$nM1j(J5yQ(WLFhr zT!%eX!)q#|+*h4D><_mqUU<>8dQO63p)nc_;^C-L!$BXt{Q6%VKK8^Fk!{Cy$kjb^ z^RVAma9IENuwOjCugm&|n~6pID!ARb4dKTy$<-d~96d55n2h`znwrIVEfZ8q0kdQE zXD1|EYy-)cAa04QJUpNn`*h1GK4v-KShe)s{)S;E^Vuu;c|o~N4cYyUeJZ+QE{eA6 z7I;&Q*CV$~NdBK)I_TlS9*Zr-u$a!g^lnn@zrx+$t4)uq(9a6fQacvEnURMf=VPN2{=o z)0t+9*noSteMnAuH0fEG<{Y_FL0ZlZIq``1X1;Gix=n(^TGBh?DfW+O_32Y3!^B<5`h-KifTf z*}t!WC-v6Rglt|Fm~wwaXg-&t%*ts)+P8I3sr%;ekZJo@MZBc!?WJ71j0ir#)fdA! zJ08W$0Xj4Id!g-~9d&5MBj|cYA8xGKs(|NM-?Yb+6T#{AM{D($G|x0UvOcCh2(W>p zYcq8ng5(Z|2Va`M6F6x~%UX9>X7&Y_zTw*Y8P_C_V@eaMKC{zF4d{kBy#Scyt*K%$0X;wvua*N~ayej&P!>SX*_VcY1;rSAq?c z-C9sIKWV3PfBF+^4cFY!vytlOd{2J7&cP*2{m3D`YWV4y1Cm*h!CtknGZ;Sn`P!!8 zf>O)+>I{qE^*i0UH198OKMvF@E?=>)XDzf33k-??Y6 z_qPohT?3*CNbc9Q2t4Rz#*UPq_N0TmB5y9e;5W|3w+h zU}xM+pmr6_qXrg-hEvU%HiQL9?)$xB=>yh#ye&+YB)?8eue~jZl7qEf$s^xayUFl= z+|^SUNKRU{8C`F&@cI^&DZYGAw6+JKpOr(#f^ z7+IPUIEBD@_-^z6;A^+7?2PnbesKb>yVt7{e zk(d&sluRGnS}KOZtxNha&=Gf5J>~JQ+g=x#{DL*C%tJ>X)OmiiHka6Ul|`-A{=5Fd zUaRcT*D5}Q$8%Gsgf21oJ+Td4jb4-ebk9!uQ+9%fg?>C+eLWXdH{f9MM@?_Nq#C+7 z#$`VhF9Ktj#h>$OUH3gW^LM?f>}Dk0G}h_K>er(*F?SYT@VKGW6hx^n(a}VIPMuF0 zHdAg{98+}RCd9Hqmd?k=iX7junhX{6n7}L-sbH<@~NTlWG6)j3b)Nt zHdsCJTJqir{%&VjdyKVbq_1=IXLO1{cTP+Qx@xh?P~OEN#mSOtTPc{J^GP6=Rjz*6 z(jbK+P&n&j3aiqakY`QbPZ8cp$3O-yB1*6)L@f^8w=^||lU$*%E^xdOn&nClO`dAl zr|!Kied{cQQXQPT(kJN@4hx%@vYP02+Svf)G>t#?zh-WTaj#!pgX_M4u;7new7R(9 zPE+nxV*NS$0a$T?(CYAYHMvCQp;ryJPeZW>6}Ar84DU&{Ipx^G4;c~OP8^I;G4N%$ zk$kD4^$yIl7Tu?a7R$@voJ1vR2bP(r=M37ZS*Og@2E30i7`<3$liqEElXo_q?M0&bTV> z92wzxE+AaXH`XHp@4D|+JROilaxv)U`75@@Ne3rs(79`VKsrm0cAN2_b7&4UudFrP zx!8MfKWg6W{S~BD@c{Lrat|wlR={0r(wJ5?2IT-kgK5!+bNJgLFPoe!Us-TbrE&N&Q z4=%yKo!3HS6J}S>-F<#nP4tK8AN)W1x_2Ge^invFU6}wun!nB!(4zH~Q4^FuJ`qKB zPN#XEWr14uI()pp$EB}`rPW;(WCC`V}Vo4Jh^b*nf zG6DrYi<&NP5+?4g5u+fEWBh+~`Nmu#M7B?!;oBbWsaYC+wqV2;CIBcAbllU7Qj|j= z585;QCJVwaFO3Vio#pAdrUB}0WX*9N=MHiOg+_MbYb2B6N?d|kv$_53gU0w*^Q|~I z{}?>kxw#9b#WMkL45Mr&kne(%UVdYE(zJ2^Y5$(@FGmKteVOz5fW!YH~x^hkZ z8X$PtM9g=LTGshv*R9U836Kx<4F*FXy8_+KDTkH{lz*l+d-@mI(+BJqK()Vn76QdD z#=>f7FVH!5-r)b!!$J#XSa=4OEq1Bz7y@;P$wC#KX$Y-9Ajgh z9zO?}yZoou3n|>DGJ_WRo)#-UTIwd`FMtT3TC1L{k9nPDEH@d%rAJpfBKf|)6Azc2yF;7#49PM75)`fL5Bsi!nRj!FU> zO*bs@sCH~=hIU-}SW8?5tEge==?C!y-wJ;z<}bG$CtYIJGEJS?nYdzdu$ z4Di7~O(3pDP(?zmoA5N71=IypS*%;+rw$!z6uW0^S@I<~C$l&Pq zjZvksm>~RWHLrL7khW3MOm3A|v{^CC)^pE79UeQTOx(~blL#8i%cQDWja20Wz+!T# z#dH9&&nW2g>?|<;XTsvkE$VvnpXeu9UnSly7Ay*aVXvAR^T6WV`lQLJ-kddql6tK+ zwyY_K20{AmpQqzdYZVK0lMX)dmzT@goRen`d9+6lbq?+wJJpR7g}3l+od}Z7Vl|l7 z8Wy9-qE76J;D1oU0uetJ(c~Dalyd@1+0lz`(u;CvrzhBdle^Te_F*I9eCv{WCXqKVQ4v%uRDFy6v`e3)*Q@Q2kPg} z?)XWn5qd^;tOtPjBDOA0ViMI$ypI+ zi6hVfD~;h~gk{>P&bb><ZGTPYAQ22co z7~+Nl8VCvOVb7P#v$3flfQ%@)xjOat5S2*6A(i=J=$j+*9e|hLfHa@=jI|)SPbI>6 z4JWdv62M1c2-uoQ)(emkA)&|}@PQHkmQJ&KY7B4rf1FY8|6vp}DR#sg80jSyzA7b# z0u*u%zhHFh#rvIzI`0#}Ct*b{^^}g$e;cUs;g$$=k|>@MKR_dYbsUm&`0Nhs2KT~$ z4GshFJpO*iZ``^24yfAHz-fWsH}BoTEG;%8@QkIPl+1zb^K zgd?dQcs3VE-en!Itt)daRvTHP7fk-imsVs>i0np4tNcXYG(#`<0eaxhsq@fo8}(E2&=&SKR$b3n->zE}#Eq z1$5tzyBgUfpu!2&d z^u2ooV&gIo9b2+MjJW1ezb8~7xN@hLi{=~KxcX$S`~_tPMlI7*^^(ZK)P9 zf>ki3vd;<(r~l9JK!{{Yymaf184nVgN|=|Pa{1Q9hzOjMHZdAmqvO0`mmhNuZA!6A zx$7RFB;-~M&hYt;s%Pv2nc$pmCO>$|l@yAN$(nsLAl&N;k`;bDPhHbYI5|{_r4ZXx zHEAsF0TEuMvj3ZHXET(wT02iHUUxnq&dncIGrZsCZjw1Mi58x5nQqt>WLS<91&M*4 zt(N_eC~zUNf1}?IoMu;!wF3-cWy5%=#c^0NT6DEGrjC#>Pcf(LTji$!32)BwkRi7e zw8_6N;|<_P^9s}i2gG%DCYrSxgxaR2@dY0&T@DRZ_tQq z{FFc(`=XP(Lsw;16LU@CT>vA4-7QFTE3Fom%?v`)oYexyN^L#((J*Zfnqb zN^p84hY*TbvkNfNG&c}_(h60X$)o#2Gx|qQ$-0Z+%U=w^|9-OxcpX6AB{C)OdE_6{ z``ffUZVP2MP}9Wx>sF zB%gF{m0>qouNe;Sb*8j5Sa`&i&CkXl-zJ`l*5a0g3Nm}MQd%~dox%+l3Nje$=9L`* z@ePw1knvWF;KtrtwU=$vg2E$yz3Ch!@BPwW;`(YHM>^!QF{<9*o^!Kej9cgo4^}_I zeFqpl4^oP2Z881SNukgA$bJM3^X0X`!e&$pen3Oy0iK%jqiUSE4+C=vct>vHL2D;!)`M72l4S|-=6lQ0K2>2 z(YSQE^0>X*yWw1#axN~BkV-#o2cTO@0s`&1Um1KLsDSG^s6&NqYH5$)2ZeE8hj}O{(NyMe*%ns9~gVVqAoHIErMOlNKatoPn8`ix-dRycVO^Ud`A`*R4;Uk zR#V%sv_@V^3d_15CX~hP=8DWnY%l8 z2~xUQvY9)eD>vnT@3ITXdeLS5EZf#P|955FPAu6@C|w7Yrc0|%4ZChX!|Q+yB@4b; znDL8@ny_&_%{hUBebI# zphRZ5TGjVR15mZpzTu%O* z1~2k^4^7@7UzDKWdi)Lr;Ef=K+j`|S7^X^<(#%5ADdcUrpS06EGoUSe%*8S~+2yau zn)^D1)S65IlmEoNXT|-~9v7*skuHi93z;o4J>cHo^2g371H9e{Y1{{`2lEF+5?Awr zW?ZVA<4gv{BSF|+KVwWc|MBQ@!#` zJ9tu2y)+vw-l8=s2Kca)eT;DY_9N<=$nv~^+4o&EHC68#ANAR@q!|c%W=jFSw(f2P z3HY;}oxDqg0&8*s);P6n)Dr=!I@;ir$~>3cRMK5IDw{tPWY;@i<9LX_4w;X$)>Q4B zg_YBk*5poe$nVbTj&HIPmxEM-AGu$yr4?)Zn{}+ zRnHT|?>mFWw>+2=94*`Se%!r^U&b}BK2sp=fF_TZEACXdy?uTTXv1z z`QhIAKoA4U2V3XEzi&`sWtfYMyamnZ9d2HBdwp5t3`z4!2Fu@DGC>9gm@DOxs2-B1 zS)XKv&cMmh4_NOp1p9tWr!x$@IbufoQm)3Q%^P^&aAH8xW=D<^y5p)z0}oWCt&Am| z8gH~k^27Ka1hwYpDxoF}^wxT$e6vZh3b5Vsg&@-lfMAS#ATb8ECWZQoojt{dFKMb_ zKJV|n2|8)N!1e4}0jw%LzX*7|)04X{m_E()EZ{l)C|CG^Nkh+&e2&W(K#WFKAe`NP zo$4yUng*vjl?hPWnv`Ge>wa`D$l%nY8JwQf{$4$iQ^l>x96htjv+8}4q(}OoK+Pj9 zWR<>Lnd7RJux+vKx8#K~P^W^xqguYOd_0+-L?4nY@p$!R4C#VQWk4~dQll~9ylvMR^HH`%JY~Kd*LIc@!cp7y z31xKAY6Qj4#K}mWV2OoQ!1!PBURjGN3F$7LelRimm9$#c1Mib+lG4qmr#<9D*N)E=25mkq5*@Qi-Vv-#ztJTS8mX1hN|CR-KJ_3~_pnTS z`k|al;e>`xlIQh;UdiI>OIN3r1&~!wb+ZYW&85$?vj`PY`8r6Y4~d6Iuye@5u#4Zm9k!B>_C* z34lNgM>8^R|5aPZqGDvE3*s}fq57I*wvbq|B-GfX|@S zYSf?v2?(~{Ou93~9a>SrejZ5+*Cu;qL5P?s8E39ZIS z>{8(vvi<~*MB!p-p69VlA*M=$f?-UqNSZx z(4rbTrQhoAG>kUWM2whuT49$xbI{gbNh_i~`Bw>C`n4 zA@TPF{Q4+(9u8{Tcp%^|Y!J?SKQUEG6s`eA{C_cOI$GMJ`4)G#kgvv0I6=1qv1E5R zh}HfdM+OS7r8<{78a3u5G>BzB2m?Xtr)GLE=Ro8SdA=_o_tb#Ez!H31S*Vo@}FG-CHX7 zwJ}v7nnPrpGa01gHQEYIcgDSd{E~N8;`oi?T-G7BbA2Tdv?+L#k&AqW@vj?WkOB@E z1!4Fg*m1k7^V8~F(Swve(z`qsYRHddNQv8hL5k1#qx0n(tfy=b=UmNUe(m%h44TBPeQ>+l0y7FX!sz5I0?TC;xo}4`$#*=f2S?mo#>(PutbSsNyoPan ztEb9I{=gGw!+J{5QgH(WxY0i6gQLWS$qwIRc*`u^B~pG1D}Q}^3pF2ba4S&|RIy*e zKSw#>T}4xjew~h=+@>)`xM*|?r~)mkjycjK`AR3E`9a#HTcMH5QKZdBnu$WIxEmSK zuZKNemagI`1RaQLIpb?bj6oMxXM5^-M2o}?WE*&_JD=Za{h)?9;z^w639_OMG9zLB zA`EZ0rGLE3aZH{0E1a3WI!VAEbTP)CNsP@u)|{kguP| zQcRr6YzhJniy}hN!YA!8EP9*g2RyXpULMD6!XCOYU*!v%-RE?~P{cvq=Imk7mxpFY z{TsomzjMu#88=RKe%8n9aTV2(9ZqM%8`R3AIbtklXl(np%J}+9sSUSg1GAvtG7{Km#=P%}9!s24bUO1rfHXpvqUJOqR^nZvOy8 z2qMtjrg+L2N1N~kJ7xnBW>Q1#tNxFo`kpj+P z(V0t1Ghr@HxAT;RC=0qYzbsT43IR!$R$bNi!ZxJjyrXyP7w0zRLIqu8fhSga%^8+H z^uD>XI60AqRop(OgigW{o{l0hCBDuGsYrS9^6PFU3P$F1AZ{-=@Z_+g7V%%#>ON=@ zh9l)o^Z z)-6mQ-T2pQ-HQa4wAge_t=^MFoQH3}7<3?b(5*t(&9s3Y&w!`s8`JxnFkk$dyhDpi z9Fv1M8M8qfvk~$pDuo6OjH+T>?Ps`==~k%qn7<;j(gTrVxEHiHuB}Nn?00_L{T}IY zBR*VXONKXjv@rRm%9Mtj<PN<1!dq$m3;OMC)%(g7Mb+O*MCU^Wq5=e-H ze*_YwoWOj4qZ4mGhu%+~ew5+tvc$+e);_lP1Ck;wHw_zN?C)uGm5zSBlhMmD@s)t8 zCimqrjKhOGz{GV$k*WEEsUv!&kx{c-SOJHTn3+814dO8;tJ%DyFs1Q%o7pu_{QV#E;BerZ~q+2iUH@&+Ax^L?g^)>FyVkS$50#oK{ z04#9Uzi@=Y#5nqOD*yI+a{qug_F5zLdmy>z*5md(WQ$)&RJVKA!tS4=L1s#nIC#_z32jAT4>KR#WR`LXq%E60I&%N!n&$ zkt@*9D`=#LC5!XQpFFyJ=x9s&J3Ygeggf<9_GTu#`(v|XyAgQy>Jze)d)>@6k9ckl zePWIfZEIZrj+f}S>JYf`BvLgB#Jp_Zi|6cC*i)_FDh z=8}9nNS$_9_GY`7cb@}Yzsb$Sxsz2ZY6!cQ;wBkqXiE{M(W}cgxT90+jLos&umqOSbKZbQX$Xs^NDfoMVqsxmU z^Feg#(zjQa_AE6jN}jk8b4f8e4crPEIXQ&gy+8Lt5c4X~-cxK}!^5ZHjBWRgcwJvT zxuZtBtw|RRuOv9^h^S)4aiKtaJDw$+S&+xR_al)eOG=xHB0Pn)$eUMVCAHTZ_C+%O zclW?89P4kYmugWJW?xo20rcr_%5C7Xc0?K$dB|DHYKs6b#3jAByFdEsx!E~UkS9ID?u+X`zhmZ*d~6otlm56KY9j4YX6Ex8zJRJ3@;1b)P$)MIsFv6mpBk z5PQ#jZ62M(Zq3HEmAv}!&pz`!8#|pP@NfZl>!mX4&P5ntgrlNmigVm9EnuSDw?W`X zqpNdE=HAgBM%#!Vr+(_RC}tBWne9jD#Wyhc^6_ajoCz{BmUzz(!La1 z$G`qO9DtCzHHfbcqxg|f0MHZ2LdmXHUxbU)pqzO75;F>&e}0|iZ8KK(kgh@VUvI4D z;%K*xm2paUqhvmPI<~Z5M8lI<>ATz?!frVz^&b}2Q7>ML`WLIf0+XLNZTU7_N_koEYsJz#vb#GBWV2afv+|R!$?{;c z6;Sf~c+=Dj<5ge%mZ!hN{ChKW!YOY(QIU6yp({K39bLV4*LO|w{yW+D#t8>U8B&cNl?l^Urtv)X6Hkds1Y7%C;Z`C>!+iS3gXWpGp^r8Pa>o}Hml=Y*6i#Wk+n*(s?HI{(_f1W5%>Ftk22}lGz{%WuOz`K_35N*c6An5#TS3*;OEJ74-<-T;H?FhsR$I?r1i2i`;xsO4Dq%)r&$tgz2=4; zZ7>qp(+cE{Ri6ctX6io*IBXx>>4d29i7ew2EU#wY6{XHjJ$Sc7gm%^W)!B^^2tbY( z$jcMxza>`#;IU`YJ6;#IUn1+u7G%865-WAjB>r#@ZM)J5mb9%0$D&`Wz9e`2i8En@ z0<_^rZo@Wy%ZJ=X(w}YQ3hrbi1C*n->_H)*$c?wCJWdoENpz3s&agafk%$F<{SUU*r-E*peG@%5Hf_L5~&PdV1{T`_NVt`R|hZ#Ug-FXt!$=qKrq*GiBRS9HRoWU*}j@&n5A< zH7}hi=RYiwaxQ4TzpM=;$~g`a1s!&9+!k9!57xA+M?EA)h zV#oHTCMf!Z4J~m3Lzv$k!X9wvKi;+9fKqGxj}^9HfFE68z`Y5nu^F&Tp~%B_%yyyo z#C6BSorUJcmI03O(+vU@?4~dQ9YSuhrg2R-YguRI?!!eCRe`!71l9+yafW0VqvB6@ z#ZP?ZW|70Su}TnX19K}s;aBZF-_x@!?`csKSZZnfrgp73X~sWOX%MEVKHyfd6glzr zFeWo=!eP-!fm|N7r^lrD{g!7-*LLM^X9PL<3OL*rMpV`~woXty(jLWXGw|&7$FcHR zP(_JhOql_0lv57MuZmJkfGS4R88G;XkCT}?s}%333*)~p=gy?93aMHYyFAA5t)5#$ zgFxI$m*^rhoSBbOj>v?~p0ZR>p)&)yCH*BZJ4G>P+m{JM95nC;eIgOiD!JvWB^LH) z{{g-O?3*~W7dv7ZusGjZptP>Im%QJWK!yZy$g+xX8$U1)%kpbC0eUI1ZB1Vn%>C!h zjklk&VCMnXD7!>MP5KkPA;RIfSAdnup;rJeYLzn-1t~d&+=;RW+2e3GlY_#uNgctUadN_bIPAji@(YGR zrNxkON6(4ETY=~I_49)y-nYisI@Wd#idEffrzjhL!O*Ynh>74$d-)Nl{YU#=|fvhiNpTuSdbJ9Tt=m z_&g{OIuq4#vFqlWY;cSRd-QB0uy2$=lnCo@HP}yfTRzzho4iiHasyaL*3hl+k#V>*LIJ!=3@2bE*VTg!}Tog2;`v zcne0r;Y&PJ)C_V;Z zxzYB0S_efst^tV8`RO=G4T1pa%Y=auA*F-lL62(&oW<1}R^rQ%$33HV<1$i0A)ir7 zYnz_)k}&BzX4=^$QFoP~YQK?di+GahY5*`u2t?D>3sDbBy7CqbJDJ`2N;8>9L2v6i z4THN3DFNiP>biFpua1~7DT}|0!KK@NvinjNilw*&nZI0*rd0`I{vx6Ms^&QsrK~2R z6D`c-d8F%Y^fLvAfQ$T{nZIjEJUIZ}02@Vd))XAJ%wPJ(hf*b(pI>k%#<@ zkm2$+RvEcimDy;$mh83XB{=lXCQc`x{W&AU()f@b!zjSkFsZdV>PZUBQ4rJ#Hb*Ak zu?kb~%%;fi1oRWfp(~8xNsM8cTrcby^gTWEI^nX%^VcG?vQvzL?W}w(x9+fFDH3!= zcs=hMJcxd>wd^HwVa&(yrQY;Wor^M}+6pBry(%SZ#npfz+UY<#12E-4JARMaYAqsc zd($>F2-7%{UaeJOaMF2Wb_d0eVuBFt5TeDAd+f_1^zDS+*Y;`-dO$v{Yf|-{3&JK` z+P~jdEc(9Gxp&dQ3S}?Om>gqyq{;HO%f2r?bK9JdhUo&c!;5WH9AtHW)K7fAt=2>6a6ZkkY1uxktPa3 zKnOM>1i{b(1OcUlBE1Jfe)}YVWoF)cpL>6QT%PBhdFLcKXP;fy{;cm>`}7;y#NmO{ zutsh~^u$YHusD{9ExxRtd={!yzlC7HoNF`7$-|ri+F95OQ>FAnqQks5}Yb;ik4bm5A!`yYJRzW%s z!1%L*L-^WL=IBEW_d(L7TC~H%cp_LdUi+awK^!7hyLjnb8GPxR;)Rufl*jYmSIm5}kcwHthY}0mm0XG*z=N44LRZ z4%>7QsCS_G4*CPa6YyPg&d#UjEY=G(YeMIy{FFHB-7gg$=gwH2+Thl-?Tl4HZAp&j zc2mn!(B8jV07i1$1bYUVVgHQ5!HaTBw10T*A|b(+DgP(h4WXybxk^f`m!>&?FF5H1 zgbw~kjtz=-cC^E4{0TTHXK7;=`oTJYLqTe^{{-fXw!@fnM5c*ar)j`!X{Q2J>+wtH@^@AY~YD+Y2WXV1mc81o{M8`;R-pxNC8$3Fj9QTJ5}0#|DJV&7YF!$ z6%ZSP!;k)fN^j>`yqRk7r_IBc|A?;H)wlA70~sKge8__19M6Bns{j1yYtVhZS*Z;O zjEqiBvWY*8Ybl5Gwo6t8y zbq~qYo@;rMGBZjjdK7x8FE-C~NR_!b`$74X+W1>rFJi&qZAoHH8y3RQkU_jTOiAm! zWh$6zp5D(64O?!d z9uXnIcX)mjOB3?E3(%hZF3$%-$J&m&h_Wx2ss6OZO$1v9QT@YDWZ^E?@tWbb@AIKO zzpRny1_lvRjF>-g@%0JZt%xvPJg5XzqZ)D#x^dL3bIZWBDNUTCnnTpmn#)zGPNJR1 z*qe)v7+Y{3@i#HuVS9B_tulv->SC_lH)(?t*Mt4%O}MBVRkT;9dyVa8trK}+kXgV+ zp==2q7C4zYIW0oTZf8wIe)aMoW3ziKZbYPgPPMDoNYU3VANv!1qTWSfA6i#U=_Wx< zRZE4aA7{e#?4yp+5W|d*y+v}bfdiHwd8Xz*y186kEs5Z+LbR(ns-mmbCjgkbZ$J&% zJ2mN?@iT)#k-|@daA1448Qp|Ki|Dm$tKI&A3M^_v^_@#+8$rqU5y!$#4QbnNHOaf7 zDY7L(V+)x_OqWt0m)9vn+Y!JD z78Z%@cG_eciU-T`u)0!t4$TF* z>vTcdw9BZ3*7XJpx@OJHhk;bDz!7q)QmB=JI?5kDaqwxChkm6H zU#3hY>l4sW7P;8cx#_8xGlJsmdnPaQ;9E6iTYO=X7@7};%9wFyV)rry1MH^y$&r-9 zzNjj{tm6dc!nzW~+_g?1=`4O9UnI=gHQpU2%W~KZhMhvp@8P&*XhIJ=nIWnLLfiT^ zn^T?op(V^`_LI*x*`qEjd;qrVWOm;o#YD*0uFrHY{19{P++aMbXEg?cp%ywo;eYnQ zUBc}cyzgOrwZckQH(MMTH8tgw*l^tlqb+nnW2#*FCgn;KqsenVPeGb#FFm%a68z)gIbWv}|Dy5lv z4)V&r`(v1-wW~+VYdvVFz8RixF%c5F0vcsJnJsMg4ZQETXE#OW8{b%cw>qUWvF2;qPphrzsoKD`PGUB(rXKq+_8cD|P$|eBCD#{L0W1VCXL~c{mPs0r$5w8cYG3yu$0TLQih&kDM4Q z4p*@AtM@!J?08@Kgqf(`8ydSOI;BTekqHc{Og#FKEvu_+TYT_Le?=@~PvTx$~5GwX;M%YOtL8xhXvhRZ@zxAanejq{hF!0N$czM|g z6G9}x@)Txa`HIzb2j9U(`9hC=&i8M=048aJG-386E#RqPUYCI#HMhSC)koC7)Cb=Y z*TpKMtkdtMcnC9v8Qsdzm_8*M!Wze*w?Pv=#4(rWIlv{qfJqSSIxD(>#e#@nV!>f= zm(~Y9w>`_(zbR3uu-d=q)6A0>9UnhNI$VY%2*7i6kkwyVOmmo3=%1M8clDzpqIISA zewC4{-|@juSSIGVBqW9~a{X2m+5-<(lLP3L*s$t7JxGsTWbWm(sQ{7j5E%V|YI3pq zXApc{|F3FtD`n~UIQ+Ld831t|vPv$1y3Xg|7ES%{(rufO<*yn=3Y#k`uZ>yr zAd*!q;9l}kfGy>O0VZj0zv2dG^*JLH2pPLFeab6Peg$r#m}7*RG5q>^ywDqjLyj=a zH+JRa)P+Nov@U(anCxn6=l}643vNQvxVxDBOeT=bjZHOdgzUF{)|swcFNW_aqyaDZ z3LRxlZ=R6drnb}bF05!*eR{zMQ1pnEqHEjMa*<;u$DL~6obBGnjN1p*aEfs=ngH+oZj(fFi!#)_2RHdM* zn24RXL4b~5-us=eYZE?Rl6JA~sW>KaG#?L~&ueUdz5hnJI?pvnKk4A}*<4#5aC~@f zX0}ac_SsB*Cwxl%O?(D#a`ot%Kx+qR>M5dytpTWaCmZ#yQrDl`=zQ2ckkRUPe0nR$ z3=k+_TX&1OcyV|yb1Tu zZd|WG9MX`&$DFklDSLxy20HD8PM|80bcslrj)+yq);Cbhi}H6t5*4;s=+u3A)49b9 zl@xP8-21nH0eh>-L9^cc^CWQx%GL^)@Q7u;3WcKCOi8e&WHo)WwYQGCgCu>klZ1?- zrfn7K%+kQ;jWQ`q8v`{NJq{QC8Pq}>oozqApB68Pv6AW_g{scKmi7xgUGC>HCV<361w`~dzfhj=SX zZbt`6L&81=Dtyh@RxMuk;dvd3NAh$2x#*|fQ&-57pGPNtHCq_Gb2cZ>YjKo0oi?5I z^?UHjo_N5i=4=1$YVi06clBNjV@TNSl-F+T;{CU>BygBX^+{on%383;edj!tC{DV= zRwh3zWlu3cUAO)>7=PCLsv1eOPI2S&YS1r~m-Tkl+K@wooTn=YTa)-F?6f4O4Gi{i zlwE*_{veHY9SHR~61&ERi6=pv(TfTs4x~c;B9gn*O8r{n8Lu zlRZl7Y>GV9YoSe@2oqy$o*kbb<~(4^a4b{=3pOK*QYkdQ@K&b511p@ikUFhB+fdS` zn3+X|dMoT5h*m*>qbWE+b{;QTvafWQJ*ScAAt1p`44fJgG0+(Fl!_)=NK@@lIa#k2 z{OfTCVa-*B0n+H398cA^3~jue%UJVKX-R-rJ(@UiN(ih;N3es1aP789=FR)IF2y6G z(F5bpXSAys-OywYy92iJ5RF}1y%RRHFAXWWxwptr{${<1K#nYSt8plgp~ua|s+xP- zV7CIMhpwYfp&bW!181rnr5d>bKwaVsRXn?oC^S#iSmVfp-yg;(cZqjqkO{7-q0KD9 zcM-rg`VNkRza8)dwxI^yE*b8;2aeuTFAiSw_nzm?!O(3QU2P35V3J`Bg8SmqDWVD8 zC*-RHAx9Z1V&E45B|tLJHCLYfQXv~Fa5EDVYp8njnZCx&IxksyU~>W0L^kYjf_x;A zu9}IUpMF1?y5TJB-9Xdo+fPv=OX#YSlgE0q8S~8NvxNL-_S3Pnfd`kI({z(YydAvb zdOAEK_FS;`e04eaNvdJEj#Vjo>BYlr_+z)DA-4?gN;Mn_?G@h;$G6`yD%+*VLG{KJ zeuY0zebGEqWomoM``6a#^pNYMUpC0ws21(lTOZz7Q(?lf)%|QO@2k;~PU~??l^Nyy zF9~I){>Jovt*;2zQP1~`r?bAYUk0r!ae~l`K2+amGj*3!;CO)rELeo^&?%=yjh@RQ zTJJ=D50NpOR#$|(EZRAUiwA0wzFtx$gmaoxspZdx7GVjUTjkarAw)$fVGvlMQpEVs z*SgF}ol)0C3|m`$WEWpW{|>H$_neAhBjiR6G3as7AMGf|-6SK}nhhJfNRb#9ky)=W z_6IOn0zcP5UoDPJ`wj%MdJ4GSFZl15EF=THLO3c;8-+f&UAZA2Ln4al}_y0$qVyH782tL*#J{A zVy*T(pdR(>wD~Fmk8x~z=<|Q8NDY=8i&==pH(7*$SKOwZFNboQ6tP|FW;_*cR@TRm z^I-*lu&SjG?KnS{;ixpu?|6AU_IZ2Dt;&z)JLQzO2P$YlZ{6^6Tv8Y_D=E6vB`E{` zr#R#B-5nr@^6!6w#vPcy%_(r+S3K}!qp29i*wOX`=bGU=P@Sefew<^pm@Y4}|KP`5 zR&(9C(Wn#m~8tGXkrG z9vZM(%w)I5JM7;^DohBM`vA83#I1;^U*!6j!emREfT|D~ z3ziM`4z-Pi!$p612BKFkpSfU3ws+V(t5h+s`BT3$T;LjWcs5ZTnRUk5G9onJ)x(7M zUfgMYRCGNCbGBYYlA(}nkC8PQZLn=ib)sAICSXdHhy^-E@tX=~mxKZ*FAZkSUMIQU z_DFqu>E$1u$@Td3;94PY?&bIa(fT1P@H>mj)X^#-NuA(W-bnnR3%Fx_UFV|`pq=jF z-C!WcCWV19nQ@DAuBWHXw_a8p?OG4Nmvf?^`hMPt5bkdgvs>PBB8 zMOF8UqZJlHM5PaL42u3m+bx%<8riQJxHXPXt%q<7ytP1>qMe~hTXTVXp8)B`gHEkc z#hf=(2|$4cywu;}n-1Yhn+xyO z93@%QB|I+3aqg_iM>7hu5Do1yo(#Q$JSkDnk5^4)p_Pw#?YlXzP7z4<;tm#6X&R`e z^M(`$y?ZbdEF#9(M?1KqSPlLp0DV?IQU8#Fm@99JXQ=an292P^FQNrUDT|30xnrHD zGm#8(Yl%!)GYQZ6Nd??vf z%|c{}4$4&$^>ewVPQXxQzEYA<|EVMjAOXJ3i^J7daPU|4-bxGhH$0#_B|!1Q!?z<^TXL*1ZUW}QVOgV z@EFQ8vhSgNjy)tp4qdl8h9AL_WWa(JaZ5?zj8jA`4+8$As>Uf?HnFF1$my&J34OK^ z>E?@X4^^SXcrOjSeJtg8md~>$mT!8>IhIm3Qux{26U_c+1xP4nv>B|fD&cdha*Drr79JU2)3~pfLQvPYcG=S)azt&|HR6F$ z{@ww2-)>L2nM<OzE)lM!;I zuP3{^Ec*AiIXhQ(Pg&9t6Yhp8j=<>kjbFN z_FR14c}Z3-(InANe>h^hCiybVSlZV^9;_j6%)4uXbg6MOAB3bDM$eh`X;2DNm5%m3 zJXy9f)^B5c)VI9#c%3`T8rPLoUKO6THdA^M5T{@NU&|Ivq7NfyJLn_BT{e+?T&Bq zy}>&E_F(g2)_fNrr)^@_?-QL%DRkXoL&>j8e{9DiHMt`K58GRnD85lZIa%U%1J=O~yTBa^~P!~*N~Dp%$| zgoPTxpuzWK15yIH=vpVjL*uJB%Nr3M|JOFEmIv$Ulz59pxUOjFbD60rtEL8Ky*rE?%Ih8O{Emh!Bq*r#$JmmNLp#? z-g*7G$?4Gs8dyX6tt4V0HE;K$Vjp0c=t7nW_dN;Qyv~eXN0Q<09a4FpWx2bKEuCIS zh9$YXoaL*SpQ|D}mGw*TAei%n)9#)NGtsZn>0sSo=}x?{YZ@u+`Ot3jUnuUM9`GrE z>*7ejTYRw_Uj^wXhpI4dO2wI$9;bp@5G693SL8QQRdj2}6D-&8yN7C_sVu05V{=Lq ztG~P#>N*&e^m9je3ER&#HZW~)@G=EC{k+}NQP2}eXmZfQ0%Z7T)3b(K+SGwdigg{G z0kcg_A9#nK@1U8GM*QY#%SF`Eg*!)a)geCQ1A#OE@(v3bgldtD+eUbCmqboS^8!on zO!fuVoMpH9{9!2vXwYi(!EQb8VWGhBkL@a8;z$FFe;3yQu|RigpuK(2reJhm<>Zre zVnIN?EJ%sdFtjDl@Z33!BN>mc!ShJ?Hz4T~8@fJ$wX!CSpeSRJ^y7n`Zqln-e)Fi$ z$#SeYd$j|_i3ifmEs9mNbvP291q6({;I<|`$A#_)IpdZ+)xIctZQ9!2-Quuz+S9*a zqj(g@%UGchU8>7SiEF^!aX2wT1{Nj88iGr7gd4{qKiiDa-DEpI#H`>t7`sMZf^8Qi zf7d5$xUv)d#HDm|9!&dJJ;^&W)9dy&^zvliKr5~r`J10JIo@)2z^4Ko#7TXQm(+5u zv8t+TEHm=U1fDY_$9B$kGmXQhYNb^XYNQ*FU*;UOjZiugzjCn?TzvX6=g9I!$h6=9<@|MQb zhLD3=TqD-Cm5nX_vcEVPv)0YUX)Jmg|NQhvQLhwEAK{(G---Y&9$AV>y;s#U1-HHM zQxaVH?1z$QaJ+5`Q1c9vSN{cE&Nxmv2%wu+87y?F6|q$ z+IFYwIb6Q^uO(Ud#)1ROmELK0^^Qe=MUfUyHtVx+r6a+tDge(n5PAIA3cGbqQs%X6 z(c4ymovsJ4!0Oaows=338N*V{AX~yZu$XJiq;)7-6US$mMywf@D}v$2lWjZvW<2Ne z0z)yOX-=iE?Ez9>9O_S?tS9SWR{NfTg9U}RJ9A3_A!>Q1^XE}CtSQ}JWfT*C4~@8(WUgq;Pt7k6UAIlgF<7$ znIdOtU!^|tzGCoI#AP?W?RAj#oTOnYZPB5x-X8dv1T6Wx#J!#{ePC90e6vHiCV>Xi;qCRApEAYlGwA?+@-Fp4;_-bkEXfS|0ELk?$ywLBSFt=b2$Qgax zX(W+Tpsaq<$cO8EHGg@glb=x047bfVZ&X}`kjQcL)#q;=z{-6a2qp_8!Ru0O>8jx8 zccG=)Pan6=ZgXJ%KNLrp>#3WF6oazw95TGNdv;e?RqBC{$*fI@g~&Z6*a=|p+^#Ip z2e(T7sqUctBB%;k{m@WRIW@$<0NTA&&G4c=OpmpLtO+@7dP&{!*-xl#i5{3u7_N#p9pDOHaZ4UZ%ctCKtsOo z_v+xC$+jF$M}OYk7MR1RaN|zKNKte7WTLxrr$xX5wNo-VU{OHf94Hfsy{rAh6Q%)r zBTtAJsE^~{Zju7~WvkTo3Q*CkKbsXG05;9bmp&>kGlGA-BwU$+U=XupFynHcODxJ~ z%V?wTcj?g{O_NLBuLGx-Cl7N-zR|SX42vPXPXIdi>cMVd=J^-rq(>lI2qq-AdUN4Q zO~bp*s?7;OMmZF3vN9|hn6nj{z`h3G3!H(hZN7>lS2^bng6Z}2zKu38{vb|PbZgr& zHc|*O1$MZq3uj$_87gnXpM(znD1~`P`A0F-I;8wyS*K#+oc~BMVMosM>4EXLGx-}# zn3FBVgI>yHXBsV9GvcYQd-uT0#S*77v@LD0t`$>+5v~j4o~lNroTc1QO0NOJLc7{a zrx}~dVd|rBG=kb38oh*prjdtWfo0>4LfA~iWif-k`FhVujNH64FIM47e_F)VnU2sD z3SQkRBj^}be^(vyZkvatBX5X;lJjU`7#g=Elsr37?21w`72kP`^p*D8uq(Bt&VIB3 z{f^mQksm{!RWGYm7+v@v1iMAcn{CXu3$>Sr;m)p#)C4 zDkwr>2zm=t1mab&34wZ5&h`o|-YaqMCwT*W6XWL^>^e1(chiZD9)fbp=^1b|iZKx8 zo?bb&Ac$SO7=Q8gp#b2{=Qu0^`e*RP?AR29mp>s#Ca}&=U(gJsbBDU)kx^*(x6$Tz z@>!0rqN2lPB3#2|!2Y8K87#K$J5wMX;NG2TOP`H%nu-Xqa2##$!aVbG39ol56A|~M z8iafnH4VYflBU`^Xqa^~)>9ow&NXF|l(I5JA81?irIMmqVvLgV%}?$vb#9~J$xM}} z@CG#WS`W>>HE{FwM4G7NJCW&^nGDZ`R*jVYGKAq&$6OV0>XL;c*3jU@PAbAe)Y!Iv zF`(78pauuBgt^h&7e`_JM!vs-$`>{U>CUnb$SoGi5br51oj!C^*IK1>a<`mXRA-$# z3u3Az12lCY@QOw-*I2%hlHdEFs?4AhFe2?Eu)B6cwigV>5AF9#pK{LKkn#WHvf}N?pTgPEQU z@>ZA~Yq40}lM8|Qp^SxjSRikO*|C=VRiJT;Q{c$x|E(fr6miadK+Jk(VQ2Hha+acz z7>{Yf;%DIzn%kz3Gp0p1m|Yx>!5d31ZhKF||Jz{%{}YQhGt;2wF1d0=a8Tj6m~TRmIqaX0BQeVCtO%V}QD zYU65p1Obq|D=Q@L$JPO1+jILQ&t=W`h*F5R!+vF%H9R4is<-b@U4W9N`EM6HCX=S& zUu@TyKl`5FrATk=GFy5RpM_(zD&~UoeT(uy1Q)h2onqnL-HX^hvPOe`An?$c%Uzsv zcXv51%v}R6mNi42+H_yxo!u<3w=3`y=qCAUeInd|BPLtKPS(f?TgoW<;?C{G6Ef_L zsj3TKaUsouQnOS|>g{JA@KwF1eQVn1*XZ$p8XSfzp89Qj(KZO`6b@=qX8FsXhyBo3^@9tu8+jkcC;&Ej&)E2*8 z6g*EEWn!vKSnq-BlK-^&hmvCATHV4J*1q!5i04JCjMikvVtLe2XT#J2q%R|b_ON?? zQ#BdhP(yB65}N98{O!E8UM&<)CA5Xj!9Q%T$ip&R-#k<7<^Dn`TgrHo4{JEa;qT#r zR&(9~@YaBUax>V}<6`th#d2O8Pveco_!;QC1SlUJXnjFeP`I$8%D|!Rt+Vomcol3F zV^f7t9A6Vbn_RLJv;%y%`}<`U#$#1SekLz7wSX+rb6%XXpe#&bOPwTl)s4E^hjms) z&AZjB4-~t6y@-0Kk;S4PP45#Prg1y@gYAia-(S>_ZVZJ7^vT)Ru|%d8&ts$U(EA6+(saBYWW-ZlW?654eh5 zKQ$<$1#|RHNo&&V3e+ujlkvs4H8J(N--B3}Tv*4n&yvoA{zc8U{bwT*e0PP|^JZgO z`OsN#^l5Car-;*);(8sU;(!IcEM&l7SZ#BepBKoaaGo&9W;5p*5?dgk4gk}XpMf4P zX=7>Ba9N8&)UNU)OiqKXPpPF(?3 zKVk~&WTg9CA98&J>i~%Z%YCOU%-fn%ZSRIDCHa%>QVb5zDV5c~%ESfgi%L%`D^?AL z@kZ|7560bDvjQAqiwe^!qM$;Woa!_PrFkXItL@ElWc zPIc@7N3oaKu7*yM#>H%>%hj^AwCxAAUD+&Yxr=6U&N*UdLM(6O&4!}rqi?{Q-alko zuq3NG-3%xh?nJC_iEl&e!fe^-E}xBO%CLi9%VZo1%b3Mzl%%t2+mri9T(yuul0YKyv(_qqF-oPq~VD#OL;4{FpS zQrP(4aoJ(hlUi&uDy67z0?Vl1BP#A~cW%40AUfVpW@a*6GbSa21@&C)LvvfFN~S$p zli|Y%7`&vm!Tx^u-JmExyG=9Xvp?H_aj{)SmdX-h1S_(@28XrUeZ+Z}Q{bWKnIFXMv3(!8}?;_R0zP%D5-k z{aWOcbaHn(u{NY|NGMXOjUv;a4*jELz`NpswX7&`em#j)qBF$IlD)QCQMUG8j~Xr+ zefqVf@Kf%j!cNy(?<0mk_UKklb8kjsMKN-|jqdcxehfAFQrfwbKB9sh&D(fJ0zDj2 zB03hR9GqlmJUk-`4==EZQH$67%lNvp=8|pLpx=xgtzV2qEeL; zwa=-@D9emTJmIT&Jn*m7yMAjW?N~uOKJ3}vT_k*Kp=wbgHjmOK!ceO3EglZE@?|Zh znOc4QyUz?JX?<0mndS8+@bq3St0Rwl?=mj2t2AtEy--lia^ zrZHDX&!8Zk>J&R?UnycVonc_7<%XrI?;^I~izgMyqWRjg-J)h@+>udNJ=6d4soT6?ET z`f`z^qs@Kj)>;MxoKoWSDpq_6{eD31)G(7CIZoN-IO?1D>2XC7hj5LH|wyD^U*oK85Hn@>I3-UU5 zj{(bH5zKDRmLEhB#p;!FG2K=CFcKf+ACSZ{gkQjx5<5=`+xpjx*KygzLPi?oj9kNC zF-p$h{SM)>?OucJ6<_ph0w&B*ZOCRy$bjMJWCj0WxxW4Z-U|1n zVw@%RgrfNQSr3Ku%DxErGJ$8~@0TOf-*I#H9ofEtw!uSTi2SA0b0%FQy>9v;27NH} z9X5Jp@1|W!U<%?s*cr#p7rsOp#;gy>t=TMl2lb#o6SjR@;SiFOa^Pwm*moYACjlG` zF;vLufQ{H7?t)!V#5_0T@drAQoz*DWbxuaC{=PU(s9O8uPxbm>Qa?O)5Rg9?=l>P# zW?M{04Hat8-;22!D6=mEDTcPtGM<- z)La2~wpHJ0#8&QRh$C-uC2kE%L;`3xZVmW7q~Z_=qj?5`l!sD3t54cw0^cFcT{t~s zelOfmyEPt6fqzs3*bFwQx^7_uli)`Ox3hMM0lUGNuUw|h-wGebX|4cdsIFU!M0IH6 z3!y~26MU?SOomJG0vwmg+DxxdYcOfRzR8gqkbuAT^k0%~n2bp3n88!KHHd4UUIgX6 zUHKE01|a2Ubp6x4%s3>wt3LQHb7%k|))`qh{ssc(xWT~S2~oN|k$kh?9A>dhxWB2Z z0Acp7Y4jm1tK(w{|Hx=@qF7<*)19wx@;upu)UTNx#0fcqHs9#;@_>~N-TD##;0lGjs zc~YWvcZEk2Fuz)Q@5N4zhhZ78GNLzzD7LkrwxL8(Mi1wgGjM&!W)>S;DfS#sbW*^$A zoi|K7PSNpIUpn0YXW*67@%gh*i38D~1F-~n`LO0x+_uEHug@u%vyJ#qlFaHvoj)0w z0bk21bw#z%LLq_%BIyyKcsGCPZd-a)?dcsUj0R7|w$92K(pLfR5&Vb7`Pn`;z+$9m8lhK`V@>r#JA#~R+USTSL+JT1>Ni%Ky#Ybicq9Vb zA16={bZk800Y;@xL<{)vXNtx>NQ-_37u&99_S7CFRvXx)+iK9#H<(c!2L1Q>Y=+?n zeD8NanLG#LB6rJ*enL{yxSleV7U%m5o2h3mkO z>47U3fG+O8kc@g6!xknee{rVp{RiRbitl$Y9fq%0oGn)rbv*aU*Urn6AvZBAN%`~N z<)j)b(vt&$f|?xu0%hAO0JulIq*H;;b1)w0JZrXm9mt*jQNlTl2H$8vfN#hweaUTd zRG(bqM;6$rXRAfz{CJZ!`^G7jkKZyQER@QaGhPX|d-biGxk&Mq4A}u@dcmK3p^c|G z+}@3xCJX3!G1M9U87Y&9rn>W;Z$8hIwwGM?@?w|}uKD4c|7bSm$WF!^j>ne-17vK@ zLfD#`=#VdpX>hSCSG?H^fJtLBP>lK*ajyCGC+{y0*Vvzrv#oHWReMu|@Ai6uT{iT;<{AndOoJRR9eW1CdW7-&oyZ#QX=93e~BP>`E z&My4r-?kMM_8V6$8&?{(;#-ox;CBO~=Omkuf7f6#t+}$^)w#$y!{O9B-&+C?26Z6w+ogod8 zY@O<4{&^J}F|Y))05y1KI;kchAa7XSb4tA}wB~5o%12+m;FCx-LL;7mlRs6j(JYE1 zkvAk@2U~hYk0>V7#TNJ~@JoGkANZoX{K-wi*Jil8KG^j}N|?Q=$BXQ;rSv=&`TbCF zOu2L#WASaOfjJ%B_e_U8RVH$n;SD5(5y?R5G9(Ujj<_71RdZC}gQVN+!c)s-j=wztRnpufQKCf__ z5yY*V1+uU-#~-zHUd(MDi+g95o>?`U9T7y^;y6wJ@PC42cFc}7dlQp^i(?GMkz@N6 zZ1htf8A#J9;qm_Zy&^jgiOmBj6%pPhqB!nyQ4*bDyU;rTpHb>-$8q0oNp+eUMM<%Y z&Q%d@i!9?@k(|xxXHJ5sD0A;Qbb&Rg-nPF?7)9jsbKmh9sEyB`Vq;^l+ZP}O_s^=% z(iQP#si)GrwMh-O_mo~pN&!zj5KVq31(c}(3apknXc4#6dqQHCyt%SOhJ74#~cQKrQdPZsr( zGrR-EFee(9)Ksp6$!3%7uM`5%VWVB!6g}&Q{O_Q%T-8gObL?V`16%M>V!nwE+hVVg zKKic6OVLAlR*cI@L!Fbh&Vq#6XC#?P((p^rb8as0+*kEfa~u0_{5Ah%QkUC2Ky&Jo z==kV)vsYPX=S>hpp~$JWe3~0og}pV`r zy6|Qyz(L{h$cszyo@dVTO@d6h;1GvsQyjffI5Ed>7AziupD{GZ(Q_vIGu>=ABpC)u zSWJfVDcN_qK00}mr?q;_t&cx2E(U#ENO#K$w5ZGr&YcGQW2n=7bHCR`YAVAAUcArZes@e-CRiI7sbw-#Llfb#ZsuYo&q%JjCLMc-a za)p8fSOT_*ja^Eya;Kw9xw{Gu@RZJ=v0w{oiR10Po|xB(t9hk4AjXz?j(WbGc-s-& z5pB&pODU-n8KyC7tyL8LaMDEqRYIp9Z2w7hcOWnz_tKg2V51IRnidF z>;<}Vfj;GYiE5;T*5Z44vgoO74zOM9xkZC((NWOC9o(bm2L1PA=+-^ zh1C7`Dx1AAI}ZMxaFS&iBi{Cg7p;QpHk8&jNb2-X{I2#3C{?50YN>oOhNvVBW8>1ZrToSWepd$1QQIF$L~LmN?YZ*Qe-P~ZE*&^ zIrjJvbCG_erNd(RzAJ`E0ZrphjOVGvYus(tbUS+@dBaI5oXQ{05syUL zv;g<~`oB}>rsE@~<_3JRl3*}ty0GaZa1oI_XZO<|-08X499}|=dHTF(7ij#( zADmf$eF*)3;fBDXy~TM+9RxPNc?tx+iL+A;qbT>;o(T6X6xxsKULh^EhxEQu#hJfF zTWkg+8DxdLl>%;ZS(h5{g}3hd5EKOUy_z@U-HMv`@4+L>rLh0l8P6|O_nkCbM0TC| z%`}!g9AHn5R8^4}%hT|c(0(y*xi`Ta_Z7feL>M%t7K{OHHUU$268C6*FQH_CeGZ`W`z`P@ z-(&SN|86yj02ZclCSaA9F3v$kxdD1UEH1npn z-IU3-lk4kqO!P;sPQvbuU9b9hCF7C#ZX)ut`8(cJKHp%}UB|()tk0?@)o}m?<-zeQMf5jJ3$wOC^^zXH;bqx9dqy@j(14?!ZY&7u1smtI;0+2d&CPsY=piH)Z z3pLZ`kc`*SV;%~kMx;*81rTi^IVmLVCC5Z<0EEwkwPRVqZQ#Yf6D@&M0#Ro?E~>^3 z%;I-fx*B$2lF2I!b6!A2nM(c%Jp%TCczMBE5hfdPd7X;Kb*Pq^u-DQ0d2=>&~`K84@zao@*KV{8vw&cm- zQ6v6uqZZJG9V1>)abWyFP{!6iVgZKQ)nFfYx&S!2Z0P9vs^bxuw&sqEhzG?CO`^V@ z1$s0ZkgU)%w2WTN*Qo^9X=y8*cNyLO7GOBUp*?civ*HS&Ig?yZhl^Uh4?A2`$0s8A zL)_Ux+tRz2xsa_>Oulb#uV1GjXp^U9wGW|2hQ&Wwmcm~?b*ojh;7 z{lLOhNs`5G`^|yfUPiIJpWK}i30QJ@TV)Hpq1(?}{}XrGep%=(y3Vd5oJ+p}H{>r} z19W}4Kdhq4k$FRzK)L{X8C;!U#q|^rEybmnfpIk{%8NEdWl`wI74N=r(BBgm3uXsI zO+6O$Okl2-gtAKTpXOk%tps}^RH7b`q(Q2m9q>Z;IY4E)ADcokof||lt-I&p3~YAz z?#@YCcqr72uovdb?f4M3`}qc>EibMkm(jp!z8HgH0v&-{*(}7rq@!}RtuljV6|vY^`7LIwlL;LR{B6zJvLi$WC!==6AdX-%5A^I)cbO@ zCqr7x71_YVb|vcB^thySI4473NXnpHgT&92{;apzHvl{B+QI@y;@ zJSThBjV_LSD5D_Xprb*!_41tq%bi);_GDP)(S(FzuOXg|U1|^bDoQG0Htg_NRy6ZJ zi6G~~Kl$}F54`cIRmn(`jpU30QfUtshWLAE@(N)B(FFn$NaVSWjg+Fm|M&~GGwTyy z1(0=LbL1y?L+@=tN=8S!nQ{0t)N>G4p8`DaA6os;S-9D$noqN8FFPt_W(&eXQV7py z)1y9>F$i@7(*XQ9#|pbXd6*7-*}pvfmq_hZED|RZ2sxCSKq7wMj2M0AM10VURWb;O zsH)nV74JyROl^8*9QisIre3V{pv(ir0vTnxqSO+j3XCpi1?1seI{lhQhlM=2WVj9j z;?~QGIsUu+b2awFjU$^INO_`jWa^a)a%O@mEy6*>gN$bb=iy}J7#+DGSe@%@u$5(0 zC>nPdkKQMBLk(yQY+$5+0hlYC;&BzHIhK&eETI(_)YUW3bro}+w|JlKCd8b~;ChPg zCZ5P23Z_nF;mX?0jvK>_VQb9)rMXub6%c~Z#c9OdDrLq;e8b8Ifut8Tzh&el#Z_vO zDiD(2n0F)B2sUK=lCH!MAd3c~ivcmfJ^9U>+A|aXCve7YviTS7?P`n$h)1-%B7syL ze>-?z8{_WL(dB{y^ye* zQr#0S8_ju1iEAutX~56SeL=C)Ty6gI$!$NP#aq_XGNyT#s91BxTm(*SGTM*+^&46Q zP9$f{+#_s>?<@%++~Q5kXZ+U)&Yb3d(b)i5H{sC$c>sCQX#027cR!<1q_dlWCMOvMk_i*_O5_~u>_2#c*)zrR9_dnP^n2M z&RdJBkIu3u<6#pkgb{*|J7c?}<3ZGWOS8g2z`a!Jab;6!LZIyrHd~_s$0EoXbIF@W z4U++D9?B9mdyT%5@DGGhB&TLNPc5?0`B8k7q{ZlL$P8Q|XlKqEi}AlRMWAqP{W7Vk zd3R!ul#$zIi^kN}wNuILO$ksV)ot|?whzVT`6WzQJB*kg;r=ngz2rcka6nUv&z;Uj zXmGs_2s{pAma3`>r&H}gbYQA&zc~~VyS^|;huPL&hCyLYRo{tmI;DI@+#<=af>Vl| z+MhdgR`@$CXR_CG&j8kD51moh%HMx2>pC$7Co!9git1%JDUzL{$LiZ z*?eYMez6+3X~kC&rsiEza-rLP2)Q_Tl?Q;2oZuObJq*5zTg;74fWrdKlUh#dbRL6# zQC4o7LDC&e9l6}X@WM6I*3`!uLqEj*?~LWuk=rY79cW$13KBLBsnMC#tVd30C5Ip0 zNt$qRk+jjV04DM`F|QS4S4BnnKL9_u4K9S>+uJ03bE@V=;Z$%qJV)buP?U4A^J`CmXE;v%Yv~rC4wQak3c=HN0kvvxK(Hw;UO6ssE_dMa~ zGO}zbvnqs3Qb*$FJ>iOqQ`h2X)&^3++rkZo~*otE#QY6PUgFQ4C=9%l?MJ)^$ z7(6&y5k9@FUR+3+!c;~f?TsyF(n$s*0u?6;V!oFsK{|_{7}~xDikKA65|#mC(5L#M z*65l1lb{e9C8l$2eiAc42Z$u`L78K6^oOGWgr>@V*BfzCa-uf&5M3jTC@JQ=+xTSoE52tMRu zho^&r)cf6IaiW^ry+ zk#Y_$yPlfRVucv(Gt*KgwX-ysQi9MGG2ZFq!;YEcgP3Ph@1rOOg z3(Qa$AH2HHmI#LkMlIvnML|;9MWv@2QvZ<10EBFt+_)X!@{SPNV)r;m#E9V=yHiH- zm!}s8dLBz5)YPoXdZpa01Ex|4MI`|Xq!cvR2ik^y2Pr`{Sd3t?;nZeb8(#EYjG$bk z5vW^MI60UU?oX+Uwwc<_p{LY8X)Vm7_kH@s{Mj;M|2fUX#xDQG9;X89smR+n<{~P$ z2vSRbRxtjN4h_00L5LRMp2vA$?+G#Phu@{&nS{eP3f=r43)LV{1SW<5NvQYFrI5U~ z)bY~kGRPye+H?Sk$x7~DF24CqkUZtP`4J4e2JPi=?6}H^WZ5MD?*P>!?k=z{!`1ud zXq-P_tJ2zgtRQJ<2eAiiZ98%b=#bM_UI3C#d=HYyH-I7U|C#%Wi0W9ynk)&k+=LrrRfDhA37;i`dt4I+9Q4B5aT2K*CL3-0j69P);kOX&aNOPr$lqd*@lz@gH zHP}G96bTTDyGRWkLLec@GbaJWvj1|wdp`G_7h6Jda%Rq)IWyPyDpq{9+GFK|hX7fznqntMQ? z4J2L%%kfwMot@mHqoh}cB@^fW2IbGr<1YD(cPo%_Cl zy1vK5zQM3c!LbZnTf}}uDTC-~zeR37cnt6q{`eL)bIOI0kg27tPPZ&fzecx5X&!SX zpKNvvcxbqE@I9fR<@WD=usb{}s|BhV=tkaR9x@#R6raV-d|AK}+^`DjYVdmG_U~^U zCJD|0-cQd*ke52YP1=V^8Ov;PChJp~7z(%MtXxJ}FtXo#T z6A;Nv9{it!oKhs5gWcWUr}=*GC!cNqF!LQU9Ie&>+L}C#mG9W;JK+6lYWLEqhRunU z8H#Q*jL0yz&LDOkG^U9HW5j--4IZDVTr(;UJC-_n?##&i1N0dfM*S_lo2jKg0$>Ms z07$&p0~BSY)4O?!GGk!FOIF`JlA)ZGE5O^^Ztf`tYb^jT1-5^849Nd17;^YJXa*ZI zU;)FF)_OmFfU*gb|!s}Y@az3 z(&R30?tV|3zxw`Duu@92_YZPR1M9wJE~RQ+E<>V;%utPS=qaxgCp>B34!rXqq#Qx!rvn&93wQxnS39?9^W zVXO#dYmv=210Z9#Ev~M33^Vo!mY5E>X=)LL7e9ukbh=#Wzi=%B25bH4)Un@;Vmsrn z_>T59H(}cm=4otHadUGmAtBCYQ>PD=1HqXCuK?;Vx+p+!>;V3~{e` z$8CY7DU7{n^zqogW1OT%GAN`HX-bp2U1#$l7&FqEp^ctS!yCq$_nY;ZW*?)?KW`DS z1$fK!12|Kw)hCJVawe+@?pP9<;%P``q$Ar&5(gM$(ZF74$pQ?AMw-Z+rczKVWvV-p zvnG(%B+FB*mWsT2m$tYrWpnF41Ye#3tkVJeHrFHcv;lj=v5{LHUHxZJNVObrr^I#F zhR)62qSV!QvCt4)Oq=hU2XU`7l>@?M6R}nCs!B=oA4n2!0LLO(q4DsUc7cjh1-9@@ z@V|pskUM}Z#_8fOGuAZsf=gzqQMxduY80Fbf6f;FFo+4aNu$gJ^if#IRzF;gV~t}1 z0*(g7=J_i)64aXcCg zjDe&8{-ILwyqquvxIXWc@~<_r=cgV%w;vMAm&GFo1Hz>Zk)~lO{Sl?zp4yjad37^W z6%Uf8h!e+HZS_w*)upox>M4#EEOec6zsm~St`h@XzB|2lZ zEdZ0XXe1c67g1c$HS-xjb`%8nu1m*#LVqG$r5Z8S>)U#&yeu(VJeQr2Q*vWqkD&Fe5IA0vX^%!m>o`T-QHALY?etqMG9{%8@gh=_jOl`VK!!kNu#>v2xA08dr^nZtNc_zT4~ zw&LXWQ9O4_?KVwMebnx`${}@wT$MxYp?)Ky_EEV&bPBp~-t-%zk<4nrmmWpCTQ8J@ z%El?Uf0y6`16aP{zZnWFnt(3C=EG1?#?aMc&Kp+0ArxcQ7oAJ88XaSWMs6xID50ye zJR2(le{2NsFNZn{Q#w+acJ0E4q4_3qkqHhl-Wl!|^BQn-Y-ZY@dkiE0g|xYFM$kfp z=Ri6G&AqZ}fT#pnOtB}k@UpY*eO5x_adpvTAX_CLC|8al|L+b4_$)@*TeQ7?Oio?2 zK>!Ooo(Y330^DD*?#Ts$v(UJ)uyaj^gyyev!&eJk1!L<+?g;+b#n!hD%K0PwfRC|$?_w!hed4~l>$t>k z1)VckGJaDjQ%-$VpcmiyG}s*}-JlF3?yA}_tTWXKdM(O5IYZFYNYIe;PchHylsQS- z!*?-V_7lM0^eFr2l5N5sIYVA87XaDdL#hkv3Baj+g;lNB10+XTHBf1~jsXq|l=;tY zrfu-h)7p2Dx}`2tCyYx#F&5HAty}6;evaBe3oV zPC=dTZHxpo*&oJViDGTptdll65Gve4!~6Cj|Mp8pmCodm*HE^GJ|0oECvHD%4_XZ@ zP`x)b=i>TI>wM1jJ)s_pMZ$Z)_8O}0yMz~1{&AFRxC^a`7oVgP-1@6JLeB3=p{7t_ z6>^{$PDQ#t|3&WXm1nVVk}C!M(NZF#MXL@nQ_#To21Y}47XLFUw`&9d9t|2_!S7M1 z@oYgKv>2|p>f<>x|DV*$vv05JB+_naU=p4SuZs0^{J?3qr>rXuy+C^`@Y2yhi=KGZ z7rI7}M`@jpF9t%QBGovUNR2`4xlu=HGTu5u!|_6JEP4QUrK^80!mG2$^wtyK$VO$N z6>+`e@!(i7(0{=1f#X{>TooZZXv*s7Hg(-vwZ&3Z#X&N5g;d@B1H#nhr^q)~W!iVe zy|-uL zR?Su=0>Qq|hiT7xnE0bX%_U z9TPgOcW?}?;GG0wLLQzR)z+aUA)UeaM z`fo@K#Y7%`zFjd!_C(K_-iX}QVUF7X&gD?|n42C2FB)~LX=aC}<-R2UmH`n~kEEyf zVd{)VYicEwVl<4)pH!!P4nwHPU;p{C{&sL;k4iVGeBGB|Q?E8ESs2T(8`&|ih4bKz zugmuJ!`>SjYDp;Pu{75*&t!t6cS)jO;JD~+33)$9SacOa;UrOychP~(DOYcMNVuUz zR?R6Vc6R0ijkZTqIUq|bn_dH-MgY26?}<9V!k+WXbWBJ?dANyX9r(Q79Ac^RJ2W*h zBQ-I_UDeowpvvI9uil0mioZVf3p({L_~rFOS9YUw^w1r=Nd#bN5N;LcXZxSdlhja> zYjbj(YiCHXb-!yFszB@VXV*_nNJsp@V*%5o>5IR)c5@ns4Drn57oKC*oiDHL>KN1H z!)%t^IL$56X(Wl*h=&?Mk5FE{L1Baug^a-6v>oX6Y=f+tSdCYQz5g&mUc>#_GJOwz z?)rJdT2_2|M{L}|#PYlDI@Lr)EA8Fh^95$BYkun+KG6sGb7?6xuMX8-gY4<5)b=wDH}qt&d^Z=~ubGQQ515ggiw|&-?;`vHXEhz>143e{kTp zXV6H{^{bSU*IS>mI1&ty$19ptvUFn%D!1WWjRlMD!Kdy)z3aH|yWXwV+TW_@8;0q9 z?E2dCfGg{`+9$ARHg~8_lALvH>oc9Zz0r1cpQeHjlW@|8QAoLktQB7X<>f`oE7IM_ zH4_SM0icKmK7vaNrJf-!AlfsbRvqZ@Ly(Ooz^cnjGix#g{vB;|8bm z9LO2(Ddf_E!7lpvMbUMIr@~t#ahA5HPD^h&#-$Hvi!KaThcHC>#o-uud5eLb`cHOi z{hAHI9WSjS+-d_XU%^BKpy$}CgaWf3r_8n9@iO9G!7(V#rU9PUQgv;FE z;NZ|cH{YqDWNCKE#}TT{c2qJj(?c(kB{^GegU1(eVr6gby$k-7j5-FlqdMUoM5ZtGE>|5So7dJn-Q~nnfUSZVscI<6sccLOa#Wwu((Kj14O`f+FBNO2Jl9 z#X$m^$+7{&zWk}cD{Tm`g7x=EOC-^g2qMh+ey)2-EjTTa{Mbbf?JQDi6>w*5apzz4 zr-WW!``=4F(pHfHHjqQkJHBgr&vk*rYyBPXwD=kz*c`f-f%e?YRm>vj4Rtiw|NN9? z4{k-UDtO~~5S=8L0>JyjYgJ?p$)GtnZZD#HLy2$>YB2Us)We=s;NBZ4$uB{5$3v%_ zeEZh-R8c8h$eUl#fk%NC@_M!?cn<3GAC+JU@b^79_4I+;jhi31RepC!o52+;KzeMq zjMx|QC>VWz)(Aw~%0gZKUdncBG;g2*qgsU(v0{+OuLqc{F7HlIpYoad@Tt1}=oW;+ z``Of$WhxLx3OPDg{W)=MXcszg)8ZQt6C4?aQ~aU^w=vq<6AtGTz!VleN6E!Cz_BcP z2ec|&Hlgzs-W@DdlOKAk&9XuiJ0J^ijd6k~vN7)3sJaEpefpg})2G+iRE z0wBJ)*B*eOIcv{_E$pD6$GG3#Kw)S;Ddo`WYC}2Nhmfs4GmmWN;V{ULY#DbIV$f;} zgBm*(dUS99+WFMfc&QKg+e7~H)pS0z*md}}uyE0YQm(J0riNrK2)k}xERpkHS%^9=v^`5iS=9E{4G?32lzI2 zYVKx#&&5xW@^_;HwRwB3|LQ}XYD>csq8ak$n@8gsM5bFA)IcNx<5DSP0pK1 z7z;qtN8H@zW4M!CE08@u$3-iW$Y2dRa(Hk8Z3NS)7O(`N5d5LTkb_EomjqlY&ddql zew9DkF)HaWdxK&Yyt|dNS%i&bhFKTEvxegU(3|*oPH-VxNu)3?FZ4Wz($0Ziu-> zvrxGJ^CxW+8V8`~0{Q~uspB=C3C>nUZO&41^c{E{bAxKRO5V}n!e<~vOXy`>nHzj# zQLSs`ArJti)YA>48W}EG&H_S9qI(QPgA7ZBmAdyH&%jL@a4MO9U}yi9UYB2>VEkdI zBjA)jyHwgT0ob+ZyCv*P2J+0TO=aDzuBi-BO*ZZC!l_0d2{m)dAInT&ojejjIG@_z z>b61a!Hvp$l^ut!Y*-Sk^!cYr6Qd7_Lt1p{R9*ts&9?)X2*$6b%AXk1hHI2FVw}#{ggpz~HzzS<)&GQ!)szosD`&y9 zORzHRfJrJU3fV6L{J`f|Y{M8OL>tJ!}rKt39n?`DZzI#mgArvJ`$YI+uQF zia9vgR_MRp9HzrcOLmFeRG2eOOTsW@0bdcTvw_-$E18Pl=`$2ROp9mBc)hE8r#%w4sia&9@6Q2e zr`hN(5Wne;aoAJU+}@<5azYcy>F+_xV4k=00KETt-pV4oMBIFq~UO4!)^M zhU!I`n??F@`a`;$EphsZq^21l&>t(S+o9!+qH!5h$SVoky6bAW>l^WHGh!n#tb*&9 zS)Axd3A-qo;~!H>ab|g|i?jV*i1V5hUT6{wcCV4=-Td*gKtOL*aLeXYkuG4q`ge=p zz88~>6a=#|i>}+FYt14)6VJk05#4xXN#C>@+4D+;Fhw|y#U7G!?{5XIkzY4bLQ*yk z88EQ<$H(}sV;u2h&}j*A#nO<zJIg5qiLS<`1ymSpY^zj7G%YCZ@l1P zW|4RQ`3-R_)$wL{Z)q6ZN;?hK)jywBx~VWtu(e8*Js2F3?wKgAY>wZga_-cN&w{N@ zURWxeyaHEhkN;iHs=s2AEE>z)_GI2~M2tOuWZj^rGJVXO*~QgJsA6lB*3%c}w#~5tOi+hoi2qoTgVpmc&5yaax$C^e35LBn z1MzI8V=-JPr)x|dN0ni}&5d>u9|VyK4)v2xZf{!#nT2mu8-oJ%+Hr%B|Mwe0lX!MP`6 zX>}FS294-otgyK~t%;55@IWA3nHnd%S;~1G-0h9Z^t2fRT%Q!Gr(XJLEw{*tfJz`M z5;fW0-7{+DW0b)X8@Fmk!9wi;X23HWxB&DBrmGe9VJ0_MH(wDbUMY8Z?=~g;T>|m! z!k~h!g|40=SSL>C&IL;VXhRo~;()*Vt~ZCP)o5U}__1>6V_=E*XcHh*FTDOMfeBEz zSRrBif!FLJuFw0DB9sr73f~H#iEpffd4IM%1TFQ@D!gsUS3orH&o4n%#XxM|Ww68o zPlM%PH}B6^+n|+FZ6$Aa`c?E7uR`+aIW)^Xi~v9UjoUC38wM-0gPxeGG9VD_n{+XV z^Z*O2h9-O`{aZW$XgS6WkuzYh7|7A4DSj=qOfv>g`1s820pqWpsoDcicoa`alnS2X zw*i;>oxCxE(}S?SxfJFF`6a_(%lc+89j1M3&Ux=LqlGV|=WiPmpD6O_>B}tHFM(Ul z%du$Qv6poXFNaB+?d%aU+sgN}YIsofCpZAe_W=B)?^|;Ymho%BQ$e4?dvl+J5jh;p z69UL>1eONfvA%t=;i06z09%QWPij&jhtBBcH_T!sgTm(W2<*-lFEl9^FPqXkNGdze zLwjrVHt_?RWD4z*~2m=letMoYmX{L+)@o~7&GgcT^3J(+C@pEo%|+fpR5Rb1Zq z4ybyRDCuU!>*?B#=|2%198 zyj>;L`zkviH_3;Rmwl}+LaEHo+z-;^f?%wlmWDEf^z%&x$>nXbnfSrtSTVNFPT8Wm{^+;p141udvUo-W zU-cmblgc5F;foDrlPPj1hUt+{FYB2#yvVqmYcQ;ja_BV(HCWv~F*_|?w`<>}&od)R zS=#h;gt`S|^kb-`+G}>*F5W)#4IS4elv7hHRb*@@7o*_(Ys?1Y^>L1pwn65AumHW* zU;lFNeG^zU`|PK@*UjX*+?{rHY5hhuXT;T#a{D$Gp|u5`qQJk66>8y%wn;npd|~*W zui`;R0ArxM21c>%vAfz&kh`rYnWVNTxEH$~u6Q+;PvrgTmjTN(Mjn}Ywlb)6Pr;M< zD65pLmfC$6M*`3li58r@Y^eZo)xL*@Z+)0Ix@gvn_N$qY!h>f|S1lh{9|7-*=RUeT zitEUgj|;4B;c3gi9w&gTySowqj-~gu?(xt1NzX>dh28PmIQ8_VeM)mHyNm=fdxqt1 zX^PlJ%IyRFUPDd0w@kO2Y7UTQ!}j%*84uDhQ}px?e}ji#shrpisH!dGumQ%wJnj3e zw_WiDlPT`K^}cuG3-CX$EDlz@%m=Y~rpD>UeNTuZ*&R88V3?x{He{`cPRips6D_E$ z7G`9C7uto0h>PzSq(w&UE;?;Y?wUCj3`lR3XL#6>Jmjiu8RhuNJu5QTDsh4w%*5Mq85&n#?xPY|@Bz zSO;tKM^9)?{~QO8>x3uxVcqbp331}^4LBG1@U`zmXa3rxLYkkR_Mk`S7yHs1!Z}?- zU`U3Oz$6m_|N0b;QM`z#hhk1)cb=EI?JD?Zt7#ISY6}ZI3Q;{4A0ks=?ts-*Yz8r{ z4U`-#X9`!))dvoGlX_;^h55p;U6iFQby%cw*+tVGVp&s(SSFh`k{B>K@;4I-&RmP+ zTNmsEP@n1dQwk*BuG;eHY9F@t8Hx2)CUG^Tmp7>SNn-$};?=XDd*_=oK35K_enieV z@O=~#Fo1zR50esHdW3_N#jcGikZJVGJAX~wPzto;L1fWnjuJ44t&rkcLK#P2J>6n~ zxjPV#7^}G!yU+)c!?Tsl8=Uv~f4aW;77O;5waBN4h?k2FCCd;v=&8x0*M4z3TzVp> z4hqg*-&}H)-il1~KHV*aN=79s!w3Ls!^caF8kR}K8T1J7!8>qfgskm;11UTL>=%hR zc=$K*<6Ypf_G>=TDAL=biqV<@Bm>n=wxC)pdO=XMSIKVe5_ZNjOLWHmY`P@iUT9?; zKSHOrQq>Hm(@VfqnQRXEti3H0ldOCWDD3ony8PLymgH(W3p?(@o#1-OsJY#wwzPN& zC@|$(^v)#_bW0#jcV0SQ)16_eCUoHV+7HpZM;Sk~XJI{(%Fl&DtJDJ5VK0pGUO7M9 zz->-f3(0&_R9V2b>5C&4Fn>m3fhQA?MOGpz)gzVVP8vnKh(y-nSzE*N;HyB3mV;+M zII!W(Q8uGH-&zS2Ui15pry&_kF}XoL_|JK3i{;CHFxwy zpyPhFP$w>*q+dIlp+dTqvBAd)CT)3ZI{w}G;Y z^RuOqK)i-NvE%MP9&NrNpPHNN)#pLun$u;C*i2aT9Hq_LgNrCd1!?J z*Y71jXCB$zep%lDA#uX6Jb<~?^#t3@*9<}Q<*VCZwm3c}03r|Ql~(eiyGT~VIt6+Y z`6XaPgOjR;$Vi?n`}Mp3b2a|ujKHTH{s;wx;A%Rp#~{y-q({^z5~SCRgFO`t77YaY zM`++bv2xeZdvUqCG|*8SwSH|?_qX){(M$y|5}$7=^OZF?W|m|* z2h0JAu_H2j0=fqBx+yA^Eor`=8F>m#Du~jvU9gHb&v(|Yny3!#R-nA*9(O z+*5kJcl8cE@%?-N0DGrabFEp9MUmU89b!qfdiP-i;m^zZPcyCO{?mJlQ)742E{v2r zB5)*foiQj?25@FsQmm%#&A_W*B;QO;(Vf_(iw?^a1msDr7?5Uy2LKsfGFl53=)1V1 zk4DM{&aK=ZICVbJG*v1IHpB8GSrhUMT<@$|3D0*t8o3Q+HU0L>6p! zxS#9km!SVh@UUxDq~#vRg!+y6-?R-~Vmsvl4Yv|mfHdo)w2?^q^WXv=r;vJeh>EpR z{saUYy#X!&>xDo8D1*vbK*4-Z0IWgReA!WM+ajtYNzIoF@2D(TLE`wQBv zY5yzMA)orP9QlBXBg^C0zhU=5B`bi%{2K$Xi(g#HTB;}g zOMv?~U;Jr-y!kzJwAd~G!jt?SO!~Gz7r)pFjq}tFh-=p+@<~S8&yn6{QhbTd_51vn z+*gD~)iDf9lu$ZBF0svH;<~;y?1XA{*wGRkjxO9ioBNS$Q{qCe)N=YJPs+awM4S+? zJ&3H*d}epXhp%iy=U-G{uhIXu;nF=;9!DAd({f~q z@Cb6E{(H~QFHjUXQ=q?3{yBdYpGmpAx+)jwjGa_VSsowN2gOGfA(lIRPCIozEdv3h zU-a~m-)ip9PeqVr7r(P?qyQTq?bX4MlioK#R)6+VsuZ|3JgxmEj0kX<0`L|zfIuX6 z2NWI)?Fm50J+L!$bp{(LP>NrE^hJ74ljyod$vr(1lF9pNfXaxP4XeF7YtC+lr3Sfu zhPR{<$)w;Gr*4m8M~$iB7dTRvJ;irL3>4_eqd_XV($W*)URH4g9421o5+zT~GnA@~ z2Pg|=ESVkJlEPwjoSLd_RbCtWC#1&WtM~6xA6{|LPan{(AWXskvyC#Erdhq`6s0%J zu5l!}W@R*FImBmKf{=>@IL9vvlidb1XKMCXJ+XjwHdi+w>20f(VBuk#q-L=i)=w~I)%oyGp<(t4(?Z*(h< z9(A=yNDF&&bj6jN+cyii)`<{VpuA@t?+iay#TQVXxnD9Ve{$r- ztKcfa2l-9~O~*U?9i`bEPm~S~?X_)8vp~!)?4HKcl$(G@x5VfGT#>?S-5+WLc#aKF zJaKM8E~)$Y+wOU4Xi={4jp;tBTQbI7ZLGXpPg+$qdqj=#_|^8Gh+q(hy*j#LrdN8? zukEQ2()+bHY33<2C&{d-`D^ ztU%0)_D_BTw!My|_hL^<<_9lyz5M+yvD(@*w%IK_!-K-7EUBOt7AyFuU6@TwAMb+I zLwOj3Nuy{N$&sG?xI&q8tIX;?x4vvp?+K5w4|C{`)^-rsZC)wm0@W6l=vK`u{v7CQ zLwwLtYximzbt8^=KTw=vQL%#$29MsfaUgb-chNsQnm}a^Ts$JWd&c%PXy;$r3hx1n z%p5ahi1Q$gc4kPbx!zzU@MBeO(QJJG1Kr~9rDFZFhT7{wceLB|449H?RCYal(mYcT zv~~pKraMG#Q&J!6P`)0|w@i5EiSLm)ybl-PdMA30J<=Xt9x`Ll#%U;w?|9kK{pc3| zQ-$v#CxK%i_SD9nSbPHL;o{?Wq0b)W+oD=EW5RlaTUClU?9#-rC<_Od5XS_^&iI-Q z?!v4qfWikYfD9qVpuQ5=>SsWhDljAFb5W;9%Dc%k9#aYWM+QrYX7^VE5L1OdQyu!Z(<@n_x|=X&BI>-wGy$r(1eewO6ME= zBsJuad8mg-td)lX{#-P?!M8tb^)WwQm^TDhPP0DF%xIV3_ZL`xAQgr6zCf-|2uH|- zvm}QzVt9i>k*QtrqUO%1Au*u4Mz#_RYt|4?P@WoGSPu{@UBaM;M)F8fZ+d!%Y^Br= z@0{=!Km}ZyZ6Gw*-!?~bLP}nCc#j6=UQV1RXr1sXa_DE*E-kW~harOg;oj+b-HI8} zJ({YYG=I!zwXqh^R72NvI9~w!igL#g5BE#&^Cpx%Gd(PnycPCQeEbqLpeuS35J#Z_ zP!;d!j~C{sGr%&n{ZNVbX>hj=%yI(GcXZoI1NVHWUeLgR4<1g!B#!{|iu>SF=7cBm zN+g8?taw#Wwg(M-zBl;1VS(X&`0t~iib2NJm+=dv^O=%!!64P_=$orYFR6VPq&dcU z{QjF-r@5>!o-zqb zS%Gyu|JrdaaBN-&SFRHaP4>jb#>AC z!&6&h8mnJ=jPXn1D7(}!)jjQ3^o@>Jz7Vf=X^vfBb9RP+sR)3>mEdpt z;rT#cXPn>Odseg(D^VeE{fZTtk0E0JVoDD%-Ki-tK3Hy4eoX8q5O2;BG_CfsyD%Ex zn45%_t5iP1AB`Z%Dwk$XW4i-iDC)t?k*1NP;XCDL+8#8hM`*ZS0S^l}-|K?t*7pF^ zAZ9-LkzM3OiI%jc-oz2nJ5tpKM%$UNt9>&df7Gkd%N|K$i((lBL-Vxmm=emmeD?a0J`M0}(JP9c zi(^dpb(P=UZd}uR^yqZXJ*u&fW0`i{)Q9ncdJORWjadds1EUHRhWW?C4J)tb&gW$2 zT-&`51&Z5_8Y3WY%xkTr5=OM<<6@Sc4p}WLpV6*pwaKcY0TXsAKeQE4g!gELOKBiR z-EzVg=BdBn&uI_y0zP<=YOwv-SeyKXODgdt4U5q?wp(G%yh?*VkSzwOyvfFpT~4ds z;@_KuXo#lEvnA&}JQpvl5w-ROZd6t;y+a<9Vwn}5nGc`C>I+T)tzjkuWn7$d+2$2eO<=FbLX;3|+xr+x3vm)&A#_u{e>eFsOeNwGe{ZJ|)97U^t(=u0cs$MI~en*b3 zJjB)YPvg;l0dmaf#&r(?Gd-PN*VQ~-x&O5VMp+kNlm&P2Z0j~wAQ?ACz@~EUs`A&5HQUKH&nknu))8fnP&)QV;rYc@~ z)@8sc=XvU#cLjp91(AB^8j(*^$*{z5;Z>jZ4})Ln*J4kzC{(Sv&(t^cZz7~_Hvm}- zSkVFY^A^6@J6PE-e^a+!%4GrE?{Lh9k$zUgkab zedcBA6+@&!B;%{FH!D`0#e>yCf=JX(7NCnkZo9)*-HDidA5KuJ0Un>P=>8>%N2%J=A9Py?2X9HE zW%;=QW-!g?b5nhN#fCGo7r9fNmfVoI?mVTyth4(0xg+k#C-aB@sjsbLjlP(gVcki{ zu!%_|gIJMmdFA=Qk&QiFr|qQdT0zQfq;qBmNfH!k!)ok5GT2M>2*g}O2A-LYH)l^9 zaHogpAYOK;TnvFugK@@OO9SZg-86F5&CVrZO&P?GpVOq&_|sY?VgOqXkS;d6Ux|jmxWiFXVy& zx!J;W05pt{i=l>4qIe;C7IpB1>Wp2HuY2F{ywR;^@u4DSsAT*Oll8&kWoZ;bmn?iN zvO1P+MCudyG%fbd_*r{v5)t}-V{+!~q|f;Q(n%%#1kUr(mjtDk<#m zaCp2hKeuXs%V9Kx7yPoSg<>JAfnVF}aC{Eigt^NA7LuKF z8rRbtB~eAq2AsPhm4@Q?V-3pN56SIox}+8*?^kaKbM~Fqi1P3c9jmsA%5Rv{K?YT| z5`S&k;w5DROS9>Zf8KpAdqB%TAd?WtL2$g8A_LypWI<-S=sfK>#2F*?$y`6!a+Wh$ z2K(>qoq0akynr<((KU3ZDbg|X@jT#HFG(BX&YV5R`sg-)!StWR+dm3sljihtw?x0} zf1G=3GKMD$0E~Qod9a|tMZjg=o{waoCP`y5-GY0C?G3~I4*U?Mxql0a*fvmvP_BLSC~cnk zPJ2IOzS9w4b&o^5y$ZLU&nW5vxe2f)sA#?&s1)`?Ajo%bK@yBHK!O3n+&SRsGiYt| z&=0sgy!h4FrSJ4<`7^quf`!HcnS#dT3agYCPlQJFFzgqSZgq3@`vONiJ?gq1gKPzn zfo?x8A&WCE3ed7NJg4cVc-glKffXyhDsuk7-ula1InsQzzA6+@;u_KdqF_U@r0xrih!eXOS7+qf)j|m4&lgOEM~eBa;dDwy>*j-BVzAJmE$8oM)-8mn|!X76x%=vv^A%&3S+f9*5moSZzhnH{oQDCaXr z(UzJ@gq4mdT*ggK#AIQI(y&+PO$c^V28GO_XXxOV4t2lJ=}?5mK|B%p<&-y!+v3Ki z(M^uv29RX(J@SgySxMi{R#DOQUOhIKrpi7^Z}b6?b6*GOfh3&N`W3)5910rxvH!O% zVsX&|$brfCF0{&dG#S8jYy{XG2Dg3as5BG5$@p7&gr))%QV4;3c7h1)a#pKOUpcz0Ghczsrcy*^-Y1Bz}9!C1o}U{$JhPPdi<;I z;%gr;jG}IHR-Je0V1P3aPvBnMnVCQWtb%V_3h;8i!#LDiAl7gvSjpWf-w3+uS6)}~ zt(X>{8N9H^D@zgw7;I|EgZhhG^1r{8L>HVb=;zqe-zj1DSOUiFhd&o(2IG!xkpFlF z5I@Z|JjXa@^3(|Goz6}rL8REDh(AX=lX&jkfo~RK&)zCyK@v!6WI3poik}m(q=GU( zF_B+1X+H+=G7#*y8mjpQ0){7#v%FMy0Y#aI0jhEyZ1t!jD-}9Pl{T zmn^Fvsiqx1T!LBy+hBJW2-F9!z%Mlp|7FEET>9W6M>~AFJv@!!wSJFWVAE7-Tw%@ z&Y!%?Xf3_(iqBRf=@T%AWQ!VEDFYp;Draf)TBaUf9}()hRz160N+&dXPbnHU76(;{ z!N!x~9{_TRd5nEb7a%rYYeY4%WP*Thc1072@P>-{pC%Ww=Ke8VW4lLMAo67J27{X? zTuUa)V|G{VVqGzUy+7w_dd_((a!k)CH5LA(CYPOAoQHC;q#6@Ou$3geaHndvilmGd z=?TNquU3mUuq@XD=nyzvoRmTeC_H?s3YgCVN90Ugx5yvS+-EYg7unbg+yBntuFB<6 znZTyvQ)AbFVB%$*!D{COj*)#EbGqwPlAx*k*1cY98y@f#H&@|{6+%C7;dJeVt`b4v z9eTao3!YCm6z4^M4u}bT4C)RoX)u@|1Fq;$;NCH-zjiCe_Begw5q}v%l1>pqYCrkpblN z8Qrr68Dm)-#y3SZ0`nc-revheAUkoM#y$Hrz4{l(2MvlO1G+!CA9zTAsbN90o_OB5 zAd3~d_kRFB-=HDOvm?@B*>jcMk>z1uA{q`N=HeO`?VrIsn$jnOGnCNa^RXfN%pGXJ z_-XUq_dZ4ByaW+kcf!~49_1TC(>3paG7r#ULZse1-;}GvRpERZFs)%pQoq^*%-TV3*2l};TN^Wo1r<)(=EQj`(f5^}-yMGM6Y~TQQ zGTJ3bvlilLM%;G~B67!O7Q6ReF@;Q-haXB^XuA>-&&k^?E>*DFAnr)$o_(l)n(vzU z2E~G@OkYkQaI}R$uj5_)pGUX3GmaJw zS4kzvZ2hB}_<6ZyDX_23d~LEhGYyzuAJPAjOSCPqQfJX6I&9B@gJ!XD#Af$XF)2N? z2e;#=pTNpXRb|x~g@?nzZgLr?+`UWXkPb4XE#i5m{62K#1t;r|+PFs_`55w~cG}EA zR7I^_SRMTy^Lg43Ce4w52e~jMU)5Owm819#Zu4FkIAxGp~Ged$}^cw2#^<5a5 zs<_6ta^*qS+Dvu~M|h{97Zl2&sJn*m)VyS0t+%O6w0PiV#%%(kxb*NehXefdv}Rfd zpU#W#Yf=Z)%DnIyI`VH}6CST{d}w;u+lzq_y-k%0Catm6JL~G$r~-EFjmq=Nx2Iaq z__UAhyc7}dmv!p2-m&&V$E0Rb1FhppN@#CP+mmNp|3j$r&1dvpGNTbWy^~K_#+i_K&HglP+KO6&Ur|pX;w^Laor?A*6+_??;AT^C;cFq z4}mEH>)~wF2$I_BPfnPiKB3lWDdCiQDLM?rLEl&p4ci!FzB}+z>>Qv@VcI0c$>|;} z#~S1bNa&Xcx%H|B4Fs?8N6p_zYN5K9Fd~vkR;o^ePG*H2doG~g-O+o0LM&0D8h=|{ z8*3rit<=QocyL5tT~-dn#5>W`4cHBBh28|$j+Yxoy|?p0F<_4P8-U*dkh`TiGTph^ zhBaf&nzcJojk$GPK^_<*(AaRQ_F%no|NM0;KClUumK1E>Mz_)37}}S5dY{))qu}bP zGSdC#3W9BVLpR;xN)S#hCn|@dIaX3?V}{{jdQBD%1i;q3ZTd|m z=5z3#HK^B3!2LR?#-q`Y#(tZuXWs6QjEFpR4W8&zi&N3>0qK1;<&$EB`-!?t>&7XV zSJ0m0hV=;U$B#PNlaJ-Zp70t8MC5rn#4LbnD@U)}O>umvn;6|6X6M3nOgLkw|IoW1 zjw_>msiTzo;jNp@Q$1&_dmLlC_c)mJfp8O$n@HEz!aXu_{-$Mm;$?{Gqqwo*-+cp& z?)wn}dJ(2EMUw*=+t=l92z|UpUcKDzFdR*5*_Hg7BJy`coZQuXMlA55lUj(i^Qg&H zY1wmveJt4~JLtpHjSVvel_#lPv$;tlyA$q+$88C1%|#7+yr$G$9C{EKdq8$*ut|mB z-|74&7vk0MUVyxa`!n&w* ze4nl#Su8Z_fDAgxUltGdN-UaO_n?tS@Biep7|nLhP$)<7mQ140Kl*>sj^l@FG3KU7 z1)u^d!PXD;wfS~p7_;7jNr zd9TF5w@3sGH*)^IZaSd311NnA%a~6HO8=p2w;MMa z2s&GYZb12OP1PQZ!>Y7aHG!8#wM*PUMCooktS;(9!>reKr`SxCYiEEDt;3~gAfiqe z5dZPpWI#UW<;QxzFoB;rWvp81#pFAsDffuz4X8K`Qc&HiJ^J3_3hjHg;YLdXzxNxz zAFY(0e&*yFi3ay9gBX7jj;Qb6;|vypR~E)DU|95?^20~Sn|qG1?ELUyQOMYzv&0fi z6fNeJ>DW=N&G(wV3Ew*h7-Ivk$5Td|yFp__X2Ha|Ccj9*>6Ch2-CYXt$OT^-Le}NV z#Ge2z}-}>31u!Ed` zs&&A}ywn+&5DenP4<(+hd-V3l(S6{mc&wu_Vv0^A59f6IJ`^Uo4*6U{o}j(0s|-il z8Du}%fm~L0@hZ6@X_3kpoG~Z#Mk}AQZ#6}Wv^nDH!}{yrM9+;3mzLuZSGO-Xo-f5p z0(xo2+q~aR!m?ocy2gNkj3uQ{epCwoEMgnFVV^;GtcG!+WkoJ`U$p5;Ls-2-MbMrT z2jNb=H$W|BwO&Nrv4an9gzQ0}?lPBVNJ_+0f^Oi+a9Sl=7vviyn#U zsk0+}@reC8G=AB%PAZ~0c(3F;X$n*>BXvAM*s zI8oDmChaY_HZ>h-*T5ZB1J5rI%8@?Wx2bvaO;9`0STB}b*4y|$%q(1LvmR#~NbMla z6(Qe|>rUl|m!qzWm+8(CUBa1r1Jxpup*5z@d86_OrDeeNe_ddJ_P{%rrZ&I`=Pj#% zvc%d($`1$mM;y$X=bA$iRVDn)LumiA{>LQ%W+->#Cg2*skUq#Wyq_XD zAhs@h6a4UzFBwe=fxCDzhzVz+LObaKaDbyU$pqTaZ+YMBMXdwcnDPZWL z?`(ehg0w?gmtU5$j)1#jL-)Gkw`AJpY7iS+2a`*GKlAXpRRMg=)07P8N-^RS}X(~X#(Fmdm26b(3uin z)Yo-TSh}`0287Qw0yHIPH%J&$3ZKRuk)doq%t9n@=84$BHv+Ys>a5UX2esKi*kdXI z*y6cQ0PN4bv3L$gwl!GJ19mym30OwG{dtY;;vXRQX5JUR(92P$_Vv1mx?Y z+^UtRm9ZB2+uPL15pj_pHv^K+!eJh)HFG30Q*>);4h)vNEGH`G%+SmsXB@Ch!7{;|Fh_(G3nxTEML|H| zquqT!-@BjV{r>;_!@~m?YhCNS&g-0h=OD*Y+|B==Mc07;r>e#R>(K-c=KJMJ#};{s zUM@{laXF_k=Y2t<59%BKvOe~QH(X$Lef*FAVHDT@ROHwRH+#q8ciokim`EEa9Jm-j z%@qg{c*#Av^6jtcXqdnTnQI4c!@ie(>cc5rXI9wM`wk_Zan~0NRf7XG*>ZJLThpi-a~MF37jBOkWO2`%VSem zx*vLX|A+q9i~a#>6W2xU4U^6tT%|)cnKwDng6Jel%^ z79lS5V33y(7L(^F=^cW|2Kg0aQY{bjmdBM-uB|ah;d!%)MTo7?nUPq=`}CUEM%S|n zIpU)T;N=+zqm{Z}ie36+Q~vwWPBKU&->+_+xi$Vq zK(6pZoQNiE9CL8uO63Rk_pg?p55y&$F!a!s_8*{HWcBgMB~jYkx}uqu&otZc8;dha zEhEg?d-<$LQS4u@Xuk`UWn}8l{sm?_7IBJI~S-^|<&n}M+J;^m-bEA0Cz#?JZwC6@kwS1k7gB3fTF zu1MT{hcWkTJqVtny5u*e>&~S-0;`I!{EY*EZeC&=gwVk>qq>j zMU6~c+y4|C{_03px#fn}Y-S%$O=3E}hvScUF>V{w5 z?KUK6)VViIS5Z!E+WYtRe}4H!E4J7-&dRuU8)wT|$|!xxm-GJb|Nj4bfdN3i)y0$l za|77sDp%Ue)S!gj#N@t2tSwe=>xhtre&vRJm!@)!p3pn@r=1pZt=#R_x9nQPRa1qu zpLb_%;j^a&S$I7%o`fh<_%gZYr2#Qx%a*uEfHFi@Vk^qGf<1g7MmgqiqdIRqb!@SUA=NFTYOj#(w zw5I7b-{emBqmNOx^8I~ol(E%UW7Jmj$Q@>LRcbDoMH=c6cNOzNPY9+9cMm;R-3`nt zTe8fJxEs~a`9fK2n%PhfVAY-q``b{{Orfy5q}Yb`M(_l(HRh=n7T=$VZ#>2BKO*G} z&erKTg}8?X-EFc4^Dfq>*17lggsK69D4_iAb&nM(+cS26Oi=1qhEbh_qGf+0_)if% zJ|_d?S0Bi>YZs7~-_bX%%qOJ#h#eE1e6PvR>;V34p_B7-Cl;c{Z2vPSyt`AyB-e5H zqIzyup7a9ZpECoc3-NrbWo?S@$ft9@!Ve0EsgXhX){!A`M{}`z(2*=rY3n0+=sFKN zVRu9&9>Gdn%Ep3{KOOi@Wve)4_Xvy~a#Rf5J&T@f=Fvklxh~~N0YERx#2SODfway} zcc8hPJ=xnS)APN^@42D6A1L(OYOI&1S#PuCf}JVT#={-eG%IJD{3033*6&9Ip?22k zxaNwok5rSa?H#g03xmPM`!eqY)pXO`D~=Y6$kS_!j8KvMvivE-pgVV8T3n#gQJRdnc&(dh2OxB z9l{3C{x7T^H?)Ii2k$4S3uUwnzkqn+k08(M*HzcyZxhGm=AJyB%-(pwPK)xugu2TI zC@!OM`K0@d-f#!Bk+%$2l0hP3_ymQ2@5xL#EnS9|{!bz{q)Cr7{41KVR zjM?^rvR;GcBz%o=Y(6@9?1`JAjs@EEmcg~M;RY;OTm^X!kz-+)YyMd2?(A71V)oF%FPx2_eUq?*yBce3AXjJs+%g*m*ET zzE`$4#ck9}s7Av@c_K`Dnu^2ZTi*#2Flt2HVXw*JL38T==;{f#Rpuv=SCgmxqZX!eX;50o8`;dlH7Qwk(flL@B%PwS%lQmg{yB3Mz$T+Q^@T$yO>(G}xu(IJ4ojVn$^=e+RXkDdeB zL-%8bi>Ie=dwb1UdiDWRk`5W9K9T}%$BGR%-ts}7woLRJeI?d-OqrQ+8_0I(*O{r$ zknLmBldPnN1M<(|C?Ew8$J2D^TV39WG&pqq{)bkFuWax&Rzcr_s7Jgu&%`ay3>=WI zd)^2n(*%co{)?=OMe95SwzavIVSHu^TXY==rt_x+qP6>4$MG`#*B;sEc9!{)2X75n zY<)qf*xU!8UWgszY$Tl6HFNIrF{QG{gk1mUqQ7H?$7@7Gl()62|JGN(Q~`OR%#@%* zPRV1*e$`2Y1uvA+{rH!Bo`ANd^QYvDemVhb6sA^N0}85@I=_$473fttS=*qs!R1S4uFBK_HILXJ;?ap+{C93{smH42R?V*vQlXQ^Ri?r7_w1d~2DIUVDxbv?;8%?*?WO3e zue06qbB#cmTG%|1(}tBZesA77tfM{-%>dN649VMX76MuI5Z$GWsdxUcWhW%E*jGH>vtn?P+yZh3SX1B&yUt!LF^_F=zuea9WTb#~z1C(~qO zeOc;NvtDLC-q}V+jfx#p!fwGlzWLgU&_g=d`3a{<)I%)=Sx>j=vL$-5Ue=~cPTge` z1#?rqJ|90<8pKZqns&R{q5ste{foI2j?v$cB!ixJw#vjuA%`Qb@-Myy-CjrC(SSLK zgKNzZTG)!ySBmdkFhmDtq>LIA`zZ3Ca`*#p?!a7CQ;+1j3`KgcZ0~T-(TS9WoGKH1 zrnC5bSu%?5E#hI%>|N@5V0g+sg045Go9hVfvRqViQC9S7WRO#XjPMTN3+o8PAMg{e zc=$3_auKo1@JwcziW?bqv!A=x)LjoBKl!2Zf*Z~?E9F^=G2NafA{XDN$C(sB;ohPY zZ>vt>cSvqi^H$DiiK(Y2VOn;$Jkduzw;MI*sE#H5@C#BWgIZS=Ckr%qkz0l2Q6qO^ z|DcXkhrTDFDE>1P1GiP^l*qNF7P}1x&paey*5JN_o(Fs~pv4Vo{+k8!jxpq=E%ygnMNP;b2%-gjCO+5q*j2pY9=be61JJ)76&8~ir0fY(mF zX)(WN+i{2aBfA%R2=aTN)J;L(TnSd#hV$dob)X1?-j2p5S>J$&D4Zrtdl#3PQO^nFZ-z% z=jz;$cgiq{aLjw2MP4z`iHLOa9AQ5T*@5#^EK`U((l&1gN7eU0)C-6L`J4{ZB|E6y z?mjO+|Eql)v0t!&t+~~aYo{0Y`H7a^zcl0+WuBv+%InZsKG{3tm{t~feIK~cqPw|i z)hIXuLL{i2TI3q-sF0VuUJCVg*DcD5DIJ+hrZ_weA)5Ak5*qOpiYS&3iTc&tCa)A< zsYku)S63xzdcz<;UQ3|iSc5JjI)mkPUGGK_D1rG>kK&5QdQqcb_ApU(fmMj0X%RL} z4L-3NMo}KukAM&LeP2o4LOtyTRnPIKpPnZZc87UBS}eZUF>2^s1PmK=P^AqQoBEI_ zf6iY)gB_Zy_bg?FmaF-%Z@Q%5Hh1b(ie~>cFr683tl^viGGF&lT{?(6qgDW{-{4K_ zyz)p|2s5__O5a4@m}_>lUUO7+_o^eF?B%)f|7NyP6P`PLBq(TtfYD;vhpdKNu7U7C zlGde)V9;OWS|1iBVsiu;CNbFFFaTOV3hSS=4a!y^Cu^PELwa`#M}_6emxUiaw(!KT zhWDn-T8Xf;7Pr+>wXg}HU8>mLDSQxX@9aem1>2tjX`6O58v1^VBPCI;?e?#xa<_F= zG|Nwod%bxUBGih$mTGh%{t&Qan`nWzK7e)$z&uT-?QGxs`ia92c<^*{}SEqvm*(KKj^e(`YHth^}^+hUgtn zF?8d7{eX$`$}WtLpVi<7DR&&AXvwrWdeIt_#IZEk@h|4ASvBkznsBKjL|yyy`mnF7 z2bo!#6)HIqWz>UlY%WwaiGZMG=aQ>e2CN3Rk;pw_<9kq>DGq& zjKvxrRzpm6Rh*<^QtGo7F?vkBpPVv5oJe!UZZIpdyC(SN0B@!~z|wS|D^{gQf^n7sWw_d9>R`y>xox>^1FelcCsk>;90zfmz=-nOzG*hS zowYzHZJ>&XLIqqgy9fmlUuUSF$!I1uMqZjG{@H2$5`68}APz9=V*3k?ZMXit?p z4B=Q+Bm{b>7oQu--k+>K85E@A0@T-+FHI7uwkH{xqUZyu@ntF$!~?i{mftm!o~@TG zMfuAqLkQ4Bm8vw%F6gCz~Q_~+JJ$W+}aLAjgUN|-|ZkeI}Q+iJp|(K`H- z3l04^{N~T0(~Izj&F3f;bGjY;wSZ5Ct^#$`woY<$DeJ7zJVt;~1u3ZJZc?`=`-=^z zr6(;`w|}{yPI&zXDDV^p%Xa|ZtsV2rYhSEZL)Etllm-Kgu;oGfkgj-#cpZrL60Na? z2J9h3UcFV|xP!|93LCqtu~4Snl#Cw^EMU!1*P8}^MmYhs0TISJIPqm$d|3@z?rD`e zbzWP)4VHQws4wv0{1qa6Yy^s=OJ$WJ8hm6<(28v=+om;`BuKp4po%5@5>flcUiA|{ zz9+!Q$x8>lqz0T+TAv*GE9lyH`p$prO#^+Jj21WlvfU6N)k?D6u&nYj2w_v8b)yoV zzW7~^f0iSgJ~gfn+DdNTG+3ws46g`wOq0iy$?L?y*oQf)S%+xlOXY&VgSJ#gT1%q| zOM9>~X|yKW{ZV_(&v;elC#884Oykv4Vmre-YG#-BlcMr90+v--b;-2{>S|>IXha9% zvB^@j*lo;y!B0nhwB;0|MUh5PMiFeC(P0mjdR^l5K)G7M7<}KRP3H zl|yfwhfpO>Tc7$v)JNBQ9{ogF;QFhso(n?kGA7WlTS6DZUX{}J-5yAlSl*@y{R-gQ zSE^6TxAw$UFMk<#m$tUc^otdsPf|X28=uQPU`OecnQbJM+kdISX!6xFWLAqY#SDcassuXLRhw(}01tu3F55|Fm z(pq>%PTOj9 zmE84^z5T3%@EgrK`+%l}FtC}(ys{J6ux%g?ClEfK^=Oj5vhS;p8hx@g+aE=n%T&db z2A!|RxL9909o=?diY~uv?&A=}PE`x^h(AHyqB==!-c+t=Irn3D(l*&rB&TTep$y_q zDC*>ut(D?4)mA?vYI&Ju+^BsPpOvB?Yxe)LrJkRBrJ3ay)8`+e$ZPHF{^OY>Sz9FU zKtEG92@f*R3PAh4^M|w5m)5=oT2@tF99)da{6k$TUdcd^l2*NZSexLnVQG@fmE4-$ zjMw_6)`5WlZ!1`Lvn0+C6Wvz&oW~yqb*`ScnGHZB?*aIk>OZg?{aJ=lV)#oiRgDQ& zvyIV%{v4}o%0Yu)92M&maHFyMiYZW_HhN=n5ld1k>I;Fm`weuRwjl_2kG^!CD2GCJ z8K-NLdILN8?|Y1|X>2>>Om3R{v%36GFQq31oL<|MF03+5x58jUkFZCZ_i7xiTVO z&wvcCAB;yjsTPQ(?tmhJN{fAwY#dk5Ivy8es`cywo+eM!UV7C2d}WRhIT>hzzIFe0 zP&$i2OlEQ6JEx*c@xehS0h6z5eU^n`tJg^uK^*S^Aqla>HVuLupi_6HxNm{`S$`X8 z54qlFhGhF#1!>WJAb;1h73+t3tIMKJM?66l6g}xF6Znl4jiDz_rY&AF>pi;*utnI< zb$3Qcc?k1&YH9an!8`MxHB&4M`+(O_mNUN)>!Y@3SOd)k?fbW`vZcu!HH)l{kG`gm ze5X9!Yc0-qW#SG{?-C&a@Qv!ASqmafQ=1QwO(%fkRt{R9%e1m(M74gm4=<@m@%6bsjVXf46Cwx2qVSS3K z%KqT|^I8Fc0Gu&Gudsp_&sxFl9W&WDf0Ehu?ot-df0v3blC65Hi;xW=q0Y_TidCKI z$Q&B_T+9M*p?+%k!;+FbaHxzz-6aTseC5F}=@QXB|0pk_HT{W^mduq@(HS>15!N9+ z0o3tQuR^Rb0V{#Q1#=NbwCU)wdA@1ty0yn^QnS#P*pvrcZyFRNLxoNix~?`o+Zw)y zM0hN^xpJkK&_jG0iisYaVm>Hsaqw}61-)2D#rAZ^U(6+02@;LS_0fOxad}E}EPL4AcR_}`7YM~f9w z!RU?7m?zSJTU<;>^?8&WWyk29Kjx09Qr|U3KP`YBCSph0vji|b>!-4Pft;L2TC~VH zEdLpJnKong5Sp^4zG2l~GT)NGB_BoWoOMUT)K+5#r=WHb+ApMj_b7S_=0qT}e*RUY+*dRXaoGE_W{HE)&+WIPTRf@a7vYt1(JW&~P(dqRh40m2={ zt@u`YDM7j;m$GnF;U;pKIu(Tdx|aB3_e#nB#JvH&imgYN%KPc9hO)U%(TcOxsQsl$ z?xz%ydms^pxbcKy({pLO)cobpMWHj{6ZbBdPy`!tE$ysU1JG^Mp(}f<=CxyiJN~T# zYrX;E%1xP06K$K#qIQ1Sha~GT4^AnA^IfgqQ4+M%G1gq$`w^E2Cd|Hj#R;}~;=M;+ ze~EYX0QQ+Zu)6U}112;)0o=X$4NWUZanib|ogWVfD?)>3|tIro!dtz057}-Tmr_-zkBR^-RzpR^U}-sd4IAW5R+VstKMU$dRQKrONg^9 zG)?_OSeJ5CDw(A800JJwTrRQQ27w(4dB0ma^sM!X( z^$avw&^_bgw4cohC4o-mcqqcYJskT3T$IHD;<6S6LBN>Tk-t<5aqp8K zci=>8$Q9i{rfbdtY%34xjKo+S;$X|dPeFPf;1-*#1~oHe)we9Cq0~DI#pRu-AK3J} zDy)1o7nf*@r>_h)ennx*$X9(LQUcQqZh7wlmc=Q|mMxX1IuWodnmmNw^#lHkVPB=O zN^FDueD%pV?apvJAG>(hZ7}N^?vCD8b!}WF9Z^*y`dfImc=JL6 zg7Uw$>_)g;)N(@Fl!DgI?RBOAEvO1NZolb810=QkBQ~%#4DxoSCfiCyLQnmk66$ce zx#pgo--!#)vBI?MqZHu7k{dxK)4@hh!lE_R2V@O^ z4~kdvH^++iYxq`Xz5UeBZ6lcwmoFQ$EcBWZ;BzCL#WiBW(s!j;Q;K@VX2XExu;9oi z!&VjB1oZ8;l%Lfn^zN;``ty+D2|Y~;T4&3TS;%_~{$BEUk-O9{nO5zV)s)%dlbs+p zfeqR!-x?MD1@~e)=>pOmU^<;(fKf>%Vj;d1ddxxBGU)^5>39e9(uPmXK$*L1@ufE& zpEG_UIv1WWru;+!`LKv3eYG%o<`2S>{DTvEy7gcOrIvd)F8r^keUyAFJ{J&&lp+@9 zGD`n1z$X1G)A;L$aC-}@ z&=D_1lYWDcziIGz%HiKMJvk)1AS*wgHC$zFu6ein8DD1g<=x&{O&R=tpbU7;Kp_ra z^}o@|Cr_k2&}1%6|KQ=DX(3jt!pByC=h!hLxdZLWc&j{kuPP(`isMCW8o+Q1*@LxE}Z9H5)LpF{pfHhIA^CzXeN*Z5raZQf#wr=a=p| zvey1v5q(B!D& zk7u4ut-%xWLNpSb=^+~VsL+bswuodStgh7WpN*?5Tk*d3HO4^I06|GDz^?KKfN6CY z{62tX#rP&X>U3?8`uA+kUt6y+WP{Y-zGxe-K6{1}V3c3|DCJqv1A5h+=7#(9nkPSt zH2i0kJ1MaO;Et6dv?F4C)CiTqiHSoMc*t8_Q{v&i2{(|h%{HuyDAK=5pC~TbXwq;KbLg~s`dDDuJISx$dW>%8X@#5 zdHZu?8mYfn#6m`VJ!ZDx_>!zauYzav*JwsX9XjtKXlgZl`K#Tu@y3_O=37Xf0VwNx zBeFHKTYv9p>2Vp*Txr|D7hPahuO)Li{QJY1qI=Es6b2;_{8B4wB6ZmgIY?VAbnxEQ zWGOSfk(98ZSd<`VB|}cw3A*a4I>Fr6lOX>|eixdn&M`L?ic!)b!m-0%vrA%lHmkgLbUi42V57jW)&iAJgW(+$Z(ne}A9Xiqndrs~ z+`berGLA}IK?j5kpxlZ@<|kX4_@7mVdU}dYTW;K}JNUwJth*%Cd%n=<6ApL}$H$m& zK9lp$UOH`zMuLyl$Wi8UOn>22mGbs@EwW(;-*Stve8hRTen)F+4~I@f85fJ1)_V+} z$q06D1lHL~L{>f&;q=tLT!*i)7kQ$Lt0@iVCWt=_GVi?nYKH`GT`mk!Tx%3j>shyT z=O|WhDyx$n@{Xnp4If##19*K?&~>?vk`l~tuhDIJSfl9cvH3zD(}Tvr7jjccP7~&S zG1u>^M5@Zif)ADY&p4_};Ck6yu^EOTObnQ<50fr+^Y9tkbQJUB<;!LXh4&blN2T&W zXy?`AzhMNi)W)Bmc(8?J@Bb|Q@HYQnFd;Im$KI!z@Hijblo#og)8jJCPcEl`p zJ9J&4!JMoC>kN5YA2>=z()Y=M2L5v&3AAZ7rWKqVS35p&atka@|AJY=C`lb=v$!G! zl^(9@!UY?_Rm?7^DPencqOWCDTF1f>>4BgW1z)Dn?_kcE zdAq#oujG|g!#_j_4Ku%V%(f3f2`%!2^tX4+Cf)qA*)R1G7uQX?xo6%!;_G#4v2qEx zYI-S?;bT}H&l-rS3EwlW5ntHr0-y|p2U9F=vSo=I22AyzClNku5VQb0>$2YAZx3+IWINyg3~2_Dgp%e#oeJ?ff7SQwJJG5C>XB ztdO%aUJL!O%)k1-5R12|E0FxRng_Zz@LmP*tRuVpx0@%m=KQS?*Z${!!VPnB6GM!r zClxN(X}v$17xiPHU)A60aLbR~`sbu+zsvz5ha#EIhV zPW?G!#-H6Qw<>>J;(hYG`c!-}(tPjunJc+6ku14$Z}12ELg?QkNL$j9RhP-~SC%78 z6yh4_&>zxxxH1OtN#o=&lFTvPYn%j8|CNM7)+sKC{RX(vwe7Qkntqy$=<8Lp$@!>c zg6$RWMuyr=*45F;RT%_GW)?k24z@(^^P1JAQU-P6Dp-emN)~OlLN&6~mJ8X;b9ADI zro-?bSPj6d}vhbdfsX|m;FKuJq8a+UN0$RtuGKt)M9iSuUYkpo5 zu>n@Y(NzOFd^EppX;!HjQg{`Vbo+~3ne!iSyoE$CXS!bJSv{@@pAO85}=E+>b7?WqRm}k>VNQgqt ztpPU%kt1%WV}s}ST!i}4)~Aw+;X7H|v}S7|;n(kyQ;&dqUtsIX;0yR*a*=YKL;-j}+TX4I}KRQT% z|3cdj_)=*3bEsu+K5=<*&x<#cG(SjMpqyA$UU2^*RGwc`3p$JvnG*OXX$ za9j5P5U2U`j_UebIHQhE-Pt4o4!@aWVU|m|acCl5cj*bMHcGWs#SMlZ?9o*>)>r4> z>T*(s`wLM5JtxVv(V~ixz(rB8t=7u**XFB>r(kPtSzOm%!L?xmP)s%2GV`U>AlMlb zkjNv-sZ#C!#wQW(Nk@LUuInbhp)(GD~B)TY_vROF!l6G3C=Q9n1&A%6rY`orLp!+!bH zPMJZ71%{7Rh`=B#f`^lqa{IBMh0ul1q(7(hA*(PMuS+P=<+;axvXh2K3u_-+!VjR9 zv?u5Xu)5nI&c|*!1rzmdTI1Lv*SgyJHW1MozF@THy1wg~N25uCFTH?Sd5yzbf@%86 z+|1iApZl2R3V`houJXMSpa~)L17z-Lo5m3T-Oi$qT;mj>4`(|$RB5WN$06t%pS0#9 zqV0Ev{<*M))oM+wBaSRW8)}`pXXOgCI!BGXg8yT?B7Qs}_FMD5y#NWm@=6+SAlyJF zTirfw)&(8Y44rI(5o*{k;QgNE+_N88xIj?6)S;MN_nV(pB4uEGw(@V<0A9JNVDUl5 z@&Ni-?{W49hC@gURN6RfJPX8o?^ps}YtuiXxBOMd;1B7kxqC8IE3s2Bb#j9#WmdL5 zSS*r%wpx%S?I&75IN|l~qZ#J?)hI99Nqyku31j*LE5ZYV;HO0wCr1&slsW(Ama1aY z+;y7c+;=w0q6N@4^(5z3-9cGgP&Q~%e~Rq+2YI79s>ACr(P-LD;-n0xX{Z!u zm>hK7!vVSvDohkWwZdIvWsHXPz2OkmrHZ4IcH9cb!kv7pqkX4op)1fogLLVE^fvR8 zS(S1Vg+l-f{gZjgo99kJAs<44eB1M0o$p5nr!RX$jFUS?4xBkV((uHvJ`|GdiZY4} zitEss4ANo>teA>F-=d?_Pl8~D9+OVW%+qiMep#DV@`k~r&JKgIXZVG;-G_-el_5}! z!vTM-I6NqmenLI1Pu?Thx~jQx3JaHEob46JsZP47`uc^guvGS6GZmN4z*E-HyI%+h zrW8Zx-DVx9AusxhGkmP)8tFh6uMxrh`jvPiQvkNv@#z!7_NBdDM%`w|Nd+S#a;0>5 z;Q2|;FT%Aol%)(i5~vhAHL~CU4-}&sXR@TqDb>o?zhD=Z{#8sNH5!1Dk9jA%Rs-8c zDPFQa3$ytuZXW5jl$mIciW$gbE5RqD@+9aIcb}J?tY!0f=zXo#b6#-uBT^3EyjBqM z*#6IxLEUrSYlTK}OO~;JgG?L7HY6VtqFBrldA!9OaZ5i)>zZy?HWAyeP<2gL@TpgK z3v(4V$DO(`ptB%2c*U;8 z#@^Yz%2+%_S6oFvebXZLN$kCTh}mj1CG2Q1L;Yrpka5&NuD*jloUvtqQ6jkxx?;ZexPhN6^_zXwetVJfO4rv0 zBGxz&Yl_?!E=8O5fj!P>l>?lWmXBqoT61TYEBvjkTcmmSjv-NPf&B^KwO8RpO|zm9 z1n1eqhak%OGt#^5kH}p$sbTFMN48=q*?UMM4}T$}!iP}olr!G}dUV5Mb?QyFt+TrJ zo;FjXpRIEcT#vRiGObRvmxXayH$Ma=XZuq>S~0;?%b=G9--^qZa>*5mKF$)ieX88* z6*+0x+3x~AUtOeNg`E;j;*|T0OMl{ed@v*;b?4!ZeueNDa4DMMwoi?^cyzMr4c zMzFg|l*>7A(IKec(c7?A^LbbWIn&%`46tIK2Bnpt{S;C+p;2+D_=5NWlB{|7O?(u*~>f(%8V< zPXx?vxrg4zPAl6xpfubeVr+j1cIO<7OPv8tYc z6O!^c2~Lu*qv2VTD_Ufd1c^NuCpt8rkWlt6y6ndpL8zyO@nD_)gIw~m$Tq)AC~N(+ zAu2}-tk+1htBU@{lzt-YKu|%C3H$n;z{E|gCx!?_mJJ`bj;hHqSjPHLPs0- z>PIe>eDy1;XMulJ*|@ko=nNz;;s~zCIr4~;dOopggI4mx;uulXx@XnhGv?)GUKs%R zR~4^AYogc9$#qbr=@&2hGt` zNoy{V5==kyzAVZZExPF^6V6|3MKngKVn0rwjuH)8SFk(=!a+N{9&yPQaWEion(D9b zO*Efdjj{=Ob9fF+bHtI#1*KnBnQF`rDMb%iZy&Idedz^NP5)W=i7YmFxM9`QWppJ< zgjl=UkQSD#djII8d-K+%X3!R>(Jz$T$qey&X6K~P>I57MpKrXqRU12><#UN`;6_#* zmRDlaFF$x^V7i<{S6)OBUJwcU=i~swHv!_B+C#A*G=$b^K0 zZ{6E}SaqG?%0napRkK(*2LRev$CIOmQj953-?}RFYcX1BK@<8wzd3<@ppLa(V?c?< zEyG@a)UMYl?<}(YFN<;;5(c1+V^2w2kA9ec4to?=xBlh93XgkdzmL4AC(SwkH?pzo zAIsr;t8XB3V~lhZlf7`h&c*X3;Q0JRc(hh$ev#TZ|4eZ9O}KKJ6k6Mn0B7%G?kGCw@8Ll@}8GXk7fAH~^r3`751;^=O z2$~YAM2vW)jq`gO-)zx`xmgNdN}l}_(3yO+@{dOs$aT-- zUT-K7OR8rzqyfwwt#aNHWZX!_sIF#sU)sR;glY%fmkagb1Xa>`{n*i@{#@Ex)ABP^ zGgul7>|vv>X=`o;9m6SV2f1?sAP?T)etys`ub>TtbO7`qVxePUQt8|ik~OJiCm(i zzTQLv7`6}2$@MyWZw!7{Fh+wTV>s?dyZq(-UoLisuWfd;X9B#k6f9@s>ZJyxl1SpE zDU)>c7sf98Rn|ZPSV%)BOXOg;W9F`yz3~Te(wAQ=Tbp^rFxnZNhiT7(n;3M)_XPHN znwXn4AQ5=c&LKHw;0s_0-?3jG$#-E$*3kGb>Ywl;sw4}sQvMt%;o;F+YDPsu{Jl2h z8WH?AztBb#FBqbcw))K@GR1X|HN8Efj|@nj!5dk#UG!H|e&gV+H||DPCr3m#L}cIM zKR6Q0zF8?we%5d)b16Q0NUT7{@~ru|`Fu%SZRTZc$p_t&(b7EY&NcC|qd<+U@tF>@ zTz}^E<}p35NzQrAYYHnHCzUz{m?8~~c-`R-GLtd9Ys0=P`h)DLtSN$5CvWb74`Sjx zzoN0V^SUc>q^&{EOT+B2y}8+^MK;NV+5mnc~y`C6?>8$lSY zLg7UCL9c1Wxf&ODLen)}znoj|8~oUn6+@0eV;^JS{Ey9dkO%Ggw(wz;twh%ENYQ+L za3_ERd1~u^HddVrTI!h|ZBi20d`QjsA!+ly^uAP zBx(@MTTfN$v7cl#xLUXaMryzDX!#XI-TG5+Y2#ODzImehjE1ZHkFkMSe9=<7>Dw&k z`vyov8p6|S__DxzY9n*;4wD@2cCXLQdu6mq6jOwE8r8cr)mZeT`|?N7>QMDY4$`l) z%etYtu|}gN1d80*=@z{`#f>Td^L>^bBq6QEM<((S47=%B@{% z=5IWQ4-T~72n~C6Idb*oX`F+*t8N*|{L~8Ex_I}n~U5iC@oZQEO~WZymk4ZGR~xh1r0eXoy#EXXEoBE;+BhI z`=u?fGsTmRVgu2nF8C~R#Rd67{F5zq5sZ=$>EiD|#7pT+RD8!89sB@&bRA8@^Wxf4 zmgK`bv7heR4`pbC#Dr;cLzU+y1D7~Hbd)S@S;*QFJ=L(hTP*3Xm!Ok`UP`ri*W2#V z=z~j6nO$4L-1HsZZ{Y7^dnJMjkJ?zA;6Jo%iLEA$)CGKtKdTJOM{W@-<)@_ky=w7) z5yQ#|n?O6L`K3d&B2FV@1RtAlR{ccb%b#B^_m&(?FkwTZaY|d?B;1gl<7kQNwpmo` z+8yVDN|M5Ew1A2ax@7da_%6XIBaJ)@k97JRlXKpJ!U^z%x7;t6i`WFMNfuN>GdV9l zT4PocV`m!zI;ZNtG;-xT|G4zXB1yQRVq9xWz!gH+9B@JR?0{WyrBvzVCI~kqTYK(> zjF?wNyUJmdd>w9%>pA^ANoEV6ns4x=ZnXtATEed$z^`?A>AyJ=Juh0SR_b3}NVFdN z+44^JK;6_kJ54FalJ)$A(Srd~P|a_J7js-P-6SwI-k$!`K^9ey<^6K}**Uk4k8Whk zQyoTq5T~Y=x3Ztk$0=nt;0Ntlyn*X#vJhVL=?YMSqPu_X>&R z`5^}z21<#IdryqbbdUA3W(ESZU51N#e_WqzLt=eCf@Vj*Fn(B0AVWPC01VIh16yDe z!TrE1-diTLVw!>1hOywTjfeukGp!-OQ|7LkDox;W3J)IZ_aaQ|uzX7&V=911flw$m z!h%A)0?*IMlTg*&7^=tQ4w#;K?@0>ghS>D3-Y+jl!2}(aPYX2Q2bt+BPm9N%OpiRsL9Oj9Wy;EgJU;e}1@U zxzH-t-xQHh3_-!q#|+n9bkL9a`kv8H-EzPqwB21AEsl%;tw%_WlYSSxz&qy06a5l4 zQlidq6i)*B(V|gBe(p!G;Oo5s6mre(5!(+Ttqc(PwR?%DfYKh#%RGu5xq*S?wgWaFJpR%mqQXt-9qjlTcTQAlR1)`ONmDG(W+ zYJFGT_JsT(wN@@|tp{B!wE}=g-+XjL3gREeqB6=M*;?rtq|H6cw%F#(r39$p}+Iq-7C{zOozg#G}y!S9uhQQxH&FKsbDD2i>89Hf!WL**5q^nX<`S^kh zj#G+TD{Fpcy>M2KpG+g;rz?biEM+yJvgiL6~$r_^2VmA;aV0Xb!^80w6{ zdifVaZbO_redMB_&0l&M^5{E@Im8^52EI}txiuSok4&l=1P-!{Pdv6Y$U1VP&K{Th zODCm?=SjFcv2t>7bQlo!KB5KcRC4vzVAnkX{{YgtXAC1w`*DZg(D|r*a z1USfRy+dAaVUP1?(4oWmA(F%@X-4<q3(u2ZqP75_E@mAsc^L+?3nMq~`ZY0%Y4-QVqpvjm0$H?C-_o>V=f{^bs;!>l1Vah^X1K+(8zqV| zR^nCVtYcDJ(WM_K{$8lLP_&%KhV2)91i~=8`|d{}MNELc3?9EyNi>?3bD#F{a?@<) z#pFJa>=s2i@lfbhUjaP?{9<5oF^Ktn`AEIw2~p|C;^#&!kFyf#O}@06R887579WJ{ zu5InK{%Ri!H%*Bh6h^WIdAczp55sqS_@Tx>HsR%XYwws`gsdM-b>7L0IpBHFWmpnS zLLpj=QcN@Xewv?RhLJZaU*W**4Z3wtdq-+h7J6ptwhC1IrGc3$Zl`%|Plvzt+!5%+ z9g$jnieNSt9n#gchR}lcfjBv5EGAl7)-5Yj;w=4I+9PN0MSGoSF$Mh9JQ~K-jqtJh zbhL{hKRH{NVrT5kSLsDnAvvKkPZI*);$deF48TPP;x)wQ)m$dC7)#fSA^2t_Xj{JA>RN4uN;v^A zoX|Y|d? zduj${m$>HJy^D2*ig&ALGFxg@$O2y+rMWh>NBv=#mvEei%S2q7KUObWb7pes8vr#W zyo}SB@se1AkQpqM-nRG9z5tF-V{@h;pIQ=%YKqc20bh0UObUO7o=RMf^Rl*fkQQBZ zl7nZ9ksUME1G6XRzA#>SjY>Qbs?|o1t|_=oPSt;{%Wh}A4gsP4q%c#Ka%ZLW_CD+;l|w_;nHX;)AL@aCA(RK@ibFM8{D; zN+@Dv10q!*BtZ~^fFL7M6o`l@N-xq$K&ljjv;d*^-qK0CUzl@dpS7=NuXWeDKQ}+& z<1Nqo^r~KU9>}7SuE&Ct@pUuhp{$FR*iC`k%20UEHA1kT?n>#iZW~luI^+T1N(1*$ zN0~1dYS;LA^bCl7is8oNoSxk}A*V)s+FN?^${mt~Kg^d9YLAb2gDQ@~et1^By471e zE#M+vu2#P`I`!Veuh zPqg*L)S>O(udP-i()d;Htky<%%txey&`dYH;A;VVuc46?!{dyf8vmXXDA*A~0Yw$V znTtj;o~<0y7yhfOS>D3upK$Y!R9frrJE%d64z+h7*ei zvmyHc-S?|d+3OC}`N8RH>BMei=|0Bbjn<6SwDoew`hbjReysl19saF-1(7z1nntNK zMWd>xc*4BxF#JlwS4jVive_AruiBni@u2bS~F57?JRvSEx*|~%*Z3%rXePTdv zClkDUoF$L$;Il^34TT(AG#ZO+4pVf(iD%;lYDcEhPyRAsw&8UY5RkN>0%ybJVH-M# z2lTHZ-{#*R-guwdjJKL~iPI=>-6C?Mn0tYDmf7+iBe%eaBfsvqiq+}pbH1eD*2)vC zjU@?@H*>SpE;IumuoAFvp30zeMZbqGj!T@A9Vgp%Z7G#mKAwqM5EMb>L zE%5AT1x&lQX?jl= z-hHfqT0C~=B=5Cy2%P^*|DXe*SlNF9GWofpZtg_-dUZlLE>a~_8mqgz$~!`4*hFRu z3cUK(qmZrL)mfJG@|xfK9lqzCwU2?aW4Xmo%3U!R8t${rgV>L~&2egRWtn*ui2-+! z$-e#CbjDiyKsR!_M9cNGwiwR{aTPKdH84T+Fnj-uXauJ_5*r`@#+7lg2^58`uQVHvz4Lj2-W}qymF{eJ3|6*Q`L5=`6MqFy zryo~v)A7aRujCHgt9dVVkg%Po*#fz>0UAg)hZy`3Q(_DGMIC?JUwaoMts1Ij|#$r;VvFf}Q`QULx|IRlh!ZY?;4^KB}QNI_C zOUy2&MR=Binfs$rh8@)*$ON^^+4s#RD4B82$fL8EuXC*p^2d)9xGrCX$KhYA((6<= z2Z`O5Th~_$3gZScffQwTMV_<4ye8&oIu(tH;{9&9VHZ`l*Ja0vt~mB{>{y}W8i3n} zTV(dHfssd8?sg@7fZo@Xe10@EMohMPM{PXCEOMfY9tNtxK;z^W|&e2aa1?DDvLxxAr?&bB?%0M%yA2H(?_4N zrc<>Dw#P=FKGL6zA~s=S-Mu?Kj{><`U7q|`wI0CiIKi%c~ zA~VBDBkBbgEl2*j;bTdAl$0BRICqQU*^Y6<<|_!}7s_j6__7l(Lv>4x_(^8*pwf`&t$>^D_sBMdB0>V_ujVn2~0$8RyD{1-8mTTTEX-&RL6`9Fa9R7ws#~v}tL84ds z78+n!F9Ct%h2t*uxI6ed1uvK*lfUQ#DThNnmTf2yKF{E^0p~L}tB{61}rSC>i4=KE>LCi2S`+zEhAIg3&A2B(l3qml#gI<0% z)8BS}8->^)O0HHg`7?}XR`MbHNBr$Sr%4htyCK7V{#&0q zVQm!dU5!do1*ig7c;9ujRtI~`fcGAvnUJZvngQ8bBMKxI(w7hwuVAiSLXJ{faMyiH z?>P0%dyq3*l0LP@Iv(}SP_G4wiK?IBcd%fA4QU>NIj=HMS-t*!5KDp8id(;C8WewC z^_8$NPL~ezcYgiMd$#2 zwK`gTs!{MzgCRRzq{=`4CGk^s^A8Zq zCT$}&xo!bZ4*um>YaCL{OEJIr472mZz`;U<*s2mmfg^^N+_YXj%lVa3gRrMfu(IMp zraw3f(a3!AsnvpAi+$p?I-~5bK+aU)`w;sr4VghN60u^kNnU2x`VU|ZpPpBaJ%JI> zPAfJ|$T)nN$kK5ro5<4W4t(%93Gb@P9-do&tpx9H^J$$>t*TeKKm2qZe;30K+;}W8 zYMBL6t;(X)A0y^JMVr*z ziBNV>WKo;6sq9xWe4`OOtXX`mGeWcG+>AU36POa2^njg-Xs$v+f-}H^hVtUtEPgko z8?uC$vMG~;-$6WQoJIJZMJ%f|uYo7of|9=?t*olT}jN0bq}(y^(HR9WkUuXdC@H=MrHNP z`GJ6~bC^gqz8GXY4!c=#lv_~q2~w&A&)^=H>J0}BQbAxQtRm6-=#*3%9q(;g{Z%31 zU}wmdBy0k*>=cusOf){cRKzcADw^P*Gi-r|)EP|1sPmj)zsoRkV|_ZSwUR~xr`Bda z?j_V0s*-;Iyeq8QwWvwjboGff&5Fej_gM&X$hd*&s24oJw%Fq;meFVR7BWkQucYfHv1nIG0xpPR_Adhv)-;tEqq zq5D4cM3->TSz|OBabA6ST=qLF=!PwwPd%>7;j@(Yu?P312W{9NDSc#T@Oyt55#ReL{^vyI(3pZ&TOI?_fas8ZSe=l+Mq$^xUq z^ajIbm5?UIb3a-!QOw$Rcq7D8J&F$MR>aQx-o=jxdPT zX_l!vR(6NvVYMK~PrZI~nOSe>d=>y6?c$xnu5 zLu$XPvXOy(Rp>pdTb|WA^fd<&+XmNd$M7yi{IumE+%X_NF zXt6xcF<|JW&Rd;YPB-rvnN1*xawKT`>fZxpF=XlfJcI^8Eq4&`(XJo`Ye+OZN5b)| zJW$i&ypt)WI1cwMG@5$%iZzJ3z9t(e1O#D5QyBISAhaykU6RhAJI4zdblx1{xx?n4 z&^I(P?qU^tGU*-Qs}18pjRvG0SXJgHfT=GzQtZyL5JvHI+FFf%?Se&;MY4Gh5D#|C z;O0dD0?ZJ>2Ba#UO|+clNIEJ(T^HSV=S6NdtyM8`l`iH z8%nR%XFe;J70rmuL(w)r9*XmqS`16quvv!<_<7?>daCcOd~`|{9w7_#&@oG|gswxg z;)^Yqd8>PQo9f(a<9y?)T-!ujM99#r=}h!8l%<`v@_YY-n%_uh;?2Qs2jOVqwMR_Q zt>BegF9cr|dPb3pMOz9X%g2F?$&Q@L!}RAG^K}^U)wA!t3Q1DDBZb&2ad|E7L1P8g zPf__bibL9Z3w}%2m z>sU!FSA+hKLw{+LC=gr$O^pI2m}~u(RI~UT z%#qj|lyq#&0UR`61Aq^b_-n>t?hA^;pQF54%DbHWssos17uW@ukPQNH8v6|HjadpE z)VN>As(<0D9$AHMpu-p9Fg1t0HpToVpyiHBE(YienbMoB>MKSqAYa4${gji1svb6I z8)C)phx5Pl8Ks zgp{?j*lFl;H+)g6z%|wT3C~&Chi|Oaep}B~U@W}=UB$~jH+lEOeBnOgi4PKQgq**B zl~kPm*lDjBdk5^dV2%eWuDhk%fe4S}byfv$mbL_^+mV}kM$L#}k}3v>1DMtp|E{vM3;Z3Nh6?J#3tqf{34)_W``&M)6~*mgg< z50rnw3)>Fp*3rN2SvuZtW`~NX0vuFVCC4yHYbzW>VR3sD>J`P#x}yNxZ3?Z`ubt#2 zO?&YS*Md-4qN))7Rsq65xJI$L^`c!U2=O2$Zg5lv_wpKJV5Ys0Y)S$E_*G` z+^;B1O%p-@2NfH%y40`oXRPkxI=%FrO4?=J1vWhfm701P!CzR2Ihp<(r@94HxgF6C zJ4w5}9tKTK3z`6vKiABg{!H3XBHJh0g=|PRooDeL)Ba4-Cv{=4dtT1Pc7mfTj9Wyx zGG3ob8V4oGh&kMwBm*H(VFuSdXm5A#vsW)|5sEk*&b9goOqFrv_zr)x`~xK2_MD+G zM`_UY_jjXQON29Dp7RgYEEiCV-xj8$yzM{*S5@kYi6IEwiG->5yWDjSe2`dNyna0U zU~^mG>(d*$xmxWx*?(>XUsy0(Fi%-U;wejyS{078?>mWmvLxGPZG-bF0592jbv6v) zzeW6#@Y9D4gd7wk)BwijUA+Tj4*dwnZqT|pbEJy(4cCS11;M5g>t^nJ?&>Rn_ln=d z*b!ao(Ap=QQSEh#?taQ20ectyV%lB+B2gwvFw|Et#o3U{$~<# ze=Sd*6#s=Z{k7Eh@lzQVLZy8uDU7vx3`!6nb=O0dj zZftD+^g+U-@;MAt@KTxvKIbpiUXyE4-ZVrj-9Rh9=w*~?IDBykg4J(cee5R=cPXfe zbL6~v?D612{||j?@ilm#roIAHL10rf?MHUa-0SU)CAt=Vgk*9o0aCp1WQs&I`XAZSaRQR%8Z+VQ(o+7-stiLhf zxB0o{-8D-CH5&aLAvvh|C&4Q7c$YYX z+q0+h$Jt?Wv3iHn2A)2%4E)ETcX3eT$Qf`yaSB|haNd1dBh=tK^u^K^vDK4oD_Qo> zvUaE^J(u;~2d;{FD`{kP9JNtpJd||~x|SbqP1p$XP;jdvr{4SIy)ZD9o*1h)>f-?+ zj2Qr-rMUqh!Kvk~++}?&Um$%xiSjI#43tTw`T2Z>nG%d<-yDzva<5Xyhn`a^cjUTT zgW_6(2W;g~k3~d(JoO!`PDqnvyP-n8IO+E$d!mAb2_aJVfJ(r(2V?D$NQ~%{J5uGx zaX^(iA&8yhC5Up%1PVsahk{RHGYJS#Ef5QSD@s4cDFt@E=nL|0S=(~SKvpxyL-vQT zC){Zn>yLIXoitPNKPROmae6j+cl!$wUr#9$Xm&%~WE&y-8=~iu{1+k*_Jh?LPq^57@qZ~$ zNTBJepBh2+7a*-dWUOEI=f6BYF2^rs?Wx`LzhfS6NH3i9?Hro)eIaWc`6Zi*dMMja z&l3+J;D8Ldeag&y1g|h;96c};F85`}y+ffT4=|M6FJoIHz6A!GgW@>mKGZH<9#`-FJrr!$tJ*zaO}co%TYu)0V4*2g&0XGHRy+u z?lqoe{bW-vc*-jo65Y409+V`=Ky>NcB4Fx1sPcJPj)X^76sEw~0w75bIAU!5e+QRS zBp~{ZP9)^&D@}G65O{P4@(%qj^O4)>y-< zFu${Z=teo9T)wDhaY9IBGC454fvi78B?2Gm;ihz8ywxJ=CriVnmn7%+qD(j!M@SgQ z(@|rVcm9}6_y(;@4F4(Qafbv#d3@t(pz1)OlS$FU#4EIqvY3qZGk+He6{tr|R}t-t z9+V%^8NdlI>$rvnFgEd@N57tPL!K*0Zz7Vcq*&G@K(FhgydBZ_vsz-_akWY^130sd!e_h^A9%LlE`z#1?MhMeQH1+t%C`-{SYeXe$_Au3>$k}>p zcEeD@(Ovefaf=^+UV^W4Y@wcmx2Y?;2wTMO)gI12+Gbuq0*KAx3zUsOMCU{i4y)8f zj85r144MGSATCv}#d@8#j2)@FtA`qi?|i#lXtDrvnDhd|_+aHC*5!rlKD~GRfI&l~ z&PmsF`!cHTN*TZ3?cGXQ8zrx7Kx5^1JFC03uEe`VgFt5~Z4aP)!>wH2_MO3vyU*4< z2WMY;r56PO7*ZvU-pTy)PMr8KYW)WiFXGV(jj`SUxoD;ubZ4Wm){8iKOrBG5^C^&| z`U#FqzG`p)9_%{b*Piw4H-}WcoB{tnSLpX6GAjug~PyS)DYUytE+r08Y zZKRa~cX$5j??yGUsZqu-zcpgZs%h{Qon_C;zWxZZ?QIg!fWXge1n|Zx#?6l)BERf< zX#ER-Sr6~*o((+3p@y1%AAOC=aA}I_CW)xSVBwN$D+F}ue>z~om(fqenwtwK}I|A~(OyYQB+dHenRVSgiH= zQ5Q4fJs7;?xhqXw0h_-I{xF+hI2na}X+#8=%j%sfvImiq==RJ)hpg}RtaB4sH?u#B zfrs5(KDh+lJnG_lf7ErZR7vn_{Raayh-f?0fK=W&CG4L#ru{)rt4lJC1O0i|x&<-^ zhOax#8}TdYq=|nNExj!~j62{165HUC+y++{Lwwy(@9wkymC6%&WA6CUwaZkQgdpwX zR?33Os?Uckf1`SR3_6S_`ENI%cne}aJp`X!(YftyUmJWKsD!BFo$PY&UrwW0Uk>?k zoLcTWSk`1%aV-O9`sqPlk~`RgwqCzgkG9)x$S~65M<@c-z4R!y0qQr&JTEC3Tl5uy z{NspXF=es!D6jB|arp&#b*sy~b;{)N@YR38^Gt5m2~AQL{UUPVfx(;4(Luu9 z<4r8SpWFvO|J|Mw|8qfyFaPF@QYvCrBDLpXvg&}zi<)E>sIFaJ)Ci=}50GQq|JZo? zn@8vpzb7(<{`&x&c`-$|m(b_b(sv*3+Sh7d(aGQb>+1jGGEQS+=dt!S=bq=1%TLAc zlUkbm`z{@Y5{^9B_z|4qRBy`OzxKW=QUx9+BMU*Ivwq#xv2ka!-020V4v-F}$(GuK zx1LFAkA={r9ips0b9fj3=UrjU-Q&;IZ%8ZW5Bb<#)j@(qBC|uJszIc(8~Q&6skX&{ z{r`ytm-@ty$@r8H|6{2zW*|JYvwYx}5{5Q45nuO`4hcURPJb56sd=4BDf>6@e&nVi zHYLewd#>JaA}neBX?^s))~TmZ_>#A5Owx3qceu$dyNzyayJop^;N#d+$Tw!7mQ0|P z{NE20Clgu(UoM@Bbt|{O-^n7TE{xo#YPK(1FY7!t8`aWVOTDod-F8`TB_Tj#^G2?9 zd_nbUvANTI*P+T*yhgs>Ubo>)L#BooYOgiaO7zg@Sb%!@T4MaLXR#X~wvF%NRq(1` zRx741+eiUzq7*hy%MM_h+De-eZL>VfZLiJ`UNaV>xbMI|3ouK|5s?Oc+yNCo;={&Q?WVm$j2@Wj~? z=nK!FG?5m#^C})Nn;y#A|NgDV|EmGdZSiHb;Nw6o%WL&g5r)kFDH5z|jl3`eBS6)S zyx|yY_KdV!ghV@!gB>AXqk}{%X8d)O{{`WJV@KMEp(D4?J-=(4Fst5ti|_o^2&ZGm zfC=5%0l1vi9T9W-`m;Yb23Uh5i5AUWkj<-8jyr@?60uuZXN5Y|*HD^B>>6)>r1kz= z@c3(%M~N6ywl*0GtSCPu0-E1Nk-+;`{sYi90N-TELi~JF4X|x~m*}I{<|3o>p)3u| z6cc@L^T8Qa3xW1uqz)Kw=isv<5gPFy5dR0nGNC$J`4#jIAdKu~KVC{h!rD3y%qiG; zH#ND%M8QbaCl*d6I(fImDhrn8zd?O`2TyO2MN26+}9U$fE3K zL(=n+4EF%OCbF_JKSQzQx-eH?$} zN>l8s$;Z5048_XGtQa#Y;zhBDfRBT}$+?n0N;uZ+A2+`>Of&u7u$O>4BlF1e1HWG$ zDV7>=Q_W?XU91FG(P}Zr`(C|4tTR&?=0f*`T$SNH5Jv`5y&hX^no2!TSp*4YuI`0! zoyRDL?~p4aukMM?9)>m2Tz9vxvC-t!s~ovj0l)glKNoi69qznWF)Qe`L0?(8n>%QrHrn%}&kfYGGVP|-k$$r} za*PIuNXU(24+n5Ke3aCfSpti&2K4kW++*CK^-Z3AdqqqU7RnJ%fxp-gA0(b?20!ch zvVt?31$kqimccqwK=w6rpnnXUfd+IK$UNex!C-u4o3gl2NQ$XqBBj-t}5B#_$9SS8b5e> z#s-zOArX*S3wb3dB>#Nfk-W~BU-~4tG4RooQTDXiuu-2xIOXOp$D=*4;IhxNvA14e z&2&SMK+k1!u-fgUZ;IWL0I?1T?R3mXoIxC<`8sTpk9QWK<8o{nn=AvM$06`v z;33@}{5ABRX48)zl!-%2_I7n*TrUJ>bZ}4vSjj|_PT_;-%&qHOp$nw#OZ#+R8UOd75xH1ZVXs!EA$=fj` ze#~(1)J!Yq-Gqsj47NRKlf8c#8OnyNY0QB`KLD|9phsDL@L4hT0~J^!zn!0N#I41I zo<4`mLNYcp+QzDqGxDE^XFRFevUuze_;fzvF*%1Ox3w?)16Nn&=^o=ts>^Ejq~ycQ z(EfaWyvBHXsQ);xr%)BTlx7pHZ}*Z1zEgeMY^fY+PR%#_TJ=5erk;moUbj;bHn{SF z&OYW3_JF&n^AvMmZi@bV(@pdlLE*=83R_~_$sOKadHFo(lQo*d+rQod4Xq#7-m;TmMogy(Qb^@9~u8=4!hsn)ps zZBL?Xn*XrgBE_m@FxiO@g?Do5fh~&uz)p0Dtgi3oS!&y?^if6 zyAV4RzI*n8lc2vzBiP&Jea={dQ^0G(jUa#Q>(t|l0R>PE<4dq@h?G0#PetVLQ@&h? zU6<4(_C@>}V4e2CKUsU@PhgTI#sR>Vn>w{#{^-RcTs78DXd|byl|=EsQDyopoN_Lg zpbhi!cZV0^iCwP3>*DKVX1{9B@U{K!kbRFwk`AaS%qyZSqnIbCf;(h7b~jg9;zjAl z*hAd32rRYC6gyO5svTlWUF91`W_{C!ZOBy-qlKS>oZ+Yq68FCkzIyz#gkx)8t$sFo z&)L8`dS5^s-%jE54uR`c`s4#9uRYpHa2|e8!?5`(r!ZMZl4#YWzxj2pkMp>wLGh0f z%0JnNZ3Wh`mQLe$J6jYkr6AoaFH74}it^9FS(W{NWO=5QEyW`biZjEmGJ7xJTULRl z@#j-Sg3i2Y8y5sGiC3{BL*{Ic4qUWLdm+;YHhFVJc%|2nU^0q8*{WQy!o)`2dKp$W z6zq{RCiLLe6kNDw`1+#l%VW8tl@U*#zhlrc!`+28Pd4cM#=T&)_t@93FjVfTl!)^0vMh~X`A}8Rb9SFv+zcfHThNk&*4EfP@$l%Aj`8qGdrJEbl37pzYXva59~FYSu0XQG~@xjpzyXf zFcQEPZ4>A7)xnh#m@p-jrZR>Q1lyMa&I@dvHUcNDcdv}&e-8bD(uoOAwPk}y?3BV) z-%Eff`gs$oyPR(EI`9}abfeU#EDvY}&nj4h9=p68A={JnO^|4)ijfZn#=jy>0(LkM zfA`~ytc}LzcAsHX;M4cyJ?%-}kS`Ik?Q!2^!@6Rt>GK6ufVwXoW^k)=+oC86v5w_R z3nKp@98A;!t_Czv_}13{G;k8B+on@Hex{f_K!Ep8tO4GwI%5z0Z>l09y=U8qYV`>e znP<*H|7HFC`>+3FaseO(bm{+CwPXLWYX9Rn_`m$2f3ubU-;ClAX1h^vj5*+Y0tm3N z;=dd@4d3#iTv`-U^dLD`myR&0Z&%9H2X6qLC&e8s@UqH)$?MvtZC2NKf1?d3|Oh{fBK=RO5Uj`nQMMdu7V49R*IHEhExZ?{xb7YfI{f i1B&wkvA}n9p~UZTSj+{8^>1Rp&qdSA=kkpm!~PFgT^rT_ literal 0 HcmV?d00001 diff --git a/src/Themes/data/muted-gold-blue/index.ts b/src/Themes/data/muted-gold-blue/index.ts index 7683de8e3..1d5adf3a2 100644 --- a/src/Themes/data/muted-gold-blue/index.ts +++ b/src/Themes/data/muted-gold-blue/index.ts @@ -1,9 +1,12 @@ import { IPredefinedTheme } from "../../Themes"; +import img1 from "./screenshot.png"; export const Theme: IPredefinedTheme = { name: "Muted Gold & Blue", + description: "Muted gold with blue accents.", credit: "Sloth", reference: "https://discord.com/channels/415207508303544321/921991895230611466/924672660758208563", + screenshot: img1, colors: { primarylight: "#E3B54A", primary: "#CAA243", diff --git a/src/Themes/data/muted-gold-blue/screenshot.png b/src/Themes/data/muted-gold-blue/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..325587072408bd5f8700704fab14643496da96dc GIT binary patch literal 120362 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 z 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 V^g;EXYYf1TzK+qY!kacP{uhKL4%`3$ literal 0 HcmV?d00001 diff --git a/src/Themes/data/warmer/index.ts b/src/Themes/data/warmer/index.ts index f2a2f894a..b513cd8b9 100644 --- a/src/Themes/data/warmer/index.ts +++ b/src/Themes/data/warmer/index.ts @@ -1,9 +1,12 @@ import { IPredefinedTheme } from "../../Themes"; +import img1 from "./screenshot.png"; export const Theme: IPredefinedTheme = { + name: "Warmer", credit: "hexnaught", description: "Warmer, softer theme", reference: "https://discord.com/channels/415207508303544321/921991895230611466/921999581020028938", + screenshot: img1, colors: { primarylight: "#EA9062", primary: "#DD7B4A", diff --git a/src/Themes/data/warmer/screenshot.png b/src/Themes/data/warmer/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..c8cf0257caf139d7421ca22c719bcc5381ad0eb3 GIT binary patch literal 120332 zcmdSBcT`hZ_dk3A5d;Anpi~{lMiDC@En?%bq9Ozc5EK!SF47@E5g4g6qkxJOMM0&6 znoyGfN)&{k2mu0w5NUxFN(u={ewR__ndkX_-``sAAMYRUUCZUlz2}~D_CEW3_THa; zE)OnVuu)RbPyhfx>GZ!&Tm}HSSO8e1A-@{D^8(|E0RNK;zHD<0DC^Ri27j#bvOaGO z02S$q%U5N=-)jQ@|-V+0kHtpcI!I% z-;wv%NmFg*PxBwHTKBJY4>n!gRP*A+ZU;fWl3q2`Fq5vFZ76ju zt|kxrHI()a)|7@|{QZXgNa6}4#?^;|vBU|nJmFH;lY@EY!K`T3r!eNH8DY4^$4{1% zxlzoVC#@!vIl*53!-K)n;52_+`J!h)xSc=433z%vuXKc{_45JHow6H1=hJ5c`<~p` z9(!t2-kun&+0{T^;`+avIF?ud%vCte)+b&c5(3+vasZ8�)FA;91B$cS+ouzZ>zQ1ILyFBqC$u=&U9h2Nyu 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 z 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

O*8avAV!=fLnHcWQiJJ#jsPF4 z6>k_C;H0>(_bM(9&3EmT+?A)r{e%Tj1x96cYVi^n4OUD)1v5PQvXZl}1n8d4O+kz$d&@X+UF<+>brA0~fj!hvh+0^V{p($@XqFX4*m|KW_Q)}rzD{7b@i-6x(?x^?1ALsnY!X z*I%?iV0DQ5X#I>S5M`$Dp6qhX}=T3 zSxXWjd$8pCn!$>GNC(D**6#8t9i1h;eYxqMl@KR6oR3RPci=4%@*M z9xc3pK%HG5hiN1Fva+&>*yE@e=noH2UG87kTbcP}FBd@)2VO~@!wUadyqkF~NNR6TKjPV5E1$dece#W^K<%NHl7a$J@ zLrgYDI5~#^Fr%g3l3?PO_Odd0{%%xVU_}?(+{&6J8(UY95;3x%f2R4;LUEbLuNf|o zXMP*-zW39A2T+8UEN=5f&L7ME@76-1(0}`~X+Ka#NCJP9jdRW@Pa@y{04O3QYnS@B zwVORA8GrGmS(F11?GB%i0MYU2-2?!RL?8Yc`5zYk&n*38A^($iG*MDBApq0p>QF!6 z5Me*|`h}Jz@Ruf}C!$bKqk1rP2O+~h!OvTGlv^F-hPFjF<-@e=_gmQZHsr6@sQ#Kw zTRaPJ!PN>(*Dd*M$ zap88}o(7Hd1P6ed4ptn9a6?2etjxnP3tJ6G75}0Pz^6GW_eXxiML@$Rvb*PL+HTkKpMMd)2J{c#$ zRY|DU{~J!1Y*6DGyyQDPSvWYh6C#>zBb61)OQLH|bJXZ_y+wHiZx2G!rwR3I9N4aY zHO}c7iymF%7S35x>em54)CREe-n3BySC4a15;xgvu%jw-C3=)>XCzdL%E8py4I&TQ zOQct~Rql-xJOv=I?C*itX|e*e26wy`j*J>Y33GjhZgN{YNM1EyDW5Eqie?>gfIG=t zAK=+@(wg^>h$!Shf8{1axH2+0Wh&0Azt-h~JY# zGj_skBcZYXskx<5_cS$7Q>m^+!)Zg?Wf~WgFa~XZHzw@7QzODsfg)BFz_T z%lX7zTWiCh1_6H8o6p1?w&iP7Q&}F?6I#g0qk}YEy>`#lnt<@_6=(d-bmS`FqvyH-NS;x%OIxN|dO^scMMXvcVvmaBdXcc=H8#M5>vtyxH{r=G8r-6433vm{ zNx13_oXLOBS^#el93+yh_^A^MvN?_(Y)m;>RR zGXw^sBS)spWS7qxNwr`Lb4C)kE?so@ew^rFjVfsu95=Q*Fok=m092HHA9hG4N0?yG zk*X@&jL9A#oMD#~W0k$RFZ5IE=4+PbP(?QDGNAeD+%mlaj{h69J80|HFpGbi5!wNt zI;^5N%S4o?7L^!gkCBRFIB>4xd*lS_O=Z!uIG_(5oz$v(AF37UZqv@8+vvo;wg$QZ z-7UG30a0BtqFZ4F51<`x=DWs<;u7<99LN+#X%SjB$Doh*E zVj|c}Wd2Nr*Qc!5_oj;!)ei!{LB)ZAi-VIc3r!X*Tk;S+|a1LitxP>e16D7n%=?|rHGz%ukwvn7$ zi5?F*uSRkaK+R!%6=;pEb<4~5fyt!tblI1b*qId3+q^Blhv+8r<%8 zXu8sk+GZ5`rj?S>8^{MV+EdgECPav)A%tH26yOp zaZF1bgbunc_@XnD6UpnCC4YNDEG@#ecYiN|j{-UQes{K}A#4f`<(M>a4 z55so;ktrYf-71X3rx)WxaMYYJ!8f<2UZ!2VJ_ooeDwcEwNKj|?|E(BvHUr^*TY4Ue zd^rnxSq$Fdq%LLV+*cQLANs2-*eO=<9REX*Xj6gT*NF8^f{Pb!za$kAH*STF*zn)K ziC#lv+)h|(>pr)%$&qmIQ%T}SGugHcI}P7|H>nrO@IT-O(N8gt1}FmCChYAW`U^l6>JSwY_j;TXQ2rxVCEy^gkU$!Z_Ut-M1x4t=Y0Yx4php7 zOTXbRCC{vU!|EO_ z!s%js=P~5LlM(52xVH+8vVXuwJP3=^C@Q1PKPeJ6GT!EAEo#E}!z3i|!gmw?h0H9D z+jaBrv$^VtXaUHj%dT`a=s%UXNApXWq5BvZ|AJ0*`iwf!TYw~cli2eUT_5qJkI?Mz zG-#wkoRjddyJ08e?%;NdlfZkK@te%~YL^amU33?j62ABDPy*M24+Z zTJyHrR<;f1Bwj^PpTD7~HRe2=`#cF*vp-mo6*a0jCMmzq^*-|p1;y~xa(wRlyXpk@ zU?wHmzzq6t7S*L5rNv1t4pB4>yYy#KWDgrx5olZ#M)Xi6G_EiRm;OJNNA_8xDtw9( zgXuFbDT3MHRfPM$@;3?fdHR&X1qp}Iwt4kFZ@hy5SoqJ#zxawg&_A>EkA?i>9g6>- z$dGIX&_MT2uXaNKLh0j+?nN~(831!;8U^r05}q*eUnxc*8w_A3@XtSgJa(4^xHqb+ zV*06Ow*f>{tv@= B9#;SW literal 0 HcmV?d00001 From a26b9c8dcfc279f52cf5758b345c267dbbf121de Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 19 Jan 2022 09:49:08 -0500 Subject: [PATCH 16/85] Add theme browser page accessible from game options Removed the themes buttons that were in the ThemeEditorModal and only left a "Revert to Default" button along with a link to the ThemeBrowser page. Split off the buttons into reusable components since they are now used in two pages. Display the themes in big cards with a zoomable screenshot. Applying the theme now shows a toast with an option to undo the action. The snackbar now allows ReactNode instead of only strings. - Add link with details on how to create a new theme in the game. - Add link to the theme-sharing discord channel. - Add icons to the theme & style buttons in GameOptions - Add "Theme Editor" button to ThemeBrowser - Add "Style Editor" button to ThemeBrowser - Move Styles related files into Themes folder - Includes a modal that shows a bigger version of the screenshot. - Change Snackbar to allow for ReactNode as the message --- src/NetscriptFunctions/UserInterface.ts | 2 +- src/Settings/Settings.ts | 2 +- src/Themes/README.md | 3 +- src/{Settings => Themes}/Styles.ts | 0 src/Themes/ui/StyleEditorButton.tsx | 19 ++++ .../React => Themes/ui}/StyleEditorModal.tsx | 6 +- src/Themes/ui/ThemeBrowser.tsx | 93 +++++++++++++++++++ src/Themes/ui/ThemeCollaborate.tsx | 24 +++++ src/Themes/ui/ThemeEditorButton.tsx | 24 +++++ src/Themes/ui/ThemeEditorModal.tsx | 43 ++++----- src/Themes/ui/ThemeEntry.tsx | 77 +++++++++++++++ src/ui/GameRoot.tsx | 12 +++ src/ui/React/GameOptionsRoot.tsx | 22 +++-- src/ui/React/Snackbar.tsx | 6 +- src/ui/Router.ts | 2 + 15 files changed, 294 insertions(+), 41 deletions(-) rename src/{Settings => Themes}/Styles.ts (100%) create mode 100644 src/Themes/ui/StyleEditorButton.tsx rename src/{ui/React => Themes/ui}/StyleEditorModal.tsx (97%) create mode 100644 src/Themes/ui/ThemeBrowser.tsx create mode 100644 src/Themes/ui/ThemeCollaborate.tsx create mode 100644 src/Themes/ui/ThemeEditorButton.tsx create mode 100644 src/Themes/ui/ThemeEntry.tsx diff --git a/src/NetscriptFunctions/UserInterface.ts b/src/NetscriptFunctions/UserInterface.ts index ead063a9f..7b342a9a7 100644 --- a/src/NetscriptFunctions/UserInterface.ts +++ b/src/NetscriptFunctions/UserInterface.ts @@ -6,7 +6,7 @@ import { GameInfo, IStyleSettings, UserInterface as IUserInterface, UserInterfac import { Settings } from "../Settings/Settings"; import { ThemeEvents } from "../Themes/ui/Theme"; import { defaultTheme } from "../Themes/Themes"; -import { defaultStyles } from "../Settings/Styles"; +import { defaultStyles } from "../Themes/Styles"; import { CONSTANTS } from "../Constants"; import { hash } from "../hash/hash"; diff --git a/src/Settings/Settings.ts b/src/Settings/Settings.ts index d0563f604..77c29fdb9 100644 --- a/src/Settings/Settings.ts +++ b/src/Settings/Settings.ts @@ -1,7 +1,7 @@ import { ISelfInitializer, ISelfLoading } from "../types"; import { OwnedAugmentationsOrderSetting, PurchaseAugmentationsOrderSetting } from "./SettingEnums"; import { defaultTheme, ITheme } from "../Themes/Themes"; -import { defaultStyles } from "./Styles"; +import { defaultStyles } from "../Themes/Styles"; import { WordWrapOptions } from "../ScriptEditor/ui/Options"; import { OverviewSettings } from "../ui/React/Overview"; import { IStyleSettings } from "../ScriptEditor/NetscriptDefinitions"; diff --git a/src/Themes/README.md b/src/Themes/README.md index 0638cf74b..3dffe710d 100644 --- a/src/Themes/README.md +++ b/src/Themes/README.md @@ -8,7 +8,8 @@ See [CONTRIBUTING.md](/CONTRIBUTING.md) for details. 1. Duplicate one of the folders in `/src/Themes/data` and give it a new name (keep the hyphenated format) 2. Modify the data in the new `/src/Themes/data/new-folder/index.ts` file -3. Add the import/export into the `/src/Themes/data/index.ts` file +3. Replace the screenshot.png with one of your theme +4. Add the import/export into the `/src/Themes/data/index.ts` file The themes are ordered according to the export order in `index.ts` diff --git a/src/Settings/Styles.ts b/src/Themes/Styles.ts similarity index 100% rename from src/Settings/Styles.ts rename to src/Themes/Styles.ts diff --git a/src/Themes/ui/StyleEditorButton.tsx b/src/Themes/ui/StyleEditorButton.tsx new file mode 100644 index 000000000..4fc7648ea --- /dev/null +++ b/src/Themes/ui/StyleEditorButton.tsx @@ -0,0 +1,19 @@ +import React, { useState } from "react"; +import Button from "@mui/material/Button"; +import Tooltip from "@mui/material/Tooltip"; +import TextFormatIcon from "@mui/icons-material/TextFormat"; +import { StyleEditorModal } from "./StyleEditorModal"; + +export function StyleEditorButton(): React.ReactElement { + const [styleEditorOpen, setStyleEditorOpen] = useState(false); + return ( + <> + + + + setStyleEditorOpen(false)} /> + + ); +} diff --git a/src/ui/React/StyleEditorModal.tsx b/src/Themes/ui/StyleEditorModal.tsx similarity index 97% rename from src/ui/React/StyleEditorModal.tsx rename to src/Themes/ui/StyleEditorModal.tsx index b8213f199..b5b7bec4c 100644 --- a/src/ui/React/StyleEditorModal.tsx +++ b/src/Themes/ui/StyleEditorModal.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from "react"; -import { Modal } from "./Modal"; +import { Modal } from "../../ui/React/Modal"; import Button from "@mui/material/Button"; import ButtonGroup from "@mui/material/ButtonGroup"; @@ -9,9 +9,9 @@ import TextField from "@mui/material/TextField"; import ReplyIcon from "@mui/icons-material/Reply"; import SaveIcon from "@mui/icons-material/Save"; -import { ThemeEvents } from "../../Themes/ui/Theme"; +import { ThemeEvents } from "./Theme"; import { Settings } from "../../Settings/Settings"; -import { defaultStyles } from "../../Settings/Styles"; +import { defaultStyles } from "../Styles"; import { Tooltip } from "@mui/material"; import { IStyleSettings } from "../../ScriptEditor/NetscriptDefinitions"; diff --git a/src/Themes/ui/ThemeBrowser.tsx b/src/Themes/ui/ThemeBrowser.tsx new file mode 100644 index 000000000..cef35e63d --- /dev/null +++ b/src/Themes/ui/ThemeBrowser.tsx @@ -0,0 +1,93 @@ +import React, { useEffect, useState } from "react"; +import Typography from "@mui/material/Typography"; +import Paper from "@mui/material/Paper"; +import { ThemeEvents } from "./Theme"; +import { Settings } from "../../Settings/Settings"; +import { getPredefinedThemes, IPredefinedTheme } from "../Themes"; +import { Box, ButtonGroup, Button } from "@mui/material"; +import { IRouter } from "../../ui/Router"; +import { ThemeEditorButton } from "./ThemeEditorButton"; +import { StyleEditorButton } from "./StyleEditorButton"; +import { ThemeEntry } from "./ThemeEntry"; +import { ThemeCollaborate } from "./ThemeCollaborate"; +import { Modal } from "../../ui/React/Modal"; +import { SnackbarEvents } from "../../ui/React/Snackbar"; + +interface IProps { + router: IRouter; +} + +// Everything dies when the theme gets reloaded, so we'll keep the current scroll to not jump around. +let previousScrollY = 0; + +export function ThemeBrowser({ router }: IProps): React.ReactElement { + const [modalOpen, setModalOpen] = useState(false); + const [modalImageSrc, setModalImageSrc] = useState(); + const predefinedThemes = getPredefinedThemes(); + const themes = (predefinedThemes && + Object.entries(predefinedThemes).map(([key, templateTheme]) => ( + setTheme(templateTheme)} + onImageClick={handleZoom} + /> + ))) || <>; + + function setTheme(theme: IPredefinedTheme): void { + previousScrollY = window.scrollY; + const previousColors = { ...Settings.theme }; + Object.assign(Settings.theme, theme.colors); + ThemeEvents.emit(); + SnackbarEvents.emit( + <> + Updated theme to "{theme.name}" + + , + "info", + 30000, + ); + } + + function handleZoom(src: string): void { + previousScrollY = window.scrollY; + setModalImageSrc(src); + setModalOpen(true); + } + + function handleCloseZoom(): void { + previousScrollY = window.scrollY; + setModalOpen(false); + } + + useEffect(() => { + requestAnimationFrame(() => window.scrollTo(0, previousScrollY)); + }); + + return ( + + Theme Browser + + + + + + + {themes} + + + + + + ); +} diff --git a/src/Themes/ui/ThemeCollaborate.tsx b/src/Themes/ui/ThemeCollaborate.tsx new file mode 100644 index 000000000..9058e64c5 --- /dev/null +++ b/src/Themes/ui/ThemeCollaborate.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import Typography from "@mui/material/Typography"; +import { Link } from "@mui/material"; + +export function ThemeCollaborate(): React.ReactElement { + return ( + <> + + If you've created a theme that you believe should be added in game's theme browser, feel free to{" "} + + create a pull request + + . + + + Head over to the{" "} + + theme-sharing + {" "} + discord channel for more. + + + ); +} diff --git a/src/Themes/ui/ThemeEditorButton.tsx b/src/Themes/ui/ThemeEditorButton.tsx new file mode 100644 index 000000000..7decbad68 --- /dev/null +++ b/src/Themes/ui/ThemeEditorButton.tsx @@ -0,0 +1,24 @@ +import React, { useState } from "react"; +import Button from "@mui/material/Button"; +import Tooltip from "@mui/material/Tooltip"; +import { ThemeEditorModal } from "./ThemeEditorModal"; +import { IRouter } from "../../ui/Router"; +import ColorizeIcon from "@mui/icons-material/Colorize"; + +interface IProps { + router: IRouter; +} + +export function ThemeEditorButton({ router }: IProps): React.ReactElement { + const [themeEditorOpen, setThemeEditorOpen] = useState(false); + return ( + <> + + + + setThemeEditorOpen(false)} router={router} /> + + ); +} diff --git a/src/Themes/ui/ThemeEditorModal.tsx b/src/Themes/ui/ThemeEditorModal.tsx index da16628c3..986f7420d 100644 --- a/src/Themes/ui/ThemeEditorModal.tsx +++ b/src/Themes/ui/ThemeEditorModal.tsx @@ -1,6 +1,7 @@ import React, { useState } from "react"; import { Modal } from "../../ui/React/Modal"; import Button from "@mui/material/Button"; +import ButtonGroup from "@mui/material/ButtonGroup"; import Typography from "@mui/material/Typography"; import Tooltip from "@mui/material/Tooltip"; import Paper from "@mui/material/Paper"; @@ -8,15 +9,19 @@ import TextField from "@mui/material/TextField"; import IconButton from "@mui/material/IconButton"; import ReplyIcon from "@mui/icons-material/Reply"; import PaletteSharpIcon from "@mui/icons-material/PaletteSharp"; +import HistoryIcon from '@mui/icons-material/History'; import { Color, ColorPicker } from "material-ui-color"; import { ThemeEvents } from "./Theme"; import { Settings, defaultSettings } from "../../Settings/Settings"; -import { getPredefinedThemes } from "../Themes"; +import { defaultTheme } from "../Themes"; import { UserInterfaceTheme } from "../../ScriptEditor/NetscriptDefinitions"; +import { IRouter } from "../../ui/Router"; +import { ThemeCollaborate } from "./ThemeCollaborate"; interface IProps { open: boolean; onClose: () => void; + router: IRouter; } interface IColorEditorProps { @@ -68,28 +73,6 @@ export function ThemeEditorModal(props: IProps): React.ReactElement { ...Settings.theme, }); - const predefinedThemes = getPredefinedThemes(); - const themes = predefinedThemes && Object.entries(predefinedThemes) - .map(([key, templateTheme]) => { - const name = templateTheme.name || key; - let inner = {name}; - let toolTipTitle; - if (templateTheme.credit) { - toolTipTitle = {templateTheme.description || name} by {templateTheme.credit}; - } else if (templateTheme.description) { - toolTipTitle = {templateTheme.description}; - } - if (toolTipTitle) { - inner = {inner} - } - return ( - - ); - }) || <>; - function setTheme(theme: UserInterfaceTheme): void { setCustomTheme(theme); Object.assign(Settings.theme, theme); @@ -372,8 +355,18 @@ export function ThemeEditorModal(props: IProps): React.ReactElement { /> <> Backup your theme or share it with others by copying the string above. - Replace the current theme with a pre-built template using the buttons below. - {themes} + + + + + + + + + diff --git a/src/Themes/ui/ThemeEntry.tsx b/src/Themes/ui/ThemeEntry.tsx new file mode 100644 index 000000000..019f54e59 --- /dev/null +++ b/src/Themes/ui/ThemeEntry.tsx @@ -0,0 +1,77 @@ +import React from "react"; +import Typography from "@mui/material/Typography"; +import Tooltip from "@mui/material/Tooltip"; +import PaletteSharpIcon from "@mui/icons-material/PaletteSharp"; +import { Settings } from "../../Settings/Settings"; +import { IPredefinedTheme } from "../Themes"; +import { Link, Card, CardHeader, CardContent, CardMedia, Button } from "@mui/material"; + +interface IProps { + theme: IPredefinedTheme; + onActivated: () => void; + onImageClick: (src: string) => void; +} + +export function ThemeEntry({ theme, onActivated, onImageClick }: IProps): React.ReactElement { + if (!theme) return <>; + return ( + + + + + } + title={theme.name} + subheader={ + <> + by {theme.credit}{" "} + {theme.reference && ( + <> + ( + + ref + + ) + + )} + + } + sx={{ + color: Settings.theme.primary, + "& .MuiCardHeader-subheader": { + color: Settings.theme.secondarydark, + }, + "& .MuiButton-outlined": { + backgroundColor: "transparent", + }, + }} + /> + onImageClick(theme.screenshot)} + /> + + + {theme.description} + + + + ); +} diff --git a/src/ui/GameRoot.tsx b/src/ui/GameRoot.tsx index 2e7a265cc..86c64c018 100644 --- a/src/ui/GameRoot.tsx +++ b/src/ui/GameRoot.tsx @@ -79,6 +79,7 @@ import { RecoveryMode, RecoveryRoot } from "./React/RecoveryRoot"; import { AchievementsRoot } from "../Achievements/AchievementsRoot"; import { ErrorBoundary } from "./ErrorBoundary"; import { Settings } from "../Settings/Settings"; +import { ThemeBrowser } from "../Themes/ui/ThemeBrowser"; const htmlLocation = location; @@ -194,6 +195,9 @@ export let Router: IRouter = { toAchievements: () => { throw new Error("Router called before initialization"); }, + toThemeBrowser: () => { + throw new Error("Router called before initialization"); + }, }; function determineStartPage(player: IPlayer): Page { @@ -307,6 +311,9 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme toAchievements: () => { setPage(Page.Achievements); }, + toThemeBrowser: () => { + setPage(Page.ThemeBrowser); + } }; useEffect(() => { @@ -471,6 +478,7 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme mainPage = ( saveObject.saveGame()} export={() => { // Apply the export bonus before saving the game @@ -503,6 +511,10 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme mainPage = ; break; } + case Page.ThemeBrowser: { + mainPage = ; + break; + } } return ( diff --git a/src/ui/React/GameOptionsRoot.tsx b/src/ui/React/GameOptionsRoot.tsx index acc1835bb..4d331fba5 100644 --- a/src/ui/React/GameOptionsRoot.tsx +++ b/src/ui/React/GameOptionsRoot.tsx @@ -22,12 +22,11 @@ import TextField from "@mui/material/TextField"; import DownloadIcon from "@mui/icons-material/Download"; import UploadIcon from "@mui/icons-material/Upload"; import SaveIcon from "@mui/icons-material/Save"; +import PaletteIcon from '@mui/icons-material/Palette'; import { FileDiagnosticModal } from "../../Diagnostic/FileDiagnosticModal"; import { dialogBoxCreate } from "./DialogBox"; import { ConfirmationModal } from "./ConfirmationModal"; -import { ThemeEditorModal } from "../../Themes/ui/ThemeEditorModal"; -import { StyleEditorModal } from "./StyleEditorModal"; import { SnackbarEvents } from "./Snackbar"; @@ -37,6 +36,9 @@ import { formatTime } from "../../utils/helpers/formatTime"; import { OptionSwitch } from "./OptionSwitch"; import { DeleteGameButton } from "./DeleteGameButton"; import { SoftResetButton } from "./SoftResetButton"; +import { IRouter } from "../Router"; +import { ThemeEditorButton } from "../../Themes/ui/ThemeEditorButton"; +import { StyleEditorButton } from "../../Themes/ui/StyleEditorButton"; const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -50,6 +52,7 @@ const useStyles = makeStyles((theme: Theme) => interface IProps { player: IPlayer; + router: IRouter; save: () => void; export: () => void; forceKill: () => void; @@ -74,8 +77,6 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { const [timestampFormat, setTimestampFormat] = useState(Settings.TimestampsFormat); const [locale, setLocale] = useState(Settings.Locale); const [diagnosticOpen, setDiagnosticOpen] = useState(false); - const [themeEditorOpen, setThemeEditorOpen] = useState(false); - const [styleEditorOpen, setStyleEditorOpen] = useState(false); const [importSaveOpen, setImportSaveOpen] = useState(false); const [importData, setImportData] = useState(null); @@ -642,9 +643,14 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { - - - + + + + + + @@ -669,8 +675,6 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { setDiagnosticOpen(false)} /> - setThemeEditorOpen(false)} /> - setStyleEditorOpen(false)} /> ); } diff --git a/src/ui/React/Snackbar.tsx b/src/ui/React/Snackbar.tsx index 68b98e945..d1648b027 100644 --- a/src/ui/React/Snackbar.tsx +++ b/src/ui/React/Snackbar.tsx @@ -14,6 +14,10 @@ const useStyles = makeStyles(() => ({ snackbar: { // Log popup z-index increments, so let's add a padding to be well above them. zIndex: `${logBoxBaseZIndex + 1000} !important` as any, + + "& .MuiAlert-icon": { + alignSelf: 'center', + }, } })); @@ -27,7 +31,7 @@ export function SnackbarProvider(props: IProps): React.ReactElement { ); } -export const SnackbarEvents = new EventEmitter<[string, "success" | "warning" | "error" | "info", number]>(); +export const SnackbarEvents = new EventEmitter<[string | React.ReactNode, "success" | "warning" | "error" | "info", number]>(); export function Snackbar(): React.ReactElement { const { enqueueSnackbar, closeSnackbar } = useSnackbar(); diff --git a/src/ui/Router.ts b/src/ui/Router.ts index 4056a44ac..7ebeb31d8 100644 --- a/src/ui/Router.ts +++ b/src/ui/Router.ts @@ -37,6 +37,7 @@ export enum Page { StaneksGift, Recovery, Achievements, + ThemeBrowser, } export interface ScriptEditorRouteOptions { @@ -82,4 +83,5 @@ export interface IRouter { toLocation(location: Location): void; toStaneksGift(): void; toAchievements(): void; + toThemeBrowser(): void; } From 5c0d76828fee220df3b875c4890ddb418053c295 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Thu, 20 Jan 2022 18:43:36 -0500 Subject: [PATCH 17/85] Add ID to ThemeEditorButton --- src/Themes/ui/ThemeEditorButton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Themes/ui/ThemeEditorButton.tsx b/src/Themes/ui/ThemeEditorButton.tsx index 7decbad68..e2509802f 100644 --- a/src/Themes/ui/ThemeEditorButton.tsx +++ b/src/Themes/ui/ThemeEditorButton.tsx @@ -14,7 +14,7 @@ export function ThemeEditorButton({ router }: IProps): React.ReactElement { return ( <> - From 1a8a24587f3272a66173924d309893a5f1e0b1f8 Mon Sep 17 00:00:00 2001 From: nickofolas Date: Thu, 20 Jan 2022 17:45:54 -0600 Subject: [PATCH 18/85] Ensure that the proper editor is updated by syncing --- src/ScriptEditor/ui/ScriptEditorRoot.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ScriptEditor/ui/ScriptEditorRoot.tsx b/src/ScriptEditor/ui/ScriptEditorRoot.tsx index ab7d58baa..a53823671 100644 --- a/src/ScriptEditor/ui/ScriptEditorRoot.tsx +++ b/src/ScriptEditor/ui/ScriptEditorRoot.tsx @@ -709,6 +709,9 @@ export function Root(props: IProps): React.ReactElement { // Save changes openScript.code = serverScriptCode; + // Switch to target tab + onTabClick(index) + if (editorRef.current !== null && openScript !== null) { if (openScript.model === undefined || openScript.model.isDisposed()) { regenerateModel(openScript); From f2c4109211448038c59bbe0eb988bb88f1994150 Mon Sep 17 00:00:00 2001 From: Terrana Date: Fri, 21 Jan 2022 11:34:10 +0000 Subject: [PATCH 19/85] Add ns.printf function Behaviour is consistent with that of tprintf versus tprint and should be equivalent to ns.print(ns.sprintf(...)) --- src/Netscript/RamCostGenerator.ts | 1 + src/NetscriptFunctions.ts | 6 ++++++ src/ScriptEditor/NetscriptDefinitions.d.ts | 11 +++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/Netscript/RamCostGenerator.ts b/src/Netscript/RamCostGenerator.ts index 81625b6c5..8aae3ee2c 100644 --- a/src/Netscript/RamCostGenerator.ts +++ b/src/Netscript/RamCostGenerator.ts @@ -114,6 +114,7 @@ export const RamCosts: IMap = { weaken: RamCostConstants.ScriptWeakenRamCost, weakenAnalyze: RamCostConstants.ScriptWeakenAnalyzeRamCost, print: 0, + printf: 0, tprint: 0, clearLog: 0, disableLog: 0, diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index 5d43cd1e9..799db37ca 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -722,6 +722,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { } workerScript.print(argsToString(args)); }, + printf: function (format: string, ...args: any[]): void { + if (typeof format !== "string") { + throw makeRuntimeErrorMsg("printf", "First argument must be string for the format."); + } + workerScript.print(vsprintf(format, args)); + }, tprint: function (...args: any[]): void { if (args.length === 0) { throw makeRuntimeErrorMsg("tprint", "Takes at least 1 argument."); diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 6021a88ef..37db134d8 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -4460,6 +4460,17 @@ export interface NS extends Singularity { */ print(...args: any[]): void; + /** + * Prints a formatted string to the script’s logs. + * @remarks + * RAM cost: 0 GB + * + * see: https://github.com/alexei/sprintf.js + * @param format - format of the message + * @param args - Value(s) to be printed. + */ + printf(format: string, ...args: any[]): void; + /** * Prints one or more values or variables to the Terminal. * @remarks From 6dba1db3c9af58fc451f61e3dbd54b9d4cb44047 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Fri, 21 Jan 2022 07:45:53 -0500 Subject: [PATCH 20/85] Display bonus time in sleeve detailed stats panel Also adds a field to modify the stored cycles in the dev menu. --- src/DevMenu/ui/Sleeves.tsx | 19 +++++++++++++++++++ .../Sleeve/ui/MoreStatsModal.tsx | 10 ++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/DevMenu/ui/Sleeves.tsx b/src/DevMenu/ui/Sleeves.tsx index a50b4b0ba..5dcbcf455 100644 --- a/src/DevMenu/ui/Sleeves.tsx +++ b/src/DevMenu/ui/Sleeves.tsx @@ -8,6 +8,7 @@ import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import Button from "@mui/material/Button"; import Typography from "@mui/material/Typography"; import { IPlayer } from "../../PersonObjects/IPlayer"; +import { Adjuster } from "./Adjuster"; interface IProps { player: IPlayer; @@ -38,6 +39,12 @@ export function Sleeves(props: IProps): React.ReactElement { } } + function sleeveSetStoredCycles(cycles: number): void { + for (let i = 0; i < props.player.sleeves.length; ++i) { + props.player.sleeves[i].storedCycles = cycles; + } + } + return ( }> @@ -68,6 +75,18 @@ export function Sleeves(props: IProps): React.ReactElement { + + + sleeveSetStoredCycles(10000000)} + add={sleeveSetStoredCycles} + subtract={sleeveSetStoredCycles} + reset={() => sleeveSetStoredCycles(0)} + /> + + diff --git a/src/PersonObjects/Sleeve/ui/MoreStatsModal.tsx b/src/PersonObjects/Sleeve/ui/MoreStatsModal.tsx index 62e680faf..be27b1dd9 100644 --- a/src/PersonObjects/Sleeve/ui/MoreStatsModal.tsx +++ b/src/PersonObjects/Sleeve/ui/MoreStatsModal.tsx @@ -1,5 +1,8 @@ import { Sleeve } from "../Sleeve"; import { numeralWrapper } from "../../../ui/numeralFormat"; +import { convertTimeMsToTimeElapsedString } from "../../../utils/StringHelperFunctions"; +import { CONSTANTS } from "../../../Constants"; +import { Typography } from "@mui/material"; import { StatsTable } from "../../../ui/React/StatsTable"; import { Modal } from "../../../ui/React/Modal"; import React from "react"; @@ -80,6 +83,13 @@ export function MoreStatsModal(props: IProps): React.ReactElement { ]} title="Multipliers:" /> + + {/* Check for storedCycles to be a bit over 0 to prevent jittering */} + {props.sleeve.storedCycles > 10 && ( + + Bonus Time: {convertTimeMsToTimeElapsedString(props.sleeve.storedCycles * CONSTANTS.MilliPerCycle)} + + )} ); } From 267a7144cb0536665d5d12e03e0f8b95d6581738 Mon Sep 17 00:00:00 2001 From: Kyle Hargraves Date: Fri, 21 Jan 2022 07:32:39 -0600 Subject: [PATCH 21/85] Fix type of CrimeStats.name --- src/ScriptEditor/NetscriptDefinitions.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 6021a88ef..a8fb57eef 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -129,7 +129,7 @@ export interface CrimeStats { /** How much money is given */ money: number; /** Name of crime */ - name: number; + name: string; /** Milliseconds it takes to attempt the crime */ time: number; /** Description of the crime activity */ From b7604709e5156d78b9fe4f7d435f63875859f16c Mon Sep 17 00:00:00 2001 From: Kyle Hargraves Date: Fri, 21 Jan 2022 07:37:16 -0600 Subject: [PATCH 22/85] NetscriptDefinitions: fix jsdoc for Corp research functions --- src/ScriptEditor/NetscriptDefinitions.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 6021a88ef..fe6a875ac 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -6179,14 +6179,14 @@ export interface OfficeAPI { /** * Get the cost to unlock research * @param divisionName - Name of the division - * @param cityName - Name of the city + * @param researchName - Name of the research * @returns cost */ getResearchCost(divisionName: string, researchName: string): number; /** * Gets if you have unlocked a research * @param divisionName - Name of the division - * @param cityName - Name of the city + * @param researchName - Name of the research * @returns true is unlocked, false if not */ hasResearched(divisionName: string, researchName: string): boolean; From a96053a82b754415c6362afd2b9e5ead411c16e9 Mon Sep 17 00:00:00 2001 From: lethern Date: Fri, 21 Jan 2022 15:51:31 +0100 Subject: [PATCH 23/85] Aug info: fixed typo --- src/Augmentation/AugmentationHelpers.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Augmentation/AugmentationHelpers.tsx b/src/Augmentation/AugmentationHelpers.tsx index 915e01c33..27d19ab76 100644 --- a/src/Augmentation/AugmentationHelpers.tsx +++ b/src/Augmentation/AugmentationHelpers.tsx @@ -2050,7 +2050,7 @@ function initAugmentations(): void { info: "A brain implant carefully assembled around the synapses, which " + "micromanages the activity and levels of various neuroreceptor " + - "chemicals and modulates electrical acvitiy to optimize concentration, " + + "chemicals and modulates electrical activity to optimize concentration, " + "allowing the user to multitask much more effectively.", stats: ( <> From 935f4718e05038084773ebf487427e2f7821bd1a Mon Sep 17 00:00:00 2001 From: Xi-Lin Yeh Date: Fri, 21 Jan 2022 08:52:53 -0800 Subject: [PATCH 24/85] Fix type in delete function --- electron/api-server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electron/api-server.js b/electron/api-server.js index 22cd347b7..971922b71 100644 --- a/electron/api-server.js +++ b/electron/api-server.js @@ -74,7 +74,7 @@ async function initialize(win) { // Delete files case "DELETE": - result = await window.webContents.executeJavaScript(`document.deleteFiles("${data.filename}")`); + result = await window.webContents.executeJavaScript(`document.deleteFile("${data.filename}")`); break; } From 542f164930e44350d54f7f6178a41a22173e208d Mon Sep 17 00:00:00 2001 From: nickofolas Date: Wed, 19 Jan 2022 17:59:22 -0600 Subject: [PATCH 25/85] Align warehouse buttons --- src/Corporation/ui/IndustryWarehouse.tsx | 10 +++++----- src/Corporation/ui/MaterialElem.tsx | 7 ++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/Corporation/ui/IndustryWarehouse.tsx b/src/Corporation/ui/IndustryWarehouse.tsx index 9b6c7b474..4707afdef 100644 --- a/src/Corporation/ui/IndustryWarehouse.tsx +++ b/src/Corporation/ui/IndustryWarehouse.tsx @@ -139,13 +139,13 @@ function WarehouseRoot(props: IProps): React.ReactElement { {numeralWrapper.formatBigNumber(props.warehouse.size)} - - + + This industry uses the following equation for its production:
diff --git a/src/Corporation/ui/MaterialElem.tsx b/src/Corporation/ui/MaterialElem.tsx index 64471859a..616345cdc 100644 --- a/src/Corporation/ui/MaterialElem.tsx +++ b/src/Corporation/ui/MaterialElem.tsx @@ -112,7 +112,7 @@ export function MaterialElem(props: IMaterialProps): React.ReactElement { return ( - + - + Purchase your required materials to get production started! : ""} > - - setExportOpen(false)} /> )} -
- - -
- Upgrade the office's size so that it can hold more employees!}> - - - - - setUpgradeOfficeSizeOpen(false)} - /> - - {!division.hasResearch("AutoPartyManager") && ( - <> - Throw an office party to increase your employee's morale and happiness} - > - - - + + + Automatically hires an employee and gives him/her a random name}> + - Upgrade the office's size so that it can hold more employees!}> + + + setThrowPartyOpen(false)} + open={upgradeOfficeSizeOpen} + onClose={() => setUpgradeOfficeSizeOpen(false)} /> - - )} -
+ {!division.hasResearch("AutoPartyManager") && ( + <> + Throw an office party to increase your employee's morale and happiness} + > + + + setThrowPartyOpen(false)} + /> + + )} - + + + {employeeManualAssignMode ? ( ) : ( From 844b22859627cd51e26c72a2ed2294337506c17f Mon Sep 17 00:00:00 2001 From: nickofolas Date: Wed, 19 Jan 2022 18:39:39 -0600 Subject: [PATCH 27/85] Align overview page --- src/Corporation/ui/Overview.tsx | 75 ++++++++++++++------------------- 1 file changed, 32 insertions(+), 43 deletions(-) diff --git a/src/Corporation/ui/Overview.tsx b/src/Corporation/ui/Overview.tsx index 93d7c1c73..a35b3a50f 100644 --- a/src/Corporation/ui/Overview.tsx +++ b/src/Corporation/ui/Overview.tsx @@ -89,19 +89,21 @@ export function Overview({ rerender }: IProps): React.ReactElement {
- - Get a copy of and read 'The Complete Handbook for Creating a Successful Corporation.' This is a .lit file - that guides you through the beginning of setting up a Corporation and provides some tips/pointers for - helping you get started with managing it. - - } - > - - - {corp.public ? : } - + + + Get a copy of and read 'The Complete Handbook for Creating a Successful Corporation.' This is a .lit file + that guides you through the beginning of setting up a Corporation and provides some tips/pointers for + helping you get started with managing it. + + } + > + + + {corp.public ? : } + +
@@ -125,11 +127,9 @@ function PrivateButtons({ rerender }: IPrivateButtonsProps): React.ReactElement return ( <> {findInvestorsTooltip}}> - - - + setFindInvestorsopen(false)} rerender={rerender} /> setGoPublicopen(false)} rerender={rerender} /> -
); } @@ -201,8 +200,8 @@ function PublicButtons({ rerender }: IPublicButtonsProps): React.ReactElement { const sellSharesTooltip = sellSharesOnCd ? "Cannot sell shares for " + corp.convertCooldownToString(corp.shareSaleCooldown) : "Sell your shares in the company. The money earned from selling your " + - "shares goes into your personal account, not the Corporation's. " + - "This is one of the only ways to profit from your business venture."; + "shares goes into your personal account, not the Corporation's. " + + "This is one of the only ways to profit from your business venture."; const issueNewSharesOnCd = corp.issueNewSharesCooldown > 0; const issueNewSharesTooltip = issueNewSharesOnCd @@ -212,28 +211,21 @@ function PublicButtons({ rerender }: IPublicButtonsProps): React.ReactElement { return ( <> {sellSharesTooltip}}> - - - + setSellSharesOpen(false)} rerender={rerender} /> Buy back shares you that previously issued or sold at market price.}> - - - + setBuybackSharesOpen(false)} rerender={rerender} /> -
{issueNewSharesTooltip}}> - - - + setIssueNewSharesOpen(false)} /> setIssueDividendsOpen(true)}>Issue Dividends setIssueDividendsOpen(false)} /> -
); } @@ -269,11 +260,9 @@ function BribeButton(): React.ReactElement { : "Your Corporation is not powerful enough to bribe Faction leaders" } > - - - +
setOpen(false)} /> From 60c354622d72ded411e1ff4f11125986cdc04024 Mon Sep 17 00:00:00 2001 From: jamie-mac <> Date: Fri, 21 Jan 2022 20:34:40 +0000 Subject: [PATCH 28/85] Fixes incorrect result being detected on the roulette table Resolves #2382 Resolves #2086 --- src/Casino/Roulette.tsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/Casino/Roulette.tsx b/src/Casino/Roulette.tsx index e9964d5f7..1a36bb2a3 100644 --- a/src/Casino/Roulette.tsx +++ b/src/Casino/Roulette.tsx @@ -118,12 +118,6 @@ export function Roulette(props: IProps): React.ReactElement { const [status, setStatus] = useState("waiting"); const [n, setN] = useState(0); const [lock, setLock] = useState(true); - const [strategy, setStrategy] = useState({ - payout: 0, - match: (): boolean => { - return false; - }, - }); useEffect(() => { const i = window.setInterval(step, 50); @@ -156,13 +150,12 @@ export function Roulette(props: IProps): React.ReactElement { return `${n}${color}`; } - function play(s: Strategy): void { + function play(strategy: Strategy): void { if (reachedLimit(props.p)) return; setCanPlay(false); setLock(false); setStatus("playing"); - setStrategy(s); setTimeout(() => { let n = Math.floor(rng.random() * 37); From 896384227695598cae248949dc424261f270a89c Mon Sep 17 00:00:00 2001 From: jamie-mac <> Date: Fri, 21 Jan 2022 21:28:25 +0000 Subject: [PATCH 29/85] Fixes black matching 0 on the roulette table --- src/Casino/Roulette.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Casino/Roulette.tsx b/src/Casino/Roulette.tsx index 1a36bb2a3..694067f47 100644 --- a/src/Casino/Roulette.tsx +++ b/src/Casino/Roulette.tsx @@ -40,13 +40,13 @@ const strategies: { } = { Red: { match: (n: number): boolean => { - if (n === 0) return false; return redNumbers.includes(n); }, payout: 1, }, Black: { match: (n: number): boolean => { + if (n === 0) return false; return !redNumbers.includes(n); }, payout: 1, From 6018f2280d48f166dd865f85e1d7ee9fe682d0aa Mon Sep 17 00:00:00 2001 From: nickofolas Date: Fri, 21 Jan 2022 16:08:02 -0600 Subject: [PATCH 30/85] Research modal UI pass --- src/Corporation/ui/ResearchModal.tsx | 53 +++++++++++++++++++--------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/src/Corporation/ui/ResearchModal.tsx b/src/Corporation/ui/ResearchModal.tsx index fc34c2be3..3c882c2b1 100644 --- a/src/Corporation/ui/ResearchModal.tsx +++ b/src/Corporation/ui/ResearchModal.tsx @@ -6,17 +6,18 @@ import { IIndustry } from "../IIndustry"; import { Research } from "../Actions"; import { Node } from "../ResearchTree"; import { ResearchMap } from "../ResearchMap"; +import { Settings } from "../../Settings/Settings"; import { dialogBoxCreate } from "../../ui/React/DialogBox"; import Typography from "@mui/material/Typography"; import Tooltip from "@mui/material/Tooltip"; import Button from "@mui/material/Button"; import Box from "@mui/material/Box"; -import ListItemButton from "@mui/material/ListItemButton"; -import ListItemText from "@mui/material/ListItemText"; import Collapse from "@mui/material/Collapse"; import ExpandMore from "@mui/icons-material/ExpandMore"; import ExpandLess from "@mui/icons-material/ExpandLess"; +import CheckIcon from '@mui/icons-material/Check'; + interface INodeProps { n: Node | null; division: IIndustry; @@ -42,8 +43,8 @@ function Upgrade({ n, division }: INodeProps): React.ReactElement { dialogBoxCreate( `Researched ${n.text}. It may take a market cycle ` + - `(~${CorporationConstants.SecsPerMarketCycle} seconds) before the effects of ` + - `the Research apply.`, + `(~${CorporationConstants.SecsPerMarketCycle} seconds) before the effects of ` + + `the Research apply.`, ); } @@ -52,8 +53,8 @@ function Upgrade({ n, division }: INodeProps): React.ReactElement { color = "info"; } - const but = ( - + const wrapInTooltip = (ele: React.ReactElement): React.ReactElement => { + return ( @@ -63,12 +64,22 @@ function Upgrade({ n, division }: INodeProps): React.ReactElement { } > + {ele} + + ) + } + + const but = ( + + {wrapInTooltip( - - + )} ); @@ -76,15 +87,25 @@ function Upgrade({ n, division }: INodeProps): React.ReactElement { return ( - - {but} - setOpen((old) => !old)}> - + + {wrapInTooltip( + + + + )} + - + {n.children.map((m) => ( ))} @@ -108,7 +129,7 @@ export function ResearchModal(props: IProps): React.ReactElement { return ( - + Research points: {props.industry.sciResearch.qty.toFixed(3)}
Multipliers from research: From a954095519bb944b057028bac3da3a0c69375ed7 Mon Sep 17 00:00:00 2001 From: nickofolas Date: Fri, 21 Jan 2022 16:15:41 -0600 Subject: [PATCH 31/85] Prevent FactionRoot options from extending beyond the window --- src/Faction/ui/DonateOption.tsx | 2 +- src/Faction/ui/Option.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Faction/ui/DonateOption.tsx b/src/Faction/ui/DonateOption.tsx index c189e3ce1..255c73711 100644 --- a/src/Faction/ui/DonateOption.tsx +++ b/src/Faction/ui/DonateOption.tsx @@ -77,7 +77,7 @@ export function DonateOption(props: IProps): React.ReactElement { } return ( - + {props.disabled ? ( diff --git a/src/Faction/ui/Option.tsx b/src/Faction/ui/Option.tsx index 1307955d1..9ec2af68b 100644 --- a/src/Faction/ui/Option.tsx +++ b/src/Faction/ui/Option.tsx @@ -19,7 +19,7 @@ type IProps = { export function Option(props: IProps): React.ReactElement { return ( - + {props.infoText} From 275e8c8756112ca270b7f605f7841e9753323c2a Mon Sep 17 00:00:00 2001 From: smolgumball Date: Fri, 21 Jan 2022 15:29:24 -0700 Subject: [PATCH 32/85] Cleanup styles + presentation in FactionsRoot.tsx --- src/Faction/ui/FactionsRoot.tsx | 93 ++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 35 deletions(-) diff --git a/src/Faction/ui/FactionsRoot.tsx b/src/Faction/ui/FactionsRoot.tsx index 4efbd3fbf..8a6619a1e 100644 --- a/src/Faction/ui/FactionsRoot.tsx +++ b/src/Faction/ui/FactionsRoot.tsx @@ -1,17 +1,17 @@ -import React, { useState, useEffect } from "react"; -import { IPlayer } from "../../PersonObjects/IPlayer"; -import { IRouter } from "../../ui/Router"; -import { Factions } from "../Factions"; -import { Faction } from "../Faction"; -import { joinFaction } from "../FactionHelpers"; - -import Typography from "@mui/material/Typography"; +import Paper from "@mui/material/Paper"; import Box from "@mui/material/Box"; -import Link from "@mui/material/Link"; import Button from "@mui/material/Button"; import TableBody from "@mui/material/TableBody"; -import { Table, TableCell } from "../../ui/React/Table"; import TableRow from "@mui/material/TableRow"; +import Typography from "@mui/material/Typography"; +import Container from "@mui/material/Container"; +import React, { useEffect, useState } from "react"; +import { IPlayer } from "../../PersonObjects/IPlayer"; +import { Table, TableCell } from "../../ui/React/Table"; +import { IRouter } from "../../ui/Router"; +import { Faction } from "../Faction"; +import { joinFaction } from "../FactionHelpers"; +import { Factions } from "../Factions"; export const InvitationsSeen: string[] = []; @@ -48,42 +48,65 @@ export function FactionsRoot(props: IProps): React.ReactElement { } return ( - <> + Factions - Lists all factions you have joined -
- - {props.player.factions.map((faction: string) => ( - openFaction(Factions[faction])}> - {faction} - - ))} - -
- {props.player.factionInvitations.length > 0 && ( - <> - - Outstanding Faction Invitations - - - Lists factions you have been invited to. You can accept these faction invitations at any time. - - + + Throughout the game you may receive invitations from factions. There are many different factions, and each + faction has different criteria for determining its potential members. Joining a faction and furthering its cause + is crucial to progressing in the game and unlocking endgame content. + + + + Factions you have joined: + + {(props.player.factions.length > 0 && ( + +
- {props.player.factionInvitations.map((faction: string) => ( + {props.player.factions.map((faction: string) => ( {faction} - + + + ))}
- - )} - +
+ )) || You haven't joined any factions.} + + Outstanding Faction Invitations + + + Factions you have been invited to. You can accept these faction invitations at any time: + + {(props.player.factionInvitations.length > 0 && ( + + + + {props.player.factionInvitations.map((faction: string) => ( + + + + {faction} + + + + + + + + + ))} + +
+
+ )) || You have no outstanding faction invites.} + ); } From 259071e3d544724d27ed04a64f9bdd6ec6c8c2ef Mon Sep 17 00:00:00 2001 From: nickofolas Date: Fri, 21 Jan 2022 16:32:32 -0600 Subject: [PATCH 33/85] Align slider endpoints in settings --- src/ui/React/GameOptionsRoot.tsx | 188 +++++++++++++++---------------- 1 file changed, 91 insertions(+), 97 deletions(-) diff --git a/src/ui/React/GameOptionsRoot.tsx b/src/ui/React/GameOptionsRoot.tsx index e1ce714a6..cff5167e0 100644 --- a/src/ui/React/GameOptionsRoot.tsx +++ b/src/ui/React/GameOptionsRoot.tsx @@ -205,103 +205,97 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { - - The minimum number of milliseconds it takes to execute an operation in Netscript. Setting this too - low can result in poor performance if you have many scripts running. -
- } - > - .script exec time (ms) - - - - - - The maximum number of lines a script's logs can hold. Setting this too high can cause the game to - use a lot of memory if you have many scripts running. -
- } - > - Netscript log size - - - - - - The maximum number of entries that can be written to a port using Netscript's write() function. - Setting this too high can cause the game to use a lot of memory. -
- } - > - Netscript port size - - - - - - The maximum number of entries that can be written to the terminal. Setting this too high can cause - the game to use a lot of memory. - - } - > - Terminal capacity - - - - - The time (in seconds) between each autosave. Set to 0 to disable autosave. - } - > - Autosave interval (s) - - + + + The minimum number of milliseconds it takes to execute an operation in Netscript. Setting this too + low can result in poor performance if you have many scripts running. + + } + > + .script exec time (ms) + + + + The maximum number of lines a script's logs can hold. Setting this too high can cause the game to + use a lot of memory if you have many scripts running. + + } + > + Netscript log size + + + + The maximum number of entries that can be written to a port using Netscript's write() function. + Setting this too high can cause the game to use a lot of memory. + + } + > + Netscript port size + + + + The maximum number of entries that can be written to the terminal. Setting this too high can cause + the game to use a lot of memory. + + } + > + Terminal capacity + + + The time (in seconds) between each autosave. Set to 0 to disable autosave. + } + > + Autosave interval (s) + + + Date: Fri, 21 Jan 2022 15:55:10 -0700 Subject: [PATCH 34/85] Improve row spacing --- src/Faction/ui/FactionsRoot.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Faction/ui/FactionsRoot.tsx b/src/Faction/ui/FactionsRoot.tsx index 8a6619a1e..545f1faad 100644 --- a/src/Faction/ui/FactionsRoot.tsx +++ b/src/Faction/ui/FactionsRoot.tsx @@ -60,16 +60,18 @@ export function FactionsRoot(props: IProps): React.ReactElement { Factions you have joined: {(props.player.factions.length > 0 && ( - + {props.player.factions.map((faction: string) => ( - {faction} + + {faction} + - + @@ -86,7 +88,7 @@ export function FactionsRoot(props: IProps): React.ReactElement { Factions you have been invited to. You can accept these faction invitations at any time: {(props.player.factionInvitations.length > 0 && ( - +
{props.player.factionInvitations.map((faction: string) => ( From 1c856bf7ef0ed69d363414b36d0cab8b655097d6 Mon Sep 17 00:00:00 2001 From: smolgumball Date: Fri, 21 Jan 2022 15:57:44 -0700 Subject: [PATCH 35/85] Resort imports --- src/Faction/ui/FactionsRoot.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Faction/ui/FactionsRoot.tsx b/src/Faction/ui/FactionsRoot.tsx index 545f1faad..8ec03138e 100644 --- a/src/Faction/ui/FactionsRoot.tsx +++ b/src/Faction/ui/FactionsRoot.tsx @@ -1,10 +1,10 @@ -import Paper from "@mui/material/Paper"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; +import Container from "@mui/material/Container"; +import Paper from "@mui/material/Paper"; import TableBody from "@mui/material/TableBody"; import TableRow from "@mui/material/TableRow"; import Typography from "@mui/material/Typography"; -import Container from "@mui/material/Container"; import React, { useEffect, useState } from "react"; import { IPlayer } from "../../PersonObjects/IPlayer"; import { Table, TableCell } from "../../ui/React/Table"; From c6ddba9f5f3b07871409d00c625ac24c057d11f9 Mon Sep 17 00:00:00 2001 From: nickofolas Date: Fri, 21 Jan 2022 20:02:29 -0600 Subject: [PATCH 36/85] Redesign Gang management page --- src/Gang/ui/GangMemberAccordion.tsx | 36 ------- src/Gang/ui/GangMemberAccordionContent.tsx | 31 ------ src/Gang/ui/GangMemberCard.tsx | 26 +++++ src/Gang/ui/GangMemberCardContent.tsx | 62 +++++++++++ src/Gang/ui/GangMemberList.tsx | 52 +++++++-- src/Gang/ui/GangMemberStats.tsx | 116 +++++++++++---------- src/Gang/ui/RecruitButton.tsx | 10 +- src/Gang/ui/TaskSelector.tsx | 25 ++--- 8 files changed, 210 insertions(+), 148 deletions(-) delete mode 100644 src/Gang/ui/GangMemberAccordion.tsx delete mode 100644 src/Gang/ui/GangMemberAccordionContent.tsx create mode 100644 src/Gang/ui/GangMemberCard.tsx create mode 100644 src/Gang/ui/GangMemberCardContent.tsx diff --git a/src/Gang/ui/GangMemberAccordion.tsx b/src/Gang/ui/GangMemberAccordion.tsx deleted file mode 100644 index 0f9cefcef..000000000 --- a/src/Gang/ui/GangMemberAccordion.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/** - * React Component for a gang member on the management subpage. - */ -import React, { useState } from "react"; -import { GangMember } from "../GangMember"; -import { GangMemberAccordionContent } from "./GangMemberAccordionContent"; - -import Box from "@mui/material/Box"; - -import Typography from "@mui/material/Typography"; -import ListItemButton from "@mui/material/ListItemButton"; -import ListItemText from "@mui/material/ListItemText"; -import Paper from "@mui/material/Paper"; -import Collapse from "@mui/material/Collapse"; -import ExpandMore from "@mui/icons-material/ExpandMore"; -import ExpandLess from "@mui/icons-material/ExpandLess"; -interface IProps { - member: GangMember; -} - -export function GangMemberAccordion(props: IProps): React.ReactElement { - const [open, setOpen] = useState(true); - return ( - - setOpen((old) => !old)}> - {props.member.name}} /> - {open ? : } - - - - - - - - ); -} diff --git a/src/Gang/ui/GangMemberAccordionContent.tsx b/src/Gang/ui/GangMemberAccordionContent.tsx deleted file mode 100644 index a79592b36..000000000 --- a/src/Gang/ui/GangMemberAccordionContent.tsx +++ /dev/null @@ -1,31 +0,0 @@ -/** - * React Component for the content of the accordion of gang members on the - * management subpage. - */ -import React, { useState } from "react"; -import { GangMemberStats } from "./GangMemberStats"; -import { TaskSelector } from "./TaskSelector"; -import { TaskDescription } from "./TaskDescription"; -import { GangMember } from "../GangMember"; -import Grid from "@mui/material/Grid"; - -interface IProps { - member: GangMember; -} - -export function GangMemberAccordionContent(props: IProps): React.ReactElement { - const setRerender = useState(false)[1]; - return ( - - - setRerender((old) => !old)} member={props.member} /> - - - setRerender((old) => !old)} member={props.member} /> - - - - - - ); -} diff --git a/src/Gang/ui/GangMemberCard.tsx b/src/Gang/ui/GangMemberCard.tsx new file mode 100644 index 000000000..f8ed9dd06 --- /dev/null +++ b/src/Gang/ui/GangMemberCard.tsx @@ -0,0 +1,26 @@ +/** + * React Component for a gang member on the management subpage. + */ +import React from "react"; +import { GangMember } from "../GangMember"; +import { GangMemberCardContent } from "./GangMemberCardContent"; + +import Box from "@mui/material/Box"; + +import ListItemText from "@mui/material/ListItemText"; +import Paper from "@mui/material/Paper"; + +interface IProps { + member: GangMember; +} + +export function GangMemberCard(props: IProps): React.ReactElement { + return ( + + + {props.member.name}} /> + + + + ); +} diff --git a/src/Gang/ui/GangMemberCardContent.tsx b/src/Gang/ui/GangMemberCardContent.tsx new file mode 100644 index 000000000..ca3cb9de5 --- /dev/null +++ b/src/Gang/ui/GangMemberCardContent.tsx @@ -0,0 +1,62 @@ +/** + * React Component for the content of the accordion of gang members on the + * management subpage. + */ +import React, { useState } from "react"; +import { GangMemberStats } from "./GangMemberStats"; +import { TaskSelector } from "./TaskSelector"; +import { AscensionModal } from "./AscensionModal"; + +import { Box } from "@mui/system"; +import { Button, Typography } from "@mui/material"; +import HelpIcon from "@mui/icons-material/Help"; + +import { GangMember } from "../GangMember"; +import { StaticModal } from "../../ui/React/StaticModal"; + +interface IProps { + member: GangMember; +} + +export function GangMemberCardContent(props: IProps): React.ReactElement { + const setRerender = useState(false)[1]; + const [helpOpen, setHelpOpen] = useState(false); + const [ascendOpen, setAscendOpen] = useState(false); + + return ( + <> + {props.member.canAscend() && ( + + + setAscendOpen(false)} + member={props.member} + onAscend={() => setRerender((old) => !old)} + /> + + setHelpOpen(false)}> + + Ascending a Gang Member resets the member's progress and stats in exchange for a permanent boost to their + stat multipliers. +
+
+ The additional stat multiplier that the Gang Member gains upon ascension is based on the amount of exp + they have. +
+
+ Upon ascension, the member will lose all of its non-Augmentation Equipment and your gang will lose respect + equal to the total respect earned by the member. +
+
+
+ )} + + + setRerender((old) => !old)} member={props.member} /> + + + ); +} diff --git a/src/Gang/ui/GangMemberList.tsx b/src/Gang/ui/GangMemberList.tsx index 104e218b8..fcd8a6b6f 100644 --- a/src/Gang/ui/GangMemberList.tsx +++ b/src/Gang/ui/GangMemberList.tsx @@ -2,23 +2,63 @@ * React Component for the list of gang members on the management subpage. */ import React, { useState } from "react"; -import { GangMemberAccordion } from "./GangMemberAccordion"; -import { GangMember } from "../GangMember"; +import { GangMemberCard } from "./GangMemberCard"; import { RecruitButton } from "./RecruitButton"; import { useGang } from "./Context"; +import { Box, TextField } from "@mui/material"; +import SearchIcon from "@mui/icons-material/Search"; + +import { GangMember } from "../GangMember"; +import { OptionSwitch } from "../../ui/React/OptionSwitch"; + export function GangMemberList(): React.ReactElement { const gang = useGang(); const setRerender = useState(false)[1]; + const [filter, setFilter] = useState(""); + const [ascendOnly, setAscendOnly] = useState(false); + + const handleFilterChange = (event: React.ChangeEvent): void => { + setFilter(event.target.value.toLowerCase()); + } + + const members = gang.members + .filter((member) => member && member.name.toLowerCase().includes(filter)) + .filter((member) => { + if (ascendOnly) return member.canAscend(); + return true; + }); return ( <> setRerender((old) => !old)} /> -
    - {gang.members.map((member: GangMember) => ( - + , + spellCheck: false + }} + placeholder="Filter by member name" + sx={{ m: 1, width: '15%' }} + /> + (setAscendOnly(newValue))} + text="Show only ascendable" + tooltip={ + <> + Filter the members list by whether or not the member + can be ascended. + + } + /> + + {members.map((member: GangMember) => ( + ))} -
+ ); } diff --git a/src/Gang/ui/GangMemberStats.tsx b/src/Gang/ui/GangMemberStats.tsx index c81161a7e..03198f01d 100644 --- a/src/Gang/ui/GangMemberStats.tsx +++ b/src/Gang/ui/GangMemberStats.tsx @@ -2,26 +2,31 @@ * React Component for the first part of a gang member details. * Contains skills and exp. */ -import React, { useState } from "react"; -import { formatNumber } from "../../utils/StringHelperFunctions"; -import { numeralWrapper } from "../../ui/numeralFormat"; -import { GangMember } from "../GangMember"; -import { AscensionModal } from "./AscensionModal"; +import React from "react"; +import { useGang } from "./Context"; + import Typography from "@mui/material/Typography"; import Tooltip from "@mui/material/Tooltip"; -import Button from "@mui/material/Button"; -import { StaticModal } from "../../ui/React/StaticModal"; -import IconButton from "@mui/material/IconButton"; -import HelpIcon from "@mui/icons-material/Help"; +import { + Table, + TableBody, + TableCell, + TableRow, +} from "@mui/material"; + +import { numeralWrapper } from "../../ui/numeralFormat"; +import { GangMember } from "../GangMember"; +import { Settings } from "../../Settings/Settings"; +import { formatNumber } from "../../utils/StringHelperFunctions"; +import { MoneyRate } from "../../ui/React/MoneyRate"; +import { characterOverviewStyles as useStyles } from "../../ui/React/CharacterOverview"; interface IProps { member: GangMember; - onAscend: () => void; } export function GangMemberStats(props: IProps): React.ReactElement { - const [helpOpen, setHelpOpen] = useState(false); - const [ascendOpen, setAscendOpen] = useState(false); + const classes = useStyles(); const asc = { hack: props.member.calculateAscensionMult(props.member.hack_asc_points), @@ -32,6 +37,29 @@ export function GangMemberStats(props: IProps): React.ReactElement { cha: props.member.calculateAscensionMult(props.member.cha_asc_points), }; + const generateTableRow = (name: string, level: number, exp: number, color: string): React.ReactElement => { + return ( + + + {name} + + + + {formatNumber(level, 0)} ({numeralWrapper.formatExp(exp)} exp) + + + + ) + } + + const gang = useGang(); + const data = [ + [`Money:`, ], + [`Respect:`, `${numeralWrapper.formatRespect(5 * props.member.calculateRespectGain(gang))} / sec`], + [`Wanted Level:`, `${numeralWrapper.formatWanted(5 * props.member.calculateWantedLevelGain(gang))} / sec`], + [`Total Respect:`, `${numeralWrapper.formatRespect(props.member.earnedRespect)}`], + ]; + return ( <> } > - - Hacking: {formatNumber(props.member.hack, 0)} ({numeralWrapper.formatExp(props.member.hack_exp)} exp) -
- Strength: {formatNumber(props.member.str, 0)} ({numeralWrapper.formatExp(props.member.str_exp)} exp) -
- Defense: {formatNumber(props.member.def, 0)} ({numeralWrapper.formatExp(props.member.def_exp)} exp) -
- Dexterity: {formatNumber(props.member.dex, 0)} ({numeralWrapper.formatExp(props.member.dex_exp)} exp) -
- Agility: {formatNumber(props.member.agi, 0)} ({numeralWrapper.formatExp(props.member.agi_exp)} exp) -
- Charisma: {formatNumber(props.member.cha, 0)} ({numeralWrapper.formatExp(props.member.cha_exp)} exp) -
-
+
+ + {generateTableRow("Hacking", props.member.hack, props.member.hack_exp, Settings.theme.hack)} + {generateTableRow("Strength", props.member.str, props.member.str_exp, Settings.theme.combat)} + {generateTableRow("Defense", props.member.def, props.member.def_exp, Settings.theme.combat)} + {generateTableRow("Dexterity", props.member.dex, props.member.dex_exp, Settings.theme.combat)} + {generateTableRow("Agility", props.member.agi, props.member.agi_exp, Settings.theme.combat)} + {generateTableRow("Charisma", props.member.cha, props.member.cha_exp, Settings.theme.cha)} +
+ {data.map(([a, b]) => ( + + + {a} + + + {b} + + + ))} +
+
-
- {props.member.canAscend() && ( - <> - - setAscendOpen(false)} - member={props.member} - onAscend={props.onAscend} - /> - setHelpOpen(true)}> - - - setHelpOpen(false)}> - - Ascending a Gang Member resets the member's progress and stats in exchange for a permanent boost to their - stat multipliers. -
-
- The additional stat multiplier that the Gang Member gains upon ascension is based on the amount of exp - they have. -
-
- Upon ascension, the member will lose all of its non-Augmentation Equipment and your gang will lose respect - equal to the total respect earned by the member. -
-
- - )} ); } diff --git a/src/Gang/ui/RecruitButton.tsx b/src/Gang/ui/RecruitButton.tsx index 9897557d5..bea1f5e4f 100644 --- a/src/Gang/ui/RecruitButton.tsx +++ b/src/Gang/ui/RecruitButton.tsx @@ -24,18 +24,20 @@ export function RecruitButton(props: IProps): React.ReactElement { if (!gang.canRecruitMember()) { const respect = gang.getRespectNeededToRecruitMember(); return ( - - - {numeralWrapper.formatRespect(respect)} respect needed to recruit next member + {numeralWrapper.formatRespect(respect)} respect needed to recruit next member ); } return ( <> - + + + setOpen(false)} onRecruit={props.onRecruit} /> ); diff --git a/src/Gang/ui/TaskSelector.tsx b/src/Gang/ui/TaskSelector.tsx index 02e3e2013..ff19ff550 100644 --- a/src/Gang/ui/TaskSelector.tsx +++ b/src/Gang/ui/TaskSelector.tsx @@ -3,14 +3,15 @@ * the task selector as well as some stats. */ import React, { useState } from "react"; -import { numeralWrapper } from "../../ui/numeralFormat"; -import { StatsTable } from "../../ui/React/StatsTable"; -import { MoneyRate } from "../../ui/React/MoneyRate"; import { useGang } from "./Context"; -import { GangMember } from "../GangMember"; +import { TaskDescription } from "./TaskDescription"; + +import { Box } from "@mui/material"; import MenuItem from "@mui/material/MenuItem"; import Select, { SelectChangeEvent } from "@mui/material/Select"; +import { GangMember } from "../GangMember"; + interface IProps { member: GangMember; onTaskChange: () => void; @@ -29,16 +30,9 @@ export function TaskSelector(props: IProps): React.ReactElement { const tasks = gang.getAllTaskNames(); - const data = [ - [`Money:`, ], - [`Respect:`, `${numeralWrapper.formatRespect(5 * props.member.calculateRespectGain(gang))} / sec`], - [`Wanted Level:`, `${numeralWrapper.formatWanted(5 * props.member.calculateWantedLevelGain(gang))} / sec`], - [`Total Respect:`, `${numeralWrapper.formatRespect(props.member.earnedRespect)}`], - ]; - return ( - <> - Unassigned @@ -48,8 +42,7 @@ export function TaskSelector(props: IProps): React.ReactElement { ))} - - - + +
); } From cf8908fbc812889600cb3b269359276463e5dc34 Mon Sep 17 00:00:00 2001 From: Xi-Lin Yeh Date: Fri, 21 Jan 2022 20:49:12 -0800 Subject: [PATCH 37/85] Add metadata (hash, ramUsage) to be returns Allows for better dirty checking and integrations --- src/Electron.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Electron.tsx b/src/Electron.tsx index ea7fb10d4..50811ded7 100644 --- a/src/Electron.tsx +++ b/src/Electron.tsx @@ -4,6 +4,7 @@ import { Terminal } from "./Terminal"; import { SnackbarEvents } from "./ui/React/Snackbar"; import { IMap, IReturnStatus } from "./types"; import { GetServer } from "./Server/AllServers"; +import { resolve } from "cypress/types/bluebird"; export function initElectron(): void { const userAgent = navigator.userAgent.toLowerCase(); @@ -43,7 +44,9 @@ function initWebserver(): void { data: { files: home.scripts.map((script) => ({ filename: script.filename, - code: script.code + code: script.code, + hash: script.hash(), + ramUsage: script.ramUsage })) } } @@ -72,12 +75,17 @@ function initWebserver(): void { msg: "Home server does not exist." } } - const result = home.writeToScriptFile(Player, filename, code); - + const {success, overwritten} = home.writeToScriptFile(Player, filename, code); + let script; + if (success) { + script = home.getScript(filename); + } return { - res: result.success, + res: success, data: { - overwritten: result.overwritten + overwritten, + hash: script?.hash() || undefined, + ramUsage: script?.ramUsage } }; }; From 310374dc567800f351b34cdc70dd413a99d237f0 Mon Sep 17 00:00:00 2001 From: nickofolas Date: Sat, 22 Jan 2022 09:36:36 -0600 Subject: [PATCH 38/85] Fix console complaints with gang cards --- src/Gang/ui/GangMemberStats.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Gang/ui/GangMemberStats.tsx b/src/Gang/ui/GangMemberStats.tsx index 03198f01d..676d78f01 100644 --- a/src/Gang/ui/GangMemberStats.tsx +++ b/src/Gang/ui/GangMemberStats.tsx @@ -99,9 +99,13 @@ export function GangMemberStats(props: IProps): React.ReactElement { {generateTableRow("Dexterity", props.member.dex, props.member.dex_exp, Settings.theme.combat)} {generateTableRow("Agility", props.member.agi, props.member.agi_exp, Settings.theme.combat)} {generateTableRow("Charisma", props.member.cha, props.member.cha_exp, Settings.theme.cha)} -
+ + +
+
+
{data.map(([a, b]) => ( - + {a} From ef95ec2e90ff24846b3261dfc1f516cddf67e5f3 Mon Sep 17 00:00:00 2001 From: jamie-mac <> Date: Sat, 22 Jan 2022 16:05:27 +0000 Subject: [PATCH 39/85] Fix: slots result matches against a previous state of the reels Fix: reels spin the wrong way --- src/Casino/SlotMachine.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Casino/SlotMachine.tsx b/src/Casino/SlotMachine.tsx index 514414e7c..8209cbb0f 100644 --- a/src/Casino/SlotMachine.tsx +++ b/src/Casino/SlotMachine.tsx @@ -159,18 +159,18 @@ export function SlotMachine(props: IProps): React.ReactElement { const copy = index.slice(); for (let i = 0; i < copy.length; i++) { if (copy[i] === locks[i] && !stoppedOne) continue; - copy[i] = (copy[i] + 1) % symbols.length; + copy[i] = (copy[i] - 1 >= 0) ? copy[i] - 1 : symbols.length - 1; stoppedOne = true; } setIndex(copy); if (stoppedOne && copy.every((e, i) => e === locks[i])) { - checkWinnings(); + checkWinnings(getTable(copy, symbols)); } } - function getTable(): string[][] { + function getTable(index:number[], symbols:string[]): string[][] { return [ [ symbols[(index[0] + symbols.length - 1) % symbols.length], @@ -209,8 +209,7 @@ export function SlotMachine(props: IProps): React.ReactElement { ]); } - function checkWinnings(): void { - const t = getTable(); + function checkWinnings(t:string[][]): void { const getPaylineData = function (payline: number[][]): string[] { const data = []; for (const point of payline) { @@ -267,7 +266,7 @@ export function SlotMachine(props: IProps): React.ReactElement { setInvestment(investment); } - const t = getTable(); + const t = getTable(index, symbols); // prettier-ignore return ( <> @@ -288,7 +287,7 @@ export function SlotMachine(props: IProps): React.ReactElement { disabled={!canPlay} >Spin!)}} /> - + {status} Pay lines From 3921457ee6ab1d92c2d7cdf27e6707a3ddbe32b4 Mon Sep 17 00:00:00 2001 From: nickofolas Date: Sat, 22 Jan 2022 11:16:51 -0600 Subject: [PATCH 40/85] Update Gang equip. page UI --- src/Gang/ui/EquipmentsSubpage.tsx | 240 +++++++++++++++++++----------- src/Gang/ui/GangMemberStats.tsx | 49 +++--- 2 files changed, 181 insertions(+), 108 deletions(-) diff --git a/src/Gang/ui/EquipmentsSubpage.tsx b/src/Gang/ui/EquipmentsSubpage.tsx index b5f2b1e60..b2f53c0d8 100644 --- a/src/Gang/ui/EquipmentsSubpage.tsx +++ b/src/Gang/ui/EquipmentsSubpage.tsx @@ -2,20 +2,27 @@ * React Component for the popup that manages gang members upgrades */ import React, { useState } from "react"; -import { formatNumber } from "../../utils/StringHelperFunctions"; -import { numeralWrapper } from "../../ui/numeralFormat"; -import { GangMemberUpgrades } from "../GangMemberUpgrades"; -import { GangMemberUpgrade } from "../GangMemberUpgrade"; -import { Money } from "../../ui/React/Money"; import { useGang } from "./Context"; -import { GangMember } from "../GangMember"; -import { UpgradeType } from "../data/upgrades"; -import { use } from "../../ui/Context"; +import { generateTableRow } from "./GangMemberStats"; + import Typography from "@mui/material/Typography"; import Button from "@mui/material/Button"; import Tooltip from "@mui/material/Tooltip"; import Box from "@mui/material/Box"; import Paper from "@mui/material/Paper"; +import Select, { SelectChangeEvent } from "@mui/material/Select"; +import { MenuItem, Table, TableBody, TextField } from "@mui/material"; +import SearchIcon from "@mui/icons-material/Search"; + +import { numeralWrapper } from "../../ui/numeralFormat"; +import { GangMemberUpgrades } from "../GangMemberUpgrades"; +import { GangMemberUpgrade } from "../GangMemberUpgrade"; +import { Money } from "../../ui/React/Money"; +import { GangMember } from "../GangMember"; +import { UpgradeType } from "../data/upgrades"; +import { use } from "../../ui/Context"; +import { Settings } from "../../Settings/Settings"; +import { characterOverviewStyles as useStyles } from "../../ui/React/CharacterOverview"; interface INextRevealProps { upgrades: string[]; @@ -46,12 +53,10 @@ function NextReveal(props: INextRevealProps): React.ReactElement { function PurchasedUpgrade({ upgName }: { upgName: string }): React.ReactElement { const upg = GangMemberUpgrades[upgName]; return ( - - - }> - {upg.name} - - + + }> + {upg.name} + ); } @@ -72,8 +77,8 @@ function UpgradeButton(props: IUpgradeButtonProps): React.ReactElement { return ( }> - {props.upg.name} - @@ -86,12 +91,16 @@ interface IPanelProps { } function GangMemberUpgradePanel(props: IPanelProps): React.ReactElement { + const classes = useStyles(); const gang = useGang(); const player = use.Player(); const setRerender = useState(false)[1]; + const [currentCategory, setCurrentCategory] = useState("Weapons"); + function rerender(): void { setRerender((old) => !old); } + function filterUpgrades(list: string[], type: UpgradeType): GangMemberUpgrade[] { return Object.keys(GangMemberUpgrades) .filter((upgName: string) => { @@ -103,12 +112,26 @@ function GangMemberUpgradePanel(props: IPanelProps): React.ReactElement { }) .map((upgName: string) => GangMemberUpgrades[upgName]); } + + const onChange = (event: SelectChangeEvent): void => { + setCurrentCategory(event.target.value); + rerender() + } + const weaponUpgrades = filterUpgrades(props.member.upgrades, UpgradeType.Weapon); const armorUpgrades = filterUpgrades(props.member.upgrades, UpgradeType.Armor); const vehicleUpgrades = filterUpgrades(props.member.upgrades, UpgradeType.Vehicle); const rootkitUpgrades = filterUpgrades(props.member.upgrades, UpgradeType.Rootkit); const augUpgrades = filterUpgrades(props.member.augmentations, UpgradeType.Augmentation); + const categories: { [key: string]: (GangMemberUpgrade[] | UpgradeType)[] } = { + 'Weapons': [weaponUpgrades, UpgradeType.Weapon], + 'Armor': [armorUpgrades, UpgradeType.Armor], + 'Vehicles': [vehicleUpgrades, UpgradeType.Vehicle], + 'Rootkits': [rootkitUpgrades, UpgradeType.Rootkit], + 'Augmentations': [augUpgrades, UpgradeType.Augmentation] + }; + const asc = { hack: props.member.calculateAscensionMult(props.member.hack_asc_points), str: props.member.calculateAscensionMult(props.member.str_asc_points), @@ -119,26 +142,89 @@ function GangMemberUpgradePanel(props: IPanelProps): React.ReactElement { }; return ( - - {props.member.name} ({props.member.task}) - - - Hack: {props.member.hack} (x - {formatNumber(props.member.hack_mult * asc.hack, 2)})
- Str: {props.member.str} (x - {formatNumber(props.member.str_mult * asc.str, 2)})
- Def: {props.member.def} (x - {formatNumber(props.member.def_mult * asc.def, 2)})
- Dex: {props.member.dex} (x - {formatNumber(props.member.dex_mult * asc.dex, 2)})
- Agi: {props.member.agi} (x - {formatNumber(props.member.agi_mult * asc.agi, 2)})
- Cha: {props.member.cha} (x - {formatNumber(props.member.cha_mult * asc.cha, 2)}) -
- - Purchased Upgrades: -
+ + + + {props.member.name} ({props.member.task}) + + + Hk: x{numeralWrapper.formatMultiplier(props.member.hack_mult * asc.hack)}(x + {numeralWrapper.formatMultiplier(props.member.hack_mult)} Eq, x{numeralWrapper.formatMultiplier(asc.hack)}{" "} + Asc) +
+ St: x{numeralWrapper.formatMultiplier(props.member.str_mult * asc.str)} + (x{numeralWrapper.formatMultiplier(props.member.str_mult)} Eq, x{numeralWrapper.formatMultiplier(asc.str)}{" "} + Asc) +
+ Df: x{numeralWrapper.formatMultiplier(props.member.def_mult * asc.def)} + (x{numeralWrapper.formatMultiplier(props.member.def_mult)} Eq, x{numeralWrapper.formatMultiplier(asc.def)}{" "} + Asc) +
+ Dx: x{numeralWrapper.formatMultiplier(props.member.dex_mult * asc.dex)} + (x{numeralWrapper.formatMultiplier(props.member.dex_mult)} Eq, x{numeralWrapper.formatMultiplier(asc.dex)}{" "} + Asc) +
+ Ag: x{numeralWrapper.formatMultiplier(props.member.agi_mult * asc.agi)} + (x{numeralWrapper.formatMultiplier(props.member.agi_mult)} Eq, x{numeralWrapper.formatMultiplier(asc.agi)}{" "} + Asc) +
+ Ch: x{numeralWrapper.formatMultiplier(props.member.cha_mult * asc.cha)} + (x{numeralWrapper.formatMultiplier(props.member.cha_mult)} Eq, x{numeralWrapper.formatMultiplier(asc.cha)}{" "} + Asc) + + } + > + + + {generateTableRow("Hacking", props.member.hack, props.member.hack_exp, Settings.theme.hack, classes)} + {generateTableRow("Strength", props.member.str, props.member.str_exp, Settings.theme.combat, classes)} + {generateTableRow("Defense", props.member.def, props.member.def_exp, Settings.theme.combat, classes)} + {generateTableRow("Dexterity", props.member.dex, props.member.dex_exp, Settings.theme.combat, classes)} + {generateTableRow("Agility", props.member.agi, props.member.agi_exp, Settings.theme.combat, classes)} + {generateTableRow("Charisma", props.member.cha, props.member.cha_exp, Settings.theme.cha, classes)} + +
+
+ +
+ + + + + + {(categories[currentCategory][0] as GangMemberUpgrade[]).length === 0 && ( + + All upgrades owned! + + )} + + {(categories[currentCategory][0] as GangMemberUpgrade[]).map((upg) => ( + + ))} + + + + +
+ + Purchased Upgrades: + {props.member.upgrades.map((upg: string) => ( ))} @@ -146,59 +232,22 @@ function GangMemberUpgradePanel(props: IPanelProps): React.ReactElement { ))} - - - - Weapons - - {weaponUpgrades.map((upg) => ( - - ))} - - - - - Armor - - {armorUpgrades.map((upg) => ( - - ))} - - - - - Vehicles - - {vehicleUpgrades.map((upg) => ( - - ))} - - - - - Rootkits - - {rootkitUpgrades.map((upg) => ( - - ))} - - - - - Augmentations - - {augUpgrades.map((upg) => ( - - ))} - - - -
+
); } export function EquipmentsSubpage(): React.ReactElement { const gang = useGang(); + const [filter, setFilter] = useState(""); + + + const handleFilterChange = (event: React.ChangeEvent): void => { + setFilter(event.target.value.toLowerCase()); + } + + const members = gang.members + .filter((member) => member && member.name.toLowerCase().includes(filter)); + return ( <> } > - Discount: -{numeralWrapper.formatPercentage(1 - 1 / gang.getDiscount())} + Discount: -{numeralWrapper.formatPercentage(1 - 1 / gang.getDiscount())} - {gang.members.map((member: GangMember) => ( - - ))} + + , + spellCheck: false + }} + placeholder="Filter by member name" + sx={{ m: 1, width: '15%' }} + /> + + + {members.map((member: GangMember) => ( + + ))} + ); } diff --git a/src/Gang/ui/GangMemberStats.tsx b/src/Gang/ui/GangMemberStats.tsx index 676d78f01..859057837 100644 --- a/src/Gang/ui/GangMemberStats.tsx +++ b/src/Gang/ui/GangMemberStats.tsx @@ -25,6 +25,28 @@ interface IProps { member: GangMember; } +export const generateTableRow = ( + name: string, + level: number, + exp: number, + color: string, + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + classes: any +): React.ReactElement => { + return ( + + + {name} + + + + {formatNumber(level, 0)} ({numeralWrapper.formatExp(exp)} exp) + + + + ) +} + export function GangMemberStats(props: IProps): React.ReactElement { const classes = useStyles(); @@ -37,20 +59,7 @@ export function GangMemberStats(props: IProps): React.ReactElement { cha: props.member.calculateAscensionMult(props.member.cha_asc_points), }; - const generateTableRow = (name: string, level: number, exp: number, color: string): React.ReactElement => { - return ( - - - {name} - - - - {formatNumber(level, 0)} ({numeralWrapper.formatExp(exp)} exp) - - - - ) - } + const gang = useGang(); const data = [ @@ -93,12 +102,12 @@ export function GangMemberStats(props: IProps): React.ReactElement { > - {generateTableRow("Hacking", props.member.hack, props.member.hack_exp, Settings.theme.hack)} - {generateTableRow("Strength", props.member.str, props.member.str_exp, Settings.theme.combat)} - {generateTableRow("Defense", props.member.def, props.member.def_exp, Settings.theme.combat)} - {generateTableRow("Dexterity", props.member.dex, props.member.dex_exp, Settings.theme.combat)} - {generateTableRow("Agility", props.member.agi, props.member.agi_exp, Settings.theme.combat)} - {generateTableRow("Charisma", props.member.cha, props.member.cha_exp, Settings.theme.cha)} + {generateTableRow("Hacking", props.member.hack, props.member.hack_exp, Settings.theme.hack, classes)} + {generateTableRow("Strength", props.member.str, props.member.str_exp, Settings.theme.combat, classes)} + {generateTableRow("Defense", props.member.def, props.member.def_exp, Settings.theme.combat, classes)} + {generateTableRow("Dexterity", props.member.dex, props.member.dex_exp, Settings.theme.combat, classes)} + {generateTableRow("Agility", props.member.agi, props.member.agi_exp, Settings.theme.combat, classes)} + {generateTableRow("Charisma", props.member.cha, props.member.cha_exp, Settings.theme.cha, classes)}
From f6bb4e013871dfdf9c6a24564980527e2fbadf6f Mon Sep 17 00:00:00 2001 From: nickofolas Date: Sat, 22 Jan 2022 11:37:27 -0600 Subject: [PATCH 41/85] Fix console warning on ascension modal --- src/Gang/ui/AscensionModal.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Gang/ui/AscensionModal.tsx b/src/Gang/ui/AscensionModal.tsx index bd9b5d868..82f7c50b6 100644 --- a/src/Gang/ui/AscensionModal.tsx +++ b/src/Gang/ui/AscensionModal.tsx @@ -31,7 +31,7 @@ export function AscensionModal(props: IProps): React.ReactElement { props.onAscend(); const res = gang.ascendMember(props.member); dialogBoxCreate( - + <> You ascended {props.member.name}!

Your gang lost {numeralWrapper.formatRespect(res.respect)} respect. @@ -51,7 +51,7 @@ export function AscensionModal(props: IProps): React.ReactElement {
Charisma: x{numeralWrapper.format(res.cha, "0.000")}
-
, + ); props.onClose(); } From 621df103cf67a6d63cc05d4c1a32cc9926ff1ef0 Mon Sep 17 00:00:00 2001 From: Heikki Aitakangas Date: Sun, 23 Jan 2022 00:31:59 +0200 Subject: [PATCH 42/85] Fix formulas access checks --- src/NetscriptFunctions/Formulas.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/NetscriptFunctions/Formulas.ts b/src/NetscriptFunctions/Formulas.ts index cd2b94c85..bcb3d881f 100644 --- a/src/NetscriptFunctions/Formulas.ts +++ b/src/NetscriptFunctions/Formulas.ts @@ -81,41 +81,41 @@ export function NetscriptFormulas(player: IPlayer, workerScript: WorkerScript, h return { skills: { calculateSkill: function (exp: any, mult: any = 1): any { - checkFormulasAccess("basic.calculateSkill"); + checkFormulasAccess("skills.calculateSkill"); return calculateSkill(exp, mult); }, calculateExp: function (skill: any, mult: any = 1): any { - checkFormulasAccess("basic.calculateExp"); + checkFormulasAccess("skills.calculateExp"); return calculateExp(skill, mult); }, }, hacking: { hackChance: function (server: any, player: any): any { - checkFormulasAccess("basic.hackChance"); + checkFormulasAccess("hacking.hackChance"); return calculateHackingChance(server, player); }, hackExp: function (server: any, player: any): any { - checkFormulasAccess("basic.hackExp"); + checkFormulasAccess("hacking.hackExp"); return calculateHackingExpGain(server, player); }, hackPercent: function (server: any, player: any): any { - checkFormulasAccess("basic.hackPercent"); + checkFormulasAccess("hacking.hackPercent"); return calculatePercentMoneyHacked(server, player); }, growPercent: function (server: any, threads: any, player: any, cores: any = 1): any { - checkFormulasAccess("basic.growPercent"); + checkFormulasAccess("hacking.growPercent"); return calculateServerGrowth(server, threads, player, cores); }, hackTime: function (server: any, player: any): any { - checkFormulasAccess("basic.hackTime"); + checkFormulasAccess("hacking.hackTime"); return calculateHackingTime(server, player) * 1000; }, growTime: function (server: any, player: any): any { - checkFormulasAccess("basic.growTime"); + checkFormulasAccess("hacking.growTime"); return calculateGrowTime(server, player) * 1000; }, weakenTime: function (server: any, player: any): any { - checkFormulasAccess("basic.weakenTime"); + checkFormulasAccess("hacking.weakenTime"); return calculateWeakenTime(server, player) * 1000; }, }, @@ -188,21 +188,27 @@ export function NetscriptFormulas(player: IPlayer, workerScript: WorkerScript, h }, gang: { wantedPenalty(gang: any): number { + checkFormulasAccess("gang.wantedPenalty"); return calculateWantedPenalty(gang); }, respectGain: function (gang: any, member: any, task: any): number { + checkFormulasAccess("gang.respectGain"); return calculateRespectGain(gang, member, task); }, wantedLevelGain: function (gang: any, member: any, task: any): number { + checkFormulasAccess("gang.wantedLevelGain"); return calculateWantedLevelGain(gang, member, task); }, moneyGain: function (gang: any, member: any, task: any): number { + checkFormulasAccess("gang.moneyGain"); return calculateMoneyGain(gang, member, task); }, ascensionPointsGain: function (exp: any): number { + checkFormulasAccess("gang.ascensionPointsGain"); return calculateAscensionPointsGain(exp); }, ascensionMultiplier: function (points: any): number { + checkFormulasAccess("gang.ascensionMultiplier"); return calculateAscensionMult(points); }, }, From 4ffe5508dcef66cbffd3ae34fdcd5292496e178a Mon Sep 17 00:00:00 2001 From: zeddrak <57454318+zeddrak@users.noreply.github.com> Date: Sat, 22 Jan 2022 14:47:33 -0800 Subject: [PATCH 43/85] HacknetServer Grow/Weaken error messages It may be intentional to use hack for all 3 (ie, assume the player makes the connection that can't hack, also means can't grow or weaken), in which case, disregard. On the other hand, it could've easily been a copy/paste artifact, and this would be more explicitly clear, so thought it was worth bringing up. --- src/Terminal/Terminal.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Terminal/Terminal.ts b/src/Terminal/Terminal.ts index 806e79fa7..c46399400 100644 --- a/src/Terminal/Terminal.ts +++ b/src/Terminal/Terminal.ts @@ -143,7 +143,7 @@ export class Terminal implements ITerminal { startGrow(player: IPlayer): void { const server = player.getCurrentServer(); if (server instanceof HacknetServer) { - this.error("Cannot hack this kind of server"); + this.error("Cannot grow this kind of server"); return; } if (!(server instanceof Server)) throw new Error("server should be normal server"); @@ -152,7 +152,7 @@ export class Terminal implements ITerminal { startWeaken(player: IPlayer): void { const server = player.getCurrentServer(); if (server instanceof HacknetServer) { - this.error("Cannot hack this kind of server"); + this.error("Cannot weaken this kind of server"); return; } if (!(server instanceof Server)) throw new Error("server should be normal server"); @@ -241,7 +241,7 @@ export class Terminal implements ITerminal { if (cancelled) return; if (server instanceof HacknetServer) { - this.error("Cannot hack this kind of server"); + this.error("Cannot grow this kind of server"); return; } if (!(server instanceof Server)) throw new Error("server should be normal server"); @@ -268,7 +268,7 @@ export class Terminal implements ITerminal { if (cancelled) return; if (server instanceof HacknetServer) { - this.error("Cannot hack this kind of server"); + this.error("Cannot weaken this kind of server"); return; } if (!(server instanceof Server)) throw new Error("server should be normal server"); From 57a1bef967bc4fb230457f3a0e4a5ab174fae554 Mon Sep 17 00:00:00 2001 From: zeddrak <57454318+zeddrak@users.noreply.github.com> Date: Sat, 22 Jan 2022 21:00:28 -0800 Subject: [PATCH 44/85] In response to Issue #2732 (Optional) This simply clarifies the description for the find all valid math expressions in response to issue #2732 https://github.com/danielyxie/bitburner/issues/2732 --- src/data/codingcontracttypes.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/codingcontracttypes.ts b/src/data/codingcontracttypes.ts index 2b68dba1c..701f08d81 100644 --- a/src/data/codingcontracttypes.ts +++ b/src/data/codingcontracttypes.ts @@ -916,8 +916,8 @@ export const codingContractTypesMetadata: ICodingContractTypeMetadata[] = [ "You are given the following string which contains only digits between 0 and 9:\n\n", `${digits}\n\n`, `You are also given a target number of ${target}. Return all possible ways`, - "you can add the +, -, and * operators to the string such that it evaluates", - "to the target number.\n\n", + "you can add the +(add), -(subtract), and *(multiply) operators to the string such", + "that it evaluates to the target number. (Normal order of operations applies.)\n\n", "The provided answer should be an array of strings containing the valid expressions.", "The data provided by this problem is an array with two elements. The first element", "is the string of digits, while the second element is the target number:\n\n", @@ -949,7 +949,7 @@ export const codingContractTypesMetadata: ICodingContractTypeMetadata[] = [ return [digits, target]; }, - name: "Find All Valid Math Expressions", + name: "c", numTries: 10, solver: (data: any[], ans: string): boolean => { const num: string = data[0]; From 3fa580cb938cbf4578aea5e53514763fb4c2b735 Mon Sep 17 00:00:00 2001 From: zeddrak <57454318+zeddrak@users.noreply.github.com> Date: Sat, 22 Jan 2022 21:06:20 -0800 Subject: [PATCH 45/85] Update codingcontracttypes.ts --- src/data/codingcontracttypes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/codingcontracttypes.ts b/src/data/codingcontracttypes.ts index 701f08d81..34e2f40d0 100644 --- a/src/data/codingcontracttypes.ts +++ b/src/data/codingcontracttypes.ts @@ -949,7 +949,7 @@ export const codingContractTypesMetadata: ICodingContractTypeMetadata[] = [ return [digits, target]; }, - name: "c", + name: "Find All Valid Math Expressions", numTries: 10, solver: (data: any[], ans: string): boolean => { const num: string = data[0]; From 56fe63cdd557a6efa19aab32141441b1af17a1c3 Mon Sep 17 00:00:00 2001 From: zeddrak <57454318+zeddrak@users.noreply.github.com> Date: Sat, 22 Jan 2022 21:41:53 -0800 Subject: [PATCH 46/85] In response to Issue #2678 Added some clarifications in response to Issue #2678. Did not rebuild the md files (I didn't want to cause unnecessary file conflicts). --- src/ScriptEditor/NetscriptDefinitions.d.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 6021a88ef..7ef350a1d 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -3633,6 +3633,7 @@ interface SkillsFormulas { interface HackingFormulas { /** * Calculate hack chance. + * (Ex: 0.25 would indicate a 25% chance of success.) * @param server - Server info from {@link NS.getServer | getServer} * @param player - Player info from {@link NS.getPlayer | getPlayer} * @returns The calculated hack chance. @@ -3649,6 +3650,7 @@ interface HackingFormulas { hackExp(server: Server, player: Player): number; /** * Calculate hack percent for one thread. + * (Ex: 0.25 would steal 25% of the server's current value.) * @remarks * Multiply by thread to get total percent hacked. * @param server - Server info from {@link NS.getServer | getServer} @@ -3657,7 +3659,8 @@ interface HackingFormulas { */ hackPercent(server: Server, player: Player): number; /** - * Calculate the percent a server would grow. + * Calculate the percent a server would grow to. + * (Ex: 3.0 would would grow the server to 300% of its current value.) * @param server - Server info from {@link NS.getServer | getServer} * @param threads - Amount of thread. * @param player - Player info from {@link NS.getPlayer | getPlayer} From 1d118cc8be7974e5d99aec8e749891a2d5f6061d Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 12:56:32 -0500 Subject: [PATCH 47/85] Modify electron build script to select platforms Allows to build only mac windows or linux for a quicker build time while developping. --- electron/package.json | 2 ++ package.json | 4 ++++ package.sh | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/electron/package.json b/electron/package.json index 8612cb794..f3697e2c1 100755 --- a/electron/package.json +++ b/electron/package.json @@ -16,6 +16,8 @@ "./dist/**/*", "./node_modules/**/*", "./public/**/*", + "./src/**", + "./lib/**,", "*.js" ], "directories": { diff --git a/package.json b/package.json index ab72e91fd..d0b6701c3 100644 --- a/package.json +++ b/package.json @@ -119,6 +119,10 @@ "watch:dev": "webpack --watch --mode development", "electron": "sh ./package.sh", "electron:packager": "electron-packager .package bitburner --all --out .build --overwrite --icon .package/icon.png --no-prune", + "electron:packager-all": "electron-packager .package bitburner --all --out .build --overwrite --icon .package/icon.png", + "electron:packager-win": "electron-packager .package bitburner --platform win32 --arch x64 --out .build --overwrite --icon .package/icon.png", + "electron:packager-mac": "electron-packager .package bitburner --platform darwin --arch x64 --out .build --overwrite --icon .package/icon.png", + "electron:packager-linux": "electron-packager .package bitburner --platform linux --arch x64 --out .build --overwrite --icon .package/icon.png", "allbuild": "npm run build && npm run electron && git add --all && git commit --amend --no-edit && git push -f -u origin dev" } } diff --git a/package.sh b/package.sh index 866be1700..60a032247 100755 --- a/package.sh +++ b/package.sh @@ -26,5 +26,6 @@ cd electron npm install cd .. +BUILD_PLATFORM="${1:-"all"}" # And finally build the app. -npm run electron:packager +npm run electron:packager-$BUILD_PLATFORM From ee416dc06e37229d3c653074d9e45f25d33a1822 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 12:40:28 -0500 Subject: [PATCH 48/85] Set nativeWindowOpen to fix deprecation warning --- electron/gameWindow.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/electron/gameWindow.js b/electron/gameWindow.js index 35637d3a4..eca464a8f 100644 --- a/electron/gameWindow.js +++ b/electron/gameWindow.js @@ -18,6 +18,9 @@ async function createWindow(killall) { show: false, backgroundThrottling: false, backgroundColor: "#000000", + webPreferences: { + nativeWindowOpen: true, + }, }); window.removeMenu(); From abfb2127f2f63cab360a928c74e19eaffdc167e1 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 12:47:04 -0500 Subject: [PATCH 49/85] Fix 'Steam not running' popup causing crash on Mac --- electron/main.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/electron/main.js b/electron/main.js index 9621233ba..b7135c38b 100644 --- a/electron/main.js +++ b/electron/main.js @@ -100,8 +100,8 @@ function setStopProcessHandler(app, window, enabled) { } } -function startWindow(noScript) { - gameWindow.createWindow(noScript); +async function startWindow(noScript) { + return gameWindow.createWindow(noScript); } global.app_handlers = { @@ -119,15 +119,14 @@ app.whenReady().then(async () => { setStopProcessHandler(app, window, true); await utils.exportSave(window); } else { - startWindow(process.argv.includes("--no-scripts")); - } - - if (global.greenworksError) { - dialog.showMessageBox({ - title: 'Bitburner', - message: 'Could not connect to Steam', - detail: `${global.greenworksError}\n\nYou won't be able to receive achievements until this is resolved and you restart the game.`, - type: 'warning', buttons: ['OK'] - }); + const window = await startWindow(process.argv.includes("--no-scripts")); + if (global.greenworksError) { + await dialog.showMessageBox(window, { + title: "Bitburner", + message: "Could not connect to Steam", + detail: `${global.greenworksError}\n\nYou won't be able to receive achievements until this is resolved and you restart the game.`, + type: 'warning', buttons: ['OK'] + }); + } } }); From 73d777ef86fb89bc1d68fa612b8775a463efeb70 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 13:24:14 -0500 Subject: [PATCH 50/85] Remove files from previous electron builds Ensure we don't keep old files around in the published app. --- package.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.sh b/package.sh index 60a032247..5659c0016 100755 --- a/package.sh +++ b/package.sh @@ -1,5 +1,8 @@ #!/bin/sh +# Clear out any files remaining from old builds +rm -rf .package + mkdir -p .package/dist/src/ThirdParty || true mkdir -p .package/src/ThirdParty || true mkdir -p .package/node_modules || true From 341975ee09cd16828bf358b997f329bba699c9ea Mon Sep 17 00:00:00 2001 From: qcorradi Date: Sun, 23 Jan 2022 20:30:36 +0100 Subject: [PATCH 51/85] Fixed player hacking exp multiplier application Fixing the application of player's exp multiplier as indicated in #2260, the game balance will need to get re-adjusted in consequence. --- src/Hacking.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Hacking.ts b/src/Hacking.ts index fa6855341..1157e6d9a 100644 --- a/src/Hacking.ts +++ b/src/Hacking.ts @@ -34,9 +34,9 @@ export function calculateHackingExpGain(server: Server, player: IPlayer): number server.baseDifficulty = server.hackDifficulty; } let expGain = baseExpGain; - expGain += server.baseDifficulty * player.hacking_exp_mult * diffFactor; + expGain += server.baseDifficulty * diffFactor; - return expGain * BitNodeMultipliers.HackExpGain; + return expGain * player.hacking_exp_mult * BitNodeMultipliers.HackExpGain; } /** From 08314ed33e95c9c3c117793fb652a69600164208 Mon Sep 17 00:00:00 2001 From: qcorradi Date: Sun, 23 Jan 2022 18:25:59 +0100 Subject: [PATCH 52/85] Fixed array comparison handling of NaN Issue #2033 is fixed, not using Object.is as recommended by https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#when_to_use_object.is_versus_triple_equals --- src/utils/helpers/compareArrays.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/helpers/compareArrays.ts b/src/utils/helpers/compareArrays.ts index 06acd953c..c729add7b 100644 --- a/src/utils/helpers/compareArrays.ts +++ b/src/utils/helpers/compareArrays.ts @@ -20,7 +20,8 @@ export function compareArrays(a1: T[], a2: T[]): boolean { if (!compareArrays(elem1, elem2)) { return false; } - } else if (a1[i] !== a2[i]) { + } else if (a1[i] !== a2[i] && !(Number.isNaN(a1[i]) && Number.isNaN(a2[i]))) { + // strict (in)equality considers NaN not equal to itself return false; } } From 23cd53aad4c3c55ad081724d83a450dda1ce2cbe Mon Sep 17 00:00:00 2001 From: qcorradi Date: Sun, 23 Jan 2022 21:13:11 +0100 Subject: [PATCH 53/85] Add the deck count for blackjack --- src/Casino/Blackjack.tsx | 3 ++- src/Locations/ui/CasinoLocation.tsx | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Casino/Blackjack.tsx b/src/Casino/Blackjack.tsx index 834138f37..542989e0d 100644 --- a/src/Casino/Blackjack.tsx +++ b/src/Casino/Blackjack.tsx @@ -14,6 +14,7 @@ import Typography from "@mui/material/Typography"; import TextField from "@mui/material/TextField"; const MAX_BET = 100e6; +export const DECK_COUNT = 5; // 5-deck multideck enum Result { Pending = "", @@ -45,7 +46,7 @@ export class Blackjack extends Game { constructor(props: Props) { super(props); - this.deck = new Deck(5); // 5-deck multideck + this.deck = new Deck(DECK_COUNT); const initialBet = 1e6; diff --git a/src/Locations/ui/CasinoLocation.tsx b/src/Locations/ui/CasinoLocation.tsx index 096946b17..0058b7e2d 100644 --- a/src/Locations/ui/CasinoLocation.tsx +++ b/src/Locations/ui/CasinoLocation.tsx @@ -5,7 +5,7 @@ */ import React, { useState } from "react"; import Button from "@mui/material/Button"; -import { Blackjack } from "../../Casino/Blackjack"; +import { Blackjack, DECK_COUNT } from "../../Casino/Blackjack"; import { CoinFlip } from "../../Casino/CoinFlip"; import { Roulette } from "../../Casino/Roulette"; import { SlotMachine } from "../../Casino/SlotMachine"; @@ -38,7 +38,7 @@ export function CasinoLocation(props: IProps): React.ReactElement { - + )} {game !== GameType.None && ( From df0a86966aa2e91c66062b5b04ef60b3d8a471d7 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 12:38:47 -0500 Subject: [PATCH 54/85] Add icon for linux --- electron/gameWindow.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/electron/gameWindow.js b/electron/gameWindow.js index 35637d3a4..646fae209 100644 --- a/electron/gameWindow.js +++ b/electron/gameWindow.js @@ -14,7 +14,14 @@ const debug = process.argv.includes("--debug"); async function createWindow(killall) { const setStopProcessHandler = global.app_handlers.stopProcess; + + let icon; + if (process.platform == 'linux') { + icon = path.join(__dirname, 'icon.png'); + } + const window = new BrowserWindow({ + icon, show: false, backgroundThrottling: false, backgroundColor: "#000000", From e7aa977eb0b12582f00230d13a0ba3173cf7d960 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sat, 15 Jan 2022 06:26:58 -0500 Subject: [PATCH 55/85] Persist terminal command history in game save Copy the terminal commands into the player object so that they are saved between game reloads. Adds a 'history' command to display history, and a 'history -c' command to clear it from both the current terminal & the player's save. --- src/PersonObjects/IPlayer.ts | 1 + src/PersonObjects/Player/PlayerObject.ts | 2 ++ src/Terminal/HelpText.ts | 7 ++++++ src/Terminal/Terminal.ts | 3 +++ src/Terminal/commands/history.ts | 27 ++++++++++++++++++++++++ src/Terminal/ui/TerminalInput.tsx | 6 ++++++ 6 files changed, 46 insertions(+) create mode 100644 src/Terminal/commands/history.ts diff --git a/src/PersonObjects/IPlayer.ts b/src/PersonObjects/IPlayer.ts index 3138e5c9d..7b5053adc 100644 --- a/src/PersonObjects/IPlayer.ts +++ b/src/PersonObjects/IPlayer.ts @@ -72,6 +72,7 @@ export interface IPlayer { sourceFiles: IPlayerOwnedSourceFile[]; exploits: Exploit[]; achievements: PlayerAchievement[]; + terminalCommandHistory: string[]; lastUpdate: number; totalPlaytime: number; diff --git a/src/PersonObjects/Player/PlayerObject.ts b/src/PersonObjects/Player/PlayerObject.ts index b2b859eaa..c03569225 100644 --- a/src/PersonObjects/Player/PlayerObject.ts +++ b/src/PersonObjects/Player/PlayerObject.ts @@ -77,6 +77,7 @@ export class PlayerObject implements IPlayer { sourceFiles: IPlayerOwnedSourceFile[]; exploits: Exploit[]; achievements: PlayerAchievement[]; + terminalCommandHistory: string[]; lastUpdate: number; totalPlaytime: number; @@ -471,6 +472,7 @@ export class PlayerObject implements IPlayer { this.exploits = []; this.achievements = []; + this.terminalCommandHistory = []; this.init = generalMethods.init; this.prestigeAugmentation = generalMethods.prestigeAugmentation; diff --git a/src/Terminal/HelpText.ts b/src/Terminal/HelpText.ts index a1d86591e..ba19f49c8 100644 --- a/src/Terminal/HelpText.ts +++ b/src/Terminal/HelpText.ts @@ -21,6 +21,7 @@ export const TerminalHelpText: string[] = [ " grow Spoof money in a servers bank account, increasing the amount available.", " hack Hack the current machine", " help [command] Display this help text, or the help text for a command", + " history [-c] Display the terminal history", " home Connect to home computer", " hostname Displays the hostname of the machine", " kill [script/pid] [args...] Stops the specified script on the current server ", @@ -255,6 +256,12 @@ export const HelpTexts: IMap = { " help scan-analyze", " ", ], + history: [ + "Usage: history [-c]", + " ", + "Without arguments, displays the terminal command history. To clear the history, pass in the '-c' argument.", + " ", + ], home: [ "Usage: home", " ", "Connect to your home computer. This will work no matter what server you are currently connected to.", " ", ], diff --git a/src/Terminal/Terminal.ts b/src/Terminal/Terminal.ts index 806e79fa7..2a64dc88f 100644 --- a/src/Terminal/Terminal.ts +++ b/src/Terminal/Terminal.ts @@ -48,6 +48,7 @@ import { free } from "./commands/free"; import { grow } from "./commands/grow"; import { hack } from "./commands/hack"; import { help } from "./commands/help"; +import { history } from "./commands/history"; import { home } from "./commands/home"; import { hostname } from "./commands/hostname"; import { kill } from "./commands/kill"; @@ -576,6 +577,7 @@ export class Terminal implements ITerminal { if (this.commandHistory.length > 50) { this.commandHistory.splice(0, 1); } + player.terminalCommandHistory = this.commandHistory; } this.commandHistoryIndex = this.commandHistory.length; const allCommands = ParseCommands(commands); @@ -785,6 +787,7 @@ export class Terminal implements ITerminal { grow: grow, hack: hack, help: help, + history: history, home: home, hostname: hostname, kill: kill, diff --git a/src/Terminal/commands/history.ts b/src/Terminal/commands/history.ts new file mode 100644 index 000000000..32a51f162 --- /dev/null +++ b/src/Terminal/commands/history.ts @@ -0,0 +1,27 @@ +import { ITerminal } from "../ITerminal"; +import { IRouter } from "../../ui/Router"; +import { IPlayer } from "../../PersonObjects/IPlayer"; +import { BaseServer } from "../../Server/BaseServer"; + +export function history( + terminal: ITerminal, + router: IRouter, + player: IPlayer, + server: BaseServer, + args: (string | number | boolean)[], +): void { + if (args.length === 0) { + terminal.commandHistory.forEach((command, index) => { + terminal.print(`${index.toString().padStart(2)} ${command}`); + }); + return; + } + const arg = args[0] + ""; + if (arg === "-c" || arg === "--clear") { + player.terminalCommandHistory = []; + terminal.commandHistory = []; + terminal.commandHistoryIndex = 1; + } else { + terminal.error("Incorrect usage of history command. usage: history [-c]"); + } +} diff --git a/src/Terminal/ui/TerminalInput.tsx b/src/Terminal/ui/TerminalInput.tsx index dc0a4ab86..bf9e1f400 100644 --- a/src/Terminal/ui/TerminalInput.tsx +++ b/src/Terminal/ui/TerminalInput.tsx @@ -52,6 +52,12 @@ export function TerminalInput({ terminal, router, player }: IProps): React.React const [possibilities, setPossibilities] = useState([]); const classes = useStyles(); + // If we have no data in the current terminal history, let's initialize it from the player save + if (terminal.commandHistory.length === 0 && player.terminalCommandHistory.length > 0) { + terminal.commandHistory = player.terminalCommandHistory; + terminal.commandHistoryIndex = terminal.commandHistory.length; + } + // Need to run after state updates, for example if we need to move cursor // *after* we modify input useEffect(() => { From cdeae4ef68dfc0eefbf1bad6044674a22599b501 Mon Sep 17 00:00:00 2001 From: Cyn Date: Sun, 23 Jan 2022 22:08:07 -0500 Subject: [PATCH 56/85] Make travelToCity throw on invalid city name and return false on no money --- src/NetscriptFunctions/Singularity.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NetscriptFunctions/Singularity.ts b/src/NetscriptFunctions/Singularity.ts index 5f37b2596..94bbcdc55 100644 --- a/src/NetscriptFunctions/Singularity.ts +++ b/src/NetscriptFunctions/Singularity.ts @@ -474,7 +474,8 @@ export function NetscriptSingularity( case CityName.Ishima: case CityName.Volhaven: if (player.money < CONSTANTS.TravelCost) { - throw helper.makeRuntimeErrorMsg("travelToCity", "Not enough money to travel."); + workerScript.log("travelToCity", () => "Not enough money to travel."); + return false } player.loseMoney(CONSTANTS.TravelCost, "other"); player.city = cityname; @@ -482,8 +483,7 @@ export function NetscriptSingularity( player.gainIntelligenceExp(CONSTANTS.IntelligenceSingFnBaseExpGain / 50000); return true; default: - workerScript.log("travelToCity", () => `Invalid city name: '${cityname}'.`); - return false; + throw helper.makeRuntimeErrorMsg("travelToCity", `Invalid city name: '${cityname}'.`); } }, From 6de6fa092f34a90ac62fa4c69d9ce697ab7fe52e Mon Sep 17 00:00:00 2001 From: David Perez Alvarez Date: Sun, 23 Jan 2022 16:32:48 -0500 Subject: [PATCH 57/85] "improve" server money grow when 0 min `server.moneyAvailable` of 1$ when growing unify displayed growth --- src/NetscriptFunctions.ts | 6 +++--- src/Server/ServerHelpers.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index 5d43cd1e9..2cc6f3825 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -612,12 +612,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { )} (t=${numeralWrapper.formatThreads(threads)}).`, ); return netscriptDelay(growTime * 1000, workerScript).then(function () { - const moneyBefore = server.moneyAvailable <= 0 ? 1 : server.moneyAvailable; - processSingleServerGrowth(server, threads, Player, host.cpuCores); + const moneyBefore = server.moneyAvailable; + const growth = processSingleServerGrowth(server, threads, Player, host.cpuCores); const moneyAfter = server.moneyAvailable; workerScript.scriptRef.recordGrow(server.hostname, threads); const expGain = calculateHackingExpGain(server, Player) * threads; - const logGrowPercent = moneyAfter / moneyBefore - 1; + const logGrowPercent = growth; workerScript.log( "grow", () => diff --git a/src/Server/ServerHelpers.ts b/src/Server/ServerHelpers.ts index 7e8459e9d..db3639c74 100644 --- a/src/Server/ServerHelpers.ts +++ b/src/Server/ServerHelpers.ts @@ -74,8 +74,8 @@ export function processSingleServerGrowth(server: Server, threads: number, p: IP serverGrowth = 1; } + server.moneyAvailable = Math.max(server.moneyAvailable, 1); // It can be grown even if it has no money. 1$ min const oldMoneyAvailable = server.moneyAvailable; - server.moneyAvailable += 1 * threads; // It can be grown even if it has no money server.moneyAvailable *= serverGrowth; // in case of data corruption From 45e106ebe5019e9fbe6ed03962394fcd58277678 Mon Sep 17 00:00:00 2001 From: Jordan Fearnley Date: Mon, 24 Jan 2022 21:30:00 +0000 Subject: [PATCH 58/85] Band-aid fix for visible 'spoilers' in factions RTD Segments the table into multiple expandable parts using the raw RST directive to add HTML directly to the page. Not really a great practice, but would at least quell any arguments as to how spoiler heavy the page is in the meantime. I'm not sure that the proposed change is up to standard, but will open the PR based on initial feedback to screenshots and leave for others to decide. https://discord.com/channels/415207508303544321/924108882551386133/935278973154361434 - Screenshots of what it looks like when generated locally with sphinx --- doc/source/basicgameplay/factions.rst | 79 ++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 8 deletions(-) diff --git a/doc/source/basicgameplay/factions.rst b/doc/source/basicgameplay/factions.rst index bda8de66e..4d7f6f279 100644 --- a/doc/source/basicgameplay/factions.rst +++ b/doc/source/basicgameplay/factions.rst @@ -30,6 +30,11 @@ from faction to faction. List of Factions and their Requirements ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. raw:: html + +
Early Game Factions + +.. _gameplay_factions:: +---------------------+----------------+-----------------------------------------+-------------------------------+ | Early Game | Faction Name | Requirements | Joining this Faction prevents | @@ -46,7 +51,18 @@ List of Factions and their Requirements | | | * Total Hacknet RAM of 8 | | | | | * Total Hacknet Cores of 4 | | +---------------------+----------------+-----------------------------------------+-------------------------------+ -| City Factions | Sector-12 | * Be in Sector-12 | * Chongqing | +.. raw:: html + +
+
City Factions + +.. _gameplay_factions:: + ++---------------------+----------------+-----------------------------------------+-------------------------------+ +| City Factions | Faction Name | Requirements | Joining this Faction prevents | +| | | | you from joining: | ++ +----------------+-----------------------------------------+-------------------------------+ +| | Sector-12 | * Be in Sector-12 | * Chongqing | | | | * $15m | * New Tokyo | | | | | * Ishima | | | | | * Volhaven | @@ -74,8 +90,19 @@ List of Factions and their Requirements | | | | * New Tokyo | | | | | * Ishima | +---------------------+----------------+-----------------------------------------+-------------------------------+ -| Hacking | NiteSec | * Install a backdoor on the avmnite-02h | | -| Groups | | server | | +.. raw:: html + +
+
Hacking Groups + +.. _gameplay_factions:: + ++---------------------+----------------+-----------------------------------------+-------------------------------+ +| Hacking | Faction Name | Requirements | Joining this Faction prevents | +| Groups | | | you from joining: | ++ +----------------+-----------------------------------------+-------------------------------+ +| | NiteSec | * Install a backdoor on the avmnite-02h | | +| | | server | | | | | | | + +----------------+-----------------------------------------+-------------------------------+ | | The Black Hand | * Install a backdoor on the I.I.I.I | | @@ -86,7 +113,18 @@ List of Factions and their Requirements | | | server | | | | | | | +---------------------+----------------+-----------------------------------------+-------------------------------+ -| Megacorporations | ECorp | * Have 200k reputation with | | +.. raw:: html + +
+
Megacorporations + +.. _gameplay_factions:: + ++---------------------+----------------+-----------------------------------------+-------------------------------+ +| Megacorporations | Faction Name | Requirements | Joining this Faction prevents | +| | | | you from joining: | ++ +----------------+-----------------------------------------+-------------------------------+ +| | ECorp | * Have 200k reputation with | | | | | the Corporation | | + +----------------+-----------------------------------------+-------------------------------+ | | MegaCorp | * Have 200k reputation with | | @@ -118,8 +156,19 @@ List of Factions and their Requirements | | | * Install a backdoor on the | | | | | fulcrumassets server | | +---------------------+----------------+-----------------------------------------+-------------------------------+ -| Criminal | Slum Snakes | * All Combat Stats of 30 | | -| Organizations | | * -9 Karma | | +.. raw:: html + +
+
Criminal Organizations + +.. _gameplay_factions:: + ++---------------------+----------------+-----------------------------------------+-------------------------------+ +| Criminal | Faction Name | Requirements | Joining this Faction prevents | +| Organizations | | | you from joining: | ++ +----------------+-----------------------------------------+-------------------------------+ +| | Slum Snakes | * All Combat Stats of 30 | | +| | | * -9 Karma | | | | | * $1m | | + +----------------+-----------------------------------------+-------------------------------+ | | Tetrads | * Be in Chongqing, New Tokyo, or Ishima | | @@ -150,8 +199,19 @@ List of Factions and their Requirements | | | * -90 Karma | | | | | * Not working for CIA or NSA | | +---------------------+----------------+-----------------------------------------+-------------------------------+ -| Endgame | The Covenant | * 20 Augmentations | | -| Factions | | * $75b | | +.. raw:: html + +
+
Endgame Factions + +.. _gameplay_factions:: + ++---------------------+----------------+-----------------------------------------+-------------------------------+ +| Endgame | Faction Name | Requirements | Joining this Faction prevents | +| Factions | | | you from joining: | ++ +----------------+-----------------------------------------+-------------------------------+ +| | The Covenant | * 20 Augmentations | | +| | | * $75b | | | | | * Hacking Level of 850 | | | | | * All Combat Stats of 850 | | + +----------------+-----------------------------------------+-------------------------------+ @@ -165,3 +225,6 @@ List of Factions and their Requirements | | | * Hacking Level of 1500 | | | | | * All Combat Stats of 1200 | | +---------------------+----------------+-----------------------------------------+-------------------------------+ +.. raw:: html + +

From c367de24a8924f731227c386d1bd67e6b59dacf1 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Fri, 21 Jan 2022 14:46:55 -0500 Subject: [PATCH 59/85] Add tool & workflow to fetch changelog Rewrote the changelog script to use primarily merged pull requests between "commit A" and "commit B". It uses the GitHub rest api. The resulting data is pushed to a draft gist. Manual usage is in the README. Also adds a GitHub workflow action to run the tool on demand, through the GitHub action's interface. --- .github/workflows/fetch-changes.yml | 44 +++ tools/README.md | 12 +- tools/changelog.sh | 23 -- tools/fetch-changelog/.gitignore | 3 + tools/fetch-changelog/index.js | 240 ++++++++++++ tools/fetch-changelog/package-lock.json | 465 ++++++++++++++++++++++++ tools/fetch-changelog/package.json | 16 + 7 files changed, 776 insertions(+), 27 deletions(-) create mode 100644 .github/workflows/fetch-changes.yml delete mode 100644 tools/changelog.sh create mode 100644 tools/fetch-changelog/.gitignore create mode 100644 tools/fetch-changelog/index.js create mode 100644 tools/fetch-changelog/package-lock.json create mode 100644 tools/fetch-changelog/package.json diff --git a/.github/workflows/fetch-changes.yml b/.github/workflows/fetch-changes.yml new file mode 100644 index 000000000..594e8a13b --- /dev/null +++ b/.github/workflows/fetch-changes.yml @@ -0,0 +1,44 @@ +name: Fetch Merged Changes +on: + workflow_dispatch: + inputs: + fromCommit: + description: 'From Commit SHA (full-length)' + required: true + toCommit: + description: 'To Commit SHA (full-length, if omitted will use latest)' + +jobs: + fetchChangelog: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Use Node v16.13.1 + uses: actions/setup-node@v2 + with: + node-version: 16.13.1 + cache: 'npm' + - name: Install NPM dependencies + working-directory: ./tools/fetch-changelog + run: npm ci + - name: Fetch Changes from GitHub API + working-directory: ./tools/fetch-changelog + env: + GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + node index.js \ + --from=${{ github.event.inputs.fromCommit }} \ + --to=${{ github.event.inputs.toCommit }} > changes.md + echo + echo "============================================================" + echo + cat changes.md + echo + echo "============================================================" + echo + echo "You may want to go to https://gist.github.com/ to upload the final changelog" + echo "The next step will require an url because we can't easily pass multiline strings to actions" + - uses: actions/upload-artifact@v2 + with: + name: bitburner_changelog___DRAFT.md + path: ./tools/fetch-changelog/changes.md diff --git a/tools/README.md b/tools/README.md index e9cb7e57b..fb62f846f 100644 --- a/tools/README.md +++ b/tools/README.md @@ -21,12 +21,16 @@ Used to synchronize the achievements info in steamworks to the game's data.json node fetch-steam-achievements-data.js DEVKEYDEVKEYDEVKEYDEVKEY ``` -## Changelog script +## Fetch Changelog -Used to generate a basic git commit log (in markdown) between commit A & commit B +Used to generate a changelog of merged pull requests & commits between A & B. +The key is a personnal access token, from https://github.com/settings/tokens. +It requires the "gist" scope as the result is pushed to a secret gist. **Usage** ```sh -# Will default to HEAD if second is not specified. -./tools/changelog.sh 9a0062b 05cbc25 +cd ./tools/fetch-changelog +npm install +export GITHUB_API_TOKEN=tokenhere # this could go into your .bashrc or .profile etc. +node index.js --from=31ebdbb139981a604bd0e8fc1e364916762e11b9 > ../bump-version/changes.md ``` diff --git a/tools/changelog.sh b/tools/changelog.sh deleted file mode 100644 index 11d59b7fa..000000000 --- a/tools/changelog.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -version=${2:-HEAD} -cat >> temp_changelog.md << EOF -# v1.X.X ($version) - -Description Here. - -Compare Commits [on github](https://github.com/danielyxie/bitburner/compare/$1...$version). - ---- - -### Commits -EOF - -git log $1...${version} \ - --pretty=format:'* [`%h`]([https://github.com/danielyxie/bitburner/commit/%H): %s (by %aN on %ad) %n' \ - --date=short \ - --no-merges >> temp_changelog.md - # --reverse >> temp_changelog.md - -rm -f changelog_$1_${version}.md -mv temp_changelog.md changelog_$1_${version}.md diff --git a/tools/fetch-changelog/.gitignore b/tools/fetch-changelog/.gitignore new file mode 100644 index 000000000..3e7196636 --- /dev/null +++ b/tools/fetch-changelog/.gitignore @@ -0,0 +1,3 @@ +node_modules + +*.md diff --git a/tools/fetch-changelog/index.js b/tools/fetch-changelog/index.js new file mode 100644 index 000000000..5aa14d1c7 --- /dev/null +++ b/tools/fetch-changelog/index.js @@ -0,0 +1,240 @@ +import { Octokit } from "@octokit/rest"; +import commandLineArgs from "command-line-args"; + +const owner = "danielyxie"; +const repo = "bitburner" +const basePath = `https://github.com/${owner}/${repo}`; + +const cliArgs = commandLineArgs([ + { name: 'from', alias: 'f', type: String }, + { name: 'to', alias: 't', type: String }, + { name: 'detailed', alias: 'd', type: Boolean } +]); + +class MergeChangelog { + constructor(options) { + this.octokit = new Octokit(options); + } + + async getCommitsSearchResults(query) { + const iterator = this.octokit.paginate.iterator( + this.octokit.rest.search.commits, + { + owner, repo, + q: query, + sort: 'updated', + direction: 'desc', + }, + ); + const searchResults = []; + for await (const response of iterator) { + const entries = response.data.map((entry) => ({ + sha: entry.sha, + url: entry.html_url, + user: { + id: entry.author.id, + login: entry.author.login, + avatar: entry.author.avatar_url, + url: entry.author.html_url, + }, + commit_date: entry.commit.committer.date, + message: entry.commit.message, + })); + searchResults.push(...entries); + } + return searchResults; + } + + async getPullsSearchResults(query) { + const iterator = this.octokit.paginate.iterator( + this.octokit.rest.search.issuesAndPullRequests, + { + owner, repo, + q: query, + sort: 'committer-date', + direction: 'desc', + }, + ); + + const searchResults = []; + for await (const response of iterator) { + const entries = response.data.map((entry) => ({ + id: entry.id, + number: entry.number, + created_at: entry.updated_at, + merged_at: entry.pull_request.merged_at, + url: entry.pull_request.html_url, + title: entry.title, + body: entry.body, + diff: entry.diff_url, + patch: entry.patch_url, + user: { + id: entry.user.id, + login: entry.user.login, + avatar: entry.user.avatar_url, + url: entry.user.html_url, + }, + })); + searchResults.push(...entries); + } + + const pullRequestPromises = []; + for (const entry of searchResults) { + pullRequestPromises.push( + this.octokit.rest.pulls.get({ + owner, repo, + pull_number: entry.number, + }).then((response) => ({ + ...entry, + merge_commit_sha: response.data.merge_commit_sha, + head_commit_sha: response.data.head.sha, + }))); + } + + const pulls = await Promise.all(pullRequestPromises); + return pulls; + } + + async getCommit(sha) { + const response = await this.octokit.rest.git.getCommit({ + owner, repo, + commit_sha: sha, + }); + const commit = { + date: response.data.committer.date, + message: response.data.message, + sha: response.data.sha, + url: response.data.html_url, + } + return commit; + } + + async getPullsMergedBetween(sha_from, sha_to) { + const from = {}; + const to = {}; + from.commit = await this.getCommit(sha_from); + from.date = new Date(from.commit.date); + + if (!sha_to) { + const newest = await this.getLastCommitByBranch('dev'); + to.commit = await this.getCommit(newest) + } else { + to.commit = await this.getCommit(sha_to); + } + + to.date = new Date(to.commit.date); + + const commitQuery = `user:${owner} repo:${repo} merge:false committer-date:"${from.date.toISOString()}..${to.date.toISOString()}"`; + const pullQuery = `user:${owner} repo:${repo} is:pr is:merged merged:"${from.date.toISOString()}..${to.date.toISOString()}"`; + + const commits = await this.getCommitsSearchResults(commitQuery); + const pulls = await this.getPullsSearchResults(pullQuery); + + // We only have the merge commit sha & the HEAD sha in this data, but it can exclude some entries + const pullsCommitSha = pulls. + map((p) => [p.merge_commit_sha, p.head_commit_sha]). + reduce((all, current) => [...all, ...current]); + + let danglingCommits = commits.filter((c) => !pullsCommitSha.includes(c.sha)); + const listPullsPromises = []; + for (const commit of danglingCommits) { + const promise = this.octokit.rest.repos.listPullRequestsAssociatedWithCommit({ + owner, repo, commit_sha: commit.sha + }).then((response) => ({ + ...commit, + nbPulls: response.data.length, + })); + listPullsPromises.push(promise); + } + + const commitsThatAreIncludedInPulls = (await Promise.all(listPullsPromises)). + filter((c) => c.nbPulls > 0). + map((c) => c.sha); + + danglingCommits = danglingCommits. + filter((c) => !commitsThatAreIncludedInPulls.includes(c.sha)); + return { + from, + to, + pulls, + danglingCommits, + pullQuery, + commitQuery, + } + } + + async getLastCommitByBranch(branch) { + const response = await this.octokit.rest.repos.getBranch({ + owner, + repo, + branch, + }); + return response.data.commit.sha; + } + + async getChangelog(from, to, detailedOutput) { + const changes = await this.getPullsMergedBetween(from, to); + const pullLines = changes.pulls.map((line) => this.getPullMarkdown(line, detailedOutput)); + const commitLines = changes.danglingCommits.map((line) => this.getCommitMarkdown(line, detailedOutput)); + commitLines.push(`* Nerf noodle bar.`) + const shortFrom = changes.from.date.toISOString().split('T')[0]; + const shortTo = changes.to.date.toISOString().split('T')[0] + const shortFromSha = changes.from.commit.sha.slice(0, 7); + const shortToSha = changes.to.commit.sha.slice(0, 7); + const title = `## [draft] v1.x.x - ${shortFrom} to ${shortTo}`; + let log = ` +${title} + +#### Information + +Modifications included between **${shortFrom}** and **${shortTo}** (\`${shortFromSha}\` to \`${shortToSha}\`). + +*[See Pull Requests on GitHub](https://github.com/search?q=${encodeURIComponent(changes.pullQuery)})* + +#### Merged Pull Requests + +${pullLines.join('\n')} + +`; + + if (commitLines.length > 0) { + log += ` +#### Other Changes + +${commitLines.join('\n')} +`; + } + return { + log: log.trim(), + changes: changes, + }; + } + + getPullMarkdown(pr, detailedOutput) { + if (!detailedOutput) { + return `* ` + + `${pr.title} (by @${pr.user.login})` + + ` #[${pr.number}](${pr.url})`; + } else { + return `* [${pr.merge_commit_sha.slice(0, 7)}](${basePath}/commit/${pr.merge_commit_sha}) | ` + + `${pr.title} ([@${pr.user.login}](${pr.user.url}))` + + ` PR #[${pr.number}](${pr.url})`; + } + } + + getCommitMarkdown(commit, detailedOutput) { + if (!detailedOutput) { + return `* ` + + `${commit.message} (by @${commit.user.login})` + + ` - [${commit.sha.slice(0, 7)}](${commit.url})`; + } else { + return `* [${commit.sha.slice(0, 7)}](${commit.url}) | ` + + `${commit.message} ([@${commit.user.login}](${commit.user.url}))`; + } + } +} + +const api = new MergeChangelog({ auth: process.env.GITHUB_API_TOKEN }); +api.getChangelog(cliArgs.from, cliArgs.to, cliArgs.detailed).then((data) => { + console.log(data.log); +}); diff --git a/tools/fetch-changelog/package-lock.json b/tools/fetch-changelog/package-lock.json new file mode 100644 index 000000000..b4a7062e0 --- /dev/null +++ b/tools/fetch-changelog/package-lock.json @@ -0,0 +1,465 @@ +{ + "name": "fetch-changelog", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "fetch-changelog", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@octokit/rest": "^18.12.0", + "command-line-args": "^5.2.0" + } + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "dependencies": { + "@octokit/types": "^6.34.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "dependencies": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dependencies": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "node_modules/@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "dependencies": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" + }, + "node_modules/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + }, + "dependencies": { + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==" + }, + "@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "requires": { + "@octokit/types": "^6.34.0" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "requires": {} + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "requires": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "requires": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "requires": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" + }, + "command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "requires": { + "array-back": "^3.0.1" + } + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + } +} diff --git a/tools/fetch-changelog/package.json b/tools/fetch-changelog/package.json new file mode 100644 index 000000000..1b6eb595d --- /dev/null +++ b/tools/fetch-changelog/package.json @@ -0,0 +1,16 @@ +{ + "name": "fetch-changelog", + "version": "1.0.0", + "type": "module", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@octokit/rest": "^18.12.0", + "command-line-args": "^5.2.0" + } +} From c4ddb5ef643a885a68e9e6add549896318c05490 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sat, 22 Jan 2022 06:52:57 -0500 Subject: [PATCH 60/85] Add tool to bump version & create PR This includes a tool to update the various files in the repo that need to change when a version increments. It also includes a workflow to trigger the action manually, passing it a version & a changelog url. It'll update the values, build the app, build the doc, make a commit in a branch, and create a pull request to merge this stuff back into dev. --- .github/workflows/bump-version.yml | 100 +++++++++++++++++++++++ tools/README.md | 12 +++ tools/bump-version/.gitignore | 2 + tools/bump-version/index.js | 118 +++++++++++++++++++++++++++ tools/bump-version/package-lock.json | 109 +++++++++++++++++++++++++ tools/bump-version/package.json | 16 ++++ 6 files changed, 357 insertions(+) create mode 100644 .github/workflows/bump-version.yml create mode 100644 tools/bump-version/.gitignore create mode 100644 tools/bump-version/index.js create mode 100644 tools/bump-version/package-lock.json create mode 100644 tools/bump-version/package.json diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml new file mode 100644 index 000000000..b90db4145 --- /dev/null +++ b/.github/workflows/bump-version.yml @@ -0,0 +1,100 @@ +name: Bump BitBurner Version + +on: + workflow_dispatch: + inputs: + version: + description: 'Version (format: x.y.z)' + required: true + versionNumber: + description: 'Version Number (for saves migration)' + required: true + changelog: + description: 'Changelog (url that points to RAW markdown)' + default: '' + buildApp: + description: 'Include Application Build' + type: boolean + default: 'true' + required: true + buildDoc: + description: 'Include Documentation Build' + type: boolean + default: 'true' + required: true + prepareRelease: + description: 'Prepare Draft Release' + type: boolean + default: 'true' + required: true + +jobs: + bumpVersion: + name: Bump Version + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Install pandoc dependency + run: sudo apt-get install -y pandoc + - name: Checkout repository + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Use Node.js 16.13.1 + uses: actions/setup-node@v2 + with: + node-version: 16.13.1 + cache: 'npm' + - name: Install NPM dependencies for version updater + working-directory: ./tools/bump-version + run: npm ci + - name: Bump version & update changelogs + working-directory: ./tools/bump-version + run: | + curl ${{ github.event.inputs.changelog }} > changes.md + node index.js --version=${{ github.event.inputs.version }} --versionNumber=${{ github.event.inputs.versionNumber }} < changes.md + - name: Install NPM dependencies for app + if: ${{ github.event.inputs.buildApp == 'true' || github.event.inputs.buildDoc == 'true' }} + run: npm ci + - name: Build Production App + if: ${{ github.event.inputs.buildApp == 'true' }} + run: npm run build + - name: Build Documentation + if: ${{ github.event.inputs.buildDoc == 'true' }} + run: npm run doc + - name: Commit Files + run: | + git config --global user.name "GitHub" + git config --global user.email "noreply@github.com" + git checkout -b bump/v${{ github.event.inputs.version }} + git add -A + echo "Bump version to v${{ github.event.inputs.version }}" > commitmessage.txt + echo "" >> commitmessage.txt + cat ./tools/bump-version/changes.md >> commitmessage.txt + git commit -F commitmessage.txt + git push -u origin bump/v${{ github.event.inputs.version }} + - name: Create Pull Request + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh pr create \ + --base "${{ github.ref_name }}" \ + --head "bump/v${{ github.event.inputs.version }}" \ + --title "Bump version to v${{ github.event.inputs.version }}" \ + --body-file ./tools/bump-version/changes.md + - name: Prepare release + if: ${{ github.event.inputs.prepareRelease == 'true' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + RELEASE_TITLE="$(head -n 1 ./tools/bump-version/changes.md | sed 's/## //')" + RELEASE_TITLE="${RELEASE_TITLE:-v${{ github.event.inputs.version }}}" + gh release create \ + v${{ github.event.inputs.version }} \ + --target dev \ + --title "$RELEASE_TITLE" \ + --notes-file ./tools/bump-version/changes.md \ + --generate-notes \ + --draft diff --git a/tools/README.md b/tools/README.md index fb62f846f..b7fa5e55f 100644 --- a/tools/README.md +++ b/tools/README.md @@ -34,3 +34,15 @@ npm install export GITHUB_API_TOKEN=tokenhere # this could go into your .bashrc or .profile etc. node index.js --from=31ebdbb139981a604bd0e8fc1e364916762e11b9 > ../bump-version/changes.md ``` + +## Bump Version + +Used to update the game's various version identifier. +Requires pandoc installed to convert .md to .rst + +**Usage** +```sh +cd ./tools/bump-version +npm install +node index.js --version=1.10.3 --versionNumber=10 < changes.md +``` diff --git a/tools/bump-version/.gitignore b/tools/bump-version/.gitignore new file mode 100644 index 000000000..4764e2f2e --- /dev/null +++ b/tools/bump-version/.gitignore @@ -0,0 +1,2 @@ +node_modules +*.md diff --git a/tools/bump-version/index.js b/tools/bump-version/index.js new file mode 100644 index 000000000..8464bc189 --- /dev/null +++ b/tools/bump-version/index.js @@ -0,0 +1,118 @@ +// import { Octokit } from "@octokit/rest"; +import commandLineArgs from "command-line-args"; + +import fs from 'fs/promises'; +import { readFileSync } from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import pandoc from 'node-pandoc'; + +// https://github.com/75lb/command-line-args +const optionDefinitions = [ + { name: 'version', alias: 'v', type: String, required: true }, + { name: 'versionNumber', alias: 'n', type: Number }, + { name: 'versionDescription', alias: 'd', type: String }, + { name: 'changelog', alias: 'l', type: String }, +]; + +const cliArgs = commandLineArgs(optionDefinitions); + +const appPaths = {}; +appPaths.root = path.join(path.dirname(fileURLToPath(import.meta.url)), "../.."); +appPaths.mainPackage = path.join(appPaths.root, "./package.json"); +appPaths.electronPackage = path.join(appPaths.root, "./electron/package.json"); +appPaths.constants = path.join(appPaths.root, "./src/Constants.ts"); +appPaths.sphinxConf = path.join(appPaths.root, "./doc/source/conf.py"); +appPaths.sphinxChangelog = path.join(appPaths.root, "./doc/source/changelog.rst"); + +async function main(version, versionNumber, changelog) { + console.log(`Updating app files to match v${version}`); + + const [ major, minor ]= version.split('.'); + const shortVersion = `${major}.${minor}`; + const modifiedMainPackage = (await fs.readFile(appPaths.mainPackage, 'utf8')). + replace(/(^\s*"version":\s)"(.*)",$/m, `$1"${version}",`); + await fs.writeFile(appPaths.mainPackage, modifiedMainPackage); + console.log(`Modified ${appPaths.mainPackage}`); + + const modifiedElectronPackage = (await fs.readFile(appPaths.electronPackage, 'utf8')). + replace(/(^\s*"version":\s)"(.*)",$/m, `$1"${version}",`); + await fs.writeFile(appPaths.electronPackage, modifiedElectronPackage); + console.log(`Modified ${appPaths.electronPackage}`); + + let modifiedConstants = (await fs.readFile(appPaths.constants, 'utf8')). + replace(/(^\s*?VersionString:\s)"(.*)",/m, `$1"${version}",`); + modifiedConstants = modifiedConstants. + replace(/(^\s*?VersionNumber:\s)(.*),/m, `$1${versionNumber},`); + + if (changelog.trim() !== '') { + let htmlChangelog = ''; + try { + htmlChangelog = await transform(changelog, 'html'); + console.log('Converted markdown changelog to html') + } catch (error) { + console.error(error); + } + + const paddedChangelog = htmlChangelog.split('\n'). + map((line) => (line.trim() !== '' ? ' ' + line : '')). + join('\n').replaceAll('`', '\\`'); + + modifiedConstants = modifiedConstants. + replace(/(^\s*?LatestUpdate:\s`\n)(.*)`,$/ms, `$1${paddedChangelog}\n` + "`,"); + } + await fs.writeFile(appPaths.constants, modifiedConstants); + console.log(`Modified ${appPaths.constants}`); + + let modifiedSphinxConfig = (await fs.readFile(appPaths.sphinxConf, 'utf8')). + replace(/(^version = ')(.*)'$/m, `$1${shortVersion}'`); + modifiedSphinxConfig = modifiedSphinxConfig. + replace(/(^release = ')(.*)'$/m, `$1${version}'`); + await fs.writeFile(appPaths.sphinxConf, modifiedSphinxConfig); + console.log(`Modified ${appPaths.sphinxConf}`); + + if (changelog.trim() !== '') { + let modifiedSphinxChangelog = await fs.readFile(appPaths.sphinxChangelog, 'utf8'); + const lines = modifiedSphinxChangelog.split('\n'); + let rstChangelog = ''; + try { + rstChangelog = await transform(changelog, 'rst'); + console.log('Converted markdown changelog to rst') + } catch (error) { + console.error(error); + } + + lines.splice(5, 0, rstChangelog); + modifiedSphinxChangelog = lines.join('\n'); + await fs.writeFile(appPaths.sphinxChangelog, modifiedSphinxChangelog); + console.log(`Modified ${appPaths.sphinxChangelog}`); + } +} + +async function transform(markdown, format) { + return new Promise((resolve, reject) => { + const args = `-f markdown -t ${format}`; + pandoc(markdown, args, (error, rst) => { + if (error) { + reject(error); + } else { + resolve(rst); + } + }); + }); +} + +async function getChangelog() { + // Read from stdin + // https://stackoverflow.com/a/56012724 + try { + return readFileSync(0, 'utf-8').replace('\r\n', '\n'); + } catch (error) { + return ''; + } +} + +getChangelog().then((changes) => { + main(cliArgs.version, cliArgs.versionNumber, changes).then(() => console.log('Done')); +}) + diff --git a/tools/bump-version/package-lock.json b/tools/bump-version/package-lock.json new file mode 100644 index 000000000..d9632a14b --- /dev/null +++ b/tools/bump-version/package-lock.json @@ -0,0 +1,109 @@ +{ + "name": "update-version", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "update-version", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "command-line-args": "^5.2.0", + "node-pandoc": "^0.3.0" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node_modules/node-pandoc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/node-pandoc/-/node-pandoc-0.3.0.tgz", + "integrity": "sha1-1GV3zQpyr0FTU/y4oBF622JC+cg=" + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "engines": { + "node": ">=8" + } + } + }, + "dependencies": { + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + }, + "command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "requires": { + "array-back": "^3.0.1" + } + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node-pandoc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/node-pandoc/-/node-pandoc-0.3.0.tgz", + "integrity": "sha1-1GV3zQpyr0FTU/y4oBF622JC+cg=" + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + } + } +} diff --git a/tools/bump-version/package.json b/tools/bump-version/package.json new file mode 100644 index 000000000..c40bdde24 --- /dev/null +++ b/tools/bump-version/package.json @@ -0,0 +1,16 @@ +{ + "name": "update-version", + "version": "1.0.0", + "type": "module", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "command-line-args": "^5.2.0", + "node-pandoc": "^0.3.0" + } +} From 8a2cad6c4a54bfccf2ee11373a331644fee309c0 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Tue, 25 Jan 2022 08:16:48 -0500 Subject: [PATCH 61/85] Reset styles for html changelogs in getUpdateText Adds an optional sxProps to the DialogBox component. --- src/SaveObject.tsx | 15 +++++++++++++++ src/ui/React/DialogBox.tsx | 6 ++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/SaveObject.tsx b/src/SaveObject.tsx index d9cae146a..eaa997269 100755 --- a/src/SaveObject.tsx +++ b/src/SaveObject.tsx @@ -22,6 +22,7 @@ import { v1APIBreak } from "./utils/v1APIBreak"; import { AugmentationNames } from "./Augmentation/data/AugmentationNames"; import { PlayerOwnedAugmentation } from "./Augmentation/PlayerOwnedAugmentation"; import { LocationName } from "./Locations/data/LocationNames"; +import { SxProps } from "@mui/system"; /* SaveObject.js * Defines the object used to save/load games @@ -371,6 +372,18 @@ function createScamUpdateText(): void { } } +const resets: SxProps = { + "& h1, & h2, & h3, & h4, & p, & a, & ul": { + margin: 0, + color: Settings.theme.primary, + whiteSpace: "initial", + }, + "& ul": { + paddingLeft: "1.5em", + lineHeight: 1.5, + }, +}; + function createNewUpdateText(): void { setTimeout( () => @@ -379,6 +392,7 @@ function createNewUpdateText(): void { "Please report any bugs/issues through the github repository " + "or the Bitburner subreddit (reddit.com/r/bitburner).

" + CONSTANTS.LatestUpdate, + resets, ), 1000, ); @@ -391,6 +405,7 @@ function createBetaUpdateText(): void { "Please report any bugs/issues through the github repository (https://github.com/danielyxie/bitburner/issues) " + "or the Bitburner subreddit (reddit.com/r/bitburner).

" + CONSTANTS.LatestUpdate, + resets, ); } diff --git a/src/ui/React/DialogBox.tsx b/src/ui/React/DialogBox.tsx index cc96d956f..9ae8035f6 100644 --- a/src/ui/React/DialogBox.tsx +++ b/src/ui/React/DialogBox.tsx @@ -1,11 +1,13 @@ import { AlertEvents } from "./AlertManager"; import React from "react"; +import { SxProps } from "@mui/system"; +import { Typography } from "@mui/material"; -export function dialogBoxCreate(txt: string | JSX.Element): void { +export function dialogBoxCreate(txt: string | JSX.Element, styles?: SxProps): void { if (typeof txt !== "string") { AlertEvents.emit(txt); } else { - AlertEvents.emit(); + AlertEvents.emit(); } } From e29eceb2bd604e9651214b5cd8667d5f3820e3ee Mon Sep 17 00:00:00 2001 From: Dominik Winter Date: Tue, 25 Jan 2022 18:21:09 +0100 Subject: [PATCH 62/85] fix augmentation order when set to alphabetically --- src/Augmentation/ui/InstalledAugmentations.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Augmentation/ui/InstalledAugmentations.tsx b/src/Augmentation/ui/InstalledAugmentations.tsx index 6533787aa..d0251c0c5 100644 --- a/src/Augmentation/ui/InstalledAugmentations.tsx +++ b/src/Augmentation/ui/InstalledAugmentations.tsx @@ -26,7 +26,7 @@ export function InstalledAugmentations(): React.ReactElement { if (Settings.OwnedAugmentationsOrder === OwnedAugmentationsOrderSetting.Alphabetically) { sourceAugs.sort((aug1, aug2) => { - return aug1.name <= aug2.name ? -1 : 1; + return aug1.name.localeCompare(aug2.name); }); } From 65ffbcc27ea73bc4ae06a6f6b6f6bd09b9391e41 Mon Sep 17 00:00:00 2001 From: Phil Despotos Date: Tue, 25 Jan 2022 12:51:07 -0600 Subject: [PATCH 63/85] Corp API: Add setSmartSupplyUseLeftovers The API can already toggle smart supply on/off, but can't manage the related controls for whether smart supply will draw from the existing materials in the warehouse. Without it, we can't keep some resources in storage to boost the production multiplier without disabling smart supply entirely. --- src/NetscriptFunctions/Corporation.ts | 11 +++++++++++ src/ScriptEditor/NetscriptDefinitions.d.ts | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/src/NetscriptFunctions/Corporation.ts b/src/NetscriptFunctions/Corporation.ts index 05845801c..c961b1482 100644 --- a/src/NetscriptFunctions/Corporation.ts +++ b/src/NetscriptFunctions/Corporation.ts @@ -49,6 +49,7 @@ import { SetMaterialMarketTA2, SetProductMarketTA1, SetProductMarketTA2, + SetSmartSupplyUseLeftovers, } from "../Corporation/Actions"; import { CorporationUnlockUpgrades } from "../Corporation/data/CorporationUnlockUpgrades"; import { CorporationUpgrades } from "../Corporation/data/CorporationUpgrades"; @@ -410,6 +411,16 @@ export function NetscriptCorporation( const warehouse = getWarehouse(divisionName, cityName); SetSmartSupply(warehouse, enabled); }, + setSmartSupplyUseLeftovers: function (adivisionName: any, acityName: any, amaterialName: any, aenabled: any): void { + checkAccess("setSmartSupplyUseLeftovers", 7); + const divisionName = helper.string("setSmartSupply", "divisionName", adivisionName); + const cityName = helper.string("sellProduct", "cityName", acityName); + const materialName = helper.string("sellProduct", "materialName", amaterialName); + const enabled = helper.boolean(aenabled); + const warehouse = getWarehouse(divisionName, cityName); + const material = getMaterial(divisionName, cityName, materialName); + SetSmartSupplyUseLeftovers(warehouse, material, enabled); + }, buyMaterial: function (adivisionName: any, acityName: any, amaterialName: any, aamt: any): void { checkAccess("buyMaterial", 7); const divisionName = helper.string("buyMaterial", "divisionName", adivisionName); diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 6021a88ef..f25fd9a91 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -6255,6 +6255,14 @@ export interface WarehouseAPI { * @param enabled - smart supply enabled */ setSmartSupply(divisionName: string, cityName: string, enabled: boolean): void; + /** + * Set whether smart supply uses leftovers before buying + * @param divisionName - Name of the division + * @param cityName - Name of the city + * @param materialName - Name of the material + * @param enabled - smart supply use leftovers enabled + */ + setSmartSupplyUseLeftovers(divisionName: string, cityName: string, materialName: string, enabled: boolean): void; /** * Set material buy data * @param divisionName - Name of the division From 6342ccbad5f353720d33c2875843b3a5c607570c Mon Sep 17 00:00:00 2001 From: Alex Aubuchon Date: Tue, 25 Jan 2022 18:28:47 -0500 Subject: [PATCH 64/85] Indicate that getRunningScript can return null --- src/ScriptEditor/NetscriptDefinitions.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index 6021a88ef..9ea847ceb 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -5396,7 +5396,7 @@ export interface NS extends Singularity { * @param filename - Optional. Filename or PID of the script. * @param hostname - Optional. Name of host server the script is running on. * @param args - Arguments to identify the script - * @returns info about a running script + * @returns The info about the running script if found, and null otherwise. */ getRunningScript(filename?: FilenameOrPID, hostname?: string, ...args: (string | number)[]): RunningScript; From 1b1206c95d184c280cb1f371cd5a072a29685e80 Mon Sep 17 00:00:00 2001 From: jamie-mac <> Date: Tue, 25 Jan 2022 23:57:36 +0000 Subject: [PATCH 65/85] Fix: Cypress tests for dev (updates to match UI changes) --- cypress/integration/naviguation.spec.ts | 11 +++++------ cypress/integration/netscript.spec.ts | 12 ++++++------ cypress/integration/tutorial.spec.ts | 5 ++--- cypress/support/globalHooks.ts | 9 +++++---- src/BitNode/ui/BitverseRoot.tsx | 2 +- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/cypress/integration/naviguation.spec.ts b/cypress/integration/naviguation.spec.ts index ac7fbea6d..5b9c1dbcc 100644 --- a/cypress/integration/naviguation.spec.ts +++ b/cypress/integration/naviguation.spec.ts @@ -3,7 +3,6 @@ export {}; describe("netscript", () => { it("Do naviguation", () => { cy.findByRole("button", { name: "SKIP TUTORIAL" }).click(); - cy.findByText("Got it!").click(); cy.findByText("Dev").click(); cy.findByText(/Source-Files/i).click(); @@ -23,11 +22,11 @@ describe("netscript", () => { cy.findByText(/Experience/i).click(); cy.findByText(/Tons of exp/i).click(); - cy.findByText("Create Script").click(); - cy.findByText(/Script name:/i); + cy.findByText("Script Editor").click(); + cy.findByText(/No Open Files/i); cy.findByText("Active Scripts").click(); - cy.findByText(/Total online production of/i); + cy.findByText(/Total production since last Augment/i); cy.findByText("Create Program").click(); cy.findByText(/This page displays/i); @@ -65,9 +64,9 @@ describe("netscript", () => { cy.findByText(/don't reward you for/i); cy.findByText("Tutorial").click(); - cy.findByText(/AKA Links to/i); + cy.findByText(/Tutorial \/ Documentation/i); cy.findByText("Options").click(); - cy.findByText(/Netscript exec time/i); + cy.findByText(/\.script exec time/i); }); }); diff --git a/cypress/integration/netscript.spec.ts b/cypress/integration/netscript.spec.ts index 58a31e9ef..a3917960b 100644 --- a/cypress/integration/netscript.spec.ts +++ b/cypress/integration/netscript.spec.ts @@ -3,7 +3,6 @@ export {}; describe("netscript", () => { it("creates and runs a NetScript 2.0 script", () => { cy.findByRole("button", { name: "SKIP TUTORIAL" }).click(); - cy.findByText("Got it!").click(); cy.findByRole("textbox").type("connect n00dles{enter}"); cy.findByText(/connected to n00dles/i); @@ -17,12 +16,13 @@ describe("netscript", () => { cy.findByRole("textbox").type("nano script.js{enter}"); // monaco can take a bit - cy.findByRole("code", { timeout: 15_000 }).type("{selectall}{del}").type(`export const main = async (ns) => {{} + cy.findByRole("code", { timeout: 15_000 }).type("{ctrl}a{del}").type(`export const main = async (ns) => {{} while(true) {{} await ns.hack("n00dles");`); cy.findByText("RAM: 1.70GB"); - cy.findByRole("button", { name: /Save & Close/i }).click(); + cy.findByRole("button", { name: /Save \(Ctrl\/Cmd \+ s\)/i }).click(); + cy.findByRole("button", { name: /Close \(Ctrl\/Cmd \+ b\)/i }).click(); cy.findByRole("textbox").type("run script.js{enter}"); cy.findByText(/Running script with 1 thread/); @@ -33,17 +33,17 @@ describe("netscript", () => { it("errors and shows a dialog box when static RAM !== dynamic RAM", () => { cy.findByRole("button", { name: "SKIP TUTORIAL" }).click(); - cy.findByText("Got it!").click(); cy.findByRole("textbox").type("nano script.js{enter}"); // monaco can take a bit - cy.findByRole("code", { timeout: 15_000 }).type("{selectall}{del}").type(`export const main = async (ns) => {{} + cy.findByRole("code", { timeout: 15_000 }).type("{ctrl}a{del}").type(`export const main = async (ns) => {{} const command = "hack"; ns[command]("n00dles");`); cy.findByText("RAM: 1.60GB"); - cy.findByRole("button", { name: /Save & Close/i }).click(); + cy.findByRole("button", { name: /Save \(Ctrl\/Cmd \+ s\)/i }).click(); + cy.findByRole("button", { name: /Close \(Ctrl\/Cmd \+ b\)/i }).click(); cy.findByRole("textbox").type("run script.js{enter}"); cy.findByText(/Dynamic RAM usage calculated to be greater than initial RAM usage on fn: hack./i); diff --git a/cypress/integration/tutorial.spec.ts b/cypress/integration/tutorial.spec.ts index 6adb547aa..a2a779aa4 100644 --- a/cypress/integration/tutorial.spec.ts +++ b/cypress/integration/tutorial.spec.ts @@ -55,7 +55,7 @@ describe("tutorial", () => { // monaco can take a bit cy.findByRole("code", { timeout: 15_000 }).type("{selectall}{del}").type("while(true) {{}{enter}hack('n00dles');"); - cy.findByRole("button", { name: /Save & Close/i }).click(); + cy.findByRole("button", { name: /Save \(Ctrl\/Cmd \+ s\)/i }).click(); cy.findByText(/now we'll run the script/i); cy.findByRole("textbox").type("free{enter}"); @@ -89,8 +89,7 @@ describe("tutorial", () => { cy.findByText(/a lot of different documentation about the game/i); cy.findByRole("button", { name: "FINISH TUTORIAL" }).click(); - cy.findByText("Got it!").click(); - cy.findByText(/Tutorial \(AKA Links to Documentation\)/i); + cy.findByText(/Tutorial \/ Documentation/i); }); }); diff --git a/cypress/support/globalHooks.ts b/cypress/support/globalHooks.ts index f1093ccfd..3d10370a6 100644 --- a/cypress/support/globalHooks.ts +++ b/cypress/support/globalHooks.ts @@ -1,9 +1,10 @@ export {}; beforeEach(() => { - cy.visit("/"); - cy.clearLocalStorage(); - cy.window().then((win) => { - win.indexedDB.deleteDatabase("bitburnerSave"); + cy.visit("/", { + onBeforeLoad(win: Cypress.AUTWindow) { + win.indexedDB.deleteDatabase("bitburnerSave"); + } }); + cy.clearLocalStorage(); }); diff --git a/src/BitNode/ui/BitverseRoot.tsx b/src/BitNode/ui/BitverseRoot.tsx index 603d2c9d6..d2f344037 100644 --- a/src/BitNode/ui/BitverseRoot.tsx +++ b/src/BitNode/ui/BitverseRoot.tsx @@ -85,7 +85,7 @@ function BitNodePortal(props: IPortalProps): React.ReactElement { } > - setPortalOpen(true)} className={cssClass}> + setPortalOpen(true)} className={cssClass} aria-label={`enter-bitnode-${bitNode.number.toString()}`}> O From 98f40ca092c4459a54b6e786498ec3d5d27d4b0b Mon Sep 17 00:00:00 2001 From: Sage Pointer Date: Wed, 26 Jan 2022 06:02:05 +0200 Subject: [PATCH 66/85] Add rounding to getPurchaseServerCost --- src/Server/ServerPurchases.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Server/ServerPurchases.ts b/src/Server/ServerPurchases.ts index 3cf62635d..c8e9baabe 100644 --- a/src/Server/ServerPurchases.ts +++ b/src/Server/ServerPurchases.ts @@ -30,7 +30,7 @@ export function getPurchaseServerCost(ram: number): number { const upg = Math.max(0, Math.log(sanitizedRam) / Math.log(2) - 6); - return ( + return Math.round( sanitizedRam * CONSTANTS.BaseCostFor1GBOfRamServer * BitNodeMultipliers.PurchasedServerCost * From 5e10f7df1f7a2b05cd0f7cff5793ba592a7d07af Mon Sep 17 00:00:00 2001 From: hydroflame <79246165+hydroflame@users.noreply.github.com> Date: Wed, 26 Jan 2022 00:35:42 -0500 Subject: [PATCH 67/85] Revert "Use min `server.moneyAvailable` of 1$ when growing server money" --- src/NetscriptFunctions.ts | 6 +++--- src/Server/ServerHelpers.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index 2cc6f3825..5d43cd1e9 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -612,12 +612,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { )} (t=${numeralWrapper.formatThreads(threads)}).`, ); return netscriptDelay(growTime * 1000, workerScript).then(function () { - const moneyBefore = server.moneyAvailable; - const growth = processSingleServerGrowth(server, threads, Player, host.cpuCores); + const moneyBefore = server.moneyAvailable <= 0 ? 1 : server.moneyAvailable; + processSingleServerGrowth(server, threads, Player, host.cpuCores); const moneyAfter = server.moneyAvailable; workerScript.scriptRef.recordGrow(server.hostname, threads); const expGain = calculateHackingExpGain(server, Player) * threads; - const logGrowPercent = growth; + const logGrowPercent = moneyAfter / moneyBefore - 1; workerScript.log( "grow", () => diff --git a/src/Server/ServerHelpers.ts b/src/Server/ServerHelpers.ts index db3639c74..7e8459e9d 100644 --- a/src/Server/ServerHelpers.ts +++ b/src/Server/ServerHelpers.ts @@ -74,8 +74,8 @@ export function processSingleServerGrowth(server: Server, threads: number, p: IP serverGrowth = 1; } - server.moneyAvailable = Math.max(server.moneyAvailable, 1); // It can be grown even if it has no money. 1$ min const oldMoneyAvailable = server.moneyAvailable; + server.moneyAvailable += 1 * threads; // It can be grown even if it has no money server.moneyAvailable *= serverGrowth; // in case of data corruption From 022dd5d7d71bc230563fc8d612dca0765acf5af6 Mon Sep 17 00:00:00 2001 From: Olivier Gagnon Date: Wed, 26 Jan 2022 00:58:02 -0500 Subject: [PATCH 68/85] fix compile error --- src/Electron.tsx | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/Electron.tsx b/src/Electron.tsx index 50811ded7..9fa98afc5 100644 --- a/src/Electron.tsx +++ b/src/Electron.tsx @@ -36,8 +36,8 @@ function initWebserver(): void { if (home === null) { return { res: false, - msg: "Home server does not exist." - } + msg: "Home server does not exist.", + }; } return { res: true, @@ -45,11 +45,10 @@ function initWebserver(): void { files: home.scripts.map((script) => ({ filename: script.filename, code: script.code, - hash: script.hash(), - ramUsage: script.ramUsage - })) - } - } + ramUsage: script.ramUsage, + })), + }, + }; }; (document as any).deleteFile = function (filename: string): IReturnWebStatus { @@ -58,8 +57,8 @@ function initWebserver(): void { if (home === null) { return { res: false, - msg: "Home server does not exist." - } + msg: "Home server does not exist.", + }; } return home.removeFile(filename); }; @@ -72,10 +71,10 @@ function initWebserver(): void { if (home === null) { return { res: false, - msg: "Home server does not exist." - } + msg: "Home server does not exist.", + }; } - const {success, overwritten} = home.writeToScriptFile(Player, filename, code); + const { success, overwritten } = home.writeToScriptFile(Player, filename, code); let script; if (success) { script = home.getScript(filename); @@ -84,9 +83,8 @@ function initWebserver(): void { res: success, data: { overwritten, - hash: script?.hash() || undefined, - ramUsage: script?.ramUsage - } + ramUsage: script?.ramUsage, + }, }; }; } From dc2f00057aa298e30cd864db65ace15f7fad3eb0 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 12:29:32 -0500 Subject: [PATCH 69/85] Include lodash in Electron Will be used to debounce function calls. Is a prerequisite for a few other fixes. --- electron/package-lock.json | 13 ++++++++++++- electron/package.json | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/electron/package-lock.json b/electron/package-lock.json index 00b2d1d7e..b512a9036 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "dependencies": { "electron-config": "^2.0.0", - "electron-log": "^4.4.4" + "electron-log": "^4.4.4", + "lodash": "^4.17.21" } }, "node_modules/conf": { @@ -104,6 +105,11 @@ "node": ">=4" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -259,6 +265,11 @@ "path-exists": "^3.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", diff --git a/electron/package.json b/electron/package.json index f3697e2c1..ddf366f92 100755 --- a/electron/package.json +++ b/electron/package.json @@ -25,6 +25,7 @@ }, "dependencies": { "electron-config": "^2.0.0", - "electron-log": "^4.4.4" + "electron-log": "^4.4.4", + "lodash": "^4.17.21" } } From ca5f51b7f0bda0447415af7fa6e617e5f0d7b6ef Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 08:41:09 -0500 Subject: [PATCH 70/85] Keep Electron window position in settings This allows the app to be kept at the same location it was previously. --- electron/gameWindow.js | 13 +++++++- electron/windowTracker.js | 63 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 electron/windowTracker.js diff --git a/electron/gameWindow.js b/electron/gameWindow.js index fb14326d4..6a60b330d 100644 --- a/electron/gameWindow.js +++ b/electron/gameWindow.js @@ -8,6 +8,7 @@ const api = require("./api-server"); const cp = require("child_process"); const path = require("path"); const fs = require("fs"); +const { windowTracker } = require("./windowTracker"); const { fileURLToPath } = require("url"); const debug = process.argv.includes("--debug"); @@ -20,18 +21,28 @@ async function createWindow(killall) { icon = path.join(__dirname, 'icon.png'); } + const tracker = windowTracker('main'); const window = new BrowserWindow({ icon, show: false, backgroundThrottling: false, backgroundColor: "#000000", + title: 'Bitburner', + x: tracker.state.x, + y: tracker.state.y, + width: tracker.state.width, + height: tracker.state.height, + minWidth: 600, + minHeight: 400, webPreferences: { nativeWindowOpen: true, }, }); + setTimeout(() => tracker.track(window), 1000); + if (tracker.state.isMaximized) window.maximize(); + window.removeMenu(); - window.maximize(); noScripts = killall ? { query: { noScripts: killall } } : {}; window.loadFile("index.html", noScripts); window.show(); diff --git a/electron/windowTracker.js b/electron/windowTracker.js new file mode 100644 index 000000000..563822177 --- /dev/null +++ b/electron/windowTracker.js @@ -0,0 +1,63 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { screen } = require("electron"); +const log = require("electron-log"); +const debounce = require("lodash/debounce"); +const Config = require("electron-config"); +const config = new Config(); + +// https://stackoverflow.com/a/68627253 +const windowTracker = (windowName) => { + let window, windowState; + + const setBounds = () => { + // Restore from appConfig + if (config.has(`window.${windowName}`)) { + windowState = config.get(`window.${windowName}`); + return; + } + + const size = screen.getPrimaryDisplay().workAreaSize; + + // Default + windowState = { + x: undefined, + y: undefined, + width: size.width, + height: size.height, + isMaximized: true, + }; + }; + + const saveState = debounce(() => { + if (!windowState.isMaximized) { + windowState = window.getBounds(); + } + + windowState.isMaximized = window.isMaximized(); + log.silly(`Saving window.${windowName} to configs`); + config.set(`window.${windowName}`, windowState); + log.silly(windowState); + }, 1000); + + const track = (win) => { + window = win; + ['resize', 'move', 'close'].forEach((event) => { + win.on(event, saveState); + }); + }; + + setBounds(); + + return { + state: { + x: windowState.x, + y: windowState.y, + width: windowState.width, + height: windowState.height, + isMaximized: windowState.isMaximized, + }, + track, + }; +}; + +module.exports = { windowTracker }; From 5c1504d7e49cd2cf17e65572828ed730a95a026e Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 12:29:32 -0500 Subject: [PATCH 71/85] Include lodash in Electron Will be used to debounce function calls. Is a prerequisite for a few other fixes. --- electron/package-lock.json | 13 ++++++++++++- electron/package.json | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/electron/package-lock.json b/electron/package-lock.json index 00b2d1d7e..b512a9036 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "dependencies": { "electron-config": "^2.0.0", - "electron-log": "^4.4.4" + "electron-log": "^4.4.4", + "lodash": "^4.17.21" } }, "node_modules/conf": { @@ -104,6 +105,11 @@ "node": ">=4" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -259,6 +265,11 @@ "path-exists": "^3.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", diff --git a/electron/package.json b/electron/package.json index f3697e2c1..ddf366f92 100755 --- a/electron/package.json +++ b/electron/package.json @@ -25,6 +25,7 @@ }, "dependencies": { "electron-config": "^2.0.0", - "electron-log": "^4.4.4" + "electron-log": "^4.4.4", + "lodash": "^4.17.21" } } From 588c3e42d736283f9c27775a0a36cccff6c16293 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Tue, 18 Jan 2022 11:43:03 -0500 Subject: [PATCH 72/85] Refactor download.ts (export "download *" command) Export the "download *" helper to be able to be called from Electron. --- src/Terminal/commands/download.ts | 65 ++++++++++++++++++------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/Terminal/commands/download.ts b/src/Terminal/commands/download.ts index fa392d444..5d79f2dba 100644 --- a/src/Terminal/commands/download.ts +++ b/src/Terminal/commands/download.ts @@ -6,6 +6,37 @@ import { isScriptFilename } from "../../Script/isScriptFilename"; import FileSaver from "file-saver"; import JSZip from "jszip"; +export function exportScripts(pattern: string, server: BaseServer): void { + const matchEnding = pattern.length == 1 || pattern === "*.*" ? null : pattern.slice(1); // Treat *.* the same as * + const zip = new JSZip(); + // Helper function to zip any file contents whose name matches the pattern + const zipFiles = (fileNames: string[], fileContents: string[]): void => { + for (let i = 0; i < fileContents.length; ++i) { + let name = fileNames[i]; + if (name.startsWith("/")) name = name.slice(1); + if (!matchEnding || name.endsWith(matchEnding)) + zip.file(name, new Blob([fileContents[i]], { type: "text/plain" })); + } + }; + // In the case of script files, we pull from the server.scripts array + if (!matchEnding || isScriptFilename(matchEnding)) + zipFiles( + server.scripts.map((s) => s.filename), + server.scripts.map((s) => s.code), + ); + // In the case of text files, we pull from the server.scripts array + if (!matchEnding || matchEnding.endsWith(".txt")) + zipFiles( + server.textFiles.map((s) => s.fn), + server.textFiles.map((s) => s.text), + ); + + // Return an error if no files matched, rather than an empty zip folder + if (Object.keys(zip.files).length == 0) throw new Error(`No files match the pattern ${pattern}`); + const zipFn = `bitburner${isScriptFilename(pattern) ? "Scripts" : pattern === "*.txt" ? "Texts" : "Files"}.zip`; + zip.generateAsync({ type: "blob" }).then((content: any) => FileSaver.saveAs(content, zipFn)); +} + export function download( terminal: ITerminal, router: IRouter, @@ -21,34 +52,12 @@ export function download( const fn = args[0] + ""; // If the parameter starts with *, download all files that match the wildcard pattern if (fn.startsWith("*")) { - const matchEnding = fn.length == 1 || fn === "*.*" ? null : fn.slice(1); // Treat *.* the same as * - const zip = new JSZip(); - // Helper function to zip any file contents whose name matches the pattern - const zipFiles = (fileNames: string[], fileContents: string[]): void => { - for (let i = 0; i < fileContents.length; ++i) { - let name = fileNames[i]; - if (name.startsWith("/")) name = name.slice(1); - if (!matchEnding || name.endsWith(matchEnding)) - zip.file(name, new Blob([fileContents[i]], { type: "text/plain" })); - } - }; - // In the case of script files, we pull from the server.scripts array - if (!matchEnding || isScriptFilename(matchEnding)) - zipFiles( - server.scripts.map((s) => s.filename), - server.scripts.map((s) => s.code), - ); - // In the case of text files, we pull from the server.scripts array - if (!matchEnding || matchEnding.endsWith(".txt")) - zipFiles( - server.textFiles.map((s) => s.fn), - server.textFiles.map((s) => s.text), - ); - // Return an error if no files matched, rather than an empty zip folder - if (Object.keys(zip.files).length == 0) return terminal.error(`No files match the pattern ${fn}`); - const zipFn = `bitburner${isScriptFilename(fn) ? "Scripts" : fn === "*.txt" ? "Texts" : "Files"}.zip`; - zip.generateAsync({ type: "blob" }).then((content: any) => FileSaver.saveAs(content, zipFn)); - return; + try { + exportScripts(fn, server); + return; + } catch (error: any) { + return terminal.error(error.message); + } } else if (isScriptFilename(fn)) { // Download a single script const script = terminal.getScript(player, fn); From 974344545dc2d8c61b974c27513fbcd2e09b08f0 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Tue, 18 Jan 2022 11:53:30 -0500 Subject: [PATCH 73/85] Move import save functionality into SaveObject Adds a lot of metadata to be able to easily compare the new save to the current player. - Adds lastSaved & identifier to the PlayerObject - Includes a hash method used to generate an identifier --- src/PersonObjects/Player/PlayerObject.ts | 18 ++- src/SaveObject.tsx | 149 ++++++++++++++++++++--- src/ui/React/GameOptionsRoot.tsx | 89 +++----------- src/utils/StringHelperFunctions.ts | 29 ++++- 4 files changed, 198 insertions(+), 87 deletions(-) diff --git a/src/PersonObjects/Player/PlayerObject.ts b/src/PersonObjects/Player/PlayerObject.ts index c03569225..3a50f68a3 100644 --- a/src/PersonObjects/Player/PlayerObject.ts +++ b/src/PersonObjects/Player/PlayerObject.ts @@ -35,7 +35,9 @@ import { CityName } from "../../Locations/data/CityNames"; import { MoneySourceTracker } from "../../utils/MoneySourceTracker"; import { Reviver, Generic_toJSON, Generic_fromJSON } from "../../utils/JSONReviver"; import { ISkillProgress } from "../formulas/skill"; -import { PlayerAchievement } from '../../Achievements/Achievements'; +import { PlayerAchievement } from "../../Achievements/Achievements"; +import { cyrb53 } from "../../utils/StringHelperFunctions"; +import { getRandomInt } from "../../utils/helpers/getRandomInt"; export class PlayerObject implements IPlayer { // Class members @@ -78,7 +80,9 @@ export class PlayerObject implements IPlayer { exploits: Exploit[]; achievements: PlayerAchievement[]; terminalCommandHistory: string[]; + identifier: string; lastUpdate: number; + lastSave: number; totalPlaytime: number; // Stats @@ -460,7 +464,9 @@ export class PlayerObject implements IPlayer { //Used to store the last update time. this.lastUpdate = 0; + this.lastSave = 0; this.totalPlaytime = 0; + this.playtimeSinceLastAug = 0; this.playtimeSinceLastBitnode = 0; @@ -474,6 +480,16 @@ export class PlayerObject implements IPlayer { this.achievements = []; this.terminalCommandHistory = []; + // Let's get a hash of some semi-random stuff so we have something unique. + this.identifier = cyrb53( + "I-" + + new Date().getTime() + + navigator.userAgent + + window.innerWidth + + window.innerHeight + + getRandomInt(100, 999), + ); + this.init = generalMethods.init; this.prestigeAugmentation = generalMethods.prestigeAugmentation; this.prestigeSourceFile = generalMethods.prestigeSourceFile; diff --git a/src/SaveObject.tsx b/src/SaveObject.tsx index eaa997269..83e7f0603 100755 --- a/src/SaveObject.tsx +++ b/src/SaveObject.tsx @@ -23,11 +23,35 @@ import { AugmentationNames } from "./Augmentation/data/AugmentationNames"; import { PlayerOwnedAugmentation } from "./Augmentation/PlayerOwnedAugmentation"; import { LocationName } from "./Locations/data/LocationNames"; import { SxProps } from "@mui/system"; +import { PlayerObject } from "./PersonObjects/Player/PlayerObject"; /* SaveObject.js * Defines the object used to save/load games */ +export interface ImportData { + base64: string; + parsed: any; + playerData?: ImportPlayerData; +} + +export interface ImportPlayerData { + identifier: string; + lastSave: number; + totalPlaytime: number; + + money: number; + hacking: number; + + augmentations: number; + factions: number; + achievements: number; + + bitNode: number; + bitNodeLevel: number; + sourceFiles: number; +} + class BitburnerSaveObject { PlayerSave = ""; AllServersSave = ""; @@ -42,7 +66,6 @@ class BitburnerSaveObject { AllGangsSave = ""; LastExportBonus = ""; StaneksGiftSave = ""; - SaveTimestamp = ""; getSaveString(excludeRunningScripts = false): string { this.PlayerSave = JSON.stringify(Player); @@ -58,7 +81,6 @@ class BitburnerSaveObject { this.VersionSave = JSON.stringify(CONSTANTS.VersionNumber); this.LastExportBonus = JSON.stringify(ExportBonus.LastExportBonus); this.StaneksGiftSave = JSON.stringify(staneksGift); - this.SaveTimestamp = new Date().getTime().toString(); if (Player.inGang()) { this.AllGangsSave = JSON.stringify(AllGangs); @@ -68,28 +90,125 @@ class BitburnerSaveObject { return saveString; } - saveGame(emitToastEvent = true): void { + saveGame(emitToastEvent = true): Promise { + Player.lastSave = new Date().getTime(); const saveString = this.getSaveString(Settings.ExcludeRunningScriptsFromSave); + return new Promise((resolve, reject) => { + save(saveString) + .then(() => { + if (emitToastEvent) { + SnackbarEvents.emit("Game Saved!", "info", 2000); + } + return resolve(); + }) + .catch((err) => { + console.error(err); + return reject(); + }); + }); + } - save(saveString) - .then(() => { - if (emitToastEvent) { - SnackbarEvents.emit("Game Saved!", "info", 2000); - } - }) - .catch((err) => console.error(err)); + getSaveFileName(isRecovery = false): string { + // Save file name is based on current timestamp and BitNode + const epochTime = Math.round(Date.now() / 1000); + const bn = Player.bitNodeN; + let filename = `bitburnerSave_${epochTime}_BN${bn}x${SourceFileFlags[bn]}.json`; + if (isRecovery) filename = "RECOVERY" + filename; + return filename; } exportGame(): void { const saveString = this.getSaveString(Settings.ExcludeRunningScriptsFromSave); - - // Save file name is based on current timestamp and BitNode - const epochTime = Math.round(Date.now() / 1000); - const bn = Player.bitNodeN; - const filename = `bitburnerSave_${epochTime}_BN${bn}x${SourceFileFlags[bn]}.json`; + const filename = this.getSaveFileName(); download(filename, saveString); } + importGame(base64Save: string, reload = true): Promise { + if (!base64Save || base64Save === "") throw new Error("Invalid import string"); + return save(base64Save).then(() => { + if (reload) setTimeout(() => location.reload(), 1000); + return Promise.resolve(); + }); + } + + getImportStringFromFile(files: FileList | null): Promise { + if (files === null) return Promise.reject(new Error("No file selected")); + const file = files[0]; + if (!file) return Promise.reject(new Error("Invalid file selected")); + + const reader = new FileReader(); + const promise: Promise = new Promise((resolve, reject) => { + reader.onload = function (this: FileReader, e: ProgressEvent) { + const target = e.target; + if (target === null) { + return reject(new Error("Error importing file")); + } + const result = target.result; + if (typeof result !== "string" || result === null) { + return reject(new Error("FileReader event was not type string")); + } + const contents = result; + resolve(contents); + }; + }); + reader.readAsText(file); + return promise; + } + + async getImportDataFromString(base64Save: string): Promise { + if (!base64Save || base64Save === "") throw new Error("Invalid import string"); + + let newSave; + try { + newSave = window.atob(base64Save); + newSave = newSave.trim(); + } catch (error) { + console.error(error); // We'll handle below + } + + if (!newSave || newSave === "") { + return Promise.reject(new Error("Save game had not content or was not base64 encoded")); + } + + let parsedSave; + try { + parsedSave = JSON.parse(newSave); + } catch (error) { + console.log(error); // We'll handle below + } + + if (!parsedSave || parsedSave.ctor !== "BitburnerSaveObject" || !parsedSave.data) { + return Promise.reject(new Error("Save game did not seem valid")); + } + + const data: ImportData = { + base64: base64Save, + parsed: parsedSave, + }; + + const importedPlayer = PlayerObject.fromJSON(JSON.parse(parsedSave.data.PlayerSave)); + + const playerData: ImportPlayerData = { + identifier: importedPlayer.identifier, + lastSave: importedPlayer.lastSave, + totalPlaytime: importedPlayer.totalPlaytime, + + money: importedPlayer.money, + hacking: importedPlayer.hacking, + + augmentations: importedPlayer.augmentations?.reduce((total, current) => (total += current.level), 0) ?? 0, + factions: importedPlayer.factions?.length ?? 0, + achievements: importedPlayer.achievements?.length ?? 0, + + bitNode: importedPlayer.bitNodeN, + bitNodeLevel: importedPlayer.sourceFileLvl(Player.bitNodeN) + 1, + sourceFiles: importedPlayer.sourceFiles?.reduce((total, current) => (total += current.lvl), 0) ?? 0, + }; + + data.playerData = playerData; + return Promise.resolve(data); + } + toJSON(): any { return Generic_toJSON("BitburnerSaveObject", this); } diff --git a/src/ui/React/GameOptionsRoot.tsx b/src/ui/React/GameOptionsRoot.tsx index 03b75d060..77d51e719 100644 --- a/src/ui/React/GameOptionsRoot.tsx +++ b/src/ui/React/GameOptionsRoot.tsx @@ -25,20 +25,19 @@ import SaveIcon from "@mui/icons-material/Save"; import PaletteIcon from '@mui/icons-material/Palette'; import { FileDiagnosticModal } from "../../Diagnostic/FileDiagnosticModal"; -import { dialogBoxCreate } from "./DialogBox"; import { ConfirmationModal } from "./ConfirmationModal"; import { SnackbarEvents } from "./Snackbar"; import { Settings } from "../../Settings/Settings"; -import { save } from "../../db"; -import { formatTime } from "../../utils/helpers/formatTime"; -import { OptionSwitch } from "./OptionSwitch"; import { DeleteGameButton } from "./DeleteGameButton"; import { SoftResetButton } from "./SoftResetButton"; import { IRouter } from "../Router"; import { ThemeEditorButton } from "../../Themes/ui/ThemeEditorButton"; import { StyleEditorButton } from "../../Themes/ui/StyleEditorButton"; +import { formatTime } from "../../utils/helpers/formatTime"; +import { OptionSwitch } from "./OptionSwitch"; +import { saveObject } from "../../SaveObject"; const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -122,78 +121,28 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { ii.click(); } - function onImport(event: React.ChangeEvent): void { - const files = event.target.files; - if (files === null) return; - const file = files[0]; - if (!file) { - dialogBoxCreate("Invalid file selected"); - return; - } - - const reader = new FileReader(); - reader.onload = function (this: FileReader, e: ProgressEvent) { - const target = e.target; - if (target === null) { - console.error("error importing file"); - return; - } - const result = target.result; - if (typeof result !== "string" || result === null) { - console.error("FileReader event was not type string"); - return; - } - const contents = result; - - let newSave; - try { - newSave = window.atob(contents); - newSave = newSave.trim(); - } catch (error) { - console.log(error); // We'll handle below - } - - if (!newSave || newSave === "") { - SnackbarEvents.emit("Save game had not content or was not base64 encoded", "error", 5000); - return; - } - - let parsedSave; - try { - parsedSave = JSON.parse(newSave); - } catch (error) { - console.log(error); // We'll handle below - } - - if (!parsedSave || parsedSave.ctor !== "BitburnerSaveObject" || !parsedSave.data) { - SnackbarEvents.emit("Save game did not seem valid", "error", 5000); - return; - } - - const data: ImportData = { - base64: contents, - parsed: parsedSave, - }; - - const timestamp = parsedSave.data.SaveTimestamp; - if (timestamp && timestamp !== "0") { - data.exportDate = new Date(parseInt(timestamp, 10)); - } - - setImportData(data); + async function onImport(event: React.ChangeEvent): Promise { + try { + const base64Save = await saveObject.getImportStringFromFile(event.target.files); + const data = await saveObject.getImportDataFromString(base64Save); + setImportData(data) setImportSaveOpen(true); - }; - reader.readAsText(file); + } catch (ex: any) { + SnackbarEvents.emit(ex.toString(), "error", 5000); + } } - function confirmedImportGame(): void { + async function confirmedImportGame(): Promise { if (!importData) return; + try { + await saveObject.importGame(importData.base64); + } catch (ex: any) { + SnackbarEvents.emit(ex.toString(), "error", 5000); + } + setImportSaveOpen(false); - save(importData.base64).then(() => { - setImportData(null); - setTimeout(() => location.reload(), 1000); - }); + setImportData(null); } return ( diff --git a/src/utils/StringHelperFunctions.ts b/src/utils/StringHelperFunctions.ts index 44a3cb276..58c685871 100644 --- a/src/utils/StringHelperFunctions.ts +++ b/src/utils/StringHelperFunctions.ts @@ -97,4 +97,31 @@ function generateRandomString(n: number): string { return str; } -export { convertTimeMsToTimeElapsedString, longestCommonStart, containsAllStrings, formatNumber, generateRandomString }; +/** + * Hashes the input string. This is a fast hash, so NOT good for cryptography. + * This has been ripped off here: https://stackoverflow.com/a/52171480 + * @param str The string that is to be hashed + * @param seed A seed to randomize the result + * @returns An hexadecimal string representation of the hashed input + */ +function cyrb53(str: string, seed = 0): string { + let h1 = 0xdeadbeef ^ seed; + let h2 = 0x41c6ce57 ^ seed; + for (let i = 0, ch; i < str.length; i++) { + ch = str.charCodeAt(i); + h1 = Math.imul(h1 ^ ch, 2654435761); + h2 = Math.imul(h2 ^ ch, 1597334677); + } + h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909); + h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909); + return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(16); +} + +export { + convertTimeMsToTimeElapsedString, + longestCommonStart, + containsAllStrings, + formatNumber, + generateRandomString, + cyrb53, +}; From 26432082e2c81c871bf37e8037237f66b8567e82 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Thu, 20 Jan 2022 14:55:28 -0500 Subject: [PATCH 74/85] Add an import save comparison page This adds a new page reachable from the import save file options menu. It shows the difference between the current save and the data that is being imported, for confirmation. Includes an "automatic" variant, which has different wording for when Electron decides it has access to a newer version of the game. While in this screen, the autosave is disabled. This also adds a new BypassWrapper component around the game's tree. It allows for content to be displayed without rendering the nested pages (import, recovery). This prevents player scripts from messing with the screen. --- src/ui/GameRoot.tsx | 97 ++++++--- src/ui/React/BypassWrapper.tsx | 11 + src/ui/React/ConfirmationModal.tsx | 2 + src/ui/React/GameOptionsRoot.tsx | 36 ++-- src/ui/React/ImportSaveRoot.tsx | 335 +++++++++++++++++++++++++++++ src/ui/Router.ts | 2 + 6 files changed, 440 insertions(+), 43 deletions(-) create mode 100644 src/ui/React/BypassWrapper.tsx create mode 100644 src/ui/React/ImportSaveRoot.tsx diff --git a/src/ui/GameRoot.tsx b/src/ui/GameRoot.tsx index 64450d234..fcca21c98 100644 --- a/src/ui/GameRoot.tsx +++ b/src/ui/GameRoot.tsx @@ -81,6 +81,8 @@ import { AchievementsRoot } from "../Achievements/AchievementsRoot"; import { ErrorBoundary } from "./ErrorBoundary"; import { Settings } from "../Settings/Settings"; import { ThemeBrowser } from "../Themes/ui/ThemeBrowser"; +import { ImportSaveRoot } from "./React/ImportSaveRoot"; +import { BypassWrapper } from "./React/BypassWrapper"; const htmlLocation = location; @@ -199,6 +201,9 @@ export let Router: IRouter = { toThemeBrowser: () => { throw new Error("Router called before initialization"); }, + toImportSave: () => { + throw new Error("Router called before initialization"); + }, }; function determineStartPage(player: IPlayer): Page { @@ -228,6 +233,11 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme const [errorBoundaryKey, setErrorBoundaryKey] = useState(0); const [sidebarOpened, setSideBarOpened] = useState(Settings.IsSidebarOpened); + const [importString, setImportString] = useState(undefined as unknown as string); + const [importAutomatic, setImportAutomatic] = useState(false); + if (importString === undefined && page === Page.ImportSave) + throw new Error("Trying to go to a page without the proper setup"); + function resetErrorBoundary(): void { setErrorBoundaryKey(errorBoundaryKey + 1); } @@ -315,7 +325,12 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme }, toThemeBrowser: () => { setPage(Page.ThemeBrowser); - } + }, + toImportSave: (base64save: string, automatic = false) => { + setImportString(base64save); + setImportAutomatic(automatic); + setPage(Page.ImportSave); + }, }; useEffect(() => { @@ -332,11 +347,13 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme let mainPage = Cannot load; let withSidebar = true; let withPopups = true; + let bypassGame = false; switch (page) { case Page.Recovery: { mainPage = ; withSidebar = false; withPopups = false; + bypassGame = true; break; } case Page.BitVerse: { @@ -517,44 +534,62 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme mainPage = ; break; } + case Page.ImportSave: { + mainPage = ( + Router.toTerminal()} + /> + ); + withSidebar = false; + withPopups = false; + bypassGame = true; + } } return ( - - - {!ITutorial.isRunning ? ( - saveObject.saveGame()} killScripts={killAllScripts} /> + + + + {!ITutorial.isRunning ? ( + saveObject.saveGame()} killScripts={killAllScripts} /> + ) : ( + + )} + + {withSidebar ? ( + + { + setSideBarOpened(isOpened); + Settings.IsSidebarOpened = isOpened; + }} + /> + {mainPage} + ) : ( - - )} - - {withSidebar ? ( - - { - setSideBarOpened(isOpened); - Settings.IsSidebarOpened = isOpened; - }} /> {mainPage} - - ) : ( - {mainPage} - )} - - {withPopups && ( - <> - - - - - - - )} - + )} + + {withPopups && ( + <> + + + + + + + )} + + diff --git a/src/ui/React/BypassWrapper.tsx b/src/ui/React/BypassWrapper.tsx new file mode 100644 index 000000000..db793f225 --- /dev/null +++ b/src/ui/React/BypassWrapper.tsx @@ -0,0 +1,11 @@ +import React from "react"; + +interface IProps { + children: React.ReactNode; + content: React.ReactNode; +} + +export function BypassWrapper(props: IProps): React.ReactElement { + if (!props.content) return <>{props.children}; + return <>{props.content}; +} diff --git a/src/ui/React/ConfirmationModal.tsx b/src/ui/React/ConfirmationModal.tsx index e58b2fa57..b4de623d3 100644 --- a/src/ui/React/ConfirmationModal.tsx +++ b/src/ui/React/ConfirmationModal.tsx @@ -9,6 +9,7 @@ interface IProps { onClose: () => void; onConfirm: () => void; confirmationText: string | React.ReactNode; + additionalButton?: React.ReactNode; } export function ConfirmationModal(props: IProps): React.ReactElement { @@ -23,6 +24,7 @@ export function ConfirmationModal(props: IProps): React.ReactElement { > Confirm + {props.additionalButton && <>{props.additionalButton}} ); diff --git a/src/ui/React/GameOptionsRoot.tsx b/src/ui/React/GameOptionsRoot.tsx index 77d51e719..d327ade58 100644 --- a/src/ui/React/GameOptionsRoot.tsx +++ b/src/ui/React/GameOptionsRoot.tsx @@ -37,7 +37,8 @@ import { ThemeEditorButton } from "../../Themes/ui/ThemeEditorButton"; import { StyleEditorButton } from "../../Themes/ui/StyleEditorButton"; import { formatTime } from "../../utils/helpers/formatTime"; import { OptionSwitch } from "./OptionSwitch"; -import { saveObject } from "../../SaveObject"; +import { ImportData, saveObject } from "../../SaveObject"; +import { convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFunctions"; const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -58,12 +59,6 @@ interface IProps { softReset: () => void; } -interface ImportData { - base64: string; - parsed: any; - exportDate?: Date; -} - export function GameOptionsRoot(props: IProps): React.ReactElement { const classes = useStyles(); const importInput = useRef(null); @@ -125,7 +120,7 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { try { const base64Save = await saveObject.getImportStringFromFile(event.target.files); const data = await saveObject.getImportDataFromString(base64Save); - setImportData(data) + setImportData(data); setImportSaveOpen(true); } catch (ex: any) { SnackbarEvents.emit(ex.toString(), "error", 5000); @@ -145,6 +140,13 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { setImportData(null); } + function compareSaveGame(): void { + if (!importData) return; + props.router.toImportSave(importData.base64); + setImportSaveOpen(false); + setImportData(null); + } + return (
@@ -534,6 +536,7 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { open={importSaveOpen} onClose={() => setImportSaveOpen(false)} onConfirm={() => confirmedImportGame()} + additionalButton={} confirmationText={ <> Importing a new game will completely wipe the current data! @@ -542,15 +545,24 @@ export function GameOptionsRoot(props: IProps): React.ReactElement { Make sure to have a backup of your current save file before importing.
The file you are attempting to import seems valid. -
-
- {importData?.exportDate && ( + {(importData?.playerData?.lastSave ?? 0) > 0 && ( <> - The export date of the save file is {importData?.exportDate.toString()}

+ The export date of the save file is{" "} + {new Date(importData?.playerData?.lastSave ?? 0).toLocaleString()} )} + {(importData?.playerData?.totalPlaytime ?? 0) > 0 && ( + <> +
+
+ Total play time of imported game:{" "} + {convertTimeMsToTimeElapsedString(importData?.playerData?.totalPlaytime ?? 0)} + + )} +
+
} /> diff --git a/src/ui/React/ImportSaveRoot.tsx b/src/ui/React/ImportSaveRoot.tsx new file mode 100644 index 000000000..fe7c888c0 --- /dev/null +++ b/src/ui/React/ImportSaveRoot.tsx @@ -0,0 +1,335 @@ +import React, { useEffect, useState } from "react"; + +import { + Paper, + Table, + TableHead, + TableRow, + TableBody, + TableContainer, + TableCell, + Typography, + Tooltip, + Box, + Button, + ButtonGroup, +} from "@mui/material"; + +import makeStyles from "@mui/styles/makeStyles"; +import createStyles from "@mui/styles/createStyles"; +import { Theme } from "@mui/material/styles"; + +import ThumbUpAlt from "@mui/icons-material/ThumbUpAlt"; +import ThumbDownAlt from "@mui/icons-material/ThumbDownAlt"; +import DirectionsRunIcon from "@mui/icons-material/DirectionsRun"; +import ArrowBackIcon from "@mui/icons-material/ArrowBack"; +import WarningIcon from "@mui/icons-material/Warning"; + +import { ImportData, saveObject } from "../../SaveObject"; +import { Settings } from "../../Settings/Settings"; +import { convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFunctions"; +import { numeralWrapper } from "../numeralFormat"; +import { ConfirmationModal } from "./ConfirmationModal"; + + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + padding: theme.spacing(2), + maxWidth: "1000px", + + "& .MuiTable-root": { + "& .MuiTableCell-root": { + borderBottom: `1px solid ${Settings.theme.welllight}`, + }, + + "& .MuiTableHead-root .MuiTableRow-root": { + backgroundColor: Settings.theme.backgroundsecondary, + + "& .MuiTableCell-root": { + color: Settings.theme.primary, + fontWeight: "bold", + }, + }, + + "& .MuiTableBody-root": { + "& .MuiTableRow-root:nth-of-type(odd)": { + backgroundColor: Settings.theme.well, + + "& .MuiTableCell-root": { + color: Settings.theme.primarylight, + }, + }, + "& .MuiTableRow-root:nth-of-type(even)": { + backgroundColor: Settings.theme.backgroundsecondary, + + "& .MuiTableCell-root": { + color: Settings.theme.primarylight, + }, + }, + }, + }, + }, + }), +); + +function ComparisonIcon({ isBetter }: { isBetter: boolean }): JSX.Element { + if (isBetter) { + return ( + + Imported value is larger! + + } + > + + + ); + } else { + return ( + + Imported value is smaller! + + } + > + + + ); + } +} + +export interface ImportSaveProps { + importString: string; + automatic: boolean; + onReturning: () => void; +} + +let initialAutosave = 0; + +export function ImportSaveRoot({ importString, automatic, onReturning }: ImportSaveProps): JSX.Element { + const classes = useStyles(); + const [importData, setImportData] = useState(); + const [currentData, setCurrentData] = useState(); + const [importModalOpen, setImportModalOpen] = useState(false); + + function handleGoBack(): void { + Settings.AutosaveInterval = initialAutosave; + onReturning(); + } + + async function handleImport(): Promise { + await saveObject.importGame(importString, true); + } + + useEffect(() => { + // We want to disable autosave while we're in this mode + initialAutosave = Settings.AutosaveInterval; + Settings.AutosaveInterval = 0; + }, []); + + useEffect(() => { + async function fetchData(): Promise { + const dataBeingImported = await saveObject.getImportDataFromString(importString); + const dataCurrentlyInGame = await saveObject.getImportDataFromString(saveObject.getSaveString(true)); + + setImportData(dataBeingImported); + setCurrentData(dataCurrentlyInGame); + + return Promise.resolve(); + } + if (importString) fetchData(); + }, [importString]); + + if (!importData || !currentData) return <>; + return ( + + + Import Save Comparison + + {automatic && ( + + We've found a NEWER save that you may want to use instead. + + )} + + Your current game's data is on the left and the data that will be imported is on the right. +
+ Please double check everything is fine before proceeding! +
+ +
+ + + + Current Game + Being Imported + + + + + + + Game Identifier + {currentData.playerData?.identifier ?? "n/a"} + {importData.playerData?.identifier ?? "n/a"} + + {importData.playerData?.identifier !== currentData.playerData?.identifier && ( + + + + )} + + + + Playtime + {convertTimeMsToTimeElapsedString(currentData.playerData?.totalPlaytime ?? 0)} + {convertTimeMsToTimeElapsedString(importData.playerData?.totalPlaytime ?? 0)} + + {importData.playerData?.totalPlaytime !== currentData.playerData?.totalPlaytime && ( + (currentData.playerData?.totalPlaytime ?? 0) + } + /> + )} + + + + + Saved On + {new Date(currentData.playerData?.lastSave ?? 0).toLocaleString()} + {new Date(importData.playerData?.lastSave ?? 0).toLocaleString()} + + {importData.playerData?.lastSave !== currentData.playerData?.lastSave && ( + (currentData.playerData?.lastSave ?? 0)} + /> + )} + + + + + Money + {numeralWrapper.formatMoney(currentData.playerData?.money ?? 0)} + {numeralWrapper.formatMoney(importData.playerData?.money ?? 0)} + + {importData.playerData?.money !== currentData.playerData?.money && ( + (currentData.playerData?.money ?? 0)} + /> + )} + + + + + Hacking + {numeralWrapper.formatSkill(currentData.playerData?.hacking ?? 0)} + {numeralWrapper.formatSkill(importData.playerData?.hacking ?? 0)} + + {importData.playerData?.hacking !== currentData.playerData?.hacking && ( + (currentData.playerData?.hacking ?? 0)} + /> + )} + + + + + Augmentations + {currentData.playerData?.augmentations} + {importData.playerData?.augmentations} + + {importData.playerData?.augmentations !== currentData.playerData?.augmentations && ( + (currentData.playerData?.augmentations ?? 0) + } + /> + )} + + + + + Factions + {currentData.playerData?.factions} + {importData.playerData?.factions} + + {importData.playerData?.factions !== currentData.playerData?.factions && ( + (currentData.playerData?.factions ?? 0)} + /> + )} + + + + Achievements + {currentData.playerData?.achievements} + {importData.playerData?.achievements} + + {importData.playerData?.achievements !== currentData.playerData?.achievements && ( + (currentData.playerData?.achievements ?? 0)} + /> + )} + + + + + Source Files + {currentData.playerData?.sourceFiles} + {importData.playerData?.sourceFiles} + + {importData.playerData?.sourceFiles !== currentData.playerData?.sourceFiles && ( + (currentData.playerData?.sourceFiles ?? 0)} + /> + )} + + + + + BitNode + + {currentData.playerData?.bitNode}-{currentData.playerData?.bitNodeLevel} + + + {importData.playerData?.bitNode}-{importData.playerData?.bitNodeLevel} + + + + +
+ + + + + + + + setImportModalOpen(false)} + onConfirm={handleImport} + confirmationText={ + <> + Importing new save game data will completely wipe the current game data! +
+ + } + /> +
+
+ ); +} diff --git a/src/ui/Router.ts b/src/ui/Router.ts index 7ebeb31d8..0b9bf2739 100644 --- a/src/ui/Router.ts +++ b/src/ui/Router.ts @@ -38,6 +38,7 @@ export enum Page { Recovery, Achievements, ThemeBrowser, + ImportSave, } export interface ScriptEditorRouteOptions { @@ -84,4 +85,5 @@ export interface IRouter { toStaneksGift(): void; toAchievements(): void; toThemeBrowser(): void; + toImportSave(base64Save: string, automatic?: boolean): void; } From 855a4e622d3422c1fff2011cdd62fd496395c129 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Tue, 18 Jan 2022 12:21:53 -0500 Subject: [PATCH 75/85] Add Electron preload script to allow communication Adds a channel to communicate between the main process & the renderer process, so that the game can easily ship data back to the main process. It uses the Electron contextBridge & ipcRenderer/ipcMain. Connects those events to various save functions. Adds triggered events on game save, game load, and imported game. Adds way for the Electron app to ask for certain actions or data. Hook handlers to disable automatic restore Allows to temporarily disable restore when the game just did an import or deleted a save game. Prevents looping screens. --- electron/gameWindow.js | 1 + electron/preload.js | 38 +++++++++ src/Electron.tsx | 131 +++++++++++++++++++++++++++++- src/SaveObject.tsx | 19 ++++- src/ui/LoadingScreen.tsx | 2 + src/ui/React/DeleteGameButton.tsx | 6 +- src/ui/React/ImportSaveRoot.tsx | 4 +- 7 files changed, 196 insertions(+), 5 deletions(-) create mode 100644 electron/preload.js diff --git a/electron/gameWindow.js b/electron/gameWindow.js index fb14326d4..b73735509 100644 --- a/electron/gameWindow.js +++ b/electron/gameWindow.js @@ -27,6 +27,7 @@ async function createWindow(killall) { backgroundColor: "#000000", webPreferences: { nativeWindowOpen: true, + preload: path.join(__dirname, 'preload.js'), }, }); diff --git a/electron/preload.js b/electron/preload.js new file mode 100644 index 000000000..707a00009 --- /dev/null +++ b/electron/preload.js @@ -0,0 +1,38 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { ipcRenderer, contextBridge } = require('electron') +const log = require("electron-log"); + +contextBridge.exposeInMainWorld( + "electronBridge", { + send: (channel, data) => { + log.log("Send on channel " + channel) + // whitelist channels + let validChannels = [ + "get-save-data-response", + "get-save-info-response", + "push-game-saved", + "push-game-ready", + "push-import-result", + "push-disable-restore", + ]; + if (validChannels.includes(channel)) { + ipcRenderer.send(channel, data); + } + }, + receive: (channel, func) => { + log.log("Receive on channel " + channel) + let validChannels = [ + "get-save-data-request", + "get-save-info-request", + "push-save-request", + "trigger-save", + "trigger-game-export", + "trigger-scripts-export", + ]; + if (validChannels.includes(channel)) { + // Deliberately strip event as it includes `sender` + ipcRenderer.on(channel, (event, ...args) => func(...args)); + } + } + } +); diff --git a/src/Electron.tsx b/src/Electron.tsx index 9fa98afc5..befa41549 100644 --- a/src/Electron.tsx +++ b/src/Electron.tsx @@ -1,10 +1,18 @@ import { Player } from "./Player"; +import { Router } from "./ui/GameRoot"; +import { isScriptFilename } from "./Script/isScriptFilename"; +import { Script } from "./Script/Script"; import { removeLeadingSlash } from "./Terminal/DirectoryHelpers"; import { Terminal } from "./Terminal"; import { SnackbarEvents } from "./ui/React/Snackbar"; import { IMap, IReturnStatus } from "./types"; import { GetServer } from "./Server/AllServers"; import { resolve } from "cypress/types/bluebird"; +import { ImportPlayerData, SaveData, saveObject } from "./SaveObject"; +import { Settings } from "./Settings/Settings"; +import { exportScripts } from "./Terminal/commands/download"; +import { CONSTANTS } from "./Constants"; +import { hash } from "./hash/hash"; export function initElectron(): void { const userAgent = navigator.userAgent.toLowerCase(); @@ -13,6 +21,8 @@ export function initElectron(): void { (document as any).achievements = []; initWebserver(); initAppNotifier(); + initSaveFunctions(); + initElectronBridge(); } } @@ -109,6 +119,123 @@ function initAppNotifier(): void { }; // Will be consumud by the electron wrapper. - // @ts-ignore - window.appNotifier = funcs; + (window as any).appNotifier = funcs; +} + +function initSaveFunctions(): void { + const funcs = { + triggerSave: (): Promise => saveObject.saveGame(true), + triggerGameExport: (): void => { + try { + saveObject.exportGame(); + } catch (error) { + console.log(error); + SnackbarEvents.emit("Could not export game.", "error", 2000); + } + }, + triggerScriptsExport: (): void => exportScripts("*", Player.getHomeComputer()), + getSaveData: (): { save: string; fileName: string } => { + return { + save: saveObject.getSaveString(Settings.ExcludeRunningScriptsFromSave), + fileName: saveObject.getSaveFileName(), + }; + }, + getSaveInfo: async (base64save: string): Promise => { + try { + const data = await saveObject.getImportDataFromString(base64save); + return data.playerData; + } catch (error) { + console.error(error); + return; + } + }, + pushSaveData: (base64save: string, automatic = false): void => Router.toImportSave(base64save, automatic), + }; + + // Will be consumud by the electron wrapper. + (window as any).appSaveFns = funcs; +} + +function initElectronBridge(): void { + const bridge = (window as any).electronBridge as any; + if (!bridge) return; + + bridge.receive("get-save-data-request", () => { + const data = (window as any).appSaveFns.getSaveData(); + bridge.send("get-save-data-response", data); + }); + bridge.receive("get-save-info-request", async (save: string) => { + const data = await (window as any).appSaveFns.getSaveInfo(save); + bridge.send("get-save-info-response", data); + }); + bridge.receive("push-save-request", ({ save, automatic = false }: { save: string; automatic: boolean }) => { + (window as any).appSaveFns.pushSaveData(save, automatic); + }); + bridge.receive("trigger-save", () => { + return (window as any).appSaveFns + .triggerSave() + .then(() => { + bridge.send("save-completed"); + }) + .catch((error: any) => { + console.log(error); + SnackbarEvents.emit("Could not save game.", "error", 2000); + }); + }); + bridge.receive("trigger-game-export", () => { + try { + (window as any).appSaveFns.triggerGameExport(); + } catch (error) { + console.log(error); + SnackbarEvents.emit("Could not export game.", "error", 2000); + } + }); + bridge.receive("trigger-scripts-export", () => { + try { + (window as any).appSaveFns.triggerScriptsExport(); + } catch (error) { + console.log(error); + SnackbarEvents.emit("Could not export scripts.", "error", 2000); + } + }); +} + +export function pushGameSaved(data: SaveData): void { + const bridge = (window as any).electronBridge as any; + if (!bridge) return; + + bridge.send("push-game-saved", data); +} + +export function pushGameReady(): void { + const bridge = (window as any).electronBridge as any; + if (!bridge) return; + + // Send basic information to the electron wrapper + bridge.send("push-game-ready", { + player: { + identifier: Player.identifier, + playtime: Player.totalPlaytime, + lastSave: Player.lastSave, + }, + game: { + version: CONSTANTS.VersionString, + hash: hash(), + }, + }); +} + +export function pushImportResult(wasImported: boolean): void { + const bridge = (window as any).electronBridge as any; + if (!bridge) return; + + bridge.send("push-import-result", { wasImported }); + pushDisableRestore(); +} + +export function pushDisableRestore(): void { + const bridge = (window as any).electronBridge as any; + if (!bridge) return; + + bridge.send("push-disable-restore", { duration: 1000 * 60 }); } diff --git a/src/SaveObject.tsx b/src/SaveObject.tsx index 83e7f0603..2d15b89dd 100755 --- a/src/SaveObject.tsx +++ b/src/SaveObject.tsx @@ -24,11 +24,19 @@ import { PlayerOwnedAugmentation } from "./Augmentation/PlayerOwnedAugmentation" import { LocationName } from "./Locations/data/LocationNames"; import { SxProps } from "@mui/system"; import { PlayerObject } from "./PersonObjects/Player/PlayerObject"; +import { pushGameSaved } from "./Electron"; /* SaveObject.js * Defines the object used to save/load games */ +export interface SaveData { + playerIdentifier: string; + fileName: string; + save: string; + savedOn: number; +} + export interface ImportData { base64: string; parsed: any; @@ -91,11 +99,20 @@ class BitburnerSaveObject { } saveGame(emitToastEvent = true): Promise { - Player.lastSave = new Date().getTime(); + const savedOn = new Date().getTime(); + Player.lastSave = savedOn; const saveString = this.getSaveString(Settings.ExcludeRunningScriptsFromSave); return new Promise((resolve, reject) => { save(saveString) .then(() => { + const saveData: SaveData = { + playerIdentifier: Player.identifier, + fileName: this.getSaveFileName(), + save: saveString, + savedOn, + }; + pushGameSaved(saveData); + if (emitToastEvent) { SnackbarEvents.emit("Game Saved!", "info", 2000); } diff --git a/src/ui/LoadingScreen.tsx b/src/ui/LoadingScreen.tsx index 2b73fb734..71a2d6bc1 100644 --- a/src/ui/LoadingScreen.tsx +++ b/src/ui/LoadingScreen.tsx @@ -16,6 +16,7 @@ import { GameRoot } from "./GameRoot"; import { CONSTANTS } from "../Constants"; import { ActivateRecoveryMode } from "./React/RecoveryRoot"; import { hash } from "../hash/hash"; +import { pushGameReady } from "../Electron"; const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -56,6 +57,7 @@ export function LoadingScreen(): React.ReactElement { throw err; } + pushGameReady(); setLoaded(true); }) .catch((reason) => { diff --git a/src/ui/React/DeleteGameButton.tsx b/src/ui/React/DeleteGameButton.tsx index a2d2c2d15..6f88a2a3b 100644 --- a/src/ui/React/DeleteGameButton.tsx +++ b/src/ui/React/DeleteGameButton.tsx @@ -5,6 +5,7 @@ import Button from "@mui/material/Button"; import { Tooltip } from '@mui/material'; import DeleteIcon from '@mui/icons-material/Delete'; +import { pushDisableRestore } from '../../Electron'; interface IProps { color?: "primary" | "warning" | "error"; @@ -21,7 +22,10 @@ export function DeleteGameButton({ color = "primary" }: IProps): React.ReactElem onConfirm={() => { setModalOpened(false); deleteGame() - .then(() => setTimeout(() => location.reload(), 1000)) + .then(() => { + pushDisableRestore(); + setTimeout(() => location.reload(), 1000); + }) .catch((r) => console.error(`Could not delete game: ${r}`)); }} open={modalOpened} diff --git a/src/ui/React/ImportSaveRoot.tsx b/src/ui/React/ImportSaveRoot.tsx index fe7c888c0..edf4cfeb7 100644 --- a/src/ui/React/ImportSaveRoot.tsx +++ b/src/ui/React/ImportSaveRoot.tsx @@ -30,7 +30,7 @@ import { Settings } from "../../Settings/Settings"; import { convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFunctions"; import { numeralWrapper } from "../numeralFormat"; import { ConfirmationModal } from "./ConfirmationModal"; - +import { pushImportResult } from "../../Electron"; const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -117,11 +117,13 @@ export function ImportSaveRoot({ importString, automatic, onReturning }: ImportS function handleGoBack(): void { Settings.AutosaveInterval = initialAutosave; + pushImportResult(false); onReturning(); } async function handleImport(): Promise { await saveObject.importGame(importString, true); + pushImportResult(true); } useEffect(() => { From d386528627a285c055243739efb47902c5559f3a Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sun, 23 Jan 2022 13:51:17 -0500 Subject: [PATCH 76/85] Add support for Steam Cloud & local filesystem Adds actions to save the game's data directly in the filesystem and/or into Steam Cloud. Them game will push an event with the save data whenever the game is saved. Electron will use that data to persist it into the User Data folder, until the folder reaches a certain size. Once over the quota, it's going to remove previous saves. Files are grouped according the the player's identifier, ensuring backups off different playthroughs if importing. Optionally, the file will be gzipped before saving to disk, largely reducing file size. Adds a way to save & load from Steam Cloud, currently manually only. When loading a save, it'll trigger the new "Import Data Comparison" page to accept or cancel the import. When saving the game, it will save to Steam Cloud & to filesystem if the options are enabled. Add automatic game restore Detects when the player has access to a newer game that has been saved more recently than the one being loaded. It checks both in the Steam Cloud and on the local filesystem. Adds an option to disable the feature. - Adds a "Save Game" menu item that triggers the game's save. - Adds a "Export Game" menu item that triggers the download file popup. - Adds a "Export Scripts" menu item that triggers the "download *" terminal command. - Adds a "Load Last Save" menu item that loads the latest file modified in the user data folder. - Adds a "Load from Steam Cloud" menu item. - Adds a "Load From File" menu item that popups a file selector & loads the file. - Adds settings for "Saves Compression (.gz)", "Auto-save Backups" & "Auto-save to Steam", toggleable through the menu. - Adds a "Open Game Data","Open Saves", "Open Logs" & "Open User Data" menu items. - Adds a "Quit" menu item. --- electron/achievements.js | 2 +- electron/main.js | 114 +++++++++++- electron/menu.js | 171 ++++++++++++++++- electron/storage.js | 386 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 667 insertions(+), 6 deletions(-) create mode 100644 electron/storage.js diff --git a/electron/achievements.js b/electron/achievements.js index ad2fb8dcc..26bfc7a6c 100644 --- a/electron/achievements.js +++ b/electron/achievements.js @@ -9,7 +9,7 @@ async function enableAchievementsInterval(window) { // This is backward but the game fills in an array called `document.achievements` and we retrieve it from // here. Hey if it works it works. const steamAchievements = greenworks.getAchievementNames(); - log.debug(`All Steam achievements ${JSON.stringify(steamAchievements)}`); + log.silly(`All Steam achievements ${JSON.stringify(steamAchievements)}`); const playerAchieved = (await Promise.all(steamAchievements.map(checkSteamAchievement))).filter(name => !!name); log.debug(`Player has Steam achievements ${JSON.stringify(playerAchieved)}`); const intervalID = setInterval(async () => { diff --git a/electron/main.js b/electron/main.js index b7135c38b..0fb9eae67 100644 --- a/electron/main.js +++ b/electron/main.js @@ -1,12 +1,19 @@ /* eslint-disable no-process-exit */ /* eslint-disable @typescript-eslint/no-var-requires */ -const { app, dialog, BrowserWindow } = require("electron"); +const { app, dialog, BrowserWindow, ipcMain } = require("electron"); const log = require("electron-log"); const greenworks = require("./greenworks"); const api = require("./api-server"); const gameWindow = require("./gameWindow"); const achievements = require("./achievements"); const utils = require("./utils"); +const storage = require("./storage"); +const debounce = require("lodash/debounce"); +const Config = require("electron-config"); +const config = new Config(); + +log.transports.file.level = config.get("file-log-level", "info"); +log.transports.console.level = config.get("console-log-level", "debug"); log.catchErrors(); log.info(`Started app: ${JSON.stringify(process.argv)}`); @@ -30,6 +37,8 @@ try { global.greenworksError = ex.message; } +let isRestoreDisabled = false; + function setStopProcessHandler(app, window, enabled) { const closingWindowHandler = async (e) => { // We need to prevent the default closing event to add custom logic @@ -41,6 +50,18 @@ function setStopProcessHandler(app, window, enabled) { // Shutdown the http server api.disable(); + // Trigger debounced saves right now before closing + try { + await saveToDisk.flush(); + } catch (error) { + log.error(error); + } + try { + await saveToCloud.flush(); + } catch (error) { + log.error(error); + } + // Because of a steam limitation, if the player has launched an external browser, // steam will keep displaying the game as "Running" in their UI as long as the browser is up. // So we'll alert the player to close their browser. @@ -87,13 +108,98 @@ function setStopProcessHandler(app, window, enabled) { process.exit(0); }; + const receivedGameReadyHandler = async (event, arg) => { + if (!window) { + log.warn("Window was undefined in game info handler"); + return; + } + + log.debug("Received game information", arg); + window.gameInfo = { ...arg }; + await storage.prepareSaveFolders(window); + + const restoreNewest = config.get("onload-restore-newest", true); + if (restoreNewest && !isRestoreDisabled) { + try { + await storage.restoreIfNewerExists(window) + } catch (error) { + log.error("Could not restore newer file", error); + } + } + } + + const receivedDisableRestoreHandler = async (event, arg) => { + if (!window) { + log.warn("Window was undefined in disable import handler"); + return; + } + + log.debug(`Disabling auto-restore for ${arg.duration}ms.`); + isRestoreDisabled = true; + setTimeout(() => { + isRestoreDisabled = false; + log.debug("Re-enabling auto-restore"); + }, arg.duration); + } + + const receivedGameSavedHandler = async (event, arg) => { + if (!window) { + log.warn("Window was undefined in game saved handler"); + return; + } + + const { save, ...other } = arg; + log.silly("Received game saved info", {...other, save: `${save.length} bytes`}); + + if (storage.isAutosaveEnabled()) { + saveToDisk(save, arg.fileName); + } + if (storage.isCloudEnabled()) { + const minimumPlaytime = 1000 * 60 * 15; + const playtime = window.gameInfo.player.playtime; + log.silly(window.gameInfo); + if (playtime > minimumPlaytime) { + saveToCloud(save); + } else { + log.debug(`Auto-save to cloud disabled for save game under ${minimumPlaytime}ms (${playtime}ms)`); + } + } + } + + const saveToCloud = debounce(async (save) => { + log.debug("Saving to Steam Cloud ...") + try { + const playerId = window.gameInfo.player.identifier; + await storage.pushGameSaveToSteamCloud(save, playerId); + log.silly("Saved Game to Steam Cloud"); + } catch (error) { + log.error(error); + utils.writeToast(window, "Could not save to Steam Cloud.", "error", 5000); + } + }, config.get("cloud-save-min-time", 1000 * 60 * 15), { leading: true }); + + const saveToDisk = debounce(async (save, fileName) => { + log.debug("Saving to Disk ...") + try { + const file = await storage.saveGameToDisk(window, { save, fileName }); + log.silly(`Saved Game to '${file.replaceAll('\\', '\\\\')}'`); + } catch (error) { + log.error(error); + utils.writeToast(window, "Could not save to disk", "error", 5000); + } + }, config.get("disk-save-min-time", 1000 * 60 * 5), { leading: true }); + if (enabled) { - log.debug('Adding closing handlers'); + log.debug("Adding closing handlers"); + ipcMain.on("push-game-ready", receivedGameReadyHandler); + ipcMain.on("push-game-saved", receivedGameSavedHandler); + ipcMain.on("push-disable-restore", receivedDisableRestoreHandler) window.on("closed", clearWindowHandler); window.on("close", closingWindowHandler) app.on("window-all-closed", stopProcessHandler); } else { - log.debug('Removing closing handlers'); + log.debug("Removing closing handlers"); + ipcMain.removeAllListeners(); window.removeListener("closed", clearWindowHandler); window.removeListener("close", closingWindowHandler); app.removeListener("window-all-closed", stopProcessHandler); @@ -110,7 +216,7 @@ global.app_handlers = { } app.whenReady().then(async () => { - log.info('Application is ready!'); + log.info("Application is ready!"); if (process.argv.includes("--export-save")) { const window = new BrowserWindow({ show: false }); diff --git a/electron/menu.js b/electron/menu.js index e51fd29bf..637f197e5 100644 --- a/electron/menu.js +++ b/electron/menu.js @@ -1,11 +1,169 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const { Menu, clipboard, dialog } = require("electron"); +const { app, Menu, clipboard, dialog, shell } = require("electron"); const log = require("electron-log"); +const Config = require("electron-config"); const api = require("./api-server"); const utils = require("./utils"); +const storage = require("./storage"); +const config = new Config(); function getMenu(window) { return Menu.buildFromTemplate([ + { + label: "File", + submenu: [ + { + label: "Save Game", + click: () => window.webContents.send("trigger-save"), + }, + { + label: "Export Save", + click: () => window.webContents.send("trigger-game-export"), + }, + { + label: "Export Scripts", + click: async () => window.webContents.send("trigger-scripts-export"), + }, + { + type: "separator", + }, + { + label: "Load Last Save", + click: async () => { + try { + const saveGame = await storage.loadLastFromDisk(window); + window.webContents.send("push-save-request", { save: saveGame }); + } catch (error) { + log.error(error); + utils.writeToast(window, "Could not load last save from disk", "error", 5000); + } + } + }, + { + label: "Load From File", + click: async () => { + const defaultPath = await storage.getSaveFolder(window); + const result = await dialog.showOpenDialog(window, { + title: "Load From File", + defaultPath: defaultPath, + buttonLabel: "Load", + filters: [ + { name: "Game Saves", extensions: ["json", "json.gz", "txt"] }, + { name: "All", extensions: ["*"] }, + ], + properties: [ + "openFile", "dontAddToRecent", + ] + }); + if (result.canceled) return; + const file = result.filePaths[0]; + + try { + const saveGame = await storage.loadFileFromDisk(file); + window.webContents.send("push-save-request", { save: saveGame }); + } catch (error) { + log.error(error); + utils.writeToast(window, "Could not load save from disk", "error", 5000); + } + } + }, + { + label: "Load From Steam Cloud", + enabled: storage.isCloudEnabled(), + click: async () => { + try { + const saveGame = await storage.getSteamCloudSaveString(); + await storage.pushSaveGameForImport(window, saveGame, false); + } catch (error) { + log.error(error); + utils.writeToast(window, "Could not load from Steam Cloud", "error", 5000); + } + } + }, + { + type: "separator", + }, + { + label: "Compress Disk Saves (.gz)", + type: "checkbox", + checked: storage.isSaveCompressionEnabled(), + click: (menuItem) => { + storage.setSaveCompressionConfig(menuItem.checked); + utils.writeToast(window, + `${menuItem.checked ? "Enabled" : "Disabled"} Save Compression`, "info", 5000); + refreshMenu(window); + }, + }, + { + label: "Auto-Save to Disk", + type: "checkbox", + checked: storage.isAutosaveEnabled(), + click: (menuItem) => { + storage.setAutosaveConfig(menuItem.checked); + utils.writeToast(window, + `${menuItem.checked ? "Enabled" : "Disabled"} Auto-Save to Disk`, "info", 5000); + refreshMenu(window); + }, + }, + { + label: "Auto-Save to Steam Cloud", + type: "checkbox", + enabled: !global.greenworksError, + checked: storage.isCloudEnabled(), + click: (menuItem) => { + storage.setCloudEnabledConfig(menuItem.checked); + utils.writeToast(window, + `${menuItem.checked ? "Enabled" : "Disabled"} Auto-Save to Steam Cloud`, "info", 5000); + refreshMenu(window); + }, + }, + { + label: "Restore Newest on Load", + type: "checkbox", + checked: config.get("onload-restore-newest", true), + click: (menuItem) => { + config.set("onload-restore-newest", menuItem.checked); + utils.writeToast(window, + `${menuItem.checked ? "Enabled" : "Disabled"} Restore Newest on Load`, "info", 5000); + refreshMenu(window); + }, + }, + { + type: "separator", + }, + { + label: "Open Directory", + submenu: [ + { + label: "Open Game Directory", + click: () => shell.openPath(app.getAppPath()), + }, + { + label: "Open Saves Directory", + click: async () => { + const path = await storage.getSaveFolder(window); + shell.openPath(path); + }, + }, + { + label: "Open Logs Directory", + click: () => shell.openPath(app.getPath("logs")), + }, + { + label: "Open Data Directory", + click: () => shell.openPath(app.getPath("userData")), + }, + ] + }, + { + type: "separator", + }, + { + label: "Quit", + click: () => app.quit(), + }, + ] + }, { label: "Edit", submenu: [ @@ -163,6 +321,17 @@ function getMenu(window) { label: "Activate", click: () => window.webContents.openDevTools(), }, + { + label: "Delete Steam Cloud Data", + enabled: !global.greenworksError, + click: async () => { + try { + await storage.deleteCloudFile(); + } catch (error) { + log.error(error); + } + } + } ], }, ]); diff --git a/electron/storage.js b/electron/storage.js new file mode 100644 index 000000000..076200d3f --- /dev/null +++ b/electron/storage.js @@ -0,0 +1,386 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { app, ipcMain } = require("electron"); +const zlib = require("zlib"); +const path = require("path"); +const fs = require("fs/promises"); +const { promisify } = require("util"); +const gzip = promisify(zlib.gzip); +const gunzip = promisify(zlib.gunzip); + +const greenworks = require("./greenworks"); +const log = require("electron-log"); +const flatten = require("lodash/flatten"); +const Config = require("electron-config"); +const config = new Config(); + +// https://stackoverflow.com/a/69418940 +const dirSize = async (directory) => { + const files = await fs.readdir(directory); + const stats = files.map(file => fs.stat(path.join(directory, file))); + return (await Promise.all(stats)).reduce((accumulator, { size }) => accumulator + size, 0); +} + +const getDirFileStats = async (directory) => { + const files = await fs.readdir(directory); + const stats = files.map((f) => { + const file = path.join(directory, f); + return fs.stat(file).then((stat) => ({ file, stat })); + }); + const data = (await Promise.all(stats)); + return data; +}; + +const getNewestFile = async (directory) => { + const data = await getDirFileStats(directory) + return data.sort((a, b) => b.stat.mtime.getTime() - a.stat.mtime.getTime())[0]; +}; + +const getAllSaves = async (window) => { + const rootDirectory = await getSaveFolder(window, true); + const data = await fs.readdir(rootDirectory, { withFileTypes: true}); + const savesPromises = data.filter((e) => e.isDirectory()). + map((dir) => path.join(rootDirectory, dir.name)). + map((dir) => getDirFileStats(dir)); + const saves = await Promise.all(savesPromises); + const flat = flatten(saves); + return flat; +} + +async function prepareSaveFolders(window) { + const rootFolder = await getSaveFolder(window, true); + const currentFolder = await getSaveFolder(window); + const backupsFolder = path.join(rootFolder, "/_backups") + await prepareFolders(rootFolder, currentFolder, backupsFolder); +} + +async function prepareFolders(...folders) { + for (const folder of folders) { + try { + // Making sure the folder exists + // eslint-disable-next-line no-await-in-loop + await fs.stat(folder); + } catch (error) { + if (error.code === 'ENOENT') { + log.warn(`'${folder}' not found, creating it...`); + // eslint-disable-next-line no-await-in-loop + await fs.mkdir(folder); + } else { + log.error(error); + } + } + } +} + +async function getFolderSizeInBytes(saveFolder) { + try { + return await dirSize(saveFolder); + } catch (error) { + log.error(error); + } +} + +function setAutosaveConfig(value) { + config.set("autosave-enabled", value); +} + +function isAutosaveEnabled() { + return config.get("autosave-enabled", true); +} + +function setSaveCompressionConfig(value) { + config.set("save-compression-enabled", value); +} + +function isSaveCompressionEnabled() { + return config.get("save-compression-enabled", true); +} + +function setCloudEnabledConfig(value) { + config.set("cloud-enabled", value); +} + +async function getSaveFolder(window, root = false) { + if (root) return path.join(app.getPath("userData"), "/saves"); + const identifier = window.gameInfo?.player?.identifier ?? ""; + return path.join(app.getPath("userData"), "/saves", `/${identifier}`); +} + +function isCloudEnabled() { + // If the Steam API could not be initialized on game start, we'll abort this. + if (global.greenworksError) return false; + + // If the user disables it in Steam there's nothing we can do + if (!greenworks.isCloudEnabledForUser()) return false; + + // Let's check the config file to see if it's been overriden + const enabledInConf = config.get("cloud-enabled", true); + if (!enabledInConf) return false; + + const isAppEnabled = greenworks.isCloudEnabled(); + if (!isAppEnabled) greenworks.enableCloud(true); + + return true; +} + +function saveCloudFile(name, content) { + return new Promise((resolve, reject) => { + greenworks.saveTextToFile(name, content, resolve, reject); + }) +} + +function getFirstCloudFile() { + const nbFiles = greenworks.getFileCount(); + if (nbFiles === 0) throw new Error('No files in cloud'); + const file = greenworks.getFileNameAndSize(0); + log.silly(`Found ${nbFiles} files.`) + log.silly(`First File: ${file.name} (${file.size} bytes)`); + return file.name; +} + +function getCloudFile() { + const file = getFirstCloudFile(); + return new Promise((resolve, reject) => { + greenworks.readTextFromFile(file, resolve, reject); + }); +} + +function deleteCloudFile() { + const file = getFirstCloudFile(); + return new Promise((resolve, reject) => { + greenworks.deleteFile(file, resolve, reject); + }); +} + +async function getSteamCloudQuota() { + return new Promise((resolve, reject) => { + greenworks.getCloudQuota(resolve, reject) + }); +} + +async function backupSteamDataToDisk(currentPlayerId) { + const nbFiles = greenworks.getFileCount(); + if (nbFiles === 0) return; + + const file = greenworks.getFileNameAndSize(0); + const previousPlayerId = file.name.replace(".json.gz", ""); + if (previousPlayerId !== currentPlayerId) { + const backupSave = await getSteamCloudSaveString(); + const backupFile = path.join(app.getPath("userData"), "/saves/_backups", `${previousPlayerId}.json.gz`); + const buffer = Buffer.from(backupSave, 'base64').toString('utf8'); + saveContent = await gzip(buffer); + await fs.writeFile(backupFile, saveContent, 'utf8'); + log.debug(`Saved backup game to '${backupFile}`); + } +} + +async function pushGameSaveToSteamCloud(base64save, currentPlayerId) { + if (!isCloudEnabled) return Promise.reject("Steam Cloud is not Enabled"); + + try { + backupSteamDataToDisk(currentPlayerId); + } catch (error) { + log.error(error); + } + + const steamSaveName = `${currentPlayerId}.json.gz`; + + // Let's decode the base64 string so GZIP is more efficient. + const buffer = Buffer.from(base64save, "base64"); + const compressedBuffer = await gzip(buffer); + // We can't use utf8 for some reason, steamworks is unhappy. + const content = compressedBuffer.toString("base64"); + log.debug(`Uncompressed: ${base64save.length} bytes`); + log.debug(`Compressed: ${content.length} bytes`); + log.debug(`Saving to Steam Cloud as ${steamSaveName}`); + + try { + await saveCloudFile(steamSaveName, content); + } catch (error) { + log.error(error); + } +} + +async function getSteamCloudSaveString() { + if (!isCloudEnabled()) return Promise.reject("Steam Cloud is not Enabled"); + log.debug(`Fetching Save in Steam Cloud`); + const cloudString = await getCloudFile(); + const gzippedBase64Buffer = Buffer.from(cloudString, "base64"); + const uncompressedBuffer = await gunzip(gzippedBase64Buffer); + const content = uncompressedBuffer.toString("base64"); + log.debug(`Compressed: ${cloudString.length} bytes`); + log.debug(`Uncompressed: ${content.length} bytes`); + return content; +} + +async function saveGameToDisk(window, saveData) { + const currentFolder = await getSaveFolder(window); + let saveFolderSizeBytes = await getFolderSizeInBytes(currentFolder); + const maxFolderSizeBytes = config.get("autosave-quota", 1e8); // 100Mb per playerIndentifier + const remainingSpaceBytes = maxFolderSizeBytes - saveFolderSizeBytes; + log.debug(`Folder Usage: ${saveFolderSizeBytes} bytes`); + log.debug(`Folder Capacity: ${maxFolderSizeBytes} bytes`); + log.debug(`Remaining: ${remainingSpaceBytes} bytes (${(saveFolderSizeBytes / maxFolderSizeBytes * 100).toFixed(2)}% used)`) + const shouldCompress = isSaveCompressionEnabled(); + const fileName = saveData.fileName; + const file = path.join(currentFolder, fileName + (shouldCompress ? ".gz" : "")); + try { + let saveContent = saveData.save; + if (shouldCompress) { + // Let's decode the base64 string so GZIP is more efficient. + const buffer = Buffer.from(saveContent, 'base64').toString('utf8'); + saveContent = await gzip(buffer); + } + await fs.writeFile(file, saveContent, 'utf8'); + log.debug(`Saved Game to '${file}'`); + log.debug(`Save Size: ${saveContent.length} bytes`); + } catch (error) { + log.error(error); + } + + const fileStats = await getDirFileStats(currentFolder); + const oldestFiles = fileStats + .sort((a, b) => a.stat.mtime.getTime() - b.stat.mtime.getTime()) + .map(f => f.file).filter(f => f !== file); + + while (saveFolderSizeBytes > maxFolderSizeBytes && oldestFiles.length > 0) { + const fileToRemove = oldestFiles.shift(); + log.debug(`Over Quota -> Removing "${fileToRemove}"`); + try { + // eslint-disable-next-line no-await-in-loop + await fs.unlink(fileToRemove); + } catch (error) { + log.error(error); + } + + // eslint-disable-next-line no-await-in-loop + saveFolderSizeBytes = await getFolderSizeInBytes(currentFolder); + log.debug(`Save Folder: ${saveFolderSizeBytes} bytes`); + log.debug(`Remaining: ${maxFolderSizeBytes - saveFolderSizeBytes} bytes (${(saveFolderSizeBytes / maxFolderSizeBytes * 100).toFixed(2)}% used)`) + } + + return file; +} + +async function loadLastFromDisk(window) { + const folder = await getSaveFolder(window); + const last = await getNewestFile(folder); + log.debug(`Last modified file: "${last.file}" (${last.stat.mtime.toLocaleString()})`); + return loadFileFromDisk(last.file); +} + +async function loadFileFromDisk(path) { + const buffer = await fs.readFile(path); + let content; + if (path.endsWith('.gz')) { + const uncompressedBuffer = await gunzip(buffer); + content = uncompressedBuffer.toString('base64'); + log.debug(`Uncompressed file content (new size: ${content.length} bytes)`); + } else { + content = buffer.toString('utf8'); + log.debug(`Loaded file with ${content.length} bytes`) + } + return content; +} + +function getSaveInformation(window, save) { + return new Promise((resolve) => { + ipcMain.once("get-save-info-response", async (event, data) => { + resolve(data); + }); + window.webContents.send("get-save-info-request", save); + }); +} + +function getCurrentSave(window) { + return new Promise((resolve) => { + ipcMain.once('get-save-data-response', (event, data) => { + resolve(data); + }); + window.webContents.send('get-save-data-request'); + }); +} + +function pushSaveGameForImport(window, save, automatic) { + ipcMain.once("push-import-result", async (event, arg) => { + log.debug(`Was save imported? ${arg.wasImported ? "Yes" : "No"}`); + }); + window.webContents.send("push-save-request", { save, automatic }); +} + +async function restoreIfNewerExists(window) { + const currentSave = await getCurrentSave(window); + const currentData = await getSaveInformation(window, currentSave.save); + const steam = {}; + const disk = {}; + + try { + steam.save = await getSteamCloudSaveString(); + steam.data = await getSaveInformation(window, steam.save); + } catch (error) { + log.error("Could not retrieve steam file"); + log.debug(error); + } + + try { + const saves = (await getAllSaves()). + sort((a, b) => b.stat.mtime.getTime() - a.stat.mtime.getTime()); + if (saves.length > 0) { + disk.save = await loadFileFromDisk(saves[0].file); + disk.data = await getSaveInformation(window, disk.save); + } + } catch(error) { + log.error("Could not retrieve disk file"); + log.debug(error); + } + + const lowPlaytime = 1000 * 60 * 15; + let bestMatch; + if (!steam.data && !disk.data) { + log.info("No data to import"); + } else { + // We'll just compare using the lastSave field for now. + if (!steam.data) { + log.debug('Best potential save match: Disk'); + bestMatch = disk; + } else if (!disk.data) { + log.debug('Best potential save match: Steam Cloud'); + bestMatch = steam; + } else if ((steam.data.lastSave >= disk.data.lastSave) + || (steam.data.playtime + lowPlaytime > disk.data.playtime)) { + // We want to prioritze steam data if the playtime is very close + log.debug('Best potential save match: Steam Cloud'); + bestMatch = steam; + } else { + log.debug('Best potential save match: disk'); + bestMatch = disk; + } + } + if (bestMatch) { + if (bestMatch.data.lastSave > currentData.lastSave + 5000) { + // We add a few seconds to the currentSave's lastSave to prioritize it + log.info("Found newer data than the current's save file"); + log.silly(bestMatch.data); + await pushSaveGameForImport(window, bestMatch.save, true); + return true; + } else if(bestMatch.data.playtime > currentData.playtime && currentData.playtime < lowPlaytime) { + log.info("Found older save, but with more playtime, and current less than 15 mins played"); + log.silly(bestMatch.data); + await pushSaveGameForImport(window, bestMatch.save, true); + return true; + } else { + log.debug("Current save data is the freshest"); + return false; + } + } +} + +module.exports = { + getCurrentSave, getSaveInformation, + restoreIfNewerExists, pushSaveGameForImport, + pushGameSaveToSteamCloud, getSteamCloudSaveString, getSteamCloudQuota, deleteCloudFile, + saveGameToDisk, loadLastFromDisk, loadFileFromDisk, + getSaveFolder, prepareSaveFolders, getAllSaves, + isCloudEnabled, setCloudEnabledConfig, + isAutosaveEnabled, setAutosaveConfig, + isSaveCompressionEnabled, setSaveCompressionConfig, + }; From a47eae8b25dab5892641fac331b667107900f4fb Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Sat, 22 Jan 2022 10:53:16 -0500 Subject: [PATCH 77/85] Add function to enable/disable routing Wraps the toX() functions of the Router to add a check to only run the function when it is allowed. The check is used in the import page to prevent user scripts from redirecting away to a crime or something else. --- src/ui/GameRoot.tsx | 31 +++++++++++++++++++++++++++- src/ui/React/ImportSaveRoot.tsx | 36 +++++++++++++++++++++++---------- src/ui/Router.ts | 1 + 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/ui/GameRoot.tsx b/src/ui/GameRoot.tsx index fcca21c98..5dc290211 100644 --- a/src/ui/GameRoot.tsx +++ b/src/ui/GameRoot.tsx @@ -84,6 +84,9 @@ import { ThemeBrowser } from "../Themes/ui/ThemeBrowser"; import { ImportSaveRoot } from "./React/ImportSaveRoot"; import { BypassWrapper } from "./React/BypassWrapper"; +import _wrap from "lodash/wrap"; +import _functions from "lodash/functions"; + const htmlLocation = location; interface IProps { @@ -111,6 +114,9 @@ export let Router: IRouter = { page: () => { throw new Error("Router called before initialization"); }, + allowRouting: () => { + throw new Error("Router called before initialization"); + }, toActiveScripts: () => { throw new Error("Router called before initialization"); }, @@ -238,6 +244,8 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme if (importString === undefined && page === Page.ImportSave) throw new Error("Trying to go to a page without the proper setup"); + const [allowRoutingCalls, setAllowRoutingCalls] = useState(true); + function resetErrorBoundary(): void { setErrorBoundaryKey(errorBoundaryKey + 1); } @@ -259,6 +267,7 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme Router = { page: () => page, + allowRouting: (value: boolean) => setAllowRoutingCalls(value), toActiveScripts: () => setPage(Page.ActiveScripts), toAugmentations: () => setPage(Page.Augmentations), toBladeburner: () => setPage(Page.Bladeburner), @@ -333,6 +342,26 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme }, }; + + useEffect(() => { + // Wrap Router navigate functions to be able to disable the execution + _functions(Router). + filter((fnName) => fnName.startsWith('to')). + forEach((fnName) => { + // @ts-ignore - tslint does not like this, couldn't find a way to make it cooperate + Router[fnName] = _wrap(Router[fnName], (func, ...args) => { + if (!allowRoutingCalls) { + // Let's just log to console. + console.log(`Routing is currently disabled - Attempted router.${fnName}()`); + return; + } + + // Call the function normally + return func(...args); + }); + }); + }); + useEffect(() => { if (page !== Page.Terminal) window.scrollTo(0, 0); }); @@ -539,7 +568,7 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme Router.toTerminal()} + router={Router} /> ); withSidebar = false; diff --git a/src/ui/React/ImportSaveRoot.tsx b/src/ui/React/ImportSaveRoot.tsx index edf4cfeb7..64ca82a6c 100644 --- a/src/ui/React/ImportSaveRoot.tsx +++ b/src/ui/React/ImportSaveRoot.tsx @@ -31,6 +31,7 @@ import { convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFuncti import { numeralWrapper } from "../numeralFormat"; import { ConfirmationModal } from "./ConfirmationModal"; import { pushImportResult } from "../../Electron"; +import { IRouter } from "../Router"; const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -101,28 +102,30 @@ function ComparisonIcon({ isBetter }: { isBetter: boolean }): JSX.Element { } } -export interface ImportSaveProps { +export interface IProps { importString: string; automatic: boolean; - onReturning: () => void; + router: IRouter; } let initialAutosave = 0; -export function ImportSaveRoot({ importString, automatic, onReturning }: ImportSaveProps): JSX.Element { +export function ImportSaveRoot(props: IProps): JSX.Element { const classes = useStyles(); const [importData, setImportData] = useState(); const [currentData, setCurrentData] = useState(); const [importModalOpen, setImportModalOpen] = useState(false); + const [headback, setHeadback] = useState(false); function handleGoBack(): void { Settings.AutosaveInterval = initialAutosave; pushImportResult(false); - onReturning(); + props.router.allowRouting(true); + setHeadback(true) } async function handleImport(): Promise { - await saveObject.importGame(importString, true); + await saveObject.importGame(props.importString, true); pushImportResult(true); } @@ -130,11 +133,16 @@ export function ImportSaveRoot({ importString, automatic, onReturning }: ImportS // We want to disable autosave while we're in this mode initialAutosave = Settings.AutosaveInterval; Settings.AutosaveInterval = 0; + props.router.allowRouting(false); }, []); + useEffect(() => { + if (headback) props.router.toTerminal(); + }, [headback]); + useEffect(() => { async function fetchData(): Promise { - const dataBeingImported = await saveObject.getImportDataFromString(importString); + const dataBeingImported = await saveObject.getImportDataFromString(props.importString); const dataCurrentlyInGame = await saveObject.getImportDataFromString(saveObject.getSaveString(true)); setImportData(dataBeingImported); @@ -142,8 +150,8 @@ export function ImportSaveRoot({ importString, automatic, onReturning }: ImportS return Promise.resolve(); } - if (importString) fetchData(); - }, [importString]); + if (props.importString) fetchData(); + }, [props.importString]); if (!importData || !currentData) return <>; return ( @@ -151,7 +159,7 @@ export function ImportSaveRoot({ importString, automatic, onReturning }: ImportS Import Save Comparison - {automatic && ( + {props.automatic && ( We've found a NEWER save that you may want to use instead. @@ -202,8 +210,14 @@ export function ImportSaveRoot({ importString, automatic, onReturning }: ImportS Saved On - {new Date(currentData.playerData?.lastSave ?? 0).toLocaleString()} - {new Date(importData.playerData?.lastSave ?? 0).toLocaleString()} + + {(currentData.playerData?.lastSave ?? 0) > 0 ? + new Date(currentData.playerData?.lastSave ?? 0).toLocaleString() : 'n/a'} + + + {(importData.playerData?.lastSave ?? 0) > 0 ? + new Date(importData.playerData?.lastSave ?? 0).toLocaleString() : 'n/a'} + {importData.playerData?.lastSave !== currentData.playerData?.lastSave && ( Date: Wed, 26 Jan 2022 05:09:00 -0500 Subject: [PATCH 78/85] Remove intermediary doc input file --- .gitignore | 1 + input/bitburner.api.json | 34502 ------------------------------------- package.json | 2 +- 3 files changed, 2 insertions(+), 34503 deletions(-) delete mode 100644 input/bitburner.api.json diff --git a/.gitignore b/.gitignore index 1ca4801dc..9ec241b30 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ Netburner.txt /test/*.map /test/*.bundle.* /test/*.css +/input/bitburner.api.json .cypress # tmp folder for electron diff --git a/input/bitburner.api.json b/input/bitburner.api.json deleted file mode 100644 index 30922f80e..000000000 --- a/input/bitburner.api.json +++ /dev/null @@ -1,34502 +0,0 @@ -{ - "metadata": { - "toolPackage": "@microsoft/api-extractor", - "toolVersion": "7.18.17", - "schemaVersion": 1004, - "oldestForwardsCompatibleVersion": 1001, - "tsdocConfig": { - "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", - "noStandardTags": true, - "tagDefinitions": [ - { - "tagName": "@alpha", - "syntaxKind": "modifier" - }, - { - "tagName": "@beta", - "syntaxKind": "modifier" - }, - { - "tagName": "@defaultValue", - "syntaxKind": "block" - }, - { - "tagName": "@decorator", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@deprecated", - "syntaxKind": "block" - }, - { - "tagName": "@eventProperty", - "syntaxKind": "modifier" - }, - { - "tagName": "@example", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@experimental", - "syntaxKind": "modifier" - }, - { - "tagName": "@inheritDoc", - "syntaxKind": "inline" - }, - { - "tagName": "@internal", - "syntaxKind": "modifier" - }, - { - "tagName": "@label", - "syntaxKind": "inline" - }, - { - "tagName": "@link", - "syntaxKind": "inline", - "allowMultiple": true - }, - { - "tagName": "@override", - "syntaxKind": "modifier" - }, - { - "tagName": "@packageDocumentation", - "syntaxKind": "modifier" - }, - { - "tagName": "@param", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@privateRemarks", - "syntaxKind": "block" - }, - { - "tagName": "@public", - "syntaxKind": "modifier" - }, - { - "tagName": "@readonly", - "syntaxKind": "modifier" - }, - { - "tagName": "@remarks", - "syntaxKind": "block" - }, - { - "tagName": "@returns", - "syntaxKind": "block" - }, - { - "tagName": "@sealed", - "syntaxKind": "modifier" - }, - { - "tagName": "@see", - "syntaxKind": "block" - }, - { - "tagName": "@throws", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@typeParam", - "syntaxKind": "block", - "allowMultiple": true - }, - { - "tagName": "@virtual", - "syntaxKind": "modifier" - }, - { - "tagName": "@betaDocumentation", - "syntaxKind": "modifier" - }, - { - "tagName": "@internalRemarks", - "syntaxKind": "block" - }, - { - "tagName": "@preapproved", - "syntaxKind": "modifier" - } - ], - "supportForTags": { - "@alpha": true, - "@beta": true, - "@defaultValue": true, - "@decorator": true, - "@deprecated": true, - "@eventProperty": true, - "@example": true, - "@experimental": true, - "@inheritDoc": true, - "@internal": true, - "@label": true, - "@link": true, - "@override": true, - "@packageDocumentation": true, - "@param": true, - "@privateRemarks": true, - "@public": true, - "@readonly": true, - "@remarks": true, - "@returns": true, - "@sealed": true, - "@see": true, - "@throws": true, - "@typeParam": true, - "@virtual": true, - "@betaDocumentation": true, - "@internalRemarks": true, - "@preapproved": true - } - } - }, - "kind": "Package", - "canonicalReference": "bitburner!", - "docComment": "", - "name": "bitburner", - "members": [ - { - "kind": "EntryPoint", - "canonicalReference": "bitburner!", - "name": "", - "members": [ - { - "kind": "Interface", - "canonicalReference": "bitburner!ActiveFragment:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ActiveFragment " - } - ], - "releaseTag": "Public", - "name": "ActiveFragment", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ActiveFragment#avgCharge:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "avgCharge: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "avgCharge", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ActiveFragment#id:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "id: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "id", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ActiveFragment#numCharge:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "numCharge: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "numCharge", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ActiveFragment#rotation:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "rotation: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "rotation", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ActiveFragment#x:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "x: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "x", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ActiveFragment#y:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "y: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "y", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!AugmentationStats:interface", - "docComment": "/**\n * Data representing the internal values of an Augmentation.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface AugmentationStats " - } - ], - "releaseTag": "Public", - "name": "AugmentationStats", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#agility_exp_mult:member", - "docComment": "/**\n * Multipler to agility experience gain rate\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility_exp_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "agility_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#agility_mult:member", - "docComment": "/**\n * Multipler to agility skill\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "agility_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#bladeburner_analysis_mult:member", - "docComment": "/**\n * Multipler to effectiveness in Bladeburner Field Analysis\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "bladeburner_analysis_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "bladeburner_analysis_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#bladeburner_max_stamina_mult:member", - "docComment": "/**\n * Multipler to Bladeburner max stamina\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "bladeburner_max_stamina_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "bladeburner_max_stamina_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#bladeburner_stamina_gain_mult:member", - "docComment": "/**\n * Multipler to Bladeburner stamina gain rate\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "bladeburner_stamina_gain_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "bladeburner_stamina_gain_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#bladeburner_success_chance_mult:member", - "docComment": "/**\n * Multipler to success chance in Bladeburner contracts/operations\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "bladeburner_success_chance_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "bladeburner_success_chance_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#charisma_exp_mult:member", - "docComment": "/**\n * Multipler to charisma experience gain rate\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma_exp_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "charisma_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#charisma_mult:member", - "docComment": "/**\n * Multipler to charisma skill\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "charisma_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#company_rep_mult:member", - "docComment": "/**\n * Multipler to amount of reputation gained when working\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "company_rep_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "company_rep_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#crime_money_mult:member", - "docComment": "/**\n * Multipler to amount of money gained from crimes\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "crime_money_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "crime_money_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#crime_success_mult:member", - "docComment": "/**\n * Multipler to crime success rate\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "crime_success_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "crime_success_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#defense_exp_mult:member", - "docComment": "/**\n * Multipler to defense experience gain rate\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense_exp_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "defense_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#defense_mult:member", - "docComment": "/**\n * Multipler to defense skill\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "defense_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#dexterity_exp_mult:member", - "docComment": "/**\n * Multipler to dexterity experience gain rate\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity_exp_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "dexterity_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#dexterity_mult:member", - "docComment": "/**\n * Multipler to dexterity skill\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "dexterity_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#faction_rep_mult:member", - "docComment": "/**\n * Multipler to amount of reputation gained when working\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "faction_rep_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "faction_rep_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacking_chance_mult:member", - "docComment": "/**\n * Multipler to chance of successfully performing a hack\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_chance_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacking_chance_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacking_exp_mult:member", - "docComment": "/**\n * Multipler to hacking experience gain rate\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_exp_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacking_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacking_grow_mult:member", - "docComment": "/**\n * Multipler to amount of money injected into servers using grow\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_grow_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacking_grow_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacking_money_mult:member", - "docComment": "/**\n * Multipler to amount of money the player gains from hacking\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_money_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacking_money_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacking_mult:member", - "docComment": "/**\n * Multipler to hacking skill\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacking_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacking_speed_mult:member", - "docComment": "/**\n * Multipler to hacking speed\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_speed_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacking_speed_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacknet_node_core_cost_mult:member", - "docComment": "/**\n * Multipler to cost of core for a Hacknet Node\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_core_cost_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacknet_node_core_cost_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacknet_node_level_cost_mult:member", - "docComment": "/**\n * Multipler to cost of leveling up a Hacknet Node\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_level_cost_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacknet_node_level_cost_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacknet_node_money_mult:member", - "docComment": "/**\n * Multipler to amount of money produced by Hacknet Nodes\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_money_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacknet_node_money_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacknet_node_purchase_cost_mult:member", - "docComment": "/**\n * Multipler to cost of purchasing a Hacknet Node\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_purchase_cost_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacknet_node_purchase_cost_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#hacknet_node_ram_cost_mult:member", - "docComment": "/**\n * Multipler to cost of ram for a Hacknet Node\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_ram_cost_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hacknet_node_ram_cost_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#strength_exp_mult:member", - "docComment": "/**\n * Multipler to strength experience gain rate\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength_exp_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "strength_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#strength_mult:member", - "docComment": "/**\n * Multipler to strength skill\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "strength_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentationStats#work_money_mult:member", - "docComment": "/**\n * Multipler to amount of money gained from working\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "work_money_mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "work_money_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!AugmentPair:interface", - "docComment": "/**\n * Return value of {@link Sleeve.getSleevePurchasableAugs | getSleevePurchasableAugs}\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface AugmentPair " - } - ], - "releaseTag": "Public", - "name": "AugmentPair", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentPair#cost:member", - "docComment": "/**\n * augmentation cost\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!AugmentPair#name:member", - "docComment": "/**\n * augmentation name\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!BasicHGWOptions:interface", - "docComment": "/**\n * Options to affect the behavior of {@link NS.hack | hack}, {@link NS.grow | grow}, and {@link NS.weaken | weaken}.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface BasicHGWOptions " - } - ], - "releaseTag": "Public", - "name": "BasicHGWOptions", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BasicHGWOptions#stock:member", - "docComment": "/**\n * Set to true this action will affect the stock market.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "stock?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "stock", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BasicHGWOptions#threads:member", - "docComment": "/**\n * Number of threads to use for this function. Must be less than or equal to the number of threads the script is running with.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "threads?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "threads", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!BitNodeMultipliers:interface", - "docComment": "/**\n * All multipliers affecting the difficulty of the current challenge.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface BitNodeMultipliers " - } - ], - "releaseTag": "Public", - "name": "BitNodeMultipliers", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#AgilityLevelMultiplier:member", - "docComment": "/**\n * Influences how quickly the player's agility level (not exp) scales\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "AgilityLevelMultiplier: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "AgilityLevelMultiplier", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#AugmentationMoneyCost:member", - "docComment": "/**\n * Influences the base cost to purchase an augmentation.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "AugmentationMoneyCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "AugmentationMoneyCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#AugmentationRepCost:member", - "docComment": "/**\n * Influences the base rep the player must have with a faction to purchase an augmentation.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "AugmentationRepCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "AugmentationRepCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#BladeburnerRank:member", - "docComment": "/**\n * Influences how quickly the player can gain rank within Bladeburner.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "BladeburnerRank: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "BladeburnerRank", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#BladeburnerSkillCost:member", - "docComment": "/**\n * Influences the cost of skill levels from Bladeburner.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "BladeburnerSkillCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "BladeburnerSkillCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#CharismaLevelMultiplier:member", - "docComment": "/**\n * Influences how quickly the player's charisma level (not exp) scales\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CharismaLevelMultiplier: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CharismaLevelMultiplier", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ClassGymExpGain:member", - "docComment": "/**\n * Influences the experience gained for each ability when a player completes a class.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ClassGymExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ClassGymExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#CodingContractMoney:member", - "docComment": "/**\n * Influences the amount of money gained from completing Coding Contracts\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CodingContractMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CodingContractMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#CompanyWorkExpGain:member", - "docComment": "/**\n * Influences the experience gained for each ability when the player completes working their job.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CompanyWorkExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CompanyWorkExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#CompanyWorkMoney:member", - "docComment": "/**\n * Influences how much money the player earns when completing working their job.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CompanyWorkMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CompanyWorkMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#CorporationValuation:member", - "docComment": "/**\n * Influences the valuation of corporations created by the player.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CorporationValuation: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CorporationValuation", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#CrimeExpGain:member", - "docComment": "/**\n * Influences the base experience gained for each ability when the player commits a crime.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CrimeExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CrimeExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#CrimeMoney:member", - "docComment": "/**\n * Influences the base money gained when the player commits a crime.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CrimeMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CrimeMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#DaedalusAugsRequirement:member", - "docComment": "/**\n * Influences how many Augmentations you need in order to get invited to the Daedalus faction\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "DaedalusAugsRequirement: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "DaedalusAugsRequirement", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#DefenseLevelMultiplier:member", - "docComment": "/**\n * Influences how quickly the player's defense level (not exp) scales\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "DefenseLevelMultiplier: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "DefenseLevelMultiplier", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#DexterityLevelMultiplier:member", - "docComment": "/**\n * Influences how quickly the player's dexterity level (not exp) scales\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "DexterityLevelMultiplier: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "DexterityLevelMultiplier", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#FactionPassiveRepGain:member", - "docComment": "/**\n * Influences how much rep the player gains in each faction simply by being a member.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "FactionPassiveRepGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "FactionPassiveRepGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#FactionWorkExpGain:member", - "docComment": "/**\n * Influences the experience gained for each ability when the player completes work for a Faction.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "FactionWorkExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "FactionWorkExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#FactionWorkRepGain:member", - "docComment": "/**\n * Influences how much rep the player gains when performing work for a faction.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "FactionWorkRepGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "FactionWorkRepGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#FourSigmaMarketDataApiCost:member", - "docComment": "/**\n * Influences how much it costs to unlock the stock market's 4S Market Data API\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "FourSigmaMarketDataApiCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "FourSigmaMarketDataApiCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#FourSigmaMarketDataCost:member", - "docComment": "/**\n * Influences how much it costs to unlock the stock market's 4S Market Data (NOT API)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "FourSigmaMarketDataCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "FourSigmaMarketDataCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#GangSoftcap:member", - "docComment": "/**\n * Influences the respect gain and money gain of your gang.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "GangSoftcap: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "GangSoftcap", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#HackExpGain:member", - "docComment": "/**\n * Influences the experienced gained when hacking a server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "HackExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "HackExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#HackingLevelMultiplier:member", - "docComment": "/**\n * Influences how quickly the player's hacking level (not experience) scales\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "HackingLevelMultiplier: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "HackingLevelMultiplier", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#HacknetNodeMoney:member", - "docComment": "/**\n * Influences how much money is produced by Hacknet Nodes and the hash rate of Hacknet Servers (unlocked in BitNode-9)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "HacknetNodeMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "HacknetNodeMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#HomeComputerRamCost:member", - "docComment": "/**\n * Influences how much money it costs to upgrade your home computer's RAM\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "HomeComputerRamCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "HomeComputerRamCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#InfiltrationMoney:member", - "docComment": "/**\n * Influences how much money is gained when the player infiltrates a company.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "InfiltrationMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "InfiltrationMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#InfiltrationRep:member", - "docComment": "/**\n * Influences how much rep the player can gain from factions when selling stolen documents and secrets\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "InfiltrationRep: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "InfiltrationRep", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ManualHackMoney:member", - "docComment": "/**\n * Influences how much money can be stolen from a server when the player performs a hack against it through the Terminal.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ManualHackMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ManualHackMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#PurchasedServerCost:member", - "docComment": "/**\n * Influence how much it costs to purchase a server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "PurchasedServerCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "PurchasedServerCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#PurchasedServerLimit:member", - "docComment": "/**\n * Influences the maximum number of purchased servers you can have\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "PurchasedServerLimit: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "PurchasedServerLimit", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#PurchasedServerMaxRam:member", - "docComment": "/**\n * Influences the maximum allowed RAM for a purchased server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "PurchasedServerMaxRam: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "PurchasedServerMaxRam", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#PurchasedServerSoftCap:member", - "docComment": "/**\n * Influences cost of any purchased server at or above 128GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "PurchasedServerSoftCap: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "PurchasedServerSoftCap", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#RepToDonateToFaction:member", - "docComment": "/**\n * Influences the minimum favor the player must have with a faction before they can donate to gain rep.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "RepToDonateToFaction: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "RepToDonateToFaction", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ScriptHackMoney:member", - "docComment": "/**\n * Influences how much the money on a server can be reduced when a script performs a hack against it.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ScriptHackMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ScriptHackMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ScriptHackMoneyGain:member", - "docComment": "/**\n * Influences how much of the money stolen by a scripted hack will be added to the player's money.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ScriptHackMoneyGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ScriptHackMoneyGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ServerGrowthRate:member", - "docComment": "/**\n * Influences the growth percentage per cycle against a server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ServerGrowthRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ServerGrowthRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ServerMaxMoney:member", - "docComment": "/**\n * Influences the maxmimum money that a server can grow to.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ServerMaxMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ServerMaxMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ServerStartingMoney:member", - "docComment": "/**\n * Influences the initial money that a server starts with.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ServerStartingMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ServerStartingMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ServerStartingSecurity:member", - "docComment": "/**\n * Influences the initial security level (hackDifficulty) of a server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ServerStartingSecurity: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ServerStartingSecurity", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#ServerWeakenRate:member", - "docComment": "/**\n * Influences the weaken amount per invocation against a server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ServerWeakenRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ServerWeakenRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#StaneksGiftExtraSize:member", - "docComment": "/**\n * Influences the size of the gift\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "StaneksGiftExtraSize: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "StaneksGiftExtraSize", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#StaneksGiftPowerMultiplier:member", - "docComment": "/**\n * Influences the power of the gift\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "StaneksGiftPowerMultiplier: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "StaneksGiftPowerMultiplier", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#StrengthLevelMultiplier:member", - "docComment": "/**\n * Influences how quickly the player's strength level (not exp) scales\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "StrengthLevelMultiplier: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "StrengthLevelMultiplier", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BitNodeMultipliers#WorldDaemonDifficulty:member", - "docComment": "/**\n * Influences the hacking skill required to backdoor the world daemon.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "WorldDaemonDifficulty: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "WorldDaemonDifficulty", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Bladeburner:interface", - "docComment": "/**\n * Bladeburner API\n *\n * @remarks\n *\n * You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this API.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Bladeburner " - } - ], - "releaseTag": "Public", - "name": "Bladeburner", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getActionAutolevel:member(1)", - "docComment": "/**\n * Get wether an action is set to autolevel.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not this action is currently set to autolevel.\n *\n * Returns false if an invalid action is specified.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @returns True if the action is set to autolevel, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getActionAutolevel(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getActionAutolevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getActionCountRemaining:member(1)", - "docComment": "/**\n * Get action count remaining.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the remaining count of the specified action.\n *\n * Note that this is meant to be used for Contracts and Operations. This function will return ‘Infinity’ for actions such as Training and Field Analysis. This function will return 1 for BlackOps not yet completed regardless of wether the player has the required rank to attempt the mission or not.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @returns Remaining count of the specified action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getActionCountRemaining(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getActionCountRemaining" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getActionCurrentLevel:member(1)", - "docComment": "/**\n * Get the current level of an action.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the current level of this action.\n *\n * Returns -1 if an invalid action is specified.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @returns Current level of the specified action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getActionCurrentLevel(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getActionCurrentLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getActionEstimatedSuccessChance:member(1)", - "docComment": "/**\n * Get estimate success chance of an action.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the estimated success chance for the specified action. This chance is returned as a decimal value, NOT a percentage (e.g. if you have an estimated success chance of 80%, then this function will return 0.80, NOT 80).\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @returns Estimated success chance for the specified action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getActionEstimatedSuccessChance(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "[number, number]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getActionEstimatedSuccessChance" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getActionMaxLevel:member(1)", - "docComment": "/**\n * Get the maximum level of an action.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the maximum level for this action.\n *\n * Returns -1 if an invalid action is specified.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @returns Maximum level of the specified action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getActionMaxLevel(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getActionMaxLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getActionRepGain:member(1)", - "docComment": "/**\n * Get the reputation gain of an action.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the average Bladeburner reputation gain for successfully completing the specified action. Note that this value is an ‘average’ and the real reputation gain may vary slightly from this value.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @param level - Optional action level at which to calculate the gain\n *\n * @returns Average Bladeburner reputation gain for successfully completing the specified action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getActionRepGain(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", level: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "level", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getActionRepGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getActionTime:member(1)", - "docComment": "/**\n * Get the time to complete an action.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the number of seconds it takes to complete the specified action\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @returns Number of milliseconds it takes to complete the specified action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getActionTime(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getActionTime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getBlackOpNames:member(1)", - "docComment": "/**\n * List all black ops.\n *\n * @remarks\n *\n * RAM cost: 0.4 GB\n *\n * Returns an array of strings containing the names of all Bladeburner Black Ops.\n *\n * @returns Array of strings containing the names of all Bladeburner Black Ops.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getBlackOpNames(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getBlackOpNames" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getBlackOpRank:member(1)", - "docComment": "/**\n * Get black op required rank.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Returns the rank required to complete this BlackOp.\n *\n * Returns -1 if an invalid action is specified.\n *\n * @param name - Name of BlackOp. Must be an exact match.\n *\n * @returns Rank required to complete this BlackOp.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getBlackOpRank(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getBlackOpRank" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getBonusTime:member(1)", - "docComment": "/**\n * Get bladeburner bonus time.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns the amount of accumulated “bonus time” (seconds) for the Bladeburner mechanic.\n *\n * “Bonus time” is accumulated when the game is offline or if the game is inactive in the browser.\n *\n * “Bonus time” makes the game progress faster, up to 5x the normal speed. For example, if an action takes 30 seconds to complete but you’ve accumulated over 30 seconds in bonus time, then the action will only take 6 seconds in real life to complete.\n *\n * @returns Amount of accumulated “bonus time” (milliseconds) for the Bladeburner mechanic.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getBonusTime(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getBonusTime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getCity:member(1)", - "docComment": "/**\n * Get current city.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the city that the player is currently in (for Bladeburner).\n *\n * @returns City that the player is currently in (for Bladeburner).\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCity(): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getCity" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getCityChaos:member(1)", - "docComment": "/**\n * Get chaos of a city.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the chaos in the specified city, or -1 if an invalid city was specified.\n *\n * @param cityName - Name of city. Case-sensitive\n *\n * @returns Chaos in the specified city.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCityChaos(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getCityChaos" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getCityCommunities:member(1)", - "docComment": "/**\n * Get number of communities in a city.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the estimated number of Synthoid communities in the specified city, or -1 if an invalid city was specified.\n *\n * @param cityName - Name of city. Case-sensitive\n *\n * @returns Number of Synthoids communities in the specified city.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCityCommunities(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getCityCommunities" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getCityEstimatedPopulation:member(1)", - "docComment": "/**\n * Get estimated population in city.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the estimated number of Synthoids in the specified city, or -1 if an invalid city was specified.\n *\n * @param cityName - Name of city. Case-sensitive\n *\n * @returns Estimated number of Synthoids in the specified city.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCityEstimatedPopulation(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getCityEstimatedPopulation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getContractNames:member(1)", - "docComment": "/**\n * List all contracts.\n *\n * @remarks\n *\n * RAM cost: 0.4 GB\n *\n * Returns an array of strings containing the names of all Bladeburner contracts.\n *\n * @returns Array of strings containing the names of all Bladeburner contracts.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getContractNames(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getContractNames" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getCurrentAction:member(1)", - "docComment": "/**\n * Get current action.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Returns an object that represents the player’s current Bladeburner action. If the player is not performing an action, the function will return an object with the ‘type’ property set to “Idle”.\n *\n * @returns Object that represents the player’s current Bladeburner action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCurrentAction(): " - }, - { - "kind": "Reference", - "text": "BladeburnerCurAction", - "canonicalReference": "bitburner!BladeburnerCurAction:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getCurrentAction" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getGeneralActionNames:member(1)", - "docComment": "/**\n * List all general actions.\n *\n * @remarks\n *\n * RAM cost: 0.4 GB\n *\n * Returns an array of strings containing the names of all general Bladeburner actions.\n *\n * @returns Array of strings containing the names of all general Bladeburner actions.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getGeneralActionNames(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getGeneralActionNames" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getOperationNames:member(1)", - "docComment": "/**\n * List all operations.\n *\n * @remarks\n *\n * RAM cost: 0.4 GB\n *\n * Returns an array of strings containing the names of all Bladeburner operations.\n *\n * @returns Array of strings containing the names of all Bladeburner operations.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getOperationNames(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getOperationNames" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getRank:member(1)", - "docComment": "/**\n * Get player bladeburner rank.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the player’s Bladeburner Rank.\n *\n * @returns Player’s Bladeburner Rank.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getRank(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getRank" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getSkillLevel:member(1)", - "docComment": "/**\n * Get skill level.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * This function returns your level in the specified skill.\n *\n * The function returns -1 if an invalid skill name is passed in.\n *\n * @param skillName - Name of skill. Case-sensitive and must be an exact match\n *\n * @returns Level in the specified skill.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSkillLevel(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getSkillLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getSkillNames:member(1)", - "docComment": "/**\n * List all skills.\n *\n * @remarks\n *\n * RAM cost: 0.4 GB\n *\n * Returns an array of strings containing the names of all general Bladeburner skills.\n *\n * @returns Array of strings containing the names of all general Bladeburner skills.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSkillNames(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getSkillNames" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getSkillPoints:member(1)", - "docComment": "/**\n * Get bladeburner skill points.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the number of Bladeburner skill points you have.\n *\n * @returns Number of Bladeburner skill points you have.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSkillPoints(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getSkillPoints" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getSkillUpgradeCost:member(1)", - "docComment": "/**\n * Get cost to upgrade skill.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * This function returns the number of skill points needed to upgrade the specified skill.\n *\n * The function returns -1 if an invalid skill name is passed in.\n *\n * @param skillName - Name of skill. Case-sensitive and must be an exact match\n *\n * @returns Number of skill points needed to upgrade the specified skill.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSkillUpgradeCost(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getSkillUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getStamina:member(1)", - "docComment": "/**\n * Get bladeburner stamina.\n *\n * @remarks\n *\n * RAM cost: 4 GB Returns an array with two elements: * [Current stamina, Max stamina]\n *\n * @returns Array containing current stamina and max stamina.\n *\n * @example\n * ```ts\n * // NS1:\n * function getStaminaPercentage() {\n * var res = bladeburner.getStamina();\n * return res[0] / res[1];\n * }\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * function getStaminaPercentage() {\n * const [current, max] = ns.bladeburner.getStamina();\n * return current / max;\n * }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getStamina(): " - }, - { - "kind": "Content", - "text": "[number, number]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getStamina" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#getTeamSize:member(1)", - "docComment": "/**\n * Get team size.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the number of Bladeburner team members you have assigned to the specified action.\n *\n * Setting a team is only applicable for Operations and BlackOps. This function will return 0 for other action types.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @returns Number of Bladeburner team members that were assigned to the specified action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getTeamSize(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getTeamSize" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#joinBladeburnerDivision:member(1)", - "docComment": "/**\n * Join the bladeburner division.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Attempts to join the Bladeburner division.\n *\n * Returns true if you successfully join the Bladeburner division, or if you are already a member.\n *\n * Returns false otherwise.\n *\n * @returns True if you successfully join the Bladeburner division, or if you are already a member, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "joinBladeburnerDivision(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "joinBladeburnerDivision" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#joinBladeburnerFaction:member(1)", - "docComment": "/**\n * Join the bladeburner faction.\n *\n * @remarks\n *\n * RAM cost: 4 GB Attempts to join the Bladeburner faction.\n *\n * Returns true if you successfully join the Bladeburner faction, or if you are already a member.\n *\n * Returns false otherwise.\n *\n * @returns True if you successfully join the Bladeburner faction, or if you are already a member, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "joinBladeburnerFaction(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "joinBladeburnerFaction" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#setActionAutolevel:member(1)", - "docComment": "/**\n * Set an action autolevel.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Enable/disable autoleveling for the specified action.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @param autoLevel - Whether or not to autolevel this action\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setActionAutolevel(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", autoLevel: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "autoLevel", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setActionAutolevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#setActionLevel:member(1)", - "docComment": "/**\n * Set the level of an action.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Set the level for the specified action.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @param level - Level to set this action to.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setActionLevel(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", level: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "level", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setActionLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#setTeamSize:member(1)", - "docComment": "/**\n * Set team size.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Set the team size for the specified Bladeburner action.\n *\n * Returns the team size that was set, or -1 if the function failed.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match.\n *\n * @param size - Number of team members to set. Will be converted using Math.round().\n *\n * @returns Number of Bladeburner team members you assigned to the specified action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setTeamSize(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", size: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "size", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setTeamSize" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#startAction:member(1)", - "docComment": "/**\n * Start an action.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Attempts to start the specified Bladeburner action. Returns true if the action was started successfully, and false otherwise.\n *\n * @param type - Type of action.\n *\n * @param name - Name of action. Must be an exact match\n *\n * @returns True if the action was started successfully, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "startAction(type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "startAction" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#stopBladeburnerAction:member(1)", - "docComment": "/**\n * Stop current action.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Stops the current Bladeburner action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "stopBladeburnerAction(): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "stopBladeburnerAction" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#switchCity:member(1)", - "docComment": "/**\n * Travel to another city in bladeburner.\n *\n * @remarks\n *\n * RAM cost: 4 GB Attempts to switch to the specified city (for Bladeburner only).\n *\n * Returns true if successful, and false otherwise\n *\n * @param cityName - Name of city. Case-sensitive\n *\n * @returns true if successful, and false otherwise\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "switchCity(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "switchCity" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Bladeburner#upgradeSkill:member(1)", - "docComment": "/**\n * Upgrade skill.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Attempts to upgrade the specified Bladeburner skill.\n *\n * Returns true if the skill is successfully upgraded, and false otherwise.\n *\n * @param skillName - Name of skill to be upgraded. Case-sensitive and must be an exact match\n *\n * @returns true if the skill is successfully upgraded, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeSkill(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "upgradeSkill" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!BladeburnerCurAction:interface", - "docComment": "/**\n * Bladeburner current action.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface BladeburnerCurAction " - } - ], - "releaseTag": "Public", - "name": "BladeburnerCurAction", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BladeburnerCurAction#name:member", - "docComment": "/**\n * Name of Action\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!BladeburnerCurAction#type:member", - "docComment": "/**\n * Type of Action\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "type", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!CharacterInfo:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface CharacterInfo " - } - ], - "releaseTag": "Public", - "name": "CharacterInfo", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#bitnode:member", - "docComment": "/**\n * Current BitNode number\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "bitnode: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "bitnode", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#city:member", - "docComment": "/**\n * Name of city you are currently in\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "city: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "city", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#company:member", - "docComment": "/**\n * Array of all companies at which you have jobs\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "company: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "company", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#factions:member", - "docComment": "/**\n * Array of factions you are currently a member of\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "factions: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "factions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#hp:member", - "docComment": "/**\n * Current health points\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#jobTitle:member", - "docComment": "/**\n * Array of job positions for all companies you are employed at. Same order as 'jobs'\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "jobTitle: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "jobTitle", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#maxHp:member", - "docComment": "/**\n * Maximum health points\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxHp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "maxHp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#mult:member", - "docComment": "/**\n * Object with many of the player's multipliers from Augmentations/Source Files\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "mult: " - }, - { - "kind": "Reference", - "text": "CharacterMult", - "canonicalReference": "bitburner!CharacterMult:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#timeWorked:member", - "docComment": "/**\n * Timed worked in ms\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "timeWorked: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "timeWorked", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#tor:member", - "docComment": "/**\n * Boolean indicating whether or not you have a tor router\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "tor: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "tor", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#workAgiExpGain:member", - "docComment": "/**\n * Agi experience earned so far from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workAgiExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workAgiExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#workChaExpGain:member", - "docComment": "/**\n * Cha experience earned so far from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workChaExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workChaExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#workDefExpGain:member", - "docComment": "/**\n * Def experience earned so far from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workDefExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workDefExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#workDexExpGain:member", - "docComment": "/**\n * Dex experience earned so far from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workDexExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workDexExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#workHackExpGain:member", - "docComment": "/**\n * Hacking experience earned so far from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workHackExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workHackExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#workMoneyGain:member", - "docComment": "/**\n * Money earned so far from work, if applicable\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workMoneyGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workMoneyGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#workRepGain:member", - "docComment": "/**\n * Reputation earned so far from work, if applicable\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workRepGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workRepGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterInfo#workStrExpGain:member", - "docComment": "/**\n * Str experience earned so far from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workStrExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workStrExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!CharacterMult:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface CharacterMult " - } - ], - "releaseTag": "Public", - "name": "CharacterMult", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#agility:member", - "docComment": "/**\n * Agility stat\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#agilityExp:member", - "docComment": "/**\n * Agility exp\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agilityExp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agilityExp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#companyRep:member", - "docComment": "/**\n * Company reputation\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "companyRep: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "companyRep", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#crimeMoney:member", - "docComment": "/**\n * Money earned from crimes\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "crimeMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "crimeMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#crimeSuccess:member", - "docComment": "/**\n * Crime success chance\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "crimeSuccess: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "crimeSuccess", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#defense:member", - "docComment": "/**\n * Defense stat\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#defenseExp:member", - "docComment": "/**\n * Defense exp\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defenseExp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defenseExp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#dexterity:member", - "docComment": "/**\n * Dexterity stat\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#dexterityExp:member", - "docComment": "/**\n * Dexterity exp\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterityExp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterityExp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#factionRep:member", - "docComment": "/**\n * Faction reputation\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "factionRep: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "factionRep", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#hacking:member", - "docComment": "/**\n * Hacking stat\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#hackingExp:member", - "docComment": "/**\n * Hacking exp\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackingExp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hackingExp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#strength:member", - "docComment": "/**\n * Strength stat\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#strengthExp:member", - "docComment": "/**\n * Strength exp\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strengthExp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strengthExp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CharacterMult#workMoney:member", - "docComment": "/**\n * Money earned from jobs\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!CodingAttemptOptions:interface", - "docComment": "/**\n * Options to affect the behavior of {@link CodingContract} attempt.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface CodingAttemptOptions " - } - ], - "releaseTag": "Public", - "name": "CodingAttemptOptions", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CodingAttemptOptions#returnReward:member", - "docComment": "/**\n * If truthy, then the function will return a string that states the contract’s reward when it is successfully solved.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "returnReward: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "returnReward", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!CodingContract:interface", - "docComment": "/**\n * Coding Contract API\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface CodingContract " - } - ], - "releaseTag": "Public", - "name": "CodingContract", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!CodingContract#attempt:member(1)", - "docComment": "/**\n * Attemps a coding contract.\n *\n * @remarks\n *\n * RAM cost: 10 GB\n *\n * Attempts to solve the Coding Contract with the provided solution.\n *\n * @param answer - Solution for the contract.\n *\n * @param fn - Filename of the contract.\n *\n * @param host - Host of the server containing the contract. Optional. Defaults to current server if not provided.\n *\n * @param opts - Optional parameters for configuring function behavior.\n *\n * @returns True if the solution was correct, false otherwise. If the returnReward option is configured, then the function will instead return a string. If the contract is successfully solved, the string will contain a description of the contract’s reward. Otherwise, it will be an empty string.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "attempt(answer: " - }, - { - "kind": "Content", - "text": "string[] | number" - }, - { - "kind": "Content", - "text": ", filename: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", opts?: " - }, - { - "kind": "Reference", - "text": "CodingAttemptOptions", - "canonicalReference": "bitburner!CodingAttemptOptions:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean | string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "answer", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "filename", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "opts", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "attempt" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!CodingContract#getContractType:member(1)", - "docComment": "/**\n * Get the type of a coding contract.\n *\n * @remarks\n *\n * RAM cost: 5 GB\n *\n * Returns a name describing the type of problem posed by the Coding Contract. (e.g. Find Largest Prime Factor, Total Ways to Sum, etc.)\n *\n * @param fn - Filename of the contract.\n *\n * @param host - Host of the server containing the contract. Optional. Defaults to current server if not provided.\n *\n * @returns Name describing the type of problem posed by the Coding Contract.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getContractType(filename: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "filename", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getContractType" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!CodingContract#getData:member(1)", - "docComment": "/**\n * Get the input data.\n *\n * @remarks\n *\n * RAM cost: 5 GB\n *\n * Get the data associated with the specific Coding Contract. Note that this is not the same as the contract’s description. This is just the data that the contract wants you to act on in order to solve\n *\n * @param filename - Filename of the contract.\n *\n * @param host - Host of the server containing the contract. Optional. Defaults to current server if not provided.\n *\n * @returns The specified contract’s data, data type depends on contract type.;\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getData(filename: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "filename", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getData" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!CodingContract#getDescription:member(1)", - "docComment": "/**\n * Get the description.\n *\n * @remarks\n *\n * RAM cost: 5 GB\n *\n * Get the full text description for the problem posed by the Coding Contract.\n *\n * @param fn - Filename of the contract.\n *\n * @param host - Host of the server containing the contract. Optional. Defaults to current server if not provided.\n *\n * @returns Contract’s text description.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getDescription(filename: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "filename", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getDescription" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!CodingContract#getNumTriesRemaining:member(1)", - "docComment": "/**\n * Get the number of attempt remaining.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Get the number of tries remaining on the contract before it self-destructs.\n *\n * @param fn - Filename of the contract.\n *\n * @param host - Host of the server containing the contract. Optional. Defaults to current server if not provided.\n *\n * @returns How many attempts are remaining for the contract;\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getNumTriesRemaining(filename: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "filename", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getNumTriesRemaining" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Corporation:interface", - "docComment": "/**\n * Corporation API\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Corporation extends " - }, - { - "kind": "Reference", - "text": "WarehouseAPI", - "canonicalReference": "bitburner!WarehouseAPI:interface" - }, - { - "kind": "Content", - "text": ", " - }, - { - "kind": "Reference", - "text": "OfficeAPI", - "canonicalReference": "bitburner!OfficeAPI:interface" - }, - { - "kind": "Content", - "text": " " - } - ], - "releaseTag": "Public", - "name": "Corporation", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#acceptInvestmentOffer:member(1)", - "docComment": "/**\n * Accept investment based on you companies current valuation\n *\n * @remarks\n *\n * Is based on current valuation and will not honer a specific Offer\n *\n * @returns An offer of investment\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "acceptInvestmentOffer(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "acceptInvestmentOffer" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#bribe:member(1)", - "docComment": "/**\n * Bribe a faction\n *\n * @param factionName - Faction name\n *\n * @param amountCash - Amount of money to bribe\n *\n * @param amountShares - Amount of shares to bribe\n *\n * @returns True if successful, false if not\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "bribe(factionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", amountCash: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", amountShares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "factionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "amountCash", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "amountShares", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "bribe" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#createCorporation:member(1)", - "docComment": "/**\n * Create a Corporation\n *\n * @param divisionName - Name of the division\n *\n * @param selfFund - If you should self fund, defaults to true, false will only work on Bitnode 3\n *\n * @returns true if created and false if not\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "createCorporation(corporationName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", selfFund: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "corporationName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "selfFund", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "createCorporation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#expandCity:member(1)", - "docComment": "/**\n * Expand to a new city\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "expandCity(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "expandCity" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#expandIndustry:member(1)", - "docComment": "/**\n * Expand to a new industry\n *\n * @param industryType - Name of the industry\n *\n * @param divisionName - Name of the division\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "expandIndustry(industryType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "industryType", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "expandIndustry" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#getCorporation:member(1)", - "docComment": "/**\n * Get corporation data\n *\n * @returns Corporation data\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCorporation(): " - }, - { - "kind": "Reference", - "text": "CorporationInfo", - "canonicalReference": "bitburner!CorporationInfo:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getCorporation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#getDivision:member(1)", - "docComment": "/**\n * Get division data\n *\n * @param divisionName - Name of the division\n *\n * @returns Division data\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getDivision(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Division", - "canonicalReference": "bitburner!Division:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getDivision" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#getExpandCityCost:member(1)", - "docComment": "/**\n * Gets the cost to expand into a new city\n *\n * @returns cost\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getExpandCityCost(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getExpandCityCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#getExpandIndustryCost:member(1)", - "docComment": "/**\n * Gets the cost to expand into a new industry\n *\n * @param industryName - Name of the industry\n *\n * @returns cost\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getExpandIndustryCost(industryName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "industryName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getExpandIndustryCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#getInvestmentOffer:member(1)", - "docComment": "/**\n * Get an offer for investment based on you companies current valuation\n *\n * @returns An offer of investment\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getInvestmentOffer(): " - }, - { - "kind": "Reference", - "text": "InvestmentOffer", - "canonicalReference": "bitburner!InvestmentOffer:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getInvestmentOffer" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#getUnlockUpgradeCost:member(1)", - "docComment": "/**\n * Gets the cost to unlock a one time unlockable upgrade\n *\n * @param upgradeName - Name of the upgrade\n *\n * @returns cost of the upgrade\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getUnlockUpgradeCost(upgradeName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgradeName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getUnlockUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#getUpgradeLevel:member(1)", - "docComment": "/**\n * Get the level of a levelable upgrade\n *\n * @param upgradeName - Name of the upgrade\n *\n * @returns the level of the upgrade\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getUpgradeLevel(upgradeName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgradeName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getUpgradeLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#getUpgradeLevelCost:member(1)", - "docComment": "/**\n * Gets the cost to unlock the next level of a levelable upgrade\n *\n * @param upgradeName - Name of the upgrade\n *\n * @returns cost of the upgrade\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getUpgradeLevelCost(upgradeName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgradeName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getUpgradeLevelCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#goPublic:member(1)", - "docComment": "/**\n * Go public\n *\n * @param numShares - number of shares you would like to issue for your IPO\n *\n * @returns true if you successfully go public, false if not\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "goPublic(numShares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "numShares", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "goPublic" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#hasUnlockUpgrade:member(1)", - "docComment": "/**\n * Check if you have a one time unlockable upgrade\n *\n * @param upgradeName - Name of the upgrade\n *\n * @returns true if unlocked and false if not\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hasUnlockUpgrade(upgradeName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgradeName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "hasUnlockUpgrade" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#issueDividends:member(1)", - "docComment": "/**\n * Issue dividends\n *\n * @param percent - Percent of profit to issue as dividends.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "issueDividends(percent: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "percent", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "issueDividends" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#levelUpgrade:member(1)", - "docComment": "/**\n * Level an upgrade.\n *\n * @param upgradeName - Name of the upgrade\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "levelUpgrade(upgradeName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgradeName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "levelUpgrade" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Corporation#unlockUpgrade:member(1)", - "docComment": "/**\n * Unlock an upgrade\n *\n * @param upgradeName - Name of the upgrade\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "unlockUpgrade(upgradeName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgradeName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "unlockUpgrade" - } - ], - "extendsTokenRanges": [ - { - "startIndex": 1, - "endIndex": 2 - }, - { - "startIndex": 3, - "endIndex": 5 - } - ] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!CorporationInfo:interface", - "docComment": "/**\n * General info about a corporation\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface CorporationInfo " - } - ], - "releaseTag": "Public", - "name": "CorporationInfo", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#divisions:member", - "docComment": "/**\n * Array of all divisions\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "divisions: " - }, - { - "kind": "Reference", - "text": "Division", - "canonicalReference": "bitburner!Division:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "divisions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#expenses:member", - "docComment": "/**\n * Expenses per second this cycle\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "expenses: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "expenses", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#funds:member", - "docComment": "/**\n * Funds available\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "funds: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "funds", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#issuedShares:member", - "docComment": "/**\n * Amount of shares issued\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "issuedShares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "issuedShares", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#name:member", - "docComment": "/**\n * Name of the corporation\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#numShares:member", - "docComment": "/**\n * Amount of share owned\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "numShares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "numShares", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#public:member", - "docComment": "/**\n * Indicating if the company is public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "public: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "public", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#revenue:member", - "docComment": "/**\n * Revenue per second this cycle\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "revenue: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "revenue", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#sharePrice:member", - "docComment": "/**\n * Price of the shares\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sharePrice: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sharePrice", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#shareSaleCooldown:member", - "docComment": "/**\n * Cooldown until shares can be sold again\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "shareSaleCooldown: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "shareSaleCooldown", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#state:member", - "docComment": "/**\n * State of the corporation. Possible states are START, PURCHASE, PRODUCTION, SALE, EXPORT.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "state: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "state", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CorporationInfo#totalShares:member", - "docComment": "/**\n * Total number of shares issues by this corporation\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "totalShares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "totalShares", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!CrimeStats:interface", - "docComment": "/**\n * Data representing the internal values of a crime.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface CrimeStats " - } - ], - "releaseTag": "Public", - "name": "CrimeStats", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#agility_exp:member", - "docComment": "/**\n * agility exp gained from crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#agility_success_weight:member", - "docComment": "/**\n * agility level impact on success change of the crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility_success_weight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility_success_weight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#charisma_exp:member", - "docComment": "/**\n * charisma exp gained from crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "charisma_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#charisma_success_weight:member", - "docComment": "/**\n * charisma level impact on success change of the crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma_success_weight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "charisma_success_weight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#defense_exp:member", - "docComment": "/**\n * defense exp gained from crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#defense_success_weight:member", - "docComment": "/**\n * defense level impact on success change of the crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense_success_weight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense_success_weight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#dexterity_exp:member", - "docComment": "/**\n * dexterity exp gained from crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#dexterity_success_weight:member", - "docComment": "/**\n * dexterity level impact on success change of the crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity_success_weight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity_success_weight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#difficulty:member", - "docComment": "/**\n * Number representing the difficulty of the crime. Used for success chance calculations\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "difficulty: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "difficulty", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#hacking_exp:member", - "docComment": "/**\n * hacking exp gained from crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#hacking_success_weight:member", - "docComment": "/**\n * hacking level impact on success change of the crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_success_weight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_success_weight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#intelligence_exp:member", - "docComment": "/**\n * intelligence exp gained from crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "intelligence_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "intelligence_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#karma:member", - "docComment": "/**\n * Amount of karma lost for successfully committing this crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "karma: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "karma", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#kills:member", - "docComment": "/**\n * How many people die as a result of this crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "kills: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "kills", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#money:member", - "docComment": "/**\n * How much money is given\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "money: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "money", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#name:member", - "docComment": "/**\n * Name of crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#strength_exp:member", - "docComment": "/**\n * strength exp gained from crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#strength_success_weight:member", - "docComment": "/**\n * strength level impact on success change of the crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength_success_weight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength_success_weight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#time:member", - "docComment": "/**\n * Milliseconds it takes to attempt the crime\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "time: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "time", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!CrimeStats#type:member", - "docComment": "/**\n * Description of the crime activity\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "type", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Division:interface", - "docComment": "/**\n * Corporation division\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface Division " - } - ], - "releaseTag": "Public", - "name": "Division", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#awareness:member", - "docComment": "/**\n * Awareness of the division\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "awareness: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "awareness", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#cities:member", - "docComment": "/**\n * Cities in which this division has expanded\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cities: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cities", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#lastCycleExpenses:member", - "docComment": "/**\n * Expenses last cycle\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "lastCycleExpenses: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "lastCycleExpenses", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#lastCycleRevenue:member", - "docComment": "/**\n * Revenue last cycle\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "lastCycleRevenue: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "lastCycleRevenue", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#name:member", - "docComment": "/**\n * Name of the division\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#popularity:member", - "docComment": "/**\n * Popularity of the division\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "popularity: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "popularity", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#prodMult:member", - "docComment": "/**\n * Production multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "prodMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "prodMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#products:member", - "docComment": "/**\n * Products developed by this division\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "products: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "products", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#research:member", - "docComment": "/**\n * Amount of research in that division\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "research: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "research", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#thisCycleExpenses:member", - "docComment": "/**\n * Expenses this cycle\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "thisCycleExpenses: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "thisCycleExpenses", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#thisCycleRevenue:member", - "docComment": "/**\n * Revenue this cycle\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "thisCycleRevenue: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "thisCycleRevenue", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#type:member", - "docComment": "/**\n * Type of division, like Aggriculture\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "type", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Division#upgrades:member", - "docComment": "/**\n * All research bought\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgrades: " - }, - { - "kind": "Content", - "text": "number[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "upgrades", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Employee:interface", - "docComment": "/**\n * Employee in an office\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface Employee " - } - ], - "releaseTag": "Public", - "name": "Employee", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#cha:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "cha: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cha", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#cre:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "cre: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cre", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#eff:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "eff: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "eff", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#ene:member", - "docComment": "/**\n * Energy\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ene: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ene", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#hap:member", - "docComment": "/**\n * Happiness\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hap: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hap", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#int:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "int: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "int", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#loc:member", - "docComment": "/**\n * City\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "loc: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "loc", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#mor:member", - "docComment": "/**\n * Morale\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "mor: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "mor", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#name:member", - "docComment": "/**\n * Name of the employee\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#pos:member", - "docComment": "/**\n * Current job\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "pos: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "pos", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Employee#sal:member", - "docComment": "/**\n * Salary\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sal: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sal", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!EmployeeJobs:interface", - "docComment": "/**\n * Object representing the number of employee in each job.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface EmployeeJobs " - } - ], - "releaseTag": "Public", - "name": "EmployeeJobs", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EmployeeJobs#\"Research & Development\":member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "\"Research & Development\": " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "\"Research & Development\"", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EmployeeJobs#Business:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Business: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "Business", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EmployeeJobs#Engineer:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Engineer: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "Engineer", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EmployeeJobs#Management:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Management: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "Management", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EmployeeJobs#Operations:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Operations: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "Operations", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EmployeeJobs#Training:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Training: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "Training", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EmployeeJobs#Unassigned:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Unassigned: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "Unassigned", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!EquipmentStats:interface", - "docComment": "/**\n * Object representing data representing a gang member equipment.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface EquipmentStats " - } - ], - "releaseTag": "Public", - "name": "EquipmentStats", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EquipmentStats#agi:member", - "docComment": "/**\n * Agility multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agi?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "agi", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EquipmentStats#cha:member", - "docComment": "/**\n * Charisma multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cha?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "cha", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EquipmentStats#def:member", - "docComment": "/**\n * Defense multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "def?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "def", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EquipmentStats#dex:member", - "docComment": "/**\n * Dexterity multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dex?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "dex", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EquipmentStats#hack:member", - "docComment": "/**\n * Hacking multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hack?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "hack", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!EquipmentStats#str:member", - "docComment": "/**\n * Strength multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "str?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": true, - "releaseTag": "Public", - "name": "str", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "TypeAlias", - "canonicalReference": "bitburner!FilenameOrPID:type", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "type FilenameOrPID = " - }, - { - "kind": "Content", - "text": "number | string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "releaseTag": "Public", - "name": "FilenameOrPID", - "typeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Formulas:interface", - "docComment": "/**\n * Formulas API\n *\n * @remarks\n *\n * You need Formulas.exe on your home computer to use this API.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Formulas " - } - ], - "releaseTag": "Public", - "name": "Formulas", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Formulas#gang:member", - "docComment": "/**\n * Gang formulas\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "gang: " - }, - { - "kind": "Reference", - "text": "GangFormulas", - "canonicalReference": "bitburner!GangFormulas:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "gang", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Formulas#hacking:member", - "docComment": "/**\n * Hacking formulas\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking: " - }, - { - "kind": "Reference", - "text": "HackingFormulas", - "canonicalReference": "bitburner!HackingFormulas:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Formulas#hacknetNodes:member", - "docComment": "/**\n * Hacknet Nodes formulas\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknetNodes: " - }, - { - "kind": "Reference", - "text": "HacknetNodesFormulas", - "canonicalReference": "bitburner!HacknetNodesFormulas:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacknetNodes", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Formulas#hacknetServers:member", - "docComment": "/**\n * Hacknet Servers formulas\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknetServers: " - }, - { - "kind": "Reference", - "text": "HacknetServersFormulas", - "canonicalReference": "bitburner!HacknetServersFormulas:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacknetServers", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Formulas#skills:member", - "docComment": "/**\n * Skills formulas\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "skills: " - }, - { - "kind": "Reference", - "text": "SkillsFormulas", - "canonicalReference": "bitburner!SkillsFormulas:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "skills", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Fragment:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Fragment " - } - ], - "releaseTag": "Public", - "name": "Fragment", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Fragment#id:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "id: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "id", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Fragment#limit:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "limit: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "limit", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Fragment#power:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "power: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "power", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Fragment#shape:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "shape: " - }, - { - "kind": "Content", - "text": "boolean[][]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "shape", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Fragment#type:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "type: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "type", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Gang:interface", - "docComment": "/**\n * Gang API\n *\n * @remarks\n *\n * If you are not in BitNode-2, then you must have Source-File 2 in order to use this API.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Gang " - } - ], - "releaseTag": "Public", - "name": "Gang", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#ascendMember:member(1)", - "docComment": "/**\n * Ascend a gang member.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Ascend the specified Gang Member.\n *\n * @param memberName - Name of member to ascend.\n *\n * @returns Object with info about the ascension results. undefined if ascension did not occur.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ascendMember(memberName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "GangMemberAscension", - "canonicalReference": "bitburner!GangMemberAscension:interface" - }, - { - "kind": "Content", - "text": " | undefined" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "memberName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "ascendMember" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#canRecruitMember:member(1)", - "docComment": "/**\n * Check if you can recruit a new gang member.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Returns boolean indicating whether a member can currently be recruited\n *\n * @returns True if a member can currently be recruited, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "canRecruitMember(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "canRecruitMember" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#createGang:member(1)", - "docComment": "/**\n * Create a gang.\n *\n * @remarks\n *\n * RAM cost: 1GB\n *\n * Create a gang with the specified faction.\n *\n * @returns True if the gang was created, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "createGang(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "createGang" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getAscensionResult:member(1)", - "docComment": "/**\n * Get the result of an ascension without ascending.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Get the result of an ascension without ascending.\n *\n * @param memberName - Name of member.\n *\n * @returns Object with info about the ascension results. undefined if ascension is impossible.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getAscensionResult(memberName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "GangMemberAscension", - "canonicalReference": "bitburner!GangMemberAscension:interface" - }, - { - "kind": "Content", - "text": " | undefined" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "memberName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getAscensionResult" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getBonusTime:member(1)", - "docComment": "/**\n * Get bonus time.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns the amount of accumulated “bonus time” (seconds) for the Gang mechanic.\n *\n * “Bonus time” is accumulated when the game is offline or if the game is inactive in the browser.\n *\n * “Bonus time” makes the game progress faster, up to 10x the normal speed.\n *\n * @returns Bonus time for the Gang mechanic in milliseconds.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getBonusTime(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getBonusTime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getChanceToWinClash:member(1)", - "docComment": "/**\n * Get chance to win clash with other gang.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns the chance you have to win a clash with the specified gang. The chance is returned in decimal form, not percentage\n *\n * @param gangName - Target gang\n *\n * @returns Chance you have to win a clash with the specified gang.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getChanceToWinClash(gangName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "gangName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getChanceToWinClash" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getEquipmentCost:member(1)", - "docComment": "/**\n * Get cost of equipment.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Get the amount of money it takes to purchase a piece of Equipment or an Augmentation. If an invalid Equipment/Augmentation is specified, this function will return Infinity.\n *\n * @param equipName - Name of equipment.\n *\n * @returns Cost to purchase the specified Equipment/Augmentation (number). Infinity for invalid arguments\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getEquipmentCost(equipName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "equipName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getEquipmentCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getEquipmentNames:member(1)", - "docComment": "/**\n * List equipment names.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Get the name of all possible equipment/upgrades you can purchase for your Gang Members. This includes Augmentations.\n *\n * @returns Names of all Equipments/Augmentations.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getEquipmentNames(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getEquipmentNames" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getEquipmentStats:member(1)", - "docComment": "/**\n * Get stats of an equipment.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Get the specified equipment stats.\n *\n * @param equipName - Name of equipment.\n *\n * @returns A dictionary containing the stats of the equipment.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getEquipmentStats(equipName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "EquipmentStats", - "canonicalReference": "bitburner!EquipmentStats:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "equipName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getEquipmentStats" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getEquipmentType:member(1)", - "docComment": "/**\n * Get type of an equipment.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Get the specified equipment type.\n *\n * @param equipName - Name of equipment.\n *\n * @returns Type of the equipment.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getEquipmentType(equipName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "equipName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getEquipmentType" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getGangInformation:member(1)", - "docComment": "/**\n * Get information about your gang.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Get general information about the gang.\n *\n * @returns Object containing general information about the gang.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getGangInformation(): " - }, - { - "kind": "Reference", - "text": "GangGenInfo", - "canonicalReference": "bitburner!GangGenInfo:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getGangInformation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getMemberInformation:member(1)", - "docComment": "/**\n * Get information about a specific gang member.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Get stat and equipment-related information about a Gang Member\n *\n * @param name - Name of member.\n *\n * @returns Object containing stat and equipment-related information about a Gang Member.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getMemberInformation(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "GangMemberInfo", - "canonicalReference": "bitburner!GangMemberInfo:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getMemberInformation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getMemberNames:member(1)", - "docComment": "/**\n * List all gang members.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Get the names of all Gang members\n *\n * @returns Names of all Gang members.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getMemberNames(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getMemberNames" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getOtherGangInformation:member(1)", - "docComment": "/**\n * Get information about the other gangs.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Get territory and power information about all gangs.\n *\n * @returns Object containing territory and power information about all gangs.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getOtherGangInformation(): " - }, - { - "kind": "Reference", - "text": "GangOtherInfo", - "canonicalReference": "bitburner!GangOtherInfo:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getOtherGangInformation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getTaskNames:member(1)", - "docComment": "/**\n * List member task names.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Get the name of all valid tasks that Gang members can be assigned to.\n *\n * @returns All valid tasks that Gang members can be assigned to.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getTaskNames(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getTaskNames" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#getTaskStats:member(1)", - "docComment": "/**\n * Get stats of a task.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Get the stats of a gang task stats. This is typically used to evaluate which action should be executed next.\n *\n * @param name - Name of the task.\n *\n * @returns Detailed stats of a task.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getTaskStats(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "GangTaskStats", - "canonicalReference": "bitburner!GangTaskStats:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getTaskStats" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#inGang:member(1)", - "docComment": "/**\n * Check if you're in a gang.\n *\n * @remarks\n *\n * RAM cost: 1GB\n *\n * @returns True if you're in a gang, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "inGang(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "inGang" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#purchaseEquipment:member(1)", - "docComment": "/**\n * Purchase an equipment for a gang member.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Attempt to purchase the specified Equipment/Augmentation for the specified Gang member.\n *\n * @param memberName - Name of Gang member to purchase the equipment for.\n *\n * @param equipName - Name of Equipment/Augmentation to purchase.\n *\n * @returns True if the equipment was successfully purchased. False otherwise\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseEquipment(memberName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", equipName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "memberName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "equipName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "purchaseEquipment" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#recruitMember:member(1)", - "docComment": "/**\n * Recruit a new gang member.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Attempt to recruit a new gang member.\n *\n * Possible reasons for failure: * Cannot currently recruit a new member * There already exists a member with the specified name\n *\n * @param name - Name of member to recruit.\n *\n * @returns True if the member was successfully recruited, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "recruitMember(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "recruitMember" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#setMemberTask:member(1)", - "docComment": "/**\n * Set gang member to task.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Attempts to assign the specified Gang Member to the specified task. If an invalid task is specified, the Gang member will be set to idle (“Unassigned”).\n *\n * @param memberName - Name of Gang member to assign.\n *\n * @param taskName - Task to assign.\n *\n * @returns True if the Gang Member was successfully assigned to the task, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setMemberTask(memberName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", taskName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "memberName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "taskName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "setMemberTask" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Gang#setTerritoryWarfare:member(1)", - "docComment": "/**\n * Enable/Disable territory warfare.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Set whether or not the gang should engage in territory warfare\n *\n * @param engage - Whether or not to engage in territory warfare.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setTerritoryWarfare(engage: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "engage", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "setTerritoryWarfare" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!GangFormulas:interface", - "docComment": "/**\n * Gang formulas\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface GangFormulas " - } - ], - "releaseTag": "Public", - "name": "GangFormulas", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!GangFormulas#ascensionMultiplier:member(1)", - "docComment": "/**\n * Calculate ascension mult.\n *\n * @param points - Amount of ascension points.\n *\n * @returns The calculated ascension mult.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ascensionMultiplier(points: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "points", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "ascensionMultiplier" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!GangFormulas#ascensionPointsGain:member(1)", - "docComment": "/**\n * Calculate ascension point gain.\n *\n * @param exp - Experience point before ascension.\n *\n * @returns The calculated ascension point gain.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ascensionPointsGain(exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "exp", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "ascensionPointsGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!GangFormulas#moneyGain:member(1)", - "docComment": "/**\n * Calculate money gain per tick.\n *\n * @param gang - Gang info from {@link Gang.getGangInformation | getGangInformation}\n *\n * @param member - Member info from {@link Gang.getMemberInformation | getMemberInformation}\n *\n * @param task - Task info from {@link Gang.getTaskStats | getTaskStats}\n *\n * @returns The calculated money gain.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "moneyGain(gang: " - }, - { - "kind": "Reference", - "text": "GangGenInfo", - "canonicalReference": "bitburner!GangGenInfo:interface" - }, - { - "kind": "Content", - "text": ", member: " - }, - { - "kind": "Reference", - "text": "GangMemberInfo", - "canonicalReference": "bitburner!GangMemberInfo:interface" - }, - { - "kind": "Content", - "text": ", task: " - }, - { - "kind": "Reference", - "text": "GangTaskStats", - "canonicalReference": "bitburner!GangTaskStats:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "gang", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "member", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "task", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "moneyGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!GangFormulas#respectGain:member(1)", - "docComment": "/**\n * Calculate respect gain per tick.\n *\n * @param gang - Gang info from {@link Gang.getGangInformation | getGangInformation}\n *\n * @param member - Gang info from {@link Gang.getMemberInformation | getMemberInformation}\n *\n * @param task - Gang info from {@link Gang.getTaskStats | getTaskStats}\n *\n * @returns The calculated respect gain.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "respectGain(gang: " - }, - { - "kind": "Reference", - "text": "GangGenInfo", - "canonicalReference": "bitburner!GangGenInfo:interface" - }, - { - "kind": "Content", - "text": ", member: " - }, - { - "kind": "Reference", - "text": "GangMemberInfo", - "canonicalReference": "bitburner!GangMemberInfo:interface" - }, - { - "kind": "Content", - "text": ", task: " - }, - { - "kind": "Reference", - "text": "GangTaskStats", - "canonicalReference": "bitburner!GangTaskStats:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "gang", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "member", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "task", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "respectGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!GangFormulas#wantedLevelGain:member(1)", - "docComment": "/**\n * Calculate wanted gain per tick.\n *\n * @param gang - Gang info from {@link Gang.getGangInformation | getGangInformation}\n *\n * @param member - Member info from {@link Gang.getMemberInformation | getMemberInformation}\n *\n * @param task - Task info from {@link Gang.getTaskStats | getTaskStats}\n *\n * @returns The calculated wanted gain.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "wantedLevelGain(gang: " - }, - { - "kind": "Reference", - "text": "GangGenInfo", - "canonicalReference": "bitburner!GangGenInfo:interface" - }, - { - "kind": "Content", - "text": ", member: " - }, - { - "kind": "Reference", - "text": "GangMemberInfo", - "canonicalReference": "bitburner!GangMemberInfo:interface" - }, - { - "kind": "Content", - "text": ", task: " - }, - { - "kind": "Reference", - "text": "GangTaskStats", - "canonicalReference": "bitburner!GangTaskStats:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "gang", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "member", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "task", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "wantedLevelGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!GangFormulas#wantedPenalty:member(1)", - "docComment": "/**\n * Calculate the wanted penalty.\n *\n * @param gang - Gang info from {@link Gang.getGangInformation | getGangInformation}\n *\n * @returns The calculated wanted penalty.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "wantedPenalty(gang: " - }, - { - "kind": "Reference", - "text": "GangGenInfo", - "canonicalReference": "bitburner!GangGenInfo:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "gang", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "wantedPenalty" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!GangGenInfo:interface", - "docComment": "/**\n * Gang general info.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface GangGenInfo " - } - ], - "releaseTag": "Public", - "name": "GangGenInfo", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#faction:member", - "docComment": "/**\n * Name of faction that the gang belongs to (\"Slum Snakes\", etc.)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "faction", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#isHacking:member", - "docComment": "/**\n * Indicating whether or not it's a hacking gang\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "isHacking: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "isHacking", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#moneyGainRate:member", - "docComment": "/**\n * Money earned per game cycle\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "moneyGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "moneyGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#power:member", - "docComment": "/**\n * Gang's power for territory warfare\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "power: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "power", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#respect:member", - "docComment": "/**\n * Gang's respect\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "respect: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "respect", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#respectGainRate:member", - "docComment": "/**\n * Respect earned per game cycle\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "respectGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "respectGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#territory:member", - "docComment": "/**\n * Amount of territory held\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "territory: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "territory", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#territoryClashChance:member", - "docComment": "/**\n * Clash chance\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "territoryClashChance: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "territoryClashChance", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#territoryWarfareEngaged:member", - "docComment": "/**\n * Indicating if territory warfare is enabled\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "territoryWarfareEngaged: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "territoryWarfareEngaged", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#wantedLevel:member", - "docComment": "/**\n * Gang's wanted level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "wantedLevel: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "wantedLevel", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#wantedLevelGainRate:member", - "docComment": "/**\n * Wanted level gained/lost per game cycle (negative for losses)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "wantedLevelGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "wantedLevelGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangGenInfo#wantedPenalty:member", - "docComment": "/**\n * Number indicating the current wanted penalty\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "wantedPenalty: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "wantedPenalty", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!GangMemberAscension:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface GangMemberAscension " - } - ], - "releaseTag": "Public", - "name": "GangMemberAscension", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberAscension#agi:member", - "docComment": "/**\n * Agility multiplier gained from ascending\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agi: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agi", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberAscension#cha:member", - "docComment": "/**\n * Charisma multiplier gained from ascending\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cha: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cha", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberAscension#def:member", - "docComment": "/**\n * Defense multiplier gained from ascending\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "def: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "def", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberAscension#dex:member", - "docComment": "/**\n * Dexterity multiplier gained from ascending\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dex: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dex", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberAscension#hack:member", - "docComment": "/**\n * Hacking multiplier gained from ascending\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hack: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hack", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberAscension#respect:member", - "docComment": "/**\n * Amount of respect lost from ascending\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "respect: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "respect", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberAscension#str:member", - "docComment": "/**\n * Strength multiplier gained from ascending\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "str: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "str", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!GangMemberInfo:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface GangMemberInfo " - } - ], - "releaseTag": "Public", - "name": "GangMemberInfo", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#agi_asc_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agi_asc_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agi_asc_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#agi_asc_points:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agi_asc_points: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agi_asc_points", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#agi_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agi_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agi_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#agi_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agi_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agi_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#agi:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agi: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agi", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#augmentations:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "augmentations: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "augmentations", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#cha_asc_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "cha_asc_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cha_asc_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#cha_asc_points:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "cha_asc_points: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cha_asc_points", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#cha_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "cha_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cha_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#cha_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "cha_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cha_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#cha:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "cha: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cha", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#def_asc_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "def_asc_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "def_asc_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#def_asc_points:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "def_asc_points: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "def_asc_points", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#def_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "def_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "def_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#def_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "def_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "def_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#def:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "def: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "def", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#dex_asc_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dex_asc_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dex_asc_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#dex_asc_points:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dex_asc_points: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dex_asc_points", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#dex_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dex_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dex_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#dex_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dex_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dex_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#dex:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dex: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dex", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#earnedRespect:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "earnedRespect: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "earnedRespect", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#hack_asc_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hack_asc_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hack_asc_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#hack_asc_points:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hack_asc_points: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hack_asc_points", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#hack_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hack_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hack_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#hack_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hack_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hack_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#hack:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hack: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hack", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#moneyGain:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "moneyGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "moneyGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#name:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#respectGain:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "respectGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "respectGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#str_asc_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "str_asc_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "str_asc_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#str_asc_points:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "str_asc_points: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "str_asc_points", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#str_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "str_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "str_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#str_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "str_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "str_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#str:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "str: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "str", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#task:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "task: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "task", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#upgrades:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgrades: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "upgrades", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangMemberInfo#wantedLevelGain:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "wantedLevelGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "wantedLevelGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!GangOtherInfo:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface GangOtherInfo " - } - ], - "releaseTag": "Public", - "name": "GangOtherInfo", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfo#\"Slum Snakes\":member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "\"Slum Snakes\": " - }, - { - "kind": "Reference", - "text": "GangOtherInfoObject", - "canonicalReference": "bitburner!GangOtherInfoObject:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "\"Slum Snakes\"", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfo#\"Speakers for the Dead\":member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "\"Speakers for the Dead\": " - }, - { - "kind": "Reference", - "text": "GangOtherInfoObject", - "canonicalReference": "bitburner!GangOtherInfoObject:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "\"Speakers for the Dead\"", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfo#\"The Black Hand\":member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "\"The Black Hand\": " - }, - { - "kind": "Reference", - "text": "GangOtherInfoObject", - "canonicalReference": "bitburner!GangOtherInfoObject:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "\"The Black Hand\"", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfo#\"The Dark Army\":member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "\"The Dark Army\": " - }, - { - "kind": "Reference", - "text": "GangOtherInfoObject", - "canonicalReference": "bitburner!GangOtherInfoObject:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "\"The Dark Army\"", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfo#\"The Syndicate\":member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "\"The Syndicate\": " - }, - { - "kind": "Reference", - "text": "GangOtherInfoObject", - "canonicalReference": "bitburner!GangOtherInfoObject:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "\"The Syndicate\"", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfo#NiteSec:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "NiteSec: " - }, - { - "kind": "Reference", - "text": "GangOtherInfoObject", - "canonicalReference": "bitburner!GangOtherInfoObject:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "NiteSec", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfo#Tetrads:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Tetrads: " - }, - { - "kind": "Reference", - "text": "GangOtherInfoObject", - "canonicalReference": "bitburner!GangOtherInfoObject:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "Tetrads", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!GangOtherInfoObject:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface GangOtherInfoObject " - } - ], - "releaseTag": "Public", - "name": "GangOtherInfoObject", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfoObject#power:member", - "docComment": "/**\n * Gang power\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "power: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "power", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangOtherInfoObject#territory:member", - "docComment": "/**\n * Gang territory, in decimal form\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "territory: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "territory", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!GangTaskStats:interface", - "docComment": "/**\n * Object representing data representing a gang member task.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface GangTaskStats " - } - ], - "releaseTag": "Public", - "name": "GangTaskStats", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#agiWeight:member", - "docComment": "/**\n * Agility skill impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agiWeight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agiWeight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#baseMoney:member", - "docComment": "/**\n * Base money earned\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "baseMoney: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "baseMoney", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#baseRespect:member", - "docComment": "/**\n * Base respect earned\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "baseRespect: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "baseRespect", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#baseWanted:member", - "docComment": "/**\n * Base wanted earned\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "baseWanted: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "baseWanted", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#chaWeight:member", - "docComment": "/**\n * Charisma skill impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "chaWeight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "chaWeight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#defWeight:member", - "docComment": "/**\n * Defense skill impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defWeight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defWeight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#desc:member", - "docComment": "/**\n * Task Description\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "desc: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "desc", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#dexWeight:member", - "docComment": "/**\n * Dexterity skill impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexWeight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexWeight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#difficulty:member", - "docComment": "/**\n * Number representing the difficulty of the task\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "difficulty: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "difficulty", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#hackWeight:member", - "docComment": "/**\n * Hacking skill impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackWeight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hackWeight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#isCombat:member", - "docComment": "/**\n * Is a task of a combat gang\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "isCombat: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "isCombat", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#isHacking:member", - "docComment": "/**\n * Is a task of a hacking gang\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "isHacking: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "isHacking", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#name:member", - "docComment": "/**\n * Task name\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#strWeight:member", - "docComment": "/**\n * Stength skill impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strWeight: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strWeight", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTaskStats#territory:member", - "docComment": "/**\n * Territory impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "territory: " - }, - { - "kind": "Reference", - "text": "GangTerritory", - "canonicalReference": "bitburner!GangTerritory:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "territory", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!GangTerritory:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface GangTerritory " - } - ], - "releaseTag": "Public", - "name": "GangTerritory", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTerritory#money:member", - "docComment": "/**\n * Money gain impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "money: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "money", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTerritory#respect:member", - "docComment": "/**\n * Respect gain impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "respect: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "respect", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!GangTerritory#wanted:member", - "docComment": "/**\n * Wanted gain impact on task scaling\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "wanted: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "wanted", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!HackingFormulas:interface", - "docComment": "/**\n * Hacking formulas\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface HackingFormulas " - } - ], - "releaseTag": "Public", - "name": "HackingFormulas", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HackingFormulas#growPercent:member(1)", - "docComment": "/**\n * Calculate the percent a server would grow.\n *\n * @param server - Server info from {@link NS.getServer | getServer}\n *\n * @param threads - Amount of thread.\n *\n * @param player - Player info from {@link NS.getPlayer | getPlayer}\n *\n * @param cores - Number of cores on the computer that will execute grow.\n *\n * @returns The calculated grow percent.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "growPercent(server: " - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "bitburner!Server:interface" - }, - { - "kind": "Content", - "text": ", threads: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", player: " - }, - { - "kind": "Reference", - "text": "Player", - "canonicalReference": "bitburner!Player:interface" - }, - { - "kind": "Content", - "text": ", cores?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "server", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "threads", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "player", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "cores", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "growPercent" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HackingFormulas#growTime:member(1)", - "docComment": "/**\n * Calculate grow time.\n *\n * @param server - Server info from {@link NS.getServer | getServer}\n *\n * @param player - Player info from {@link NS.getPlayer | getPlayer}\n *\n * @returns The calculated grow time.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "growTime(server: " - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "bitburner!Server:interface" - }, - { - "kind": "Content", - "text": ", player: " - }, - { - "kind": "Reference", - "text": "Player", - "canonicalReference": "bitburner!Player:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "server", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "player", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "growTime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HackingFormulas#hackChance:member(1)", - "docComment": "/**\n * Calculate hack chance.\n *\n * @param server - Server info from {@link NS.getServer | getServer}\n *\n * @param player - Player info from {@link NS.getPlayer | getPlayer}\n *\n * @returns The calculated hack chance.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackChance(server: " - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "bitburner!Server:interface" - }, - { - "kind": "Content", - "text": ", player: " - }, - { - "kind": "Reference", - "text": "Player", - "canonicalReference": "bitburner!Player:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "server", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "player", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hackChance" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HackingFormulas#hackExp:member(1)", - "docComment": "/**\n * Calculate hack exp for one thread.\n *\n * @remarks\n *\n * Multiply by thread to get total exp\n *\n * @param server - Server info from {@link NS.getServer | getServer}\n *\n * @param player - Player info from {@link NS.getPlayer | getPlayer}\n *\n * @returns The calculated hack exp.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackExp(server: " - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "bitburner!Server:interface" - }, - { - "kind": "Content", - "text": ", player: " - }, - { - "kind": "Reference", - "text": "Player", - "canonicalReference": "bitburner!Player:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "server", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "player", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hackExp" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HackingFormulas#hackPercent:member(1)", - "docComment": "/**\n * Calculate hack percent for one thread.\n *\n * @remarks\n *\n * Multiply by thread to get total percent hacked.\n *\n * @param server - Server info from {@link NS.getServer | getServer}\n *\n * @param player - Player info from {@link NS.getPlayer | getPlayer}\n *\n * @returns The calculated hack percent.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackPercent(server: " - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "bitburner!Server:interface" - }, - { - "kind": "Content", - "text": ", player: " - }, - { - "kind": "Reference", - "text": "Player", - "canonicalReference": "bitburner!Player:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "server", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "player", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hackPercent" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HackingFormulas#hackTime:member(1)", - "docComment": "/**\n * Calculate hack time.\n *\n * @param server - Server info from {@link NS.getServer | getServer}\n *\n * @param player - Player info from {@link NS.getPlayer | getPlayer}\n *\n * @returns The calculated hack time.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackTime(server: " - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "bitburner!Server:interface" - }, - { - "kind": "Content", - "text": ", player: " - }, - { - "kind": "Reference", - "text": "Player", - "canonicalReference": "bitburner!Player:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "server", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "player", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hackTime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HackingFormulas#weakenTime:member(1)", - "docComment": "/**\n * Calculate weaken time.\n *\n * @param server - Server info from {@link NS.getServer | getServer}\n *\n * @param player - Player info from {@link NS.getPlayer | getPlayer}\n *\n * @returns The calculated weaken time.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "weakenTime(server: " - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "bitburner!Server:interface" - }, - { - "kind": "Content", - "text": ", player: " - }, - { - "kind": "Reference", - "text": "Player", - "canonicalReference": "bitburner!Player:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "server", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "player", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "weakenTime" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!HackingMultipliers:interface", - "docComment": "/**\n * Hack related multipliers.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface HackingMultipliers " - } - ], - "releaseTag": "Public", - "name": "HackingMultipliers", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HackingMultipliers#chance:member", - "docComment": "/**\n * Player's hacking chance multiplier.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "chance: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "chance", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HackingMultipliers#growth:member", - "docComment": "/**\n * Player's hacking growth multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "growth: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "growth", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HackingMultipliers#money:member", - "docComment": "/**\n * Player's hacking money stolen multiplier.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "money: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "money", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HackingMultipliers#speed:member", - "docComment": "/**\n * Player's hacking speed multiplier.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "speed: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "speed", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Hacknet:interface", - "docComment": "/**\n * Hacknet API\n *\n * @remarks\n *\n * Not all these functions are immediately available.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Hacknet " - } - ], - "releaseTag": "Public", - "name": "Hacknet", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getCacheUpgradeCost:member(1)", - "docComment": "/**\n * Calculate the cost of upgrading hacknet node cache.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * Returns the cost of upgrading the cache level of the specified Hacknet Server by n.\n *\n * If an invalid value for n is provided, then this function returns 0. If the specified Hacknet Node is already at max level, then Infinity is returned.\n *\n * @param index - Index/Identifier of Hacknet Node.\n *\n * @param n - Number of times to upgrade cache. Must be positive. Rounded to nearest integer.\n *\n * @returns Cost of upgrading the specified Hacknet Node's cache.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCacheUpgradeCost(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getCacheUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getCoreUpgradeCost:member(1)", - "docComment": "/**\n * Calculate the cost of upgrading hacknet node cores.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns the cost of upgrading the number of cores of the specified Hacknet Node by n.\n *\n * If an invalid value for n is provided, then this function returns 0. If the specified Hacknet Node is already at max level, then Infinity is returned.\n *\n * @param index - Index/Identifier of Hacknet Node.\n *\n * @param n - Number of times to upgrade cores. Must be positive. Rounded to nearest integer.\n *\n * @returns Cost of upgrading the specified Hacknet Node's number of cores.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCoreUpgradeCost(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getCoreUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getHashUpgradeLevel:member(1)", - "docComment": "/**\n * Get the level of a hash upgrade.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * @returns Level of the upgrade.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHashUpgradeLevel(upgName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getHashUpgradeLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getHashUpgrades:member(1)", - "docComment": "/**\n * Get the list of hash upgrades\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * Returns the list of all available hash upgrades that can be used in the spendHashes function.\n *\n * @returns An array containing the available upgrades\n *\n * @example\n * ```ts\n * // NS1:\n * var upgrades = hacknet.getHashUpgrades(); // [\"Sell for Money\",\"Sell for Corporation Funds\",...]\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * const upgrades = ns.hacknet.getHashUpgrades(); // [\"Sell for Money\",\"Sell for Corporation Funds\",...]\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHashUpgrades(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getHashUpgrades" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getLevelUpgradeCost:member(1)", - "docComment": "/**\n * Calculate the cost of upgrading hacknet node levels.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns the cost of upgrading the specified Hacknet Node by n levels.\n *\n * If an invalid value for n is provided, then this function returns 0. If the specified Hacknet Node is already at max level, then Infinity is returned.\n *\n * @param index - Index/Identifier of Hacknet Node.\n *\n * @param n - Number of levels to upgrade. Must be positive. Rounded to nearest integer.\n *\n * @returns Cost of upgrading the specified Hacknet Node.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getLevelUpgradeCost(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getLevelUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getNodeStats:member(1)", - "docComment": "/**\n * Get the stats of a hacknet node.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns an object containing a variety of stats about the specified Hacknet Node.\n *\n * Note that for Hacknet Nodes, production refers to the amount of money the node generates. For Hacknet Servers (the upgraded version of Hacknet Nodes), production refers to the amount of hashes the node generates.\n *\n * @param index - Index/Identifier of Hacknet Node\n *\n * @returns Object containing a variety of stats about the specified Hacknet Node.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getNodeStats(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "NodeStats", - "canonicalReference": "bitburner!NodeStats:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getNodeStats" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getPurchaseNodeCost:member(1)", - "docComment": "/**\n * Get the price of the next hacknet node.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns the cost of purchasing a new Hacknet Node.\n *\n * @returns Cost of purchasing a new Hacknet Node.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPurchaseNodeCost(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getPurchaseNodeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getRamUpgradeCost:member(1)", - "docComment": "/**\n * Calculate the cost of upgrading hacknet node RAM.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns the cost of upgrading the RAM of the specified Hacknet Node n times.\n *\n * If an invalid value for n is provided, then this function returns 0. If the specified Hacknet Node is already at max level, then Infinity is returned.\n *\n * @param index - Index/Identifier of Hacknet Node.\n *\n * @param n - Number of times to upgrade RAM. Must be positive. Rounded to nearest integer.\n *\n * @returns Cost of upgrading the specified Hacknet Node's ram.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getRamUpgradeCost(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getRamUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getStudyMult:member(1)", - "docComment": "/**\n * Get the multipler to study.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * @returns Multiplier.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getStudyMult(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getStudyMult" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#getTrainingMult:member(1)", - "docComment": "/**\n * Get the multipler to training.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * @returns Multiplier.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getTrainingMult(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getTrainingMult" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#hashCapacity:member(1)", - "docComment": "/**\n * Get the maximum number of hashes you can store.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * Returns the number of hashes you can store.\n *\n * @returns Number of hashes you can store.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hashCapacity(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "hashCapacity" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#hashCost:member(1)", - "docComment": "/**\n * Get the cost of a hash upgrade.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * Returns the number of hashes required for the specified upgrade. The name of the upgrade must be an exact match.\n *\n * @param upgName - Name of the upgrade of Hacknet Node.\n *\n * @returns Number of hashes required for the specified upgrade.\n *\n * @example\n * ```ts\n * // NS1:\n * var upgradeName = \"Sell for Corporation Funds\";\n * if (hacknet.numHashes() > hacknet.hashCost(upgradeName)) {\n * hacknet.spendHashes(upgName);\n * }\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * const upgradeName = \"Sell for Corporation Funds\";\n * if (ns.hacknet.numHashes() > ns.hacknet.hashCost(upgradeName)) {\n * ns.hacknet.spendHashes(upgName);\n * }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hashCost(upgName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "hashCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#maxNumNodes:member(1)", - "docComment": "/**\n * Get the maximum number of hacknet nodes.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns maximum number of hacknet nodes.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxNumNodes(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "maxNumNodes" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#numHashes:member(1)", - "docComment": "/**\n * Get the total number of hashes stored.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * Returns the number of hashes you have.\n *\n * @returns Number of hashes you have.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "numHashes(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "numHashes" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#numNodes:member(1)", - "docComment": "/**\n * Get the number of hacknet nodes you own.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns the number of Hacknet Nodes you own.\n *\n * @returns number of hacknet nodes.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "numNodes(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "numNodes" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#purchaseNode:member(1)", - "docComment": "/**\n * Purchase a new hacknet node.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Purchases a new Hacknet Node. Returns a number with the index of the Hacknet Node. This index is equivalent to the number at the end of the Hacknet Node’s name (e.g The Hacknet Node named `hacknet-node-4` will have an index of 4).\n *\n * If the player cannot afford to purchase a new Hacknet Node then the function will return -1.\n *\n * @returns The index of the Hacknet Node or if the player cannot afford to purchase a new Hacknet Node the function will return -1.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseNode(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "purchaseNode" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#spendHashes:member(1)", - "docComment": "/**\n * Purchase a hash upgrade.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * Spend the hashes generated by your Hacknet Servers on an upgrade. Returns a boolean value - true if the upgrade is successfully purchased, and false otherwise.\n *\n * The name of the upgrade must be an exact match. The `upgTarget` argument is used for upgrades such as `Reduce Minimum Security`, which applies to a specific server. In this case, the `upgTarget` argument must be the hostname of the server.\n *\n * @param upgName - Name of the upgrade of Hacknet Node.\n *\n * @param upgTarget - Object to which upgrade applies. Required for certain upgrades.\n *\n * @returns True if the upgrade is successfully purchased, and false otherwise..\n *\n * @example\n * ```ts\n * // NS1:\n * hacknet.spendHashes(\"Sell for Corporation Funds\");\n * hacknet.spendHashes(\"Increase Maximum Money\", \"foodnstuff\");\n * ```\n *\n * @example\n * ```ts\n * NS2:\n * ns.hacknet.spendHashes(\"Sell for Corporation Funds\");\n * ns.hacknet.spendHashes(\"Increase Maximum Money\", \"foodnstuff\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "spendHashes(upgName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", upgTarget?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "upgTarget", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "spendHashes" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#upgradeCache:member(1)", - "docComment": "/**\n * Upgrade the cache of a hacknet node.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is only applicable for Hacknet Servers (the upgraded version of a Hacknet Node).\n *\n * Tries to upgrade the specified Hacknet Server’s cache n times.\n *\n * Returns true if it successfully upgrades the Server’s cache n times, or if it purchases some positive amount and the Server reaches its max cache level.\n *\n * Returns false otherwise.\n *\n * @param index - Index/Identifier of Hacknet Node.\n *\n * @param n - Number of cache levels to purchase. Must be positive. Rounded to nearest integer.\n *\n * @returns True if the Hacknet Node’s cores are successfully purchased, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeCache(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "upgradeCache" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#upgradeCore:member(1)", - "docComment": "/**\n * Upgrade the core of a hacknet node.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Tries to purchase n cores for the specified Hacknet Node.\n *\n * Returns true if it successfully purchases n cores for the Hacknet Node or if it purchases some positive amount and the Node reaches its max number of cores.\n *\n * Returns false otherwise.\n *\n * @param index - Index/Identifier of Hacknet Node.\n *\n * @param n - Number of cores to purchase. Must be positive. Rounded to nearest integer.\n *\n * @returns True if the Hacknet Node’s cores are successfully purchased, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeCore(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "upgradeCore" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#upgradeLevel:member(1)", - "docComment": "/**\n * Upgrade the level of a hacknet node.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Tries to upgrade the level of the specified Hacknet Node by n.\n *\n * Returns true if the Hacknet Node’s level is successfully upgraded by n or if it is upgraded by some positive amount and the Node reaches its max level.\n *\n * Returns false otherwise.\n *\n * @param index - Index/Identifier of Hacknet Node.\n *\n * @param n - Number of levels to purchase. Must be positive. Rounded to nearest integer.\n *\n * @returns True if the Hacknet Node’s level is successfully upgraded, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeLevel(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "upgradeLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Hacknet#upgradeRam:member(1)", - "docComment": "/**\n * Upgrade the RAM of a hacknet node.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Tries to upgrade the specified Hacknet Node’s RAM n times. Note that each upgrade doubles the Node’s RAM. So this is equivalent to multiplying the Node’s RAM by 2 n.\n *\n * Returns true if the Hacknet Node’s RAM is successfully upgraded n times or if it is upgraded some positive number of times and the Node reaches it max RAM.\n *\n * Returns false otherwise.\n *\n * @param index - Index/Identifier of Hacknet Node.\n *\n * @param n - Number of times to upgrade RAM. Must be positive. Rounded to nearest integer.\n *\n * @returns True if the Hacknet Node’s ram is successfully upgraded, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeRam(index: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "index", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "upgradeRam" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!HacknetMultipliers:interface", - "docComment": "/**\n * Hacknet related multipliers.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface HacknetMultipliers " - } - ], - "releaseTag": "Public", - "name": "HacknetMultipliers", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetMultipliers#coreCost:member", - "docComment": "/**\n * Player's hacknet core cost multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "coreCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "coreCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetMultipliers#levelCost:member", - "docComment": "/**\n * Player's hacknet level cost multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "levelCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "levelCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetMultipliers#production:member", - "docComment": "/**\n * Player's hacknet production multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "production: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "production", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetMultipliers#purchaseCost:member", - "docComment": "/**\n * Player's hacknet purchase cost multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "purchaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetMultipliers#ramCost:member", - "docComment": "/**\n * Player's hacknet ram cost multiplier\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ramCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ramCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!HacknetNodeConstants:interface", - "docComment": "/**\n * Hacknet node related constants\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface HacknetNodeConstants " - } - ], - "releaseTag": "Public", - "name": "HacknetNodeConstants", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#BaseCost:member", - "docComment": "/**\n * Base cost for a new node\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "BaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "BaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#CoreBaseCost:member", - "docComment": "/**\n * Base cost to increase cores\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CoreBaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CoreBaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#LevelBaseCost:member", - "docComment": "/**\n * Base cost per level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "LevelBaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "LevelBaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#MaxCores:member", - "docComment": "/**\n * Max number of cores\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MaxCores: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MaxCores", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#MaxLevel:member", - "docComment": "/**\n * Max node level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MaxLevel: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MaxLevel", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#MaxRam:member", - "docComment": "/**\n * Max amount of RAM in GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MaxRam: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MaxRam", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#MoneyGainPerLevel:member", - "docComment": "/**\n * Amount of money gained per level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MoneyGainPerLevel: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MoneyGainPerLevel", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#PurchaseNextMult:member", - "docComment": "/**\n * Multiplier to purchase new node\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "PurchaseNextMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "PurchaseNextMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#RamBaseCost:member", - "docComment": "/**\n * Base cost to incrase RAM\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "RamBaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "RamBaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#UpgradeCoreMult:member", - "docComment": "/**\n * Multiplier to increase cores\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "UpgradeCoreMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "UpgradeCoreMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#UpgradeLevelMult:member", - "docComment": "/**\n * Multiplier to increase node level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "UpgradeLevelMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "UpgradeLevelMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetNodeConstants#UpgradeRamMult:member", - "docComment": "/**\n * Multiplier to increase RAM\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "UpgradeRamMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "UpgradeRamMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!HacknetNodesFormulas:interface", - "docComment": "/**\n * Hacknet Node formulas\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface HacknetNodesFormulas " - } - ], - "releaseTag": "Public", - "name": "HacknetNodesFormulas", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetNodesFormulas#constants:member(1)", - "docComment": "/**\n * All constants used by the game.\n *\n * @returns An object with all hacknet node constants used by the game.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "constants(): " - }, - { - "kind": "Reference", - "text": "HacknetNodeConstants", - "canonicalReference": "bitburner!HacknetNodeConstants:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "constants" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetNodesFormulas#coreUpgradeCost:member(1)", - "docComment": "/**\n * Calculate cost of upgrading hacknet node cores.\n *\n * @param startingCore - starting cores\n *\n * @param extraCores - amount of cores to purchase (defaults to 1)\n *\n * @param costMult - player cost reduction (default to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "coreUpgradeCost(startingCore: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", extraCores?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", costMult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "startingCore", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "extraCores", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "costMult", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "coreUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetNodesFormulas#hacknetNodeCost:member(1)", - "docComment": "/**\n * Calculate the cost of a hacknet node.\n *\n * @param n - number of the hacknet node\n *\n * @param mult - player cost reduction (defaults to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknetNodeCost(n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "mult", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hacknetNodeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetNodesFormulas#levelUpgradeCost:member(1)", - "docComment": "/**\n * Calculate cost of upgrading hacknet node level.\n *\n * @param startingLevel - starting level\n *\n * @param extraLevels - amount of level to purchase (defaults to 1)\n *\n * @param costMult - player cost reduction (default to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "levelUpgradeCost(startingLevel: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", extraLevels?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", costMult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "startingLevel", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "extraLevels", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "costMult", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "levelUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetNodesFormulas#moneyGainRate:member(1)", - "docComment": "/**\n * Calculate money gain rate.\n *\n * @param level - level of the node.\n *\n * @param ram - ram of the node.\n *\n * @param cores - cores of the node.\n *\n * @param mult - player production mult (default to 1)\n *\n * @returns The calculated money gain rate.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "moneyGainRate(level: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", ram: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", cores: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "level", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "ram", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "cores", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "mult", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "moneyGainRate" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetNodesFormulas#ramUpgradeCost:member(1)", - "docComment": "/**\n * Calculate cost of upgrading hacknet node ram.\n *\n * @param startingRam - starting ram\n *\n * @param extraLevels - amount of level of ram to purchase (defaults to 1)\n *\n * @param costMult - player cost reduction (default to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ramUpgradeCost(startingRam: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", extraLevels?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", costMult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "startingRam", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "extraLevels", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "costMult", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "ramUpgradeCost" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!HacknetServerConstants:interface", - "docComment": "/**\n * Hacknet server related constants\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface HacknetServerConstants " - } - ], - "releaseTag": "Public", - "name": "HacknetServerConstants", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#BaseCost:member", - "docComment": "/**\n * Base cost for a new server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "BaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "BaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#CacheBaseCost:member", - "docComment": "/**\n * Base cost to upgrade cache\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CacheBaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CacheBaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#CoreBaseCost:member", - "docComment": "/**\n * Base cost to increase cores\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "CoreBaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "CoreBaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#HashesPerLevel:member", - "docComment": "/**\n * Number of hashes calculated per level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "HashesPerLevel: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "HashesPerLevel", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#MaxCache:member", - "docComment": "/**\n * Max cache size\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MaxCache: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MaxCache", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#MaxCores:member", - "docComment": "/**\n * Max number of cores\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MaxCores: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MaxCores", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#MaxLevel:member", - "docComment": "/**\n * Max level for a server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MaxLevel: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MaxLevel", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#MaxRam:member", - "docComment": "/**\n * Max amount of RAM in GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MaxRam: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MaxRam", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#MaxServers:member", - "docComment": "/**\n * Max number of servers\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "MaxServers: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "MaxServers", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#PurchaseMult:member", - "docComment": "/**\n * Multiplier to purchase a new server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "PurchaseMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "PurchaseMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#RamBaseCost:member", - "docComment": "/**\n * Base cost to increase RAM\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "RamBaseCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "RamBaseCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#UpgradeCacheMult:member", - "docComment": "/**\n * Multiplier to upgrade cache\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "UpgradeCacheMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "UpgradeCacheMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#UpgradeCoreMult:member", - "docComment": "/**\n * Multiplier to increase cores\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "UpgradeCoreMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "UpgradeCoreMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#UpgradeLevelMult:member", - "docComment": "/**\n * Multiplier to increase server level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "UpgradeLevelMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "UpgradeLevelMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!HacknetServerConstants#UpgradeRamMult:member", - "docComment": "/**\n * Multiplier to increase RAM\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "UpgradeRamMult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "UpgradeRamMult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!HacknetServersFormulas:interface", - "docComment": "/**\n * Hacknet Server formulas\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface HacknetServersFormulas " - } - ], - "releaseTag": "Public", - "name": "HacknetServersFormulas", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetServersFormulas#cacheUpgradeCost:member(1)", - "docComment": "/**\n * Calculate cost of upgrading hacknet server cache.\n *\n * @param startingCache - starting cache level\n *\n * @param extraCache - amount of levels of cache to purchase (defaults to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cacheUpgradeCost(startingCache: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", extraCache?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "startingCache", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "extraCache", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "cacheUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetServersFormulas#constants:member(1)", - "docComment": "/**\n * All constants used by the game.\n *\n * @returns An object with all hacknet server constants used by the game.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "constants(): " - }, - { - "kind": "Reference", - "text": "HacknetServerConstants", - "canonicalReference": "bitburner!HacknetServerConstants:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "constants" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetServersFormulas#coreUpgradeCost:member(1)", - "docComment": "/**\n * Calculate cost of upgrading hacknet server cores.\n *\n * @param startingCore - starting cores\n *\n * @param extraCores - amount of cores to purchase (defaults to 1)\n *\n * @param costMult - player cost reduction (default to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "coreUpgradeCost(startingCore: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", extraCores?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", costMult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "startingCore", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "extraCores", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "costMult", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "coreUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetServersFormulas#hacknetServerCost:member(1)", - "docComment": "/**\n * Calculate the cost of a hacknet server.\n *\n * @param n - number of the hacknet server\n *\n * @param mult - player cost reduction (defaults to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknetServerCost(n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "mult", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hacknetServerCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetServersFormulas#hashGainRate:member(1)", - "docComment": "/**\n * Calculate hash gain rate.\n *\n * @param level - level of the server.\n *\n * @param ramUsed - ramUsed of the server.\n *\n * @param maxRam - maxRam of the server.\n *\n * @param cores - cores of the server.\n *\n * @param mult - player production mult (default to 1)\n *\n * @returns The calculated hash gain rate.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hashGainRate(level: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", ramUsed: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", maxRam: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", cores: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", mult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "level", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "ramUsed", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "maxRam", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "cores", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "parameterName": "mult", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - } - } - ], - "name": "hashGainRate" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetServersFormulas#hashUpgradeCost:member(1)", - "docComment": "/**\n * Calculate hash cost of an upgrade.\n *\n * @param upgName - name of the upgrade\n *\n * @param level - level of the upgrade\n *\n * @returns The calculated hash cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hashUpgradeCost(upgName: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", level: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "upgName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "level", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hashUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetServersFormulas#levelUpgradeCost:member(1)", - "docComment": "/**\n * Calculate cost of upgrading hacknet server level.\n *\n * @param startingLevel - starting level\n *\n * @param extraLevels - amount of level to purchase (defaults to 1)\n *\n * @param costMult - player cost reduction (default to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "levelUpgradeCost(startingLevel: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", extraLevels?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", costMult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "startingLevel", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "extraLevels", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "costMult", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "levelUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!HacknetServersFormulas#ramUpgradeCost:member(1)", - "docComment": "/**\n * Calculate cost of upgrading hacknet server ram.\n *\n * @param startingRam - starting ram\n *\n * @param extraLevels - amount of level of ram to purchase (defaults to 1)\n *\n * @param costMult - player cost reduction (default to 1)\n *\n * @returns The calculated cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ramUpgradeCost(startingRam: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", extraLevels?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", costMult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "startingRam", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "extraLevels", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "costMult", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "ramUpgradeCost" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!InvestmentOffer:interface", - "docComment": "/**\n * Corporation investment offer\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface InvestmentOffer " - } - ], - "releaseTag": "Public", - "name": "InvestmentOffer", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!InvestmentOffer#funds:member", - "docComment": "/**\n * Amount of funds you will get from this investment\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "funds: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "funds", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!InvestmentOffer#round:member", - "docComment": "/**\n * Current round of funding (max 4)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "round: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "round", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!InvestmentOffer#shares:member", - "docComment": "/**\n * Amount of share you will give in exchange for this investment\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "shares", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Material:interface", - "docComment": "/**\n * Material in a warehouse\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface Material " - } - ], - "releaseTag": "Public", - "name": "Material", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Material#name:member", - "docComment": "/**\n * Name of the material\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Material#prod:member", - "docComment": "/**\n * Amount of material produced\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "prod: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "prod", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Material#qlt:member", - "docComment": "/**\n * Quality of the material\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "qlt: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "qlt", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Material#qty:member", - "docComment": "/**\n * Amount of material\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "qty: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "qty", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Material#sell:member", - "docComment": "/**\n * Amount of material sold\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sell: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sell", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!NetscriptPort:interface", - "docComment": "/**\n * Object representing a port. A port is a serialized queue.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface NetscriptPort " - } - ], - "releaseTag": "Public", - "name": "NetscriptPort", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NetscriptPort#clear:member(1)", - "docComment": "/**\n * Empties all data from the port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "clear(): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "clear" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NetscriptPort#empty:member(1)", - "docComment": "/**\n * Check if the port is empty.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns true if the port is empty, otherwise false\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "empty(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "empty" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NetscriptPort#full:member(1)", - "docComment": "/**\n * Check if the port is full.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns true if the port is full, otherwise false\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "full(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "full" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NetscriptPort#peek:member(1)", - "docComment": "/**\n * Retrieve the first element from the port without removing it.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is used to peek at the data from a port. It returns the first element in the specified port without removing that element. If the port is empty, the string “NULL PORT DATA” will be returned.\n *\n * @returns the data read\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "peek(): " - }, - { - "kind": "Content", - "text": "string | number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "peek" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NetscriptPort#read:member(1)", - "docComment": "/**\n * Shift an element out of the port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function will remove the first element from the port and return it. If the port is empty, then the string “NULL PORT DATA” will be returned.\n *\n * @returns the data read.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "read(): " - }, - { - "kind": "Content", - "text": "string | number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "read" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NetscriptPort#tryWrite:member(1)", - "docComment": "/**\n * Attempt to write data to the port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns True if the data was added to the port, false if the port was full\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "tryWrite(value: " - }, - { - "kind": "Content", - "text": "string | number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "value", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "tryWrite" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NetscriptPort#write:member(1)", - "docComment": "/**\n * Write data to a port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns The data popped off the queue if it was full.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "write(value: " - }, - { - "kind": "Content", - "text": "string | number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "null | string | number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "value", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "write" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!NodeStats:interface", - "docComment": "/**\n * Object representing all the values related to a hacknet node.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface NodeStats " - } - ], - "releaseTag": "Public", - "name": "NodeStats", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#cache:member", - "docComment": "/**\n * Cache level. Only applicable for Hacknet Servers\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cache: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cache", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#cores:member", - "docComment": "/**\n * Node's number of cores\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cores: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cores", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#hashCapacity:member", - "docComment": "/**\n * Hash Capacity provided by this Node. Only applicable for Hacknet Servers\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hashCapacity: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hashCapacity", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#level:member", - "docComment": "/**\n * Node's level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "level: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "level", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#name:member", - "docComment": "/**\n * Node's name\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#production:member", - "docComment": "/**\n * Node's production per second\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "production: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "production", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#ram:member", - "docComment": "/**\n * Node's RAM (GB)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ram: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ram", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#ramUsed:member", - "docComment": "/**\n * Node's used RAM (GB)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ramUsed: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ramUsed", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#timeOnline:member", - "docComment": "/**\n * Number of seconds since Node has been purchased\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "timeOnline: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "timeOnline", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NodeStats#totalProduction:member", - "docComment": "/**\n * Total number of money Node has produced\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "totalProduction: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "totalProduction", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!NS:interface", - "docComment": "/**\n * Collection of all functions passed to scripts\n *\n * @remarks\n *\n * Basic ns1 usage example:\n * ```ts\n * // Basic ns functions can be used directly\n * getHostname();\n * // Some related functions are gathered within a common namespace\n * stock.getPrice();\n * ```\n *\n * {@link https://bitburner.readthedocs.io/en/latest/netscript/netscript1.html | ns1 in-game docs}


Basic ns2 usage example:\n * ```ts\n * export async function main(ns) {\n * // Basic ns functions can be accessed on the ns object\n * ns.getHostname();\n * // Some related functions are gathered under a sub-property of the ns object\n * ns.stock.getPrice();\n * // Some functions need to be await ed\n * await ns.hack('n00dles');\n * }\n * ```\n *\n * {@link https://bitburner.readthedocs.io/en/latest/netscript/netscriptjs.html | ns2 in-game docs}
\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface NS extends " - }, - { - "kind": "Reference", - "text": "Singularity", - "canonicalReference": "bitburner!Singularity:interface" - }, - { - "kind": "Content", - "text": " " - } - ], - "releaseTag": "Public", - "name": "NS", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#alert:member(1)", - "docComment": "/**\n * Open up a message box.\n *\n * @param msg - Message to alert.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "alert(msg: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "msg", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "alert" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#args:member", - "docComment": "/**\n * Arguments passed into the script.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Arguments passed into a script can be accessed using a normal array using the [] operator (args[0], args[1], etc…).\n *\n * It is also possible to get the number of arguments that was passed into a script using: 'args.length' WARNING: Do not try to modify the args array. This will break the game.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly args: " - }, - { - "kind": "Content", - "text": "(string | number | boolean)[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "args", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#asleep:member(1)", - "docComment": "/**\n * Suspends the script for n milliseconds. Doesn't block with concurrent calls.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @param millis - Number of milliseconds to sleep.\n *\n * @returns \n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "asleep(millis: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "millis", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "asleep" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#atExit:member(1)", - "docComment": "/**\n * Add callback function when the script dies\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * NS2 exclusive\n *\n * Add callback to be executed when the script dies.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "atExit(f: " - }, - { - "kind": "Content", - "text": "() => void" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "f", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "atExit" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#bladeburner:member", - "docComment": "/**\n * Namespace for bladeburner functions.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly bladeburner: " - }, - { - "kind": "Reference", - "text": "Bladeburner", - "canonicalReference": "bitburner!Bladeburner:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "bladeburner", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#brutessh:member(1)", - "docComment": "/**\n * Runs BruteSSH.exe on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * Runs the BruteSSH.exe program on the target server. BruteSSH.exe must exist on your home computer.\n *\n * @param host - Hostname of the target server.\n *\n * @example\n * ```ts\n * // NS1:\n * brutessh(\"foodnstuff\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * ns.brutessh(\"foodnstuff\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "brutessh(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "brutessh" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#clear:member(1)", - "docComment": "/**\n * Clear data from a file.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Delete all data from that text file.\n *\n * @param handle - Text file to clear.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "clear(handle: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "handle", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "clear" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#clearLog:member(1)", - "docComment": "/**\n * Clears the script’s logs.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "clearLog(): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "clearLog" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#clearPort:member(1)", - "docComment": "/**\n * Clear data from a port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Deleta all data from the underlying queue.\n *\n * @param handle - Port to clear.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "clearPort(handle: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "handle", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "clearPort" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#codingcontract:member", - "docComment": "/**\n * Namespace for codingcontract functions.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly codingcontract: " - }, - { - "kind": "Reference", - "text": "CodingContract", - "canonicalReference": "bitburner!CodingContract:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "codingcontract", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#corporation:member", - "docComment": "/**\n * Namespace for corporation functions. RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly corporation: " - }, - { - "kind": "Reference", - "text": "Corporation", - "canonicalReference": "bitburner!Corporation:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "corporation", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#deleteServer:member(1)", - "docComment": "/**\n * Delete a purchased server.\n *\n * @remarks\n *\n * 2.25 GB\n *\n * Deletes one of your purchased servers, which is specified by its hostname.\n *\n * The hostname argument can be any data type, but it will be converted to a string. Whitespace is automatically removed from the string. This function will not delete a server that still has scripts running on it.\n *\n * @param host - Host of the server to delete.\n *\n * @returns True if successful, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "deleteServer(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "deleteServer" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#disableLog:member(1)", - "docComment": "/**\n * Disables logging for the given function.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Logging can be disabled for all functions by passing `ALL` as the argument.\n *\n * Note that this does not completely remove all logging functionality. This only stops a function from logging when the function is successful. If the function fails, it will still log the reason for failure.\n *\n * @param fn - Name of function for which to disable logging.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "disableLog(fn: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "fn", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "disableLog" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#enableLog:member(1)", - "docComment": "/**\n * Enable logging for a certain function.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Re-enables logging for the given function. If `ALL` is passed into this function as an argument, then it will revert the effects of disableLog(`ALL`).\n *\n * @param fn - Name of function for which to enable logging.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "enableLog(fn: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "fn", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "enableLog" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#exec:member(1)", - "docComment": "/**\n * Start another script on any server.\n *\n * @remarks\n *\n * RAM cost: 1.3 GB\n *\n * Run a script as a separate process on a specified server. This is similar to the run function except that it can be used to run a script on any server, instead of just the current server.\n *\n * If the script was successfully started, then this functions returns the PID of that script. Otherwise, it returns 0.\n *\n * PID stands for Process ID. The PID is a unique identifier for each script. The PID will always be a positive integer.\n *\n * Running this function with a numThreads argument of 0 will return 0 without running the script. However, running this function with a negative numThreads argument will cause a runtime error.\n *\n * @param script - Filename of script to execute.\n *\n * @param host - Hostname of the `target server` on which to execute the script.\n *\n * @param numThreads - Optional thread count for new script. Set to 1 by default. Will be rounded to nearest integer.\n *\n * @param args - Additional arguments to pass into the new script that is being run. Note that if any arguments are being passed into the new script, then the third argument numThreads must be filled in with a value.\n *\n * @returns Returns the PID of a successfully started script, and 0 otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * //The simplest way to use the exec command is to call it with just the script name and the target server. The following example will try to run generic-hack.script on the foodnstuff server:\n * exec(\"generic-hack.script\", \"foodnstuff\");\n *\n * //The following example will try to run the script generic-hack.script on the joesguns server with 10 threads:\n * exec(\"generic-hack.script\", \"joesguns\", 10);\n *\n * //This last example will try to run the script foo.script on the foodnstuff server with 5 threads. It will also pass the number 1 and the string “test” in as arguments to the script:\n * exec(\"foo.script\", \"foodnstuff\", 5, 1, \"test\");\n * ```\n *\n * *\n *\n * @example\n * ```ts\n * // NS2:\n * //The simplest way to use the exec command is to call it with just the script name and the target server. The following example will try to run generic-hack.script on the foodnstuff server:\n * ns.exec(\"generic-hack.script\", \"foodnstuff\");\n *\n * //The following example will try to run the script generic-hack.script on the joesguns server with 10 threads:\n * ns.exec(\"generic-hack.script\", \"joesguns\", 10);\n *\n * //This last example will try to run the script foo.script on the foodnstuff server with 5 threads. It will also pass the number 1 and the string “test” in as arguments to the script:\n * ns.exec(\"foo.script\", \"foodnstuff\", 5, 1, \"test\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "exec(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", numThreads?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Reference", - "text": "Array", - "canonicalReference": "!Array:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 10, - "endIndex": 11 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "numThreads", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 9 - } - } - ], - "name": "exec" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#exit:member(1)", - "docComment": "/**\n * Terminates the current script immediately.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "exit(): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "exit" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#fileExists:member(1)", - "docComment": "/**\n * Check if a file exists.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns a boolean indicating whether the specified file exists on the target server. The filename for scripts is case-sensitive, but for other types of files it is not. For example, fileExists(“brutessh.exe”) will work fine, even though the actual program is named 'BruteSSH.exe'.\n *\n * If the hostname/ip argument is omitted, then the function will search through the current server (the server running the script that calls this function) for the file.\n *\n * @param filename - Filename of file to check.\n *\n * @param host - Host of target server. This is optional. If it is not specified then the function will use the current server as the target server.\n *\n * @returns True if specified file exists, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * //The function call will return true if the script named foo.script exists on the foodnstuff server, and false otherwise.\n * fileExists(\"foo.script\", \"foodnstuff\");\n *\n * //The function call will return true if the current server contains the FTPCrack.exe program, and false otherwise.\n * fileExists(\"ftpcrack.exe\");\n * ```\n *\n * *\n *\n * @example\n * ```ts\n * // NS2:\n * // The function call will return true if the script named foo.script exists on the foodnstuff server, and false otherwise.\n * ns.fileExists(\"foo.script\", \"foodnstuff\");\n *\n * // The function call will return true if the current server contains the FTPCrack.exe program, and false otherwise.\n * ns.fileExists(\"ftpcrack.exe\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "fileExists(filename: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "filename", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "fileExists" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#flags:member(1)", - "docComment": "/**\n * Parse command line flags.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Allows unix like flag parsing.\n *\n * @example\n * ```ts\n * // example.script\n * var data = flags([\n * ['delay', 0], // a default number means this flag is a number\n * ['server', 'foodnstuff'], // a default string means this flag is a string\n * ['exclude', []], // a default array means this flag is a default array of string\n * ['help', false], // a default boolean means this flag is a boolean\n * ]);\n * tprint(data);\n *\n * // example.ns\n * export async function main(ns) {\n * const data = ns.flags([\n * ['delay', 0], // a default number means this flag is a number\n * ['server', 'foodnstuff'], // a default string means this flag is a string\n * ['exclude', []], // a default array means this flag is a default array of string\n * ['help', false], // a default boolean means this flag is a boolean\n * ]);\n * ns.tprint(data);\n * }\n *\n * // [home ~/]> run example.script\n * // {\"_\":[],\"delay\":0,\"server\":\"foodnstuff\",\"exclude\":[],\"help\":false}\n * // [home ~/]> run example.script --delay 3000\n * // {\"_\":[],\"server\":\"foodnstuff\",\"exclude\":[],\"help\":false,\"delay\":3000}\n * // [home ~/]> run example.script --delay 3000 --server harakiri-sushi\n * // {\"_\":[],\"exclude\":[],\"help\":false,\"delay\":3000,\"server\":\"harakiri-sushi\"}\n * // [home ~/]> run example.script --delay 3000 --server harakiri-sushi hello world\n * // {\"_\":[\"hello\",\"world\"],\"exclude\":[],\"help\":false,\"delay\":3000,\"server\":\"harakiri-sushi\"}\n * // [home ~/]> run example.script --delay 3000 --server harakiri-sushi hello world --exclude a --exclude b\n * // {\"_\":[\"hello\",\"world\"],\"help\":false,\"delay\":3000,\"server\":\"harakiri-sushi\",\"exclude\":[\"a\",\"b\"]}\n * // [home ~/]> run example.script --help\n * // {\"_\":[],\"delay\":0,\"server\":\"foodnstuff\",\"exclude\":[],\"help\":true}\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "flags(schema: " - }, - { - "kind": "Content", - "text": "[string, string | number | boolean | string[]][]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "schema", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "flags" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#formulas:member", - "docComment": "/**\n * Namespace for formulas functions.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly formulas: " - }, - { - "kind": "Reference", - "text": "Formulas", - "canonicalReference": "bitburner!Formulas:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "formulas", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#ftpcrack:member(1)", - "docComment": "/**\n * Runs FTPCrack.exe on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * Runs the FTPCrack.exe program on the target server. FTPCrack.exe must exist on your home computer.\n *\n * @param host - Hostname of the target server.\n *\n * @example\n * ```ts\n * // NS1:\n * ftpcrack(\"foodnstuff\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * ns.ftpcrack(\"foodnstuff\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ftpcrack(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "ftpcrack" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#gang:member", - "docComment": "/**\n * Namespace for gang functions.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly gang: " - }, - { - "kind": "Reference", - "text": "Gang", - "canonicalReference": "bitburner!Gang:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "gang", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getBitNodeMultipliers:member(1)", - "docComment": "/**\n * Get the current Bitnode multipliers.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns an object containing the current BitNode multipliers. This function requires you to be in Bitnode 5 or have Source-File 5 in order to run. The multipliers are returned in decimal forms (e.g. 1.5 instead of 150%). The multipliers represent the difference between the current BitNode and the original BitNode (BitNode-1).\n *\n * For example, if the CrimeMoney multiplier has a value of 0.1, then that means that committing crimes in the current BitNode will only give 10% of the money you would have received in BitNode-1.\n *\n * @returns Object containing the current BitNode multipliers.\n *\n * @example\n * ```ts\n * // NS1:\n * var mults = getBitNodeMultipliers();\n * print(mults.ServerMaxMoney);\n * print(mults.HackExpGain);\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * const {ServerMaxMoney, HackExpGain} = ns.getBitNodeMultipliers();\n * print(ServerMaxMoney);\n * print(HackExpGain);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getBitNodeMultipliers(): " - }, - { - "kind": "Reference", - "text": "BitNodeMultipliers", - "canonicalReference": "bitburner!BitNodeMultipliers:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getBitNodeMultipliers" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getFavorToDonate:member(1)", - "docComment": "/**\n * Returns the amount of Faction favor required to be able to donate to a faction.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * @returns Amount of Faction favor required to be able to donate to a faction.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getFavorToDonate(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getFavorToDonate" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getGrowTime:member(1)", - "docComment": "/**\n * Get the execution time of a grow() call.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * Returns the amount of time in milliseconds it takes to execute the grow Netscript function on the target server. The function takes in an optional hackLvl parameter that can be specified to see what the grow time would be at different hacking levels. The required time is increased by the security level of the target server and decreased by the player's hacking level.\n *\n * @param host - Host of target server.\n *\n * @returns Returns the amount of time in milliseconds it takes to execute the grow Netscript function. Returns Infinity if called on a Hacknet Server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getGrowTime(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getGrowTime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getHackingLevel:member(1)", - "docComment": "/**\n * Returns the player’s current hacking level.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * @returns Player’s current hacking level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHackingLevel(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getHackingLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getHackingMultipliers:member(1)", - "docComment": "/**\n * Get hacking related multipliers.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns an object containing the Player’s hacking related multipliers. These multipliers are returned in fractional forms, not percentages (e.g. 1.5 instead of 150%).\n *\n * @returns Object containing the Player’s hacking related multipliers.\n *\n * @example\n * ```ts\n * // NS1:\n * // Example of how this can be used:\n * var mults = getHackingMultipliers();\n * print(mults.chance);\n * print(mults.growth);\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * // Example of how this can be used:\n * const {chance, growth} = ns.getHackingMultipliers();\n * print(chance);\n * print(growth);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHackingMultipliers(): " - }, - { - "kind": "Reference", - "text": "HackingMultipliers", - "canonicalReference": "bitburner!HackingMultipliers:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getHackingMultipliers" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getHacknetMultipliers:member(1)", - "docComment": "/**\n * Get hacknet related multipliers.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Returns an object containing the Player’s hacknet related multipliers. These multipliers are returned in fractional forms, not percentages (e.g. 1.5 instead of 150%).\n *\n * @returns Object containing the Player’s hacknet related multipliers.\n *\n * @example\n * ```ts\n * // NS1:\n * // Example of how this can be used:\n * var mults = getHacknetMultipliers();\n * print(mults.production);\n * print(mults.purchaseCost);\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * // Example of how this can be used:\n * const {production, purchaseCost} = ns.getHacknetMultipliers();\n * print(production);\n * print(purchaseCost);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHacknetMultipliers(): " - }, - { - "kind": "Reference", - "text": "HacknetMultipliers", - "canonicalReference": "bitburner!HacknetMultipliers:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getHacknetMultipliers" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getHackTime:member(1)", - "docComment": "/**\n * Get the execution time of a hack() call.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB When `hack` completes an amount of money is stolen depending on the player's skills. Returns the amount of time in milliseconds it takes to execute the hack Netscript function on the target server. The function takes in an optional hackLvl parameter that can be specified to see what the hack time would be at different hacking levels. The required time is increased by the security level of the target server and decreased by the player's hacking level.\n *\n * @param host - Host of target server.\n *\n * @returns Returns the amount of time in milliseconds it takes to execute the hack Netscript function. Returns Infinity if called on a Hacknet Server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHackTime(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getHackTime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getHostname:member(1)", - "docComment": "/**\n * Returns a string with the hostname of the server that the script is running on.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * @returns Hostname of the server that the script is on.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHostname(): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getHostname" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getOwnedSourceFiles:member(1)", - "docComment": "/**\n * Get a list of acquired Source-Files.\n *\n * @remarks\n *\n * RAM cost: 5 GB\n *\n * Returns an array of source files\n *\n * @returns Array containing an object with number and level of the source file.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getOwnedSourceFiles(): " - }, - { - "kind": "Reference", - "text": "SourceFileLvl", - "canonicalReference": "bitburner!SourceFileLvl:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getOwnedSourceFiles" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getPlayer:member(1)", - "docComment": "/**\n * Get information about the player.\n *\n * @remarks\n *\n * RAM cost: 0.5 GB\n *\n * Returns an object with information on the current player.\n *\n * @returns Player info\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPlayer(): " - }, - { - "kind": "Reference", - "text": "Player", - "canonicalReference": "bitburner!Player:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getPlayer" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getPortHandle:member(1)", - "docComment": "/**\n * Get all data on a port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Get a handle to a Netscript Port.\n *\n * WARNING: Port Handles only work in NetscriptJS (Netscript 2.0). They will not work in Netscript 1.0.\n *\n * @param port - Port number. Must be an integer between 1 and 20.\n *\n * @see\n *\n * https://bitburner.readthedocs.io/en/latest/netscript/netscriptmisc.html#netscript-ports\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPortHandle(port: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "NetscriptPort", - "canonicalReference": "bitburner!NetscriptPort:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "port", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getPortHandle" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getPurchasedServerCost:member(1)", - "docComment": "/**\n * Get cost of purchasing a server.\n *\n * @remarks\n *\n * RAM cost: 0.25 GB\n *\n * Returns the cost to purchase a server with the specified amount of ram.\n *\n * @param ram - Amount of RAM of a potential purchased server, in GB. Must be a power of 2 (2, 4, 8, 16, etc.). Maximum value of 1048576 (2^20).\n *\n * @returns The cost to purchase a server with the specified amount of ram.\n *\n * @example\n * ```ts\n * // NS1:\n * for (i = 1; i <= 20; i++) {\n * tprint(i + \" -- \" + getPurchasedServerCost(Math.pow(2, i)));\n * }\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * for (i = 1; i <= 20; i++) {\n * ns.tprint(i + \" -- \" + ns.getPurchasedServerCost(Math.pow(2, i)));\n * }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPurchasedServerCost(ram: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "ram", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getPurchasedServerCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getPurchasedServerLimit:member(1)", - "docComment": "/**\n * Returns the maximum number of servers you can purchase.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * @returns Returns the maximum number of servers you can purchase.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPurchasedServerLimit(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getPurchasedServerLimit" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getPurchasedServerMaxRam:member(1)", - "docComment": "/**\n * Returns the maximum RAM that a purchased server can have.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * @returns Returns the maximum RAM (in GB) that a purchased server can have.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPurchasedServerMaxRam(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getPurchasedServerMaxRam" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getPurchasedServers:member(1)", - "docComment": "/**\n * Returns an array with the hostnames of all of the servers you have purchased.\n *\n * @remarks\n *\n * 2.25 GB\n *\n * @returns Returns an array with the hostnames of all of the servers you have purchased.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPurchasedServers(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getPurchasedServers" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getRunningScript:member(1)", - "docComment": "/**\n * Get general info about a running script.\n *\n * @remarks\n *\n * RAM cost: 0.3 GB\n *\n * Running with no args returns curent script. If you use a PID as the first parameter, the hostname and args parameters are unnecessary.\n *\n * @param filename - Optional. Filename or PID of the script.\n *\n * @param hostname - Optional. Name of host server the script is running on.\n *\n * @param args - Arguments to identify the script\n *\n * @returns info about a running script\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getRunningScript(filename?: " - }, - { - "kind": "Reference", - "text": "FilenameOrPID", - "canonicalReference": "bitburner!FilenameOrPID:type" - }, - { - "kind": "Content", - "text": ", hostname?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "(string | number)[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "RunningScript", - "canonicalReference": "bitburner!RunningScript:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "filename", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "hostname", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getRunningScript" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getScriptExpGain:member(1)", - "docComment": "/**\n * Get the exp gain of a script.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns the amount of hacking experience the specified script generates while online (when the game is open, does not apply for offline experience gains). Remember that a script is uniquely identified by both its name and its arguments.\n *\n * This function can also return the total experience gain rate of all of your active scripts by running the function with no arguments.\n *\n * @param script - Filename of script.\n *\n * @param host - Server on which script is running.\n *\n * @param args - Arguments that the script is running with.\n *\n * @returns Amount of hacking experience the specified script generates while online.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getScriptExpGain(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getScriptExpGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getScriptExpGain:member(2)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "getScriptExpGain(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 2, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getScriptExpGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getScriptIncome:member(1)", - "docComment": "/**\n * Get the income of a script.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns the amount of income the specified script generates while online (when the game is open, does not apply for offline income). Remember that a script is uniquely identified by both its name and its arguments. So for example if you ran a script with the arguments “foodnstuff” and “5” then in order to use this function to get that script’s income you must specify those same arguments in the same order in this function call.\n *\n * This function can also be called with no arguments. If called with no arguments, then this function will return an array of two values. The first value is the total income (dollar / second) of all of your active scripts (scripts that are currently running on any server). The second value is the total income (dollar / second) that you’ve earned from scripts since you last installed Augmentations.\n *\n * @param script - Filename of script.\n *\n * @param host - Server on which script is running.\n *\n * @param args - Arguments that the script is running with.\n *\n * @returns Amount of income the specified script generates while online.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getScriptIncome(): " - }, - { - "kind": "Content", - "text": "[number, number]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getScriptIncome" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getScriptIncome:member(2)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "getScriptIncome(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 2, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getScriptIncome" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getScriptLogs:member(1)", - "docComment": "/**\n * Get all the logs of a script.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Returns a script’s logs. The logs are returned as an array, where each line is an element in the array. The most recently logged line is at the end of the array. Note that there is a maximum number of lines that a script stores in its logs. This is configurable in the game’s options. If the function is called with no arguments, it will return the current script’s logs.\n *\n * Otherwise, the fn, hostname/ip, and args… arguments can be used to get the logs from another script. Remember that scripts are uniquely identified by both their names and arguments.\n *\n * @param fn - Optional. Filename of script to get logs from.\n *\n * @param host - Optional. Hostname of the server that the script is on.\n *\n * @param args - Arguments to identify which scripts to get logs for.\n *\n * @returns Returns an string array, where each line is an element in the array. The most recently logged line is at the end of the array.\n *\n * @example\n * ```ts\n * // NS1:\n * //Get logs from foo.script on the current server that was run with no args\n * getScriptLogs(\"foo.script\");\n *\n * //Open logs from foo.script on the foodnstuff server that was run with no args\n * getScriptLogs(\"foo.script\", \"foodnstuff\");\n *\n * //Open logs from foo.script on the foodnstuff server that was run with the arguments [1, \"test\"]\n * getScriptLogs(\"foo.script\", \"foodnstuff\", 1, \"test\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //Get logs from foo.script on the current server that was run with no args\n * ns.getScriptLogs(\"foo.script\");\n *\n * //Open logs from foo.script on the foodnstuff server that was run with no args\n * ns.getScriptLogs(\"foo.script\", \"foodnstuff\");\n *\n * //Open logs from foo.script on the foodnstuff server that was run with the arguments [1, \"test\"]\n * ns.getScriptLogs(\"foo.script\", \"foodnstuff\", 1, \"test\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getScriptLogs(fn?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "any[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "fn", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getScriptLogs" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getScriptName:member(1)", - "docComment": "/**\n * Returns the current script name.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns Current script name.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getScriptName(): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getScriptName" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getScriptRam:member(1)", - "docComment": "/**\n * Get the ram cost of a script.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns the amount of RAM required to run the specified script on the target server. Returns 0 if the script does not exist.\n *\n * @param script - Filename of script. This is case-sensitive.\n *\n * @param host - Host of target server the script is located on. This is optional, If it is not specified then the function will se the current server as the target server.\n *\n * @returns Amount of RAM (in GB) required to run the specified script on the target server, and 0 if the script does not exist.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getScriptRam(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getScriptRam" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServer:member(1)", - "docComment": "/**\n * Returns a server object for the given server. Defaults to the running script's server if host is not specified.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * @param host - Optional. Hostname for the requested server object.\n *\n * @returns The requested server object.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServer(host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Server", - "canonicalReference": "bitburner!Server:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServer" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerBaseSecurityLevel:member(1)", - "docComment": "/**\n * @remarks\n *\n * RAM cost: 0.1 GB Returns the base security level of the target server. This is the security level that the server starts out with. This is different than getServerSecurityLevel because getServerSecurityLevel returns the current security level of a server, which can constantly change due to hack, grow, and weaken, calls on that server. The base security level will stay the same until you reset by installing an Augmentation(s).\n *\n * @deprecated\n *\n * useless\n *\n * @param host - Host of target server.\n *\n * @returns Base security level of the target server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerBaseSecurityLevel(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerBaseSecurityLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerGrowth:member(1)", - "docComment": "/**\n * Get a server growth parameter.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns the server’s intrinsic “growth parameter”. This growth parameter is a number typically between 0 and 100 that represents how quickly the server’s money grows. This parameter affects the percentage by which the server’s money is increased when using the grow function. A higher growth parameter will result in a higher percentage increase from grow.\n *\n * @param host - Host of target server.\n *\n * @returns Parameter that affects the percentage by which the server’s money is increased when using the grow function.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerGrowth(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerGrowth" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerMaxMoney:member(1)", - "docComment": "/**\n * Get maximum money available on a server.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns the maximum amount of money that can be available on a server.\n *\n * @param host - Host of target server.\n *\n * @returns Maximum amount of money available on the server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerMaxMoney(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerMaxMoney" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerMaxRam:member(1)", - "docComment": "/**\n * Get the max RAM on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * @param host - Hostname of the target server.\n *\n * @returns max ram (GB)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerMaxRam(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerMaxRam" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerMinSecurityLevel:member(1)", - "docComment": "/**\n * Returns the minimum security level of the target server.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * @param host - Host of target server.\n *\n * @returns Minimum security level of the target server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerMinSecurityLevel(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerMinSecurityLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerMoneyAvailable:member(1)", - "docComment": "/**\n * Get money available on a server.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns the amount of money available on a server. Running this function on the home computer will return the player’s money.\n *\n * @param host - Host of target server\n *\n * @returns Amount of money available on the server.\n *\n * @example\n * ```ts\n * // NS1:\n * getServerMoneyAvailable(\"foodnstuff\");\n * getServerMoneyAvailable(\"home\"); //Returns player's money\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * ns.getServerMoneyAvailable(\"foodnstuff\");\n * ns.getServerMoneyAvailable(\"home\"); // Returns player's money\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerMoneyAvailable(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerMoneyAvailable" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerNumPortsRequired:member(1)", - "docComment": "/**\n * Returns the number of open ports required to successfully run NUKE.exe on the specified server.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * @param host - Host of target server.\n *\n * @returns The number of open ports required to successfully run NUKE.exe on the specified server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerNumPortsRequired(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerNumPortsRequired" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerRam:member(1)", - "docComment": "/**\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns an array with two elements that gives information about a server’s memory (RAM). The first element in the array is the amount of RAM that the server has total (in GB). The second element in the array is the amount of RAM that is currently being used on the server (in GB).\n *\n * @deprecated\n *\n * use getServerMaxRam / getServerUsedRam\n *\n * @param host - Host of target server.\n *\n * @returns Array with total and used memory on the specified server, in GB.\n *\n * @example\n * ```ts\n * // NS1:\n * var serverRam = getServerRam(\"helios\");\n * var totalRam = serverRam[0];\n * var ramUsed = serverRam[1];\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * const [totalRam, ramUsed] = ns.getServerRam(\"helios\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerRam(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "[number, number]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerRam" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerRequiredHackingLevel:member(1)", - "docComment": "/**\n * Returns the required hacking level of the target server.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * @param host - Host of target server.\n *\n * @returns The required hacking level of the target server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerRequiredHackingLevel(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerRequiredHackingLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerSecurityLevel:member(1)", - "docComment": "/**\n * Get server security level.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns the security level of the target server. A server’s security level is denoted by a number, typically between 1 and 100 (but it can go above 100).\n *\n * @param host - Host of target server.\n *\n * @returns Security level of the target server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerSecurityLevel(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerSecurityLevel" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getServerUsedRam:member(1)", - "docComment": "/**\n * Get the used RAM on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * @param host - Hostname of the target server.\n *\n * @returns used ram (GB)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getServerUsedRam(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getServerUsedRam" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getSharePower:member(1)", - "docComment": "/**\n * Calculate your share power. Based on all the active share calls.\n *\n * @remarks\n *\n * RAM cost: 0.2 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSharePower(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getSharePower" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getTimeSinceLastAug:member(1)", - "docComment": "/**\n * Returns the amount of time in milliseconds that have passed since you last installed Augmentations.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * @returns Time in milliseconds that have passed since you last installed Augmentations.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getTimeSinceLastAug(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getTimeSinceLastAug" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#getWeakenTime:member(1)", - "docComment": "/**\n * Get the execution time of a weaken() call.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * Returns the amount of time in milliseconds it takes to execute the weaken Netscript function on the target server. The function takes in an optional hackLvl parameter that can be specified to see what the weaken time would be at different hacking levels. The required time is increased by the security level of the target server and decreased by the player's hacking level.\n *\n * @param host - Host of target server.\n *\n * @returns Returns the amount of time in milliseconds it takes to execute the weaken Netscript function. Returns Infinity if called on a Hacknet Server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getWeakenTime(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getWeakenTime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#grow:member(1)", - "docComment": "/**\n * Spoof money in a servers bank account, increasing the amount available.\n *\n * @remarks\n *\n * RAM cost: 0.15 GB\n *\n * Use your hacking skills to increase the amount of money available on a server. The runtime for this command depends on your hacking level and the target server’s security level. When `grow` completes, the money available on a target server will be increased by a certain, fixed percentage. This percentage is determined by the target server’s growth rate (which varies between servers) and security level. Generally, higher-level servers have higher growth rates. The getServerGrowth() function can be used to obtain a server’s growth rate.\n *\n * Like hack, `grow` can be called on any server, regardless of where the script is running. The grow() command requires root access to the target server, but there is no required hacking level to run the command. It also raises the security level of the target server by 0.004.\n *\n * @param host - Hostname of the target server to grow.\n *\n * @param opts - Optional parameters for configuring function behavior.\n *\n * @returns The number by which the money on the server was multiplied for the growth.\n *\n * @example\n * ```ts\n * // NS1:\n * var availableMoney = getServerMoneyAvailable(\"foodnstuff\");\n * currentMoney = currentMoney * (1 + grow(\"foodnstuff\"));\n * currentMoney = currentMoney * (1 + grow(\"foodnstuff\", { threads: 5 })); // Only use 5 threads to grow\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * let availableMoney = ns.getServerMoneyAvailable(\"foodnstuff\");\n * currentMoney *= (1 + await ns.grow(\"foodnstuff\"));\n * currentMoney *= (1 + await ns.grow(\"foodnstuff\", { threads: 5 })); // Only use 5 threads to grow\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "grow(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", opts?: " - }, - { - "kind": "Reference", - "text": "BasicHGWOptions", - "canonicalReference": "bitburner!BasicHGWOptions:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "opts", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "grow" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#growthAnalyze:member(1)", - "docComment": "/**\n * Calculate the number of grow thread needed to grow a server by a certain multiplier.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * This function returns the number of “growths” needed in order to increase the amount of money available on the specified server by the specified amount. The specified amount is multiplicative and is in decimal form, not percentage.\n *\n * Warning: The value returned by this function isn’t necessarily a whole number.\n *\n * @param host - Hostname of the target server.\n *\n * @param growthAmount - Multiplicative factor by which the server is grown. Decimal form..\n *\n * @returns The amount of grow calls needed to grow the specified server by the specified amount\n *\n * @example\n * ```ts\n * // NS1:\n * //For example, if you want to determine how many grow calls you need to double the amount of money on foodnstuff, you would use:\n * var growTimes = growthAnalyze(\"foodnstuff\", 2);\n * //If this returns 100, then this means you need to call grow 100 times in order to double the money (or once with 100 threads).\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //For example, if you want to determine how many grow calls you need to double the amount of money on foodnstuff, you would use:\n * const growTimes = ns.growthAnalyze(\"foodnstuff\", 2);\n * //If this returns 100, then this means you need to call grow 100 times in order to double the money (or once with 100 threads).\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "growthAnalyze(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", growthAmount: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", cores?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "growthAmount", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "cores", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "growthAnalyze" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#growthAnalyzeSecurity:member(1)", - "docComment": "/**\n * Calculate the security increase for a number of thread.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Returns the security increase that would occur if a grow with this many threads happened.\n *\n * @param threads - Amount of threads that will be used.\n *\n * @returns The security increase.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "growthAnalyzeSecurity(threads: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "threads", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "growthAnalyzeSecurity" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#hack:member(1)", - "docComment": "/**\n * Steal a servers money.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Function that is used to try and hack servers to steal money and gain hacking experience. The runtime for this command depends on your hacking level and the target server’s security level when this function is called. In order to hack a server you must first gain root access to that server and also have the required hacking level.\n *\n * A script can hack a server from anywhere. It does not need to be running on the same server to hack that server. For example, you can create a script that hacks the `foodnstuff` server and run that script on any server in the game.\n *\n * A successful `hack()` on a server will raise that server’s security level by 0.002.\n *\n * @param host - Hostname of the target server to hack.\n *\n * @param opts - Optional parameters for configuring function behavior.\n *\n * @returns The amount of money stolen if the hack is successful, and zero otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * var earnedMoney = hack(\"foodnstuff\");\n * earnedMoney = earnedMoney + hack(\"foodnstuff\", { threads: 5 }); // Only use 5 threads to hack\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * let earnedMoney = await ns.hack(\"foodnstuff\");\n * earnedMoney += await ns.hack(\"foodnstuff\", { threads: 5 }); // Only use 5 threads to hack\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hack(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", opts?: " - }, - { - "kind": "Reference", - "text": "BasicHGWOptions", - "canonicalReference": "bitburner!BasicHGWOptions:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "opts", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hack" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#hackAnalyze:member(1)", - "docComment": "/**\n * Get the part of money stolen with a single thread.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Returns the part of the specified server’s money you will steal with a single thread hack.\n *\n * @param host - Hostname of the target server.\n *\n * @returns The part of money you will steal from the target server with a single thread hack.\n *\n * @example\n * ```ts\n * // NS1:\n * //For example, assume the following returns 0.01:\n * var hackAmount = hackAnalyze(\"foodnstuff\");\n * //This means that if hack the foodnstuff server using a single thread, then you will steal 1%, or 0.01 of its total money. If you hack using N threads, then you will steal N*0.01 times its total money.\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //For example, assume the following returns 0.01:\n * const hackAmount = ns.hackAnalyze(\"foodnstuff\");\n * //This means that if hack the foodnstuff server using a single thread, then you will steal 1%, or 0.01 of its total money. If you hack using N threads, then you will steal N*0.01 times its total money.\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackAnalyze(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "hackAnalyze" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#hackAnalyzeChance:member(1)", - "docComment": "/**\n * Get the chance of successfully hacking a server.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Returns the chance you have of successfully hacking the specified server.\n *\n * This returned value is in decimal form, not percentage.\n *\n * @param host - Hostname of the target server.\n *\n * @returns The chance you have of successfully hacking the target server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackAnalyzeChance(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "hackAnalyzeChance" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#hackAnalyzeSecurity:member(1)", - "docComment": "/**\n * Get the security increase for a number of thread.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Returns the security increase that would occur if a hack with this many threads happened.\n *\n * @param threads - Amount of threads that will be used.\n *\n * @returns The security increase.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackAnalyzeSecurity(threads: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "threads", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "hackAnalyzeSecurity" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#hackAnalyzeThreads:member(1)", - "docComment": "/**\n * Predict the effect of hack.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * This function returns the number of script threads you need when running the hack command to steal the specified amount of money from the target server. If hackAmount is less than zero or greater than the amount of money available on the server, then this function returns -1.\n *\n * Warning: The value returned by this function isn’t necessarily a whole number.\n *\n * @param host - Hostname of the target server to analyze.\n *\n * @param hackAmount - Amount of money you want to hack from the server.\n *\n * @returns The number of threads needed to hack the server for hackAmount money.\n *\n * @example\n * ```ts\n * //For example, let’s say the foodnstuff server has $10m and you run:\n * hackAnalyzeThreads(\"foodnstuff\", 1e6);\n * //If this function returns 50, this means that if your next hack call is run on a script with 50 threads, it will steal $1m from the foodnstuff server.\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackAnalyzeThreads(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", hackAmount: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "hackAmount", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hackAnalyzeThreads" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#hacknet:member", - "docComment": "/**\n * Namespace for hacknet functions.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly hacknet: " - }, - { - "kind": "Reference", - "text": "Hacknet", - "canonicalReference": "bitburner!Hacknet:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacknet", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#hasRootAccess:member(1)", - "docComment": "/**\n * Check if your have root access on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * Returns a boolean indicating whether or not the player has root access to the specified target server.\n *\n * @param host - Host of the target server\n *\n * @returns True if player has root access to the specified target server, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * if (hasRootAccess(\"foodnstuff\") == false) {\n * nuke(\"foodnstuff\");\n * }\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * if (ns.hasRootAccess(\"foodnstuff\") == false) {\n * ns.nuke(\"foodnstuff\");\n * }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hasRootAccess(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "hasRootAccess" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#httpworm:member(1)", - "docComment": "/**\n * Runs HTTPWorm.exe on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * Runs the HTTPWorm.exe program on the target server. HTTPWorm.exe must exist on your home computer.\n *\n * @param host - Hostname of the target server.\n *\n * @example\n * ```ts\n * // NS1:\n * httpworm(\"foodnstuff\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * ns.httpworm(\"foodnstuff\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "httpworm(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "httpworm" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#isLogEnabled:member(1)", - "docComment": "/**\n * Checks the status of the logging for the given function.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @param fn - Name of function to check.\n *\n * @returns Returns a boolean indicating whether or not logging is enabled for that function (or `ALL`)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "isLogEnabled(fn: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "fn", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "isLogEnabled" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#isRunning:member(1)", - "docComment": "/**\n * Check if a script is running.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * Returns a boolean indicating whether the specified script is running on the target server. If you use a PID instead of a filename, the hostname and args parameters are unnecessary. Remember that a script is uniquely identified by both its name and its arguments.\n *\n * @param script - Filename or PID of script to check. This is case-sensitive.\n *\n * @param host - Host of target server.\n *\n * @param args - Arguments to specify/identify which scripts to search for.\n *\n * @returns True if specified script is running on the target server, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * //The function call will return true if there is a script named foo.script with no arguments running on the foodnstuff server, and false otherwise:\n * isRunning(\"foo.script\", \"foodnstuff\");\n *\n * //The function call will return true if there is a script named foo.script with no arguments running on the current server, and false otherwise:\n * isRunning(\"foo.script\", getHostname());\n *\n * //The function call will return true if there is a script named foo.script running with the arguments 1, 5, and “test” (in that order) on the joesguns server, and false otherwise:\n * isRunning(\"foo.script\", \"joesguns\", 1, 5, \"test\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //The function call will return true if there is a script named foo.script with no arguments running on the foodnstuff server, and false otherwise:\n * ns.isRunning(\"foo.script\", \"foodnstuff\");\n *\n * //The function call will return true if there is a script named foo.script with no arguments running on the current server, and false otherwise:\n * ns.isRunning(\"foo.script\", ns.getHostname());\n *\n * //The function call will return true if there is a script named foo.script running with the arguments 1, 5, and “test” (in that order) on the joesguns server, and false otherwise:\n * ns.isRunning(\"foo.script\", \"joesguns\", 1, 5, \"test\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "isRunning(script: " - }, - { - "kind": "Reference", - "text": "FilenameOrPID", - "canonicalReference": "bitburner!FilenameOrPID:type" - }, - { - "kind": "Content", - "text": ", host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "isRunning" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#kill:member(1)", - "docComment": "/**\n * Terminate another script.\n *\n * @remarks\n *\n * RAM cost: 0.5 GB\n *\n * Kills the script on the target server specified by the script’s name and arguments. Remember that scripts are uniquely identified by both their name and arguments. For example, if `foo.script` is run with the argument 1, then this is not the same as `foo.script` run with the argument 2, even though they have the same code.\n *\n * @param script - Filename or pid of the script to kill\n *\n * @param host - Hostname of the server on which to kill the script.\n *\n * @param args - Arguments to identify which script to kill.\n *\n * @returns True if the script is successfully killed, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * //The following example will try to kill a script named foo.script on the foodnstuff server that was ran with no arguments:\n * kill(\"foo.script\", \"foodnstuff\");\n *\n * //The following will try to kill a script named foo.script on the current server that was ran with no arguments:\n * kill(\"foo.script\", getHostname());\n *\n * //The following will try to kill a script named foo.script on the current server that was ran with the arguments 1 and “foodnstuff”:\n * kill(\"foo.script\", getHostname(), 1, \"foodnstuff\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //The following example will try to kill a script named foo.script on the foodnstuff server that was ran with no arguments:\n * ns.kill(\"foo.script\", \"foodnstuff\");\n *\n * //The following will try to kill a script named foo.script on the current server that was ran with no arguments:\n * ns.kill(\"foo.script\", getHostname());\n *\n * //The following will try to kill a script named foo.script on the current server that was ran with the arguments 1 and “foodnstuff”:\n * ns.kill(\"foo.script\", getHostname(), 1, \"foodnstuff\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "kill(script: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "kill" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#kill:member(2)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "kill(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 2, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "kill" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#killall:member(1)", - "docComment": "/**\n * Terminate all scripts on a server.\n *\n * @remarks\n *\n * RAM cost: 0.5 GB\n *\n * Kills all running scripts on the specified server. This function returns true if any scripts were killed, and false otherwise. In other words, it will return true if there are any scripts running on the target server. If no host is defined, it will kill all scripts, where the script is running.\n *\n * @param host - IP or hostname of the server on which to kill all scripts.\n *\n * @returns True if any scripts were killed, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "killall(host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "killall" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#ls:member(1)", - "docComment": "/**\n * List files on a server.\n *\n * @remarks\n *\n * RAM cost: 0.2 GB\n *\n * Returns an array with the filenames of all files on the specified server (as strings). The returned array is sorted in alphabetic order.\n *\n * @param host - Host of the target server.\n *\n * @param grep - A substring to search for in the filename.\n *\n * @returns Array with the filenames of all files on the specified server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ls(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", grep?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "grep", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "ls" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#mv:member(1)", - "docComment": "/**\n * Move a file on the target server.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * NS2 exclusive\n *\n * Move the source file to the specified destination on the target server.\n *\n * This command only works for scripts and text files (.txt). It cannot, however, be used to convert from script to text file, or vice versa.\n *\n * This function can also be used to rename files.\n *\n * @param host - Host of target server.\n *\n * @param source - Filename of the source file.\n *\n * @param destination - Filename of the destination file.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "mv(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", source: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", destination: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "source", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "destination", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "mv" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#nFormat:member(1)", - "docComment": "/**\n * Format a number\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Converts a number into a string with the specified formatter. This uses the numeraljs library, so the formatters must be compatible with that. This is the same function that the game itself uses to display numbers.\n *\n * see: http://numeraljs.com/\n *\n * @param n - Number to format.\n *\n * @param format - Formatter.\n *\n * @returns Formated number.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "nFormat(n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", format: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "n", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "format", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "nFormat" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#nuke:member(1)", - "docComment": "/**\n * Runs NUKE.exe on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * Running NUKE.exe on a target server gives you root access which means you can executes scripts on said server. NUKE.exe must exist on your home computer.\n *\n * @param host - Hostname of the target server.\n *\n * @example\n * ```ts\n * // NS1:\n * nuke(\"foodnstuff\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * ns.nuke(\"foodnstuff\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "nuke(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "nuke" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#peek:member(1)", - "docComment": "/**\n * Get a copy of the data from a port without popping it.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is used to peek at the data from a port. It returns the first element in the specified port without removing that element. If the port is empty, the string “NULL PORT DATA” will be returned.\n *\n * @param port - Port to peek. Must be an integer between 1 and 20.\n *\n * @returns Data in the specified port.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "peek(port: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "port", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "peek" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#print:member(1)", - "docComment": "/**\n * Prints one or move values or variables to the script’s logs.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @param args - Value(s) to be printed.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "print(...args: " - }, - { - "kind": "Content", - "text": "any[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "print" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#prompt:member(1)", - "docComment": "/**\n * Prompt the player with a Yes/No modal.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Prompts the player with a dialog box with two options: “Yes” and “No”. This function will return true if the player click “Yes” and false if the player clicks “No”. The script’s execution is halted until the player selects one of the options.\n *\n * @param txt - Text to appear in the prompt dialog box.\n *\n * @returns True if the player click “Yes” and false if the player clicks “No”.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "prompt(txt: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "txt", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "prompt" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#ps:member(1)", - "docComment": "/**\n * List running scripts on a server.\n *\n * @remarks\n *\n * RAM cost: 0.2 GB\n *\n * Returns an array with general information about all scripts running on the specified target server.\n *\n * @param host - Host address of the target server. If not specified, it will be the current server’s IP by default.\n *\n * @returns Array with general information about all scripts running on the specified target server.\n *\n * @example\n * ```ts\n * // NS1:\n * const scripts = ps(\"home\");\n * for (let i = 0; i < scripts.length; ++i) {\n * tprint(scripts[i].filename + ' ' + scripts[i].threads);\n * tprint(scripts[i].args);\n * }\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * const ps = ns.ps(\"home\");\n * for (script of ps) {\n * ns.tprint(`${script.filename} ${ps[i].threads}`);\n * ns.tprint(script.args);\n * }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ps(host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "ProcessInfo", - "canonicalReference": "bitburner!ProcessInfo:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "ps" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#purchaseServer:member(1)", - "docComment": "/**\n * Purchase a server.\n *\n * @remarks\n *\n * 2.25 GB\n *\n * Purchased a server with the specified hostname and amount of RAM.\n *\n * The hostname argument can be any data type, but it will be converted to a string and have whitespace removed. Anything that resolves to an empty string will cause the function to fail. If there is already a server with the specified hostname, then the function will automatically append a number at the end of the hostname argument value until it finds a unique hostname. For example, if the script calls `purchaseServer(“foo”, 4)` but a server named “foo” already exists, the it will automatically change the hostname to `foo-0`. If there is already a server with the hostname `foo-0`, then it will change the hostname to `foo-1`, and so on.\n *\n * Note that there is a maximum limit to the amount of servers you can purchase.\n *\n * Returns the hostname of the newly purchased server as a string. If the function fails to purchase a server, then it will return an empty string. The function will fail if the arguments passed in are invalid, if the player does not have enough money to purchase the specified server, or if the player has exceeded the maximum amount of servers.\n *\n * @param hostname - Host of the purchased server.\n *\n * @param ram - Amount of RAM of the purchased server, in GB. Must be a power of 2 (2, 4, 8, 16, etc.). Maximum value of 1048576 (2^20).\n *\n * @returns The hostname of the newly purchased server.\n *\n * @example\n * ```ts\n * // NS1:\n * var ram = 64;\n * var prefix = \"pserv-\";\n * for (i = 0; i < 5; ++i) {\n * purchaseServer(prefix + i, ram);\n * }\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * const ram = 64;\n * const prefix = \"pserv-\";\n * for (i = 0; i < 5; ++i) {\n * ns.purchaseServer(prefix + i, ram);\n * }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseServer(hostname: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ram: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "hostname", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "ram", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "purchaseServer" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#read:member(1)", - "docComment": "/**\n * Read content of a file.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function is used to read data from a text file (.txt).\n *\n * This function will return the data in the specified text file. If the text file does not exist, an empty string will be returned.\n *\n * @param handle - Filename to read from.\n *\n * @returns Data in the specified text file.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "read(handle: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "handle", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "read" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#readPort:member(1)", - "docComment": "/**\n * Read data from a port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Read data from that port. A port is a serialized queue. This function will remove the first element from that queue and return it. If the queue is empty, then the string “NULL PORT DATA” will be returned.\n *\n * @returns the data read.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readPort(port: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "port", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "readPort" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#relaysmtp:member(1)", - "docComment": "/**\n * Runs relaySMTP.exe on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * Runs the relaySMTP.exe program on the target server. relaySMTP.exe must exist on your home computer.\n *\n * @param host - Hostname of the target server.\n *\n * @example\n * ```ts\n * // NS1:\n * relaysmtp(\"foodnstuff\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * ns.relaysmtp(\"foodnstuff\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "relaysmtp(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "relaysmtp" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#rm:member(1)", - "docComment": "/**\n * Delete a file.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Removes the specified file from the current server. This function works for every file type except message (.msg) files.\n *\n * @param name - Filename of file to remove. Must include the extension.\n *\n * @param host - Host Address of the server on which to delete the file. Optional. Defaults to current server.\n *\n * @returns True if it successfully deletes the file, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "rm(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "rm" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#run:member(1)", - "docComment": "/**\n * Start another script on the current server.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Run a script as a separate process. This function can only be used to run scripts located on the current server (the server running the script that calls this function). Requires a significant amount of RAM to run this command.\n *\n * If the script was successfully started, then this functions returns the PID of that script. Otherwise, it returns 0.\n *\n * PID stands for Process ID. The PID is a unique identifier for each script. The PID will always be a positive integer.\n *\n * Running this function with a numThreads argument of 0 will return 0 without running the script. However, running this function with a negative numThreads argument will cause a runtime error.\n *\n * @param script - Filename of script to run.\n *\n * @param numThreads - Optional thread count for new script. Set to 1 by default. Will be rounded to nearest integer.\n *\n * @param args - Additional arguments to pass into the new script that is being run. Note that if any arguments are being passed into the new script, then the second argument numThreads must be filled in with a value.\n *\n * @returns Returns the PID of a successfully started script, and 0 otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * //The simplest way to use the run command is to call it with just the script name. The following example will run ‘foo.script’ single-threaded with no arguments:\n * run(\"foo.script\");\n *\n * //The following example will run ‘foo.script’ but with 5 threads instead of single-threaded:\n * run(\"foo.script\", 5);\n *\n * //This next example will run ‘foo.script’ single-threaded, and will pass the string ‘foodnstuff’ into the script as an argument:\n * run(\"foo.script\", 1, 'foodnstuff');\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //The simplest way to use the run command is to call it with just the script name. The following example will run ‘foo.script’ single-threaded with no arguments:\n * ns.run(\"foo.script\");\n *\n * //The following example will run ‘foo.script’ but with 5 threads instead of single-threaded:\n * ns.run(\"foo.script\", 5);\n *\n * //This next example will run ‘foo.script’ single-threaded, and will pass the string ‘foodnstuff’ into the script as an argument:\n * ns.run(\"foo.script\", 1, 'foodnstuff');\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "run(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", numThreads?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Reference", - "text": "Array", - "canonicalReference": "!Array:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 8, - "endIndex": 9 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "numThreads", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - } - } - ], - "name": "run" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#scan:member(1)", - "docComment": "/**\n * Get the list of servers connected to a server.\n *\n * @remarks\n *\n * RAM cost: 0.2 GB\n *\n * Returns an array containing the hostnames of all servers that are one node way from the specified target server. The hostnames in the returned array are strings.\n *\n * @param host - Optional, Hostname of the server to scan, default to current server.\n *\n * @returns Returns an string of hostnames.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "scan(host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "scan" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#scp:member(1)", - "docComment": "/**\n * Copy file between servers.\n *\n * @remarks\n *\n * RAM cost: 0.6 GB\n *\n * Copies a script or literature (.lit) file(s) to another server. The files argument can be either a string specifying a single file to copy, or an array of strings specifying multiple files to copy.\n *\n * @param files - Filename or an array of filenames of script/literature files to copy.\n *\n * @param source - Host of the source server, which is the server from which the file will be copied. This argument is optional and if it’s omitted the source will be the current server.\n *\n * @param destination - Host of the destination server, which is the server to which the file will be copied.\n *\n * @returns True if the script/literature file is successfully copied over and false otherwise. If the files argument is an array then this function will return true if at least one of the files in the array is successfully copied.\n *\n * @example\n * ```ts\n * // NS1:\n * //Copies foo.lit from the helios server to the home computer:\n * scp(\"foo.lit\", \"helios\", \"home\");\n *\n * //Tries to copy three files from rothman-uni to home computer:\n * files = [\"foo1.lit\", \"foo2.script\", \"foo3.script\"];\n * scp(files, \"rothman-uni\", \"home\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //Copies foo.lit from the helios server to the home computer:\n * await ns.scp(\"foo.lit\", \"helios\", \"home\");\n *\n * //Tries to copy three files from rothman-uni to home computer:\n * files = [\"foo1.lit\", \"foo2.script\", \"foo3.script\"];\n * await ns.scp(files, \"rothman-uni\", \"home\");\n * ```\n *\n * @example\n * ```ts\n * //ns2, copies files from home to a target server\n * const server = ns.args[0];\n * const files = [\"hack.js\",\"weaken.js\",\"grow.js\"];\n * await ns.scp(files, \"home\", server);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "scp(files: " - }, - { - "kind": "Content", - "text": "string | string[]" - }, - { - "kind": "Content", - "text": ", destination: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "files", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "destination", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "scp" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#scp:member(2)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "scp(files: " - }, - { - "kind": "Content", - "text": "string | string[]" - }, - { - "kind": "Content", - "text": ", source: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", destination: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 9 - }, - "releaseTag": "Public", - "overloadIndex": 2, - "parameters": [ - { - "parameterName": "files", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "source", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "destination", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "scp" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#scriptKill:member(1)", - "docComment": "/**\n * Kill all scripts with a filename.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Kills all scripts with the specified filename on the target server specified by hostname, regardless of arguments.\n *\n * @param script - Filename of script to kill. This is case-sensitive.\n *\n * @param host - Host of target server.\n *\n * @returns true if one or more scripts were successfully killed, and false if none were.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "scriptKill(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "scriptKill" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#scriptRunning:member(1)", - "docComment": "/**\n * Check if any script with a filename is running.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Returns a boolean indicating whether any instance of the specified script is running on the target server, regardless of its arguments.\n *\n * This is different than the isRunning function because it does not try to identify a specific instance of a running script by its arguments.\n *\n * @param script - Filename of script to check. This is case-sensitive.\n *\n * @param host - Host of target server.\n *\n * @returns True if the specified script is running, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * //The function call will return true if there is any script named foo.script running on the foodnstuff server, and false otherwise:\n * scriptRunning(\"foo.script\", \"foodnstuff\");\n *\n * //The function call will return true if there is any script named “foo.script” running on the current server, and false otherwise:\n * scriptRunning(\"foo.script\", getHostname());\n * ```\n *\n * *\n *\n * @example\n * ```ts\n * // NS2:\n * //The function call will return true if there is any script named foo.script running on the foodnstuff server, and false otherwise:\n * ns.scriptRunning(\"foo.script\", \"foodnstuff\");\n *\n * //The function call will return true if there is any script named “foo.script” running on the current server, and false otherwise:\n * ns.scriptRunning(\"foo.script\", ns.getHostname());\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "scriptRunning(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "scriptRunning" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#serverExists:member(1)", - "docComment": "/**\n * Returns a boolean denoting whether or not the specified server exists.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB\n *\n * @param host - Host of target server.\n *\n * @returns True if specified server exists, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "serverExists(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "serverExists" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#share:member(1)", - "docComment": "/**\n * Share your computer with your factions.\n *\n * @remarks\n *\n * RAM cost: 2.4 GB\n *\n * Increases your rep gain of hacking contracts while share is called. Scales with thread count.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "share(): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "share" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#sleep:member(1)", - "docComment": "/**\n * Suspends the script for n milliseconds.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @param millis - Number of milliseconds to sleep.\n *\n * @returns \n *\n * @example\n * ```ts\n * // NS1:\n * // This will count from 1 to 10 in your terminal, with one number every 5 seconds\n * for (var i=0; i<10; i++) {\n * tprint(i + 1);\n * sleep(5000);\n * }\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * // This will count from 1 to 10 in your terminal, with one number every 5 seconds\n * for (var i=0; i<10; i++) {\n * ns.tprint(i + 1);\n * await ns.sleep(5000);\n * }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sleep(millis: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "millis", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "sleep" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#sleeve:member", - "docComment": "/**\n * Namespace for sleeve functions.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly sleeve: " - }, - { - "kind": "Reference", - "text": "Sleeve", - "canonicalReference": "bitburner!Sleeve:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sleeve", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#spawn:member(1)", - "docComment": "/**\n * Terminate current script and start another in 10s.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * Terminates the current script, and then after a delay of about 10 seconds it will execute the newly-specified script. The purpose of this function is to execute a new script without being constrained by the RAM usage of the current one. This function can only be used to run scripts on the local server.\n *\n * Because this function immediately terminates the script, it does not have a return value.\n *\n * @param script - Filename of script to execute.\n *\n * @param numThreads - Number of threads to spawn new script with. Will be rounded to nearest integer.\n *\n * @param args - Additional arguments to pass into the new script that is being run.\n *\n * @example\n * ```ts\n * // NS1:\n * //The following example will execute the script ‘foo.script’ with 10 threads and the arguments ‘foodnstuff’ and 90:\n * spawn('foo.script', 10, 'foodnstuff', 90);\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //The following example will execute the script ‘foo.script’ with 10 threads and the arguments ‘foodnstuff’ and 90:\n * ns.spawn('foo.script', 10, 'foodnstuff', 90);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "spawn(script: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", numThreads?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "script", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "numThreads", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "spawn" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#sprintf:member(1)", - "docComment": "/**\n * Format a string.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * see: https://github.com/alexei/sprintf.js\n *\n * @param format - String to format.\n *\n * @param args - Formating arguments.\n *\n * @returns Formated text.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sprintf(format: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "any[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "format", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "sprintf" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#sqlinject:member(1)", - "docComment": "/**\n * Runs SQLInject.exe on a server.\n *\n * @remarks\n *\n * RAM cost: 0.05 GB\n *\n * @param host - Hostname of the target server.\n *\n * @example\n * ```ts\n * // NS1:\n * sqlinject(\"foodnstuff\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * ns.sqlinject(\"foodnstuff\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sqlinject(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "sqlinject" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#stanek:member", - "docComment": "/**\n * Namespace for stanek functions. RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly stanek: " - }, - { - "kind": "Reference", - "text": "Stanek", - "canonicalReference": "bitburner!Stanek:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "stanek", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#stock:member", - "docComment": "/**\n * Namespace for stock functions.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly stock: " - }, - { - "kind": "Reference", - "text": "TIX", - "canonicalReference": "bitburner!TIX:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "stock", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#tail:member(1)", - "docComment": "/**\n * Open the tail window of a script.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Opens a script’s logs. This is functionally the same as the tail Terminal command.\n *\n * If the function is called with no arguments, it will open the current script’s logs.\n *\n * Otherwise, the fn, hostname/ip, and args… arguments can be used to get the logs from another script. Remember that scripts are uniquely identified by both their names and arguments.\n *\n * @param fn - Optional. Filename or PID of the script being tailed. If omitted, the current script is tailed.\n *\n * @param host - Optional. Hostname of the script being tailed. Defaults to the server this script is running on. If args are specified, this is not optional.\n *\n * @param args - Arguments for the script being tailed.\n *\n * @example\n * ```ts\n * // NS1:\n * //Open logs from foo.script on the current server that was run with no args\n * tail(\"foo.script\");\n *\n * //Get logs from foo.script on the foodnstuff server that was run with no args\n * tail(\"foo.script\", \"foodnstuff\");\n *\n * //Get logs from foo.script on the foodnstuff server that was run with the arguments [1, \"test\"]\n * tail(\"foo.script\", \"foodnstuff\", 1, \"test\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //Open logs from foo.script on the current server that was run with no args\n * ns.tail(\"foo.script\");\n *\n * //Get logs from foo.script on the foodnstuff server that was run with no args\n * ns.tail(\"foo.script\", \"foodnstuff\");\n *\n * //Get logs from foo.script on the foodnstuff server that was run with the arguments [1, \"test\"]\n * ns.tail(\"foo.script\", \"foodnstuff\", 1, \"test\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "tail(fn?: " - }, - { - "kind": "Reference", - "text": "FilenameOrPID", - "canonicalReference": "bitburner!FilenameOrPID:type" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...args: " - }, - { - "kind": "Content", - "text": "any[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "fn", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "tail" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#tFormat:member(1)", - "docComment": "/**\n * Format time to readable string\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @param milliseconds - Number of millisecond to format.\n *\n * @param milliPrecision - Format time with subsecond precision, defaults to false.\n *\n * @returns The formatted time.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "tFormat(milliseconds: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", milliPrecision?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "milliseconds", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "milliPrecision", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "tFormat" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#toast:member(1)", - "docComment": "/**\n * Queue a toast (bottom-right notification).\n *\n * @param msg - Message in the toast.\n *\n * @param variant - Type of toast, must be one of success, info, warning, error. Defaults to success.\n *\n * @param duration - Duration of toast in ms. Can also be `null` to create a persistent toast. Defaults to 2000\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "toast(msg: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ", variant?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", duration?: " - }, - { - "kind": "Content", - "text": "number | null" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "msg", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "variant", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "duration", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "toast" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#tprint:member(1)", - "docComment": "/**\n * Prints one or more values or variables to the Terminal.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @param args - Value(s) to be printed.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "tprint(...args: " - }, - { - "kind": "Content", - "text": "any[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "tprint" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#tprintf:member(1)", - "docComment": "/**\n * Prints a raw value or a variable to the Terminal.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @param format - format of the message\n *\n * @param msg - Value to be printed.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "tprintf(format: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", ...values: " - }, - { - "kind": "Content", - "text": "any[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "format", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "values", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "tprintf" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#tryWritePort:member(1)", - "docComment": "/**\n * Attempt to write to a port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Attempts to write data to the specified Netscript Port. If the port is full, the data will not be written. Otherwise, the data will be written normally.\n *\n * @param port - Port or text file that will be written to.\n *\n * @param data - Data to write.\n *\n * @returns True if the data is successfully written to the port, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "tryWritePort(port: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", data: " - }, - { - "kind": "Content", - "text": "string[] | number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "port", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "data", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "tryWritePort" - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!NS#ui:member", - "docComment": "/**\n * Namespace for user interface functions. RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "readonly ui: " - }, - { - "kind": "Reference", - "text": "UserInterface", - "canonicalReference": "bitburner!UserInterface:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ui", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#vsprintf:member(1)", - "docComment": "/**\n * Format a string with an array of arguments.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * see: https://github.com/alexei/sprintf.js\n *\n * @param format - String to format.\n *\n * @param args - Formating arguments.\n *\n * @returns Formated text.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "vsprintf(format: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", args: " - }, - { - "kind": "Content", - "text": "any[]" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "format", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "args", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "vsprintf" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#weaken:member(1)", - "docComment": "/**\n * Reduce a server security level.\n *\n * @remarks\n *\n * RAM cost: 0.15 GB\n *\n * Use your hacking skills to attack a server’s security, lowering the server’s security level. The runtime for this command depends on your hacking level and the target server’s security level when this function is called. This function lowers the security level of the target server by 0.05.\n *\n * Like hack and grow, `weaken` can be called on any server, regardless of where the script is running. This command requires root access to the target server, but there is no required hacking level to run the command.\n *\n * @param host - Hostname of the target server to weaken.\n *\n * @param opts - Optional parameters for configuring function behavior.\n *\n * @returns The amount by which the target server’s security level was decreased. This is equivalent to 0.05 multiplied by the number of script threads.\n *\n * @example\n * ```ts\n * // NS1:\n * var currentSecurity = getServerSecurityLevel(\"foodnstuff\");\n * currentSecurity = currentSecurity - weaken(\"foodnstuff\");\n * currentSecurity = currentSecurity - weaken(\"foodnstuff\", { threads: 5 }); // Only use 5 threads to weaken\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * let currentSecurity = ns.getServerSecurityLevel(\"foodnstuff\");\n * currentSecurity -= await ns.weaken(\"foodnstuff\");\n * currentSecurity -= await ns.weaken(\"foodnstuff\", { threads: 5 }); // Only use 5 threads to weaken\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "weaken(host: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", opts?: " - }, - { - "kind": "Reference", - "text": "BasicHGWOptions", - "canonicalReference": "bitburner!BasicHGWOptions:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "opts", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "weaken" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#weakenAnalyze:member(1)", - "docComment": "/**\n * Predict the effect of weaken.\n *\n * @remarks\n *\n * RAM cost: 1 GB\n *\n * Returns the security decrease that would occur if a weaken with this many threads happened.\n *\n * @param threads - Amount of threads that will be used.\n *\n * @param cores - Optional. The number of cores of the server that would run weaken.\n *\n * @returns The security decrease.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "weakenAnalyze(threads: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", cores?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "threads", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cores", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "weakenAnalyze" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#wget:member(1)", - "docComment": "/**\n * Download a file from the internet.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Retrieves data from a URL and downloads it to a file on the specified server. The data can only be downloaded to a script (.script, .ns, .js) or a text file (.txt). If the file already exists, it will be overwritten by this command. Note that it will not be possible to download data from many websites because they do not allow cross-origin resource sharing (CORS).\n *\n * IMPORTANT: This is an asynchronous function that returns a Promise. The Promise’s resolved value will be a boolean indicating whether or not the data was successfully retrieved from the URL. Because the function is async and returns a Promise, it is recommended you use wget in NetscriptJS (Netscript 2.0).\n *\n * In NetscriptJS, you must preface any call to wget with the await keyword (like you would hack or sleep). wget will still work in Netscript 1.0, but the functions execution will not be synchronous (i.e. it may not execute when you expect/want it to). Furthermore, since Promises are not supported in ES5, you will not be able to process the returned value of wget in Netscript 1.0.\n *\n * @param url - URL to pull data from.\n *\n * @param target - Filename to write data to. Must be script or text file.\n *\n * @param host - Optional hostname/ip of server for target file.\n *\n * @returns True if the data was successfully retrieved from the URL, false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * wget(\"https://raw.githubusercontent.com/danielyxie/bitburner/master/README.md\", \"game_readme.txt\");\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * await ns.wget(\"https://raw.githubusercontent.com/danielyxie/bitburner/master/README.md\", \"game_readme.txt\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "wget(url: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", target: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", host?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 9 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "url", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "target", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "host", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "wget" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#write:member(1)", - "docComment": "/**\n * Write data to a file.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * This function can be used to write data to a text file (.txt).\n *\n * This function will write data to that text file. If the specified text file does not exist, then it will be created. The third argument mode, defines how the data will be written to the text file. If *mode is set to “w”, then the data is written in “write” mode which means that it will overwrite all existing data on the text file. If mode is set to any other value then the data will be written in “append” mode which means that the data will be added at the end of the text file.\n *\n * @param handle - Filename of the text file that will be written to.\n *\n * @param data - Data to write.\n *\n * @param mode - Defines the write mode. Only valid when writing to text files.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "write(handle: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", data?: " - }, - { - "kind": "Content", - "text": "string[] | number | string" - }, - { - "kind": "Content", - "text": ", mode?: " - }, - { - "kind": "Content", - "text": "\"w\" | \"a\"" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 9 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "handle", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "data", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "mode", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "write" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!NS#writePort:member(1)", - "docComment": "/**\n * Write data to a port.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * Write data to that netscript port.\n *\n * @returns The data popped off the queue if it was full.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "writePort(port: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", data: " - }, - { - "kind": "Content", - "text": "string | number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "port", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "data", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "writePort" - } - ], - "extendsTokenRanges": [ - { - "startIndex": 1, - "endIndex": 3 - } - ] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Office:interface", - "docComment": "/**\n * Office for a division in a city.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface Office " - } - ], - "releaseTag": "Public", - "name": "Office", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#employeeProd:member", - "docComment": "/**\n * Positions of the employees\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "employeeProd: " - }, - { - "kind": "Reference", - "text": "EmployeeJobs", - "canonicalReference": "bitburner!EmployeeJobs:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "employeeProd", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#employees:member", - "docComment": "/**\n * Name of all the employees\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "employees: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "employees", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#loc:member", - "docComment": "/**\n * City of the office\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "loc: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "loc", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#maxEne:member", - "docComment": "/**\n * Maximum amount of energy of the employees\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxEne: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "maxEne", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#maxHap:member", - "docComment": "/**\n * Maximum happiness of the employees\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxHap: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "maxHap", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#maxMor:member", - "docComment": "/**\n * Maximum morale of the employees\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxMor: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "maxMor", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#minEne:member", - "docComment": "/**\n * Minimum amount of energy of the employees\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "minEne: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "minEne", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#minHap:member", - "docComment": "/**\n * Minimum happiness of the employees\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "minHap: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "minHap", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Office#size:member", - "docComment": "/**\n * Maximum number of employee\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "size: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "size", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!OfficeAPI:interface", - "docComment": "/**\n * Corporation Office API\n *\n * @remarks\n *\n * Requires the Office API upgrade from your corporation.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface OfficeAPI " - } - ], - "releaseTag": "Public", - "name": "OfficeAPI", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#assignJob:member(1)", - "docComment": "/**\n * Assign an employee to a job.\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param employeeName - name of the employee\n *\n * @param job - Name of the job.\n *\n * @returns A promise that is fulfilled when the assignment is complete.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "assignJob(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", employeeName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", job: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 11 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "employeeName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "job", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "assignJob" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#buyCoffee:member(1)", - "docComment": "/**\n * Buy coffee for your employees\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @returns A promise that is fulfilled when the coffee is served.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "buyCoffee(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "buyCoffee" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#getEmployee:member(1)", - "docComment": "/**\n * Get data about an employee\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param employeeName - Name of the employee\n *\n * @returns Employee data\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getEmployee(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", employeeName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Employee", - "canonicalReference": "bitburner!Employee:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "employeeName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getEmployee" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#getHireAdVertCost:member(1)", - "docComment": "/**\n * Get the cost to Hire AdVert\n *\n * @param divisionName - Name of the division\n *\n * @returns Cost\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHireAdVertCost(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getHireAdVertCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#getHireAdVertCount:member(1)", - "docComment": "/**\n * Get the number of times you have Hired AdVert\n *\n * @param divisionName - Name of the division\n *\n * @returns Number of times you have Hired AdVert\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getHireAdVertCount(adivisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "adivisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getHireAdVertCount" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#getOffice:member(1)", - "docComment": "/**\n * Get data about an office\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @returns Office data\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getOffice(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Office", - "canonicalReference": "bitburner!Office:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getOffice" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#getOfficeSizeUpgradeCost:member(1)", - "docComment": "/**\n * Cost to Upgrade office size.\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param size - Amount of positions to open\n *\n * @returns Cost of upgrading the office\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getOfficeSizeUpgradeCost(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", asize: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "asize", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getOfficeSizeUpgradeCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#getResearchCost:member(1)", - "docComment": "/**\n * Get the cost to unlock research\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @returns cost\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getResearchCost(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", researchName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "researchName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getResearchCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#hasResearched:member(1)", - "docComment": "/**\n * Gets if you have unlocked a research\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @returns true is unlocked, false if not\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hasResearched(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", researchName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "researchName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hasResearched" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#hireAdVert:member(1)", - "docComment": "/**\n * Hire AdVert.\n *\n * @param divisionName - Name of the division\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hireAdVert(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "hireAdVert" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#hireEmployee:member(1)", - "docComment": "/**\n * Hire an employee.\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @returns The newly hired employee, if any\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hireEmployee(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Employee", - "canonicalReference": "bitburner!Employee:interface" - }, - { - "kind": "Content", - "text": " | undefined" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hireEmployee" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#research:member(1)", - "docComment": "/**\n * Purchase a research\n *\n * @param divisionName - Name of the division\n *\n * @param researchName - Name of the research\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "research(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", researchName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "researchName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "research" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#setAutoJobAssignment:member(1)", - "docComment": "/**\n * Set the auto job assignment for a job\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param job - Name of the job\n *\n * @param amount - Number of employees to assign to that job\n *\n * @returns A promise that is fulfilled when the assignment is complete.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setAutoJobAssignment(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", job: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", amount: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 11 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "job", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "amount", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "setAutoJobAssignment" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#throwParty:member(1)", - "docComment": "/**\n * Throw a party for your employees\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param costPerEmployee - Amount to spend per employee.\n *\n * @returns Amount of happiness increased.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "throwParty(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", costPerEmployee: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 9 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "costPerEmployee", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "throwParty" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!OfficeAPI#upgradeOfficeSize:member(1)", - "docComment": "/**\n * Upgrade office size.\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param size - Amount of positions to open\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeOfficeSize(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", size: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "size", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "upgradeOfficeSize" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Enum", - "canonicalReference": "bitburner!OrderTypes:enum", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export enum OrderTypes " - } - ], - "releaseTag": "Public", - "name": "OrderTypes", - "members": [ - { - "kind": "EnumMember", - "canonicalReference": "bitburner!OrderTypes.LimitBuy:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "LimitBuy = " - }, - { - "kind": "Content", - "text": "\"Limit Buy Order\"" - } - ], - "releaseTag": "Public", - "name": "LimitBuy", - "initializerTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "EnumMember", - "canonicalReference": "bitburner!OrderTypes.LimitSell:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "LimitSell = " - }, - { - "kind": "Content", - "text": "\"Limit Sell Order\"" - } - ], - "releaseTag": "Public", - "name": "LimitSell", - "initializerTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "EnumMember", - "canonicalReference": "bitburner!OrderTypes.StopBuy:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "StopBuy = " - }, - { - "kind": "Content", - "text": "\"Stop Buy Order\"" - } - ], - "releaseTag": "Public", - "name": "StopBuy", - "initializerTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "EnumMember", - "canonicalReference": "bitburner!OrderTypes.StopSell:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "StopSell = " - }, - { - "kind": "Content", - "text": "\"Stop Sell Order\"" - } - ], - "releaseTag": "Public", - "name": "StopSell", - "initializerTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Player:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface Player " - } - ], - "releaseTag": "Public", - "name": "Player", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#agility_exp_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility_exp_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#agility_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#agility_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#agility:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#bitNodeN:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "bitNodeN: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "bitNodeN", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#bladeburner_analysis_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "bladeburner_analysis_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "bladeburner_analysis_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#bladeburner_max_stamina_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "bladeburner_max_stamina_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "bladeburner_max_stamina_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#bladeburner_stamina_gain_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "bladeburner_stamina_gain_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "bladeburner_stamina_gain_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#bladeburner_success_chance_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "bladeburner_success_chance_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "bladeburner_success_chance_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#charisma_exp_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma_exp_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "charisma_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#charisma_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "charisma_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#charisma_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "charisma_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#charisma:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "charisma", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#city:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "city: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "city", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#className:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "className: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "className", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#company_rep_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "company_rep_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "company_rep_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#companyName:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "companyName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "companyName", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#createProgramName:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "createProgramName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "createProgramName", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#createProgramReqLvl:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "createProgramReqLvl: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "createProgramReqLvl", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#crime_money_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "crime_money_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "crime_money_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#crime_success_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "crime_success_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "crime_success_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#crimeType:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "crimeType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "crimeType", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#currentWorkFactionDescription:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "currentWorkFactionDescription: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "currentWorkFactionDescription", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#currentWorkFactionName:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "currentWorkFactionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "currentWorkFactionName", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#defense_exp_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense_exp_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#defense_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#defense_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#defense:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#dexterity_exp_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity_exp_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#dexterity_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#dexterity_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#dexterity:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#faction_rep_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "faction_rep_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "faction_rep_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#factions:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "factions: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "factions", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacking_chance_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_chance_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_chance_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacking_exp_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_exp_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacking_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacking_grow_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_grow_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_grow_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacking_money_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_money_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_money_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacking_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacking_speed_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking_speed_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking_speed_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacking:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacknet_node_core_cost_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_core_cost_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacknet_node_core_cost_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacknet_node_level_cost_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_level_cost_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacknet_node_level_cost_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacknet_node_money_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_money_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacknet_node_money_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacknet_node_purchase_cost_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_purchase_cost_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacknet_node_purchase_cost_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hacknet_node_ram_cost_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacknet_node_ram_cost_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacknet_node_ram_cost_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#has4SData:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "has4SData: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "has4SData", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#has4SDataTixApi:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "has4SDataTixApi: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "has4SDataTixApi", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hasCorporation:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hasCorporation: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hasCorporation", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hasTixApiAccess:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hasTixApiAccess: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hasTixApiAccess", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hasWseAccount:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hasWseAccount: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hasWseAccount", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#hp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "hp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#intelligence:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "intelligence: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "intelligence", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#isWorking:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "isWorking: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "isWorking", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#jobs:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "jobs: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "jobs", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#location:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "location: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "location", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#max_hp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "max_hp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "max_hp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#money:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "money: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "money", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#numPeopleKilled:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "numPeopleKilled: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "numPeopleKilled", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#playtimeSinceLastAug:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "playtimeSinceLastAug: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "playtimeSinceLastAug", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#playtimeSinceLastBitnode:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "playtimeSinceLastBitnode: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "playtimeSinceLastBitnode", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#strength_exp_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength_exp_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength_exp_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#strength_exp:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength_exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength_exp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#strength_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#strength:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#tor:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "tor: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "tor", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#totalPlaytime:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "totalPlaytime: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "totalPlaytime", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#work_money_mult:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "work_money_mult: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "work_money_mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workAgiExpGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workAgiExpGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workAgiExpGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workAgiExpGainRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workAgiExpGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workAgiExpGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workChaExpGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workChaExpGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workChaExpGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workChaExpGainRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workChaExpGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workChaExpGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workDefExpGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workDefExpGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workDefExpGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workDefExpGainRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workDefExpGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workDefExpGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workDexExpGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workDexExpGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workDexExpGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workDexExpGainRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workDexExpGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workDexExpGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workHackExpGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workHackExpGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workHackExpGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workHackExpGainRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workHackExpGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workHackExpGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workMoneyGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workMoneyGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workMoneyGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workMoneyGainRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workMoneyGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workMoneyGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workMoneyLossRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workMoneyLossRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workMoneyLossRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workRepGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workRepGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workRepGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workRepGainRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workRepGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workRepGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workStrExpGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workStrExpGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workStrExpGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workStrExpGainRate:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workStrExpGainRate: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workStrExpGainRate", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Player#workType:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "workType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workType", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!PlayerSkills:interface", - "docComment": "/**\n * Short summary of the players skills.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface PlayerSkills " - } - ], - "releaseTag": "Public", - "name": "PlayerSkills", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!PlayerSkills#agility:member", - "docComment": "/**\n * Agility level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!PlayerSkills#charisma:member", - "docComment": "/**\n * Chraisma level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "charisma", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!PlayerSkills#defense:member", - "docComment": "/**\n * Defense level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!PlayerSkills#dexterity:member", - "docComment": "/**\n * Dexterity level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!PlayerSkills#hacking:member", - "docComment": "/**\n * Hacking level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!PlayerSkills#intelligence:member", - "docComment": "/**\n * Intelligence level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "intelligence: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "intelligence", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!PlayerSkills#strength:member", - "docComment": "/**\n * Strength level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Enum", - "canonicalReference": "bitburner!PositionTypes:enum", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export enum PositionTypes " - } - ], - "releaseTag": "Public", - "name": "PositionTypes", - "members": [ - { - "kind": "EnumMember", - "canonicalReference": "bitburner!PositionTypes.Long:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Long = " - }, - { - "kind": "Content", - "text": "\"L\"" - } - ], - "releaseTag": "Public", - "name": "Long", - "initializerTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "EnumMember", - "canonicalReference": "bitburner!PositionTypes.Short:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "Short = " - }, - { - "kind": "Content", - "text": "\"S\"" - } - ], - "releaseTag": "Public", - "name": "Short", - "initializerTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!ProcessInfo:interface", - "docComment": "/**\n * A single process on a server.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface ProcessInfo " - } - ], - "releaseTag": "Public", - "name": "ProcessInfo", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ProcessInfo#args:member", - "docComment": "/**\n * Script's arguments\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "args: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "args", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ProcessInfo#filename:member", - "docComment": "/**\n * Script name.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "filename: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "filename", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ProcessInfo#pid:member", - "docComment": "/**\n * Process ID\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "pid: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "pid", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!ProcessInfo#threads:member", - "docComment": "/**\n * Number of threads script is running with\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "threads: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "threads", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Product:interface", - "docComment": "/**\n * Product in a warehouse\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface Product " - } - ], - "releaseTag": "Public", - "name": "Product", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Product#cityData:member", - "docComment": "/**\n * Data refers to the production, sale, and quantity of the products These values are specific to a city For each city, the data is [qty, prod, sell]\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cityData: " - }, - { - "kind": "Content", - "text": "{ [key: string]: number[] }" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cityData", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Product#cmp:member", - "docComment": "/**\n * Competition for the product\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cmp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cmp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Product#developmentProgress:member", - "docComment": "/**\n * Creation progress - A number between 0-100 representing percentage\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "developmentProgress: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "developmentProgress", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Product#dmd:member", - "docComment": "/**\n * Demand for the product\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dmd: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dmd", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Product#name:member", - "docComment": "/**\n * Name of the product\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "name", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Product#pCost:member", - "docComment": "/**\n * Production cost\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "pCost: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "pCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Product#sCost:member", - "docComment": "/**\n * Sell cost, can be \"MP+5\"\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sCost: " - }, - { - "kind": "Content", - "text": "string | number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sCost", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!RunningScript:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface RunningScript " - } - ], - "releaseTag": "Public", - "name": "RunningScript", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#args:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "args: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "args", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#filename:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "filename: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "filename", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#logs:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "logs: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "logs", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#offlineExpGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "offlineExpGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "offlineExpGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#offlineMoneyMade:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "offlineMoneyMade: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "offlineMoneyMade", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#offlineRunningTime:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "offlineRunningTime: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "offlineRunningTime", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#onlineExpGained:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "onlineExpGained: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "onlineExpGained", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#onlineMoneyMade:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "onlineMoneyMade: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "onlineMoneyMade", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#onlineRunningTime:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "onlineRunningTime: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "onlineRunningTime", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#pid:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "pid: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "pid", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#ramUsage:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "ramUsage: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ramUsage", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#server:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "server: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "server", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!RunningScript#threads:member", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "threads: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "threads", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Server:interface", - "docComment": "/**\n * A single server.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Server " - } - ], - "releaseTag": "Public", - "name": "Server", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#backdoorInstalled:member", - "docComment": "/**\n * Flag indicating whether this server has a backdoor installed by a player\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "backdoorInstalled: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "backdoorInstalled", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#baseDifficulty:member", - "docComment": "/**\n * Initial server security level (i.e. security level when the server was created)\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "baseDifficulty: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "baseDifficulty", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#cpuCores:member", - "docComment": "/**\n * How many CPU cores this server has. Maximum of 8. Affects magnitude of grow and weaken.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cpuCores: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "cpuCores", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#ftpPortOpen:member", - "docComment": "/**\n * Flag indicating whether the FTP port is open\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ftpPortOpen: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ftpPortOpen", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#hackDifficulty:member", - "docComment": "/**\n * Server Security Level\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hackDifficulty: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hackDifficulty", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#hasAdminRights:member", - "docComment": "/**\n * Flag indicating whether player has admin/root access to this server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hasAdminRights: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hasAdminRights", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#hostname:member", - "docComment": "/**\n * Hostname. Must be unique\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hostname: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hostname", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#httpPortOpen:member", - "docComment": "/**\n * Flag indicating whether HTTP Port is open\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "httpPortOpen: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "httpPortOpen", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#ip:member", - "docComment": "/**\n * IP Address. Must be unique\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ip: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ip", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#isConnectedTo:member", - "docComment": "/**\n * Flag indicating whether player is curently connected to this server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "isConnectedTo: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "isConnectedTo", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#maxRam:member", - "docComment": "/**\n * RAM (GB) available on this server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxRam: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "maxRam", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#minDifficulty:member", - "docComment": "/**\n * Minimum server security level that this server can be weakened to\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "minDifficulty: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "minDifficulty", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#moneyAvailable:member", - "docComment": "/**\n * How much money currently resides on the server and can be hacked\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "moneyAvailable: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "moneyAvailable", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#moneyMax:member", - "docComment": "/**\n * Maximum amount of money that this server can hold\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "moneyMax: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "moneyMax", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#numOpenPortsRequired:member", - "docComment": "/**\n * Number of open ports required in order to gain admin/root access\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "numOpenPortsRequired: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "numOpenPortsRequired", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#openPortCount:member", - "docComment": "/**\n * How many ports are currently opened on the server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "openPortCount: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "openPortCount", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#organizationName:member", - "docComment": "/**\n * Name of company/faction/etc. that this server belongs to. Optional, not applicable to all Servers\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "organizationName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "organizationName", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#purchasedByPlayer:member", - "docComment": "/**\n * Flag indicating whether this is a purchased server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchasedByPlayer: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "purchasedByPlayer", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#ramUsed:member", - "docComment": "/**\n * RAM (GB) used. i.e. unavailable RAM\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "ramUsed: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "ramUsed", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#requiredHackingSkill:member", - "docComment": "/**\n * Hacking level required to hack this server\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "requiredHackingSkill: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "requiredHackingSkill", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#serverGrowth:member", - "docComment": "/**\n * Parameter that affects how effectively this server's money can be increased using the grow() Netscript function\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "serverGrowth: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "serverGrowth", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#smtpPortOpen:member", - "docComment": "/**\n * Flag indicating whether SMTP Port is open\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "smtpPortOpen: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "smtpPortOpen", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#sqlPortOpen:member", - "docComment": "/**\n * Flag indicating whether SQL Port is open\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sqlPortOpen: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sqlPortOpen", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Server#sshPortOpen:member", - "docComment": "/**\n * Flag indicating whether the SSH Port is open\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sshPortOpen: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sshPortOpen", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Singularity:interface", - "docComment": "/**\n * Singularity API\n *\n * @remarks\n *\n * This API requires Source-File 4 to use. The RAM cost of all these functions is multiplied by 16/4/1 based on Source-File 4 levels.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Singularity " - } - ], - "releaseTag": "Public", - "name": "Singularity", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#applyToCompany:member(1)", - "docComment": "/**\n * Apply for a job at a company.\n *\n * @remarks\n *\n * RAM cost: 3 GB * 16/4/1\n *\n * This function will automatically try to apply to the specified company for a position in the specified field. This function can also be used to apply for promotions by specifying the company and field you are already employed at.\n *\n * This function will return true if you successfully get a job/promotion, and false otherwise. Note that if you are trying to use this function to apply for a promotion and you don’t get one, it will return false.\n *\n * @param companyName - Name of company to apply to.\n *\n * @param field - Field to which you want to apply.\n *\n * @returns True if the player successfully get a job/promotion, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "applyToCompany(companyName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", field: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "companyName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "field", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "applyToCompany" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#checkFactionInvitations:member(1)", - "docComment": "/**\n * List all current faction invitations.\n *\n * @remarks\n *\n * RAM cost: 3 GB * 16/4/1\n *\n * Returns an array with the name of all Factions you currently have oustanding invitations from.\n *\n * @returns Array with the name of all Factions you currently have oustanding invitations from.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "checkFactionInvitations(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "checkFactionInvitations" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#commitCrime:member(1)", - "docComment": "/**\n * Commit a crime.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function is used to automatically attempt to commit crimes. If you are already in the middle of some ‘working’ action (such as working for a company or training at a gym), then running this function will automatically cancel that action and give you your earnings.\n *\n * This function returns the number of milliseconds it takes to attempt the specified crime (e.g It takes 60 seconds to attempt the ‘Rob Store’ crime, so running `commitCrime('rob store')` will return 60,000).\n *\n * Warning: I do not recommend using the time returned from this function to try and schedule your crime attempts. Instead, I would use the isBusy Singularity function to check whether you have finished attempting a crime. This is because although the game sets a certain crime to be X amount of seconds, there is no guarantee that your browser will follow that time limit.\n *\n * @param crime - Name of crime to attempt.\n *\n * @returns The number of milliseconds it takes to attempt the specified crime.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "commitCrime(crime: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "crime", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "commitCrime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#connect:member(1)", - "docComment": "/**\n * Connect to a server.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * Run the connect HOSTNAME command in the terminal. Can only connect to neighbors.\n *\n * @returns True if the connect command was successful, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "connect(hostname: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "hostname", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "connect" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#createProgram:member(1)", - "docComment": "/**\n * Create a program.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function will automatically set you to start working on creating the specified program. If you are already in the middle of some “working” action (such as working for a company, training at a gym, or taking a course), then running this function will automatically cancel that action and give you your earnings.\n *\n * This function returns true if you successfully start working on the specified program, and false otherwise.\n *\n * Note that creating a program using this function has the same hacking level requirements as it normally would. These level requirements are: * BruteSSH.exe: 50 * FTPCrack.exe: 100 * relaySMTP.exe: 250 * HTTPWorm.exe: 500 * SQLInject.exe: 750 * DeepscanV1.exe: 75 * DeepscanV2.exe: 400 * ServerProfiler.exe: 75 * AutoLink.exe: 25\n *\n * @param program - Name of program to create.\n *\n * @param focus - Acquire player focus on this program creation. Optional. Defaults to true.\n *\n * @returns True if you successfully start working on the specified program, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * createProgram(“relaysmtp.exe”);\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * ns.createProgram(“relaysmtp.exe”);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "createProgram(program: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", focus?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "program", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "focus", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "createProgram" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#donateToFaction:member(1)", - "docComment": "/**\n * Donate to a faction.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * Attempts to donate money to the specified faction in exchange for reputation. Returns true if you successfully donate the money, and false otherwise.\n *\n * @param faction - Name of faction to donate to.\n *\n * @param amount - Amount of money to donate.\n *\n * @returns True if the money was donated, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "donateToFaction(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", amount: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "amount", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "donateToFaction" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getAugmentationCost:member(1)", - "docComment": "/**\n * Get the price and reputation of an augmentation.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function returns an array with two elements that gives the cost for the specified Augmentation. The first element in the returned array is the reputation requirement of the Augmentation, and the second element is the money cost.\n *\n * If an invalid Augmentation name is passed in for the augName argument, this function will return the array [-1, -1].\n *\n * @deprecated\n *\n * use getAugmentationPrice getAugmentationRepCost\n *\n * @param augName - Name of Augmentation.\n *\n * @returns Array with first element as a reputation requirement and second element as the money cost.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getAugmentationCost(augName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "[number, number]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "augName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getAugmentationCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getAugmentationPrereq:member(1)", - "docComment": "/**\n * Get the pre-requisite of an augmentation.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function returns an array with the names of the prerequisite Augmentation(s) for the specified Augmentation. If there are no prerequisites, a blank array is returned.\n *\n * @param augName - Name of Augmentation.\n *\n * @returns Array with the names of the prerequisite Augmentation(s) for the specified Augmentation.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getAugmentationPrereq(augName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "augName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getAugmentationPrereq" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getAugmentationPrice:member(1)", - "docComment": "/**\n * Get price of an augmentation.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB * 16/4/1\n *\n * @param augName - Name of Augmentation.\n *\n * @returns Price of the augmentation.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getAugmentationPrice(augName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "augName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getAugmentationPrice" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getAugmentationRepReq:member(1)", - "docComment": "/**\n * Get reputation requirement of an augmentation.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB * 16/4/1\n *\n * @param augName - Name of Augmentation.\n *\n * @returns Reputation requirement of the augmentation.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getAugmentationRepReq(augName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "augName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getAugmentationRepReq" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getAugmentationsFromFaction:member(1)", - "docComment": "/**\n * Get a list of augmentation available from a faction.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * Returns an array containing the names (as strings) of all Augmentations that are available from the specified faction.\n *\n * @param faction - Name of faction.\n *\n * @returns Array containing the names of all Augmentations.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getAugmentationsFromFaction(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getAugmentationsFromFaction" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getAugmentationStats:member(1)", - "docComment": "/**\n * Get the stats of an augmentation.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function returns augmentation stats.\n *\n * @param name - Name of Augmentation. CASE-SENSITIVE.\n *\n * @returns Augmentation stats.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getAugmentationStats(name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "AugmentationStats", - "canonicalReference": "bitburner!AugmentationStats:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getAugmentationStats" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getCharacterInformation:member(1)", - "docComment": "/**\n * Returns an object with various information about your character.\n *\n * @remarks\n *\n * RAM cost: 0.5 GB * 16/4/1\n *\n * @deprecated\n *\n * use getPlayer\n *\n * @returns Object with various information about your character.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCharacterInformation(): " - }, - { - "kind": "Reference", - "text": "CharacterInfo", - "canonicalReference": "bitburner!CharacterInfo:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getCharacterInformation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getCompanyFavor:member(1)", - "docComment": "/**\n * Get company favor.\n *\n * @remarks\n *\n * RAM cost: 1 GB * 16/4/1\n *\n * This function will return the amount of favor you have at the specified company. If the company passed in as an argument is invalid, -1 will be returned.\n *\n * @param companyName - Name of the company.\n *\n * @returns Amount of favor you have at the specified company.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCompanyFavor(companyName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "companyName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getCompanyFavor" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getCompanyFavorGain:member(1)", - "docComment": "/**\n * Get company favor gain.\n *\n * @remarks\n *\n * RAM cost: 0.75 GB * 16/4/1\n *\n * This function will return the amount of favor you will gain for the specified company when you reset by installing Augmentations.\n *\n * @param companyName - Name of the company.\n *\n * @returns Amount of favor you gain at the specified company when you reset by installing Augmentations.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCompanyFavorGain(companyName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "companyName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getCompanyFavorGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getCompanyRep:member(1)", - "docComment": "/**\n * Get company reputation.\n *\n * @remarks\n *\n * RAM cost: 1 GB * 16/4/1\n *\n * This function will return the amount of reputation you have at the specified company. If the company passed in as an argument is invalid, -1 will be returned.\n *\n * @param companyName - Name of the company.\n *\n * @returns Amount of reputation you have at the specified company.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCompanyRep(companyName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "companyName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getCompanyRep" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getCrimeChance:member(1)", - "docComment": "/**\n * Get chance to successfully commit a crime.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function returns your chance of success at commiting the specified crime.\n *\n * @param crime - Name of crime.\n *\n * @returns Chance of success at commiting the specified crime.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCrimeChance(crime: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "crime", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getCrimeChance" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getCrimeStats:member(1)", - "docComment": "/**\n * Get stats related to a crime.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * Returns the stats of the crime.\n *\n * @param crime - Name of crime. Not case-sensitive\n *\n * @returns The stats of the crime.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCrimeStats(crime: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "CrimeStats", - "canonicalReference": "bitburner!CrimeStats:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "crime", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getCrimeStats" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getCurrentServer:member(1)", - "docComment": "/**\n * Get the current server.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * @returns Name of the current server.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getCurrentServer(): " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getCurrentServer" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getFactionFavor:member(1)", - "docComment": "/**\n * Get faction favor.\n *\n * @remarks\n *\n * RAM cost: 1 GB * 16/4/1\n *\n * This function returns the amount of favor you have for the specified faction.\n *\n * @param faction - Name of faction.\n *\n * @returns Amount of favor you have for the specified faction.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getFactionFavor(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getFactionFavor" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getFactionFavorGain:member(1)", - "docComment": "/**\n * Get faction favor gain.\n *\n * @remarks\n *\n * RAM cost: 0.75 GB * 16/4/1\n *\n * This function returns the amount of favor you will gain for the specified faction when you reset by installing Augmentations.\n *\n * @param faction - Name of faction.\n *\n * @returns Amount of favor you will gain for the specified faction when you reset by installing Augmentations.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getFactionFavorGain(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getFactionFavorGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getFactionRep:member(1)", - "docComment": "/**\n * Get faction reputation.\n *\n * @remarks\n *\n * RAM cost: 1 GB * 16/4/1\n *\n * This function returns the amount of reputation you have for the specified faction.\n *\n * @param faction - Name of faction to work for.\n *\n * @returns Amount of reputation you have for the specified faction.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getFactionRep(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getFactionRep" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getOwnedAugmentations:member(1)", - "docComment": "/**\n * Get a list of owned augmentation.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function returns an array containing the names (as strings) of all Augmentations you have.\n *\n * @param purchased - Specifies whether the returned array should include Augmentations you have purchased but not yet installed. By default, this argument is false which means that the return value will NOT have the purchased Augmentations.\n *\n * @returns Array containing the names (as strings) of all Augmentations you have.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getOwnedAugmentations(purchased?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "purchased", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getOwnedAugmentations" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getStats:member(1)", - "docComment": "/**\n * Returns an object with the Player’s stats.\n *\n * @remarks\n *\n * RAM cost: 0.5 GB * 16/4/1\n *\n * @deprecated\n *\n * use getPlayer\n *\n * @returns Object with the Player’s stats.\n *\n * @example\n * ```ts\n * res = getStats();\n * print('My charisma level is: ' + res.charisma);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getStats(): " - }, - { - "kind": "Reference", - "text": "PlayerSkills", - "canonicalReference": "bitburner!PlayerSkills:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getStats" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getUpgradeHomeCoresCost:member(1)", - "docComment": "/**\n * Get the price of upgrading home cores.\n *\n * @remarks\n *\n * RAM cost: 1.5 GB * 16/4/1\n *\n * Returns the cost of upgrading the player’s home computer cores.\n *\n * @returns Cost of upgrading the player’s home computer cores.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getUpgradeHomeCoresCost(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getUpgradeHomeCoresCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#getUpgradeHomeRamCost:member(1)", - "docComment": "/**\n * Get the price of upgrading home RAM.\n *\n * @remarks\n *\n * RAM cost: 1.5 GB * 16/4/1\n *\n * Returns the cost of upgrading the player’s home computer RAM.\n *\n * @returns Cost of upgrading the player’s home computer RAM.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getUpgradeHomeRamCost(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getUpgradeHomeRamCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#goToLocation:member(1)", - "docComment": "/**\n * Go to a location.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * Move the player to a specific location.\n *\n * @param locationName - Name of the location.\n *\n * @returns True if the player was moved there, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "goToLocation(locationName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "locationName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "goToLocation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#gymWorkout:member(1)", - "docComment": "/**\n * Workout at the gym.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * This function will automatically set you to start working out at a gym to train a particular stat. If you are already in the middle of some “working” action (such as working at a company, for a faction, or on a program), then running this function will automatically cancel that action and give you your earnings.\n *\n * The cost and experience gains for all of these gyms are the same as if you were to manually visit these gyms and train\n *\n * @param gymName - Name of gym. You must be in the correct city for whatever gym you specify.\n *\n * @param stat - The stat you want to train.\n *\n * @param focus - Acquire player focus on this gym workout. Optional. Defaults to true.\n *\n * @returns True if actions is successfully started, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "gymWorkout(gymName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", stat: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", focus?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "gymName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "stat", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "focus", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "gymWorkout" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#hospitalize:member(1)", - "docComment": "/**\n * Hospitalize the player.\n *\n * @remarks\n *\n * RAM cost: 0.25 GB * 16/4/1\n *\n * @returns The cost of the hospitalization.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hospitalize(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "hospitalize" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#installAugmentations:member(1)", - "docComment": "/**\n * Install your purchased augmentations.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function will automatically install your Augmentations, resetting the game as usual.\n *\n * @param cbScript - This is a script that will automatically be run after Augmentations are installed (after the reset). This script will be run with no arguments and 1 thread. It must be located on your home computer.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "installAugmentations(cbScript?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "cbScript", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "installAugmentations" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#installBackdoor:member(1)", - "docComment": "/**\n * Run the backdoor command in the terminal.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * @returns Promise waiting for the installation to finish.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "installBackdoor(): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "installBackdoor" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#isBusy:member(1)", - "docComment": "/**\n * Check if the player is busy.\n *\n * @remarks\n *\n * RAM cost: 0.5 GB * 16/4/1\n *\n * Returns a boolean indicating whether or not the player is currently performing an ‘action’. These actions include working for a company/faction, studying at a univeristy, working out at a gym, creating a program, committing a crime, or carrying out a Hacking Mission.\n *\n * @returns True if the player is currently performing an ‘action’, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "isBusy(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "isBusy" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#isFocused:member(1)", - "docComment": "/**\n * Check if the player is focused.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB * 16/4/1\n *\n * @returns True if the player is focused.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "isFocused(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "isFocused" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#joinFaction:member(1)", - "docComment": "/**\n * Join a faction.\n *\n * @remarks\n *\n * RAM cost: 3 GB * 16/4/1\n *\n * This function will automatically accept an invitation from a faction and join it.\n *\n * @param faction - Name of faction to join.\n *\n * @returns True if player joined the faction, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "joinFaction(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "joinFaction" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#manualHack:member(1)", - "docComment": "/**\n * Run the hack command in the terminal.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * @returns Amount of money stolen by manual hacking.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "manualHack(): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "manualHack" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#purchaseAugmentation:member(1)", - "docComment": "/**\n * Purchase an augmentation\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function will try to purchase the specified Augmentation through the given Faction.\n *\n * This function will return true if the Augmentation is successfully purchased, and false otherwise.\n *\n * @param faction - Name of faction to purchase Augmentation from.\n *\n * @param augmentation - Name of Augmentation to purchase.\n *\n * @returns True if the Augmentation is successfully purchased, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseAugmentation(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", augmentation: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "augmentation", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "purchaseAugmentation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#purchaseProgram:member(1)", - "docComment": "/**\n * Purchase a program from the dark web.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * This function allows you to automatically purchase programs. You MUST have a TOR router in order to use this function. The cost of purchasing programs using this function is the same as if you were purchasing them through the Dark Web using the Terminal buy command.\n *\n * @param programName - Name of program to purchase.\n *\n * @returns True if the specified program is purchased, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1\n * purchaseProgram(\"brutessh.exe\");\n * ```\n *\n * @example\n * ```ts\n * // NS2\n * ns.purchaseProgram(\"brutessh.exe\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseProgram(programName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "programName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "purchaseProgram" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#purchaseTor:member(1)", - "docComment": "/**\n * Purchase the TOR router.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * This function allows you to automatically purchase a TOR router. The cost for purchasing a TOR router using this function is the same as if you were to manually purchase one.\n *\n * @returns True if actions is successful, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseTor(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "purchaseTor" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#setFocus:member(1)", - "docComment": "/**\n * Set the players focus.\n *\n * @remarks\n *\n * RAM cost: 0.1 GB * 16/4/1\n *\n * @returns True if the focus was changed.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setFocus(focus: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "focus", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "setFocus" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#softReset:member(1)", - "docComment": "/**\n * Soft reset the game.\n *\n * @remarks\n *\n * RAM cost: 5 GB * 16/4/1\n *\n * This function will perform a reset even if you don’t have any augmentation installed.\n *\n * @param cbScript - This is a script that will automatically be run after Augmentations are installed (after the reset). This script will be run with no arguments and 1 thread. It must be located on your home computer.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "softReset(cbScript: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "cbScript", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "softReset" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#stopAction:member(1)", - "docComment": "/**\n * Stop the current action.\n *\n * @remarks\n *\n * RAM cost: 1 GB * 16/4/1\n *\n * This function is used to end whatever ‘action’ the player is currently performing. The player will receive whatever money/experience/etc. he has earned from that action.\n *\n * The actions that can be stopped with this function are:\n *\n * * Studying at a university * Working for a company/faction * Creating a program * Committing a Crime\n *\n * This function will return true if the player’s action was ended. It will return false if the player was not performing an action when this function was called.\n *\n * @returns True if the player’s action was ended, false if the player was not performing an action.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "stopAction(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "stopAction" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#travelToCity:member(1)", - "docComment": "/**\n * Travel to another city.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * This function allows the player to travel to any city. The cost for using this function is the same as the cost for traveling through the Travel Agency.\n *\n * @param city - City to travel to.\n *\n * @returns True if actions is successful, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "travelToCity(city: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "city", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "travelToCity" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#universityCourse:member(1)", - "docComment": "/**\n * Take university class.\n *\n * @remarks\n *\n * RAM cost: 2 GB * 16/4/1\n *\n * This function will automatically set you to start taking a course at a university. If you are already in the middle of some “working” action (such as working at a company, for a faction, or on a program), then running this function will automatically cancel that action and give you your earnings.\n *\n * The cost and experience gains for all of these universities and classes are the same as if you were to manually visit and take these classes.\n *\n * @param universityName - Name of university. You must be in the correct city for whatever university you specify.\n *\n * @param courseName - Name of course.\n *\n * @param focus - Acquire player focus on this class. Optional. Defaults to true.\n *\n * @returns True if actions is successfully started, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "universityCourse(universityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", courseName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", focus?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "universityName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "courseName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "focus", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "universityCourse" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#upgradeHomeCores:member(1)", - "docComment": "/**\n * Upgrade home computer cores.\n *\n * @remarks\n *\n * RAM cost: 3 GB * 16/4/1\n *\n * This function will upgrade amount of cores on the player’s home computer. The cost is the same as if you were to do it manually.\n *\n * This function will return true if the player’s home computer cores is successfully upgraded, and false otherwise.\n *\n * @returns True if the player’s home computer cores is successfully upgraded, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeHomeCores(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "upgradeHomeCores" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#upgradeHomeRam:member(1)", - "docComment": "/**\n * Upgrade home computer RAM.\n *\n * @remarks\n *\n * RAM cost: 3 GB * 16/4/1\n *\n * This function will upgrade amount of RAM on the player’s home computer. The cost is the same as if you were to do it manually.\n *\n * This function will return true if the player’s home computer RAM is successfully upgraded, and false otherwise.\n *\n * @returns True if the player’s home computer RAM is successfully upgraded, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeHomeRam(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "upgradeHomeRam" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#workForCompany:member(1)", - "docComment": "/**\n * Work for a company.\n *\n * @remarks\n *\n * RAM cost: 3 GB * 16/4/1\n *\n * This function will automatically set you to start working at the company at which you are employed. If you are already in the middle of some “working” action (such as working for a faction, training at a gym, or creating a program), then running this function will automatically cancel that action and give you your earnings.\n *\n * This function will return true if the player starts working, and false otherwise.\n *\n * Note that when you are working for a company, you will not actually receive your earnings (reputation, money, experience) until you FINISH the action.\n *\n * @param companyName - Name of company to work for. Must be an exact match. Optional. If not specified, this argument defaults to the last job that you worked\n *\n * @param focus - Acquire player focus on this work operation. Optional. Defaults to true.\n *\n * @returns True if the player starts working, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * //If you only want to work until you get 100,000 company reputation. One small hack to get around this is to continuously restart the action to receive your earnings:\n * while (getCompanyRep(COMPANY HERE) < VALUE) {\n * workForCompany();\n * sleep(60000);\n * }\n * //This way, your company reputation will be updated every minute.\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //If you only want to work until you get 100,000 company reputation. One small hack to get around this is to continuously restart the action to receive your earnings:\n * while (ns.getCompanyRep(COMPANY HERE) < VALUE) {\n * ns.workForCompany();\n * await ns.sleep(60000);\n * }\n * //This way, your company reputation will be updated every minute.\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workForCompany(companyName?: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", focus?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "companyName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "focus", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "workForCompany" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Singularity#workForFaction:member(1)", - "docComment": "/**\n * Work for a faction.\n *\n * @remarks\n *\n * RAM cost: 3 GB * 16/4/1\n *\n * This function will automatically set you to start working for the specified faction. Obviously, you must be a member of the faction or else this function will fail. If you are already in the middle of some “working” action (such as working for a company, training at a gym, or creating a program), then running this function will automatically cancel that action and give you your earnings.\n *\n * This function will return true if you successfully start working for the specified faction, and false otherwise.\n *\n * Note that when you are working for a faction, you will not actually receive your earnings (reputation, experience) until you FINISH the action.\n *\n * @param faction - Name of faction to work for.\n *\n * @param workType - Type of work to perform for the faction.\n *\n * @param focus - Acquire player focus on this work operation. Optional. Defaults to true.\n *\n * @returns True if the player starts working, and false otherwise.\n *\n * @example\n * ```ts\n * // NS1:\n * //If you only want to work until you get 100,000 faction reputation. One small hack to get around this is to continuously restart the action to receive your earnings:\n * while (getFactionRep(FACTION NAME) < VALUE) {\n * workForFaction(FACNAME, WORKTYPE);\n * sleep(60000);\n * }\n * //This way, your faction reputation will be updated every minute.\n * ```\n *\n * @example\n * ```ts\n * // NS2:\n * //If you only want to work until you get 100,000 faction reputation. One small hack to get around this is to continuously restart the action to receive your earnings:\n * while (ns.getFactionRep(FACTION NAME) < VALUE) {\n * ns.workForFaction(FACNAME, WORKTYPE);\n * await ns.sleep(60000);\n * }\n * //This way, your faction reputation will be updated every minute.\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workForFaction(faction: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", workType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", focus?: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "faction", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "workType", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "focus", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "workForFaction" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!SkillsFormulas:interface", - "docComment": "/**\n * Skills formulas\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface SkillsFormulas " - } - ], - "releaseTag": "Public", - "name": "SkillsFormulas", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!SkillsFormulas#calculateExp:member(1)", - "docComment": "/**\n * Calculate exp for skill level.\n *\n * @param skill - target skill level\n *\n * @param skillMult - Multiplier for that skill, defaults to 1.\n *\n * @returns The calculated exp required.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "calculateExp(skill: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", skillMult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "skill", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "skillMult", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "calculateExp" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!SkillsFormulas#calculateSkill:member(1)", - "docComment": "/**\n * Calculate skill level.\n *\n * @param exp - experience for that skill\n *\n * @param skillMult - Multiplier for that skill, defaults to 1.\n *\n * @returns The calculated skill level.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "calculateSkill(exp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", skillMult?: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "exp", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "skillMult", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "calculateSkill" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Sleeve:interface", - "docComment": "/**\n * Sleeve API\n *\n * @remarks\n *\n * If you are not in BitNode-10, then you must have Source-File 10 in order to use this API.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface Sleeve " - } - ], - "releaseTag": "Public", - "name": "Sleeve", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#getInformation:member(1)", - "docComment": "/**\n * Get information about a sleeve.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a struct containing tons of information about this sleeve\n *\n * @param sleeveNumber - Index of the sleeve to retrieve information.\n *\n * @returns Object containing tons of information about this sleeve.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getInformation(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "SleeveInformation", - "canonicalReference": "bitburner!SleeveInformation:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getInformation" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#getNumSleeves:member(1)", - "docComment": "/**\n * Get the number of sleeves you own.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return the number of duplicate sleeves the player has.\n *\n * @returns number of duplicate sleeves the player has.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getNumSleeves(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getNumSleeves" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#getSleeveAugmentations:member(1)", - "docComment": "/**\n * Get augmentations installed on a sleeve.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a list of augmentation names that this sleeve has installed.\n *\n * @param sleeveNumber - Index of the sleeve to retrieve augmentations from.\n *\n * @returns List of augmentation names that this sleeve has installed.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSleeveAugmentations(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getSleeveAugmentations" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#getSleevePurchasableAugs:member(1)", - "docComment": "/**\n * List purchasable augs for a sleeve.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a list of augmentations that the player can buy for this sleeve.\n *\n * @param sleeveNumber - Index of the sleeve to retrieve purchasable augmentations from.\n *\n * @returns List of augmentations that the player can buy for this sleeve.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSleevePurchasableAugs(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "AugmentPair", - "canonicalReference": "bitburner!AugmentPair:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getSleevePurchasableAugs" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#getSleeveStats:member(1)", - "docComment": "/**\n * Get the stats of a sleeve.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a structure containing the stats of the sleeve.\n *\n * @param sleeveNumber - Index of the sleeve to get stats of.\n *\n * @returns Object containing the stats of the sleeve.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSleeveStats(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "SleeveSkills", - "canonicalReference": "bitburner!SleeveSkills:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getSleeveStats" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#getTask:member(1)", - "docComment": "/**\n * Get task of a sleeve.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return the current task that the sleeve is performing. type is set to “Idle” if the sleeve isn’t doing anything.\n *\n * @param sleeveNumber - Index of the sleeve to retrieve task from.\n *\n * @returns Object containing information the current task that the sleeve is performing.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getTask(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "SleeveTask", - "canonicalReference": "bitburner!SleeveTask:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getTask" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#purchaseSleeveAug:member(1)", - "docComment": "/**\n * Purchase an aug for a sleeve.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return true if the aug was purchased and installed on the sleeve.\n *\n * @param sleeveNumber - Index of the sleeve to buy an aug for.\n *\n * @param augName - Name of the aug to buy. Must be an exact match.\n *\n * @returns True if the aug was purchased and installed on the sleeve, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseSleeveAug(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", augName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "augName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "purchaseSleeveAug" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#setToCommitCrime:member(1)", - "docComment": "/**\n * Set a sleeve to commit crime.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not this action was set successfully.\n *\n * Returns false if an invalid action is specified.\n *\n * @param sleeveNumber - Index of the sleeve to start commiting crime.\n *\n * @param name - Name of the crime. Must be an exact match.\n *\n * @returns True if this action was set successfully, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setToCommitCrime(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", name: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "name", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "setToCommitCrime" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#setToCompanyWork:member(1)", - "docComment": "/**\n * Set a sleeve to work for a company.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not the sleeve started working or this company.\n *\n * @param sleeveNumber - Index of the sleeve to work for the company.\n *\n * @param companyName - Name of the company to work for.\n *\n * @returns True if the sleeve started working on this company, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setToCompanyWork(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", companyName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "companyName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "setToCompanyWork" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#setToFactionWork:member(1)", - "docComment": "/**\n * Set a sleeve to work for a faction.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not the sleeve started working or this faction.\n *\n * @param sleeveNumber - Index of the sleeve to work for the faction.\n *\n * @param factionName - Name of the faction to work for.\n *\n * @param factionWorkType - Name of the action to perform for this faction.\n *\n * @returns True if the sleeve started working on this faction, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setToFactionWork(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", factionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", factionWorkType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "factionName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "factionWorkType", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setToFactionWork" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#setToGymWorkout:member(1)", - "docComment": "/**\n * Set a sleeve to workout at the gym.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not the sleeve started working out.\n *\n * @param sleeveNumber - Index of the sleeve to workout at the gym.\n *\n * @param gymName - Name of the gym.\n *\n * @param stat - Name of the stat to train.\n *\n * @returns True if the sleeve started working out, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setToGymWorkout(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", gymName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", stat: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "gymName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "stat", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setToGymWorkout" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#setToShockRecovery:member(1)", - "docComment": "/**\n * Set a sleeve to shock recovery.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not this action was set successfully.\n *\n * @param sleeveNumber - Index of the sleeve to start recovery.\n *\n * @returns True if this action was set successfully, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setToShockRecovery(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "setToShockRecovery" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#setToSynchronize:member(1)", - "docComment": "/**\n * Set a sleeve to synchronize.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not this action was set successfully.\n *\n * @param sleeveNumber - Index of the sleeve to start synchronizing.\n *\n * @returns True if this action was set successfully, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setToSynchronize(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "setToSynchronize" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#setToUniversityCourse:member(1)", - "docComment": "/**\n * Set a sleeve to take a class at a university.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not this action was set successfully.\n *\n * @param sleeveNumber - Index of the sleeve to start taking class.\n *\n * @param university - Name of the university to attend.\n *\n * @param className - Name of the class to follow.\n *\n * @returns True if this action was set successfully, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setToUniversityCourse(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", university: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", className: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "university", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "className", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setToUniversityCourse" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Sleeve#travel:member(1)", - "docComment": "/**\n * Make a sleeve travel to another city.\n *\n * @remarks\n *\n * RAM cost: 4 GB\n *\n * Return a boolean indicating whether or not the sleeve reached destination.\n *\n * @param sleeveNumber - Index of the sleeve to travel.\n *\n * @param cityName - Name of the destination city.\n *\n * @returns True if the sleeve reached destination, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "travel(sleeveNumber: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sleeveNumber", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "travel" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!SleeveInformation:interface", - "docComment": "/**\n * Object representing sleeve information.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface SleeveInformation " - } - ], - "releaseTag": "Public", - "name": "SleeveInformation", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#city:member", - "docComment": "/**\n * Location of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "city: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "city", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#earningsForPlayer:member", - "docComment": "/**\n * Earnings synchronized to the player\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "earningsForPlayer: " - }, - { - "kind": "Reference", - "text": "SleeveWorkGains", - "canonicalReference": "bitburner!SleeveWorkGains:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "earningsForPlayer", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#earningsForSleeves:member", - "docComment": "/**\n * Earnings synchronized to other sleeves\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "earningsForSleeves: " - }, - { - "kind": "Reference", - "text": "SleeveWorkGains", - "canonicalReference": "bitburner!SleeveWorkGains:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "earningsForSleeves", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#earningsForTask:member", - "docComment": "/**\n * Earnings for this sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "earningsForTask: " - }, - { - "kind": "Reference", - "text": "SleeveWorkGains", - "canonicalReference": "bitburner!SleeveWorkGains:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "earningsForTask", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#hp:member", - "docComment": "/**\n * Current hp of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#jobs:member", - "docComment": "/**\n * Jobs available to the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "jobs: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "jobs", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#jobTitle:member", - "docComment": "/**\n * Job titles available to the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "jobTitle: " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "jobTitle", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#maxHp:member", - "docComment": "/**\n * Max hp of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "maxHp: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "maxHp", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#mult:member", - "docComment": "/**\n * Sleeve multipliers\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "mult: " - }, - { - "kind": "Reference", - "text": "CharacterMult", - "canonicalReference": "bitburner!CharacterMult:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "mult", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#timeWorked:member", - "docComment": "/**\n * Time spent on the current task in milliseconds\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "timeWorked: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "timeWorked", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#tor:member", - "docComment": "/**\n * Does this sleeve have access to the tor router\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "tor: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "tor", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveInformation#workRepGain:member", - "docComment": "/**\n * Faction or company reputation gained for the current task\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workRepGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workRepGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!SleeveSkills:interface", - "docComment": "/**\n * Object representing a sleeve stats.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface SleeveSkills " - } - ], - "releaseTag": "Public", - "name": "SleeveSkills", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveSkills#agility:member", - "docComment": "/**\n * Current agility of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "agility: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "agility", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveSkills#charisma:member", - "docComment": "/**\n * Current charisma of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "charisma: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "charisma", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveSkills#defense:member", - "docComment": "/**\n * Current defense of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "defense: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "defense", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveSkills#dexterity:member", - "docComment": "/**\n * Current dexterity of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "dexterity: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "dexterity", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveSkills#hacking:member", - "docComment": "/**\n * Current hacking skill of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hacking: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "hacking", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveSkills#shock:member", - "docComment": "/**\n * Current shock of the sleeve [0-100]\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "shock: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "shock", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveSkills#strength:member", - "docComment": "/**\n * Current strength of the sleeve\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "strength: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "strength", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveSkills#sync:member", - "docComment": "/**\n * Current sync of the sleeve [0-100]\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sync: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sync", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!SleeveTask:interface", - "docComment": "/**\n * Object representing a sleeve current task.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface SleeveTask " - } - ], - "releaseTag": "Public", - "name": "SleeveTask", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveTask#crime:member", - "docComment": "/**\n * Crime currently attempting, if any\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "crime: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "crime", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveTask#factionWorkType:member", - "docComment": "/**\n * Faction work type being performed, if any\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "factionWorkType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "factionWorkType", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveTask#gymStatType:member", - "docComment": "/**\n * Stat being trained at the gym, if any\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "gymStatType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "gymStatType", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveTask#location:member", - "docComment": "/**\n * Location of the task, if any\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "location: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "location", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveTask#task:member", - "docComment": "/**\n * Task type\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "task: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "task", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!SleeveWorkGains:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface SleeveWorkGains " - } - ], - "releaseTag": "Public", - "name": "SleeveWorkGains", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveWorkGains#workAgiExpGain:member", - "docComment": "/**\n * Agility exp gained from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workAgiExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workAgiExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveWorkGains#workChaExpGain:member", - "docComment": "/**\n * Charisma exp gained from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workChaExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workChaExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveWorkGains#workDefExpGain:member", - "docComment": "/**\n * Defense exp gained from work,\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workDefExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workDefExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveWorkGains#workDexExpGain:member", - "docComment": "/**\n * Dexterity exp gained from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workDexExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workDexExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveWorkGains#workHackExpGain:member", - "docComment": "/**\n * Hacking exp gained from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workHackExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workHackExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveWorkGains#workMoneyGain:member", - "docComment": "/**\n * Money gained from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workMoneyGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workMoneyGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SleeveWorkGains#workStrExpGain:member", - "docComment": "/**\n * Strength exp gained from work\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "workStrExpGain: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "workStrExpGain", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!SourceFileLvl:interface", - "docComment": "/**\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface SourceFileLvl " - } - ], - "releaseTag": "Public", - "name": "SourceFileLvl", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SourceFileLvl#lvl:member", - "docComment": "/**\n * The level of the source file\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "lvl: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "lvl", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!SourceFileLvl#n:member", - "docComment": "/**\n * The number of the source file\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "n: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "n", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Stanek:interface", - "docComment": "/**\n * Stanek's Gift API.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface Stanek " - } - ], - "releaseTag": "Public", - "name": "Stanek", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#activeFragments:member(1)", - "docComment": "/**\n * List of fragments in Stanek's Gift.\n *\n * @remarks\n *\n * RAM cost: 5 GB\n *\n * @returns List of active fragments placed on Stanek's Gift.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "activeFragments(): " - }, - { - "kind": "Reference", - "text": "ActiveFragment", - "canonicalReference": "bitburner!ActiveFragment:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "activeFragments" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#canPlace:member(1)", - "docComment": "/**\n * Check if fragment can be placed at specified location.\n *\n * @remarks\n *\n * RAM cost: 0.5 GB\n *\n * @param rootX - rootX Root X against which to align the top left of the fragment.\n *\n * @param rootY - rootY Root Y against which to align the top left of the fragment.\n *\n * @param rotation - rotation A number from 0 to 3, the mount of 90 degree turn to take.\n *\n * @param fragmentId - fragmentId ID of the fragment to place.\n *\n * @returns true if the fragment can be placed at that position. false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "canPlace(rootX: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", rootY: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", rotation: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", fragmentId: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "rootX", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "rootY", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "rotation", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "fragmentId", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "canPlace" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#charge:member(1)", - "docComment": "/**\n * Charge a fragment, increasing its power.\n *\n * @remarks\n *\n * RAM cost: 0.4 GB\n *\n * @param rootX - rootX Root X against which to align the top left of the fragment.\n *\n * @param rootY - rootY Root Y against which to align the top left of the fragment.\n *\n * @returns Promise that lasts until the charge action is over.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "charge(rootX: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", rootY: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Promise", - "canonicalReference": "!Promise:interface" - }, - { - "kind": "Content", - "text": "" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "rootX", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "rootY", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "charge" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#clear:member(1)", - "docComment": "/**\n * Clear the board of all fragments.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "clear(): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "clear" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#fragmentDefinitions:member(1)", - "docComment": "/**\n * List possible fragments.\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns List of possible fragments.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "fragmentDefinitions(): " - }, - { - "kind": "Reference", - "text": "Fragment", - "canonicalReference": "bitburner!Fragment:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 3 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "fragmentDefinitions" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#get:member(1)", - "docComment": "/**\n * Get placed fragment at location.\n *\n * @remarks\n *\n * RAM cost: 5 GB\n *\n * @param rootX - X against which to align the top left of the fragment.\n *\n * @param rootY - Y against which to align the top left of the fragment.\n *\n * @returns The fragment at [rootX, rootY], if any.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "get(rootX: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", rootY: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "ActiveFragment", - "canonicalReference": "bitburner!ActiveFragment:interface" - }, - { - "kind": "Content", - "text": " | undefined" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 7 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "rootX", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "rootY", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "get" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#height:member(1)", - "docComment": "/**\n * Stanek's Gift height.\n *\n * @remarks\n *\n * RAM cost: 0.4 GB\n *\n * @returns The height of the gift.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "height(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "height" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#place:member(1)", - "docComment": "/**\n * Place fragment on Stanek's Gift.\n *\n * @remarks\n *\n * RAM cost: 5 GB\n *\n * @param rootX - X against which to align the top left of the fragment.\n *\n * @param rootY - Y against which to align the top left of the fragment.\n *\n * @param rotation - A number from 0 to 3, the mount of 90 degree turn to take.\n *\n * @param fragmentId - ID of the fragment to place.\n *\n * @returns true if the fragment can be placed at that position. false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "place(rootX: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", rootY: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", rotation: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", fragmentId: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "rootX", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "rootY", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "rotation", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "fragmentId", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "place" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#remove:member(1)", - "docComment": "/**\n * Remove fragment at location.\n *\n * @remarks\n *\n * RAM cost: 0.15 GB\n *\n * @param rootX - X against which to align the top left of the fragment.\n *\n * @param rootY - Y against which to align the top left of the fragment.\n *\n * @returns The fragment at [rootX, rootY], if any.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "remove(rootX: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", rootY: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "rootX", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "rootY", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "remove" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!Stanek#width:member(1)", - "docComment": "/**\n * Stanek's Gift width.\n *\n * @remarks\n *\n * RAM cost: 0.4 GB\n *\n * @returns The width of the gift.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "width(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "width" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!StockOrder:interface", - "docComment": "/**\n * Return value of {@link TIX.getOrders | getOrders}\n *\n * Keys are stock symbols, properties are arrays of {@link StockOrderObject}\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface StockOrder " - } - ], - "releaseTag": "Public", - "name": "StockOrder", - "members": [ - { - "kind": "IndexSignature", - "canonicalReference": "bitburner!StockOrder:index(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "[key: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "]: " - }, - { - "kind": "Reference", - "text": "StockOrderObject", - "canonicalReference": "bitburner!StockOrderObject:interface" - }, - { - "kind": "Content", - "text": "[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 5 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "key", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ] - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!StockOrderObject:interface", - "docComment": "/**\n * Value in map of {@link StockOrder}\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface StockOrderObject " - } - ], - "releaseTag": "Public", - "name": "StockOrderObject", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!StockOrderObject#position:member", - "docComment": "/**\n * Order position\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "position: " - }, - { - "kind": "Reference", - "text": "PositionTypes", - "canonicalReference": "bitburner!PositionTypes:enum" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "position", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!StockOrderObject#price:member", - "docComment": "/**\n * Price per share\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "price: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "price", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!StockOrderObject#shares:member", - "docComment": "/**\n * Number of shares\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "shares", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!StockOrderObject#type:member", - "docComment": "/**\n * Order type\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "type: " - }, - { - "kind": "Reference", - "text": "OrderTypes", - "canonicalReference": "bitburner!OrderTypes:enum" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "type", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!TIX:interface", - "docComment": "/**\n * Stock market API\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface TIX " - } - ], - "releaseTag": "Public", - "name": "TIX", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#buy:member(1)", - "docComment": "/**\n * Buy stocks.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB Attempts to purchase shares of a stock using a Market Order.\n *\n * If the player does not have enough money to purchase the specified number of shares, then no shares will be purchased. Remember that every transaction on the stock exchange costs a certain commission fee.\n *\n * If this function successfully purchases the shares, it will return the stock price at which each share was purchased. Otherwise, it will return 0.\n *\n * @param sym - Stock symbol.\n *\n * @param shares - Number of shares to purchased. Must be positive. Will be rounded to nearest integer.\n *\n * @returns The stock price at which each share was purchased, otherwise 0 if the shares weren't purchased.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "buy(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "shares", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "buy" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#cancelOrder:member(1)", - "docComment": "/**\n * Cancel order for stocks.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB Cancels an oustanding Limit or Stop order on the stock market.\n *\n * The ability to use limit and stop orders is **not** immediately available to the player and must be unlocked later on in the game.\n *\n * @param sym - Stock symbol.\n *\n * @param shares - Number of shares for order. Must be positive. Will be rounded to nearest integer.\n *\n * @param price - Execution price for the order.\n *\n * @param type - Type of order.\n *\n * @param pos - Specifies whether the order is a “Long” or “Short” position.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cancelOrder(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", price: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", pos: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "shares", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "price", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "parameterName": "pos", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - } - } - ], - "name": "cancelOrder" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getAskPrice:member(1)", - "docComment": "/**\n * Returns the ask price of that stock.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * @param sym - Stock symbol.\n *\n * @returns The ask price of a stock.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getAskPrice(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getAskPrice" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getBidPrice:member(1)", - "docComment": "/**\n * Returns the bid price of that stock.\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * @param sym - Stock symbol.\n *\n * @returns The bid price of a stock.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getBidPrice(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getBidPrice" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getForecast:member(1)", - "docComment": "/**\n * Returns the probability that the specified stock’s price will increase (as opposed to decrease) during the next tick.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB The probability is returned as a decimal value, NOT a percentage (e.g. if a stock has a 60% chance of increasing, then this function will return 0.6, NOT 60).\n *\n * In other words, if this function returned 0.30 for a stock, then this means that the stock’s price has a 30% chance of increasing and a 70% chance of decreasing during the next tick.\n *\n * In order to use this function, you must first purchase access to the Four Sigma (4S) Market Data TIX API.\n *\n * @param sym - Stock symbol.\n *\n * @returns Probability that the specified stock’s price will increase (as opposed to decrease) during the next tick.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getForecast(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getForecast" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getMaxShares:member(1)", - "docComment": "/**\n * Returns the maximum number of shares of a stock.\n *\n * @remarks\n *\n * RAM cost: 2 GB This is the maximum amount of the stock that can be purchased in both the Long and Short positions combined.\n *\n * @param sym - Stock symbol.\n *\n * @returns Maximum number of shares that the stock has.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getMaxShares(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getMaxShares" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getOrders:member(1)", - "docComment": "/**\n * Returns your order book for the stock market.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB This is an object containing information for all the Limit and Stop Orders you have in the stock market. For each symbol you have a position in, the returned object will have a key with that symbol's name. The object's properties are each an array of {@link StockOrderObject} The object has the following structure:\n * ```ts\n * {\n * string1: [ // Array of orders for this stock\n * {\n * shares: Order quantity\n * price: Order price\n * type: Order type\n * position: Either \"L\" or \"S\" for Long or Short position\n * },\n * {\n * ...\n * },\n * ...\n * ],\n * string2: [ // Array of orders for this stock\n * ...\n * ],\n * ...\n * }\n * ```\n *\n * The “Order type” property can have one of the following four values: \"Limit Buy Order\", \"Limit Sell Order\", \"Stop Buy Order\", \"Stop Sell Order\". Note that the order book will only contain information for stocks that you actually have orders in.\n *\n * @returns Object containing information for all the Limit and Stop Orders you have in the stock market.\n *\n * @example\n * ```ts\n * \"If you do not have orders in Nova Medical (NVMD), then the returned object will not have a “NVMD” property.\"\n * {\n * ECP: [\n * {\n * shares: 5,\n * price: 100,000\n * type: \"Stop Buy Order\",\n * position: \"S\",\n * },\n * {\n * shares: 25,\n * price: 125,000\n * type: \"Limit Sell Order\",\n * position: \"L\",\n * },\n * ],\n * SYSC: [\n * {\n * shares: 100,\n * price: 10,000\n * type: \"Limit Buy Order\",\n * position: \"L\",\n * },\n * ],\n * }\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getOrders(): " - }, - { - "kind": "Reference", - "text": "StockOrder", - "canonicalReference": "bitburner!StockOrder:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getOrders" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getPosition:member(1)", - "docComment": "/**\n * Returns the player’s position in a stock.\n *\n * @remarks\n *\n * RAM cost: 2 GB Returns an array of four elements that represents the player’s position in a stock.\n *\n * The first element is the returned array is the number of shares the player owns of the stock in the Long position. The second element in the array is the average price of the player’s shares in the Long position.\n *\n * The third element in the array is the number of shares the player owns of the stock in the Short position. The fourth element in the array is the average price of the player’s Short position.\n *\n * All elements in the returned array are numeric.\n *\n * @param sym - Stock symbol.\n *\n * @returns Array of four elements that represents the player’s position in a stock.\n *\n * @example\n * ```ts\n * // NS1\n * var pos = stock.getPosition(\"ECP\");\n * var shares = pos[0];\n * var avgPx = pos[1];\n * var sharesShort = pos[2];\n * var avgPxShort = pos[3];\n * ```\n *\n * @example\n * ```ts\n * // NS2\n * const [shares, avgPx, sharesShort, avgPxShort] = ns.stock.getPosition(\"ECP\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPosition(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "[number, number, number, number]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getPosition" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getPrice:member(1)", - "docComment": "/**\n * Returns the price of a stock\n *\n * @remarks\n *\n * RAM cost: 2 GB The stock’s price is the average of its bid and ask price.\n *\n * @param sym - Stock symbol.\n *\n * @returns The price of a stock.\n *\n * @example\n * ```ts\n * // NS1\n * stock.getPrice(\"FISG\");\n * ```\n *\n * @example\n * ```ts\n * // NS2\n * ns.stock.getPrice(\"FISG\");\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPrice(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getPrice" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getPurchaseCost:member(1)", - "docComment": "/**\n * Calculates cost of buying stocks.\n *\n * @remarks\n *\n * RAM cost: 2 GB Calculates and returns how much it would cost to buy a given number of shares of a stock. This takes into account spread, large transactions influencing the price of the stock and commission fees.\n *\n * @param sym - Stock symbol.\n *\n * @param shares - Number of shares to purchase.\n *\n * @param posType - Specifies whether the order is a “Long” or “Short” position.\n *\n * @returns Cost to buy a given number of shares of a stock.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPurchaseCost(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", posType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "shares", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "posType", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getPurchaseCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getSaleGain:member(1)", - "docComment": "/**\n * Calculate profit of selling stocks.\n *\n * @remarks\n *\n * RAM cost: 2 GB Calculates and returns how much you would gain from selling a given number of shares of a stock. This takes into account spread, large transactions influencing the price of the stock and commission fees.\n *\n * @param sym - Stock symbol.\n *\n * @param shares - Number of shares to sell.\n *\n * @param posType - Specifies whether the order is a “Long” or “Short” position.\n *\n * @returns Gain from selling a given number of shares of a stock.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSaleGain(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", posType: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "shares", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "posType", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getSaleGain" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getSymbols:member(1)", - "docComment": "/**\n * Returns an array of the symbols of the tradable stocks\n *\n * @remarks\n *\n * RAM cost: 2 GB\n *\n * @returns Array of the symbols of the tradable stocks.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getSymbols(): " - }, - { - "kind": "Content", - "text": "string[]" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getSymbols" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#getVolatility:member(1)", - "docComment": "/**\n * Returns the volatility of the specified stock.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB Volatility represents the maximum percentage by which a stock’s price can change every tick. The volatility is returned as a decimal value, NOT a percentage (e.g. if a stock has a volatility of 3%, then this function will return 0.03, NOT 3).\n *\n * In order to use this function, you must first purchase access to the Four Sigma (4S) Market Data TIX API.\n *\n * @param sym - Stock symbol.\n *\n * @returns Volatility of the specified stock.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getVolatility(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "getVolatility" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#placeOrder:member(1)", - "docComment": "/**\n * Place order for stocks.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB Places an order on the stock market. This function only works for Limit and Stop Orders.\n *\n * The ability to place limit and stop orders is **not** immediately available to the player and must be unlocked later on in the game.\n *\n * Returns true if the order is successfully placed, and false otherwise.\n *\n * @param sym - Stock symbol.\n *\n * @param shares - Number of shares for order. Must be positive. Will be rounded to nearest integer.\n *\n * @param price - Execution price for the order.\n *\n * @param type - Type of order.\n *\n * @param pos - Specifies whether the order is a “Long” or “Short” position.\n *\n * @returns True if the order is successfully placed, and false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "placeOrder(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", price: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ", type: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", pos: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "shares", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "price", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "type", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "parameterName": "pos", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - } - } - ], - "name": "placeOrder" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#purchase4SMarketData:member(1)", - "docComment": "/**\n * Purchase 4S Market Data Access.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB\n *\n * @returns True if you successfully purchased it or if you already have access, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchase4SMarketData(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "purchase4SMarketData" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#purchase4SMarketDataTixApi:member(1)", - "docComment": "/**\n * Purchase 4S Market Data TIX API Access.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB\n *\n * @returns True if you successfully purchased it or if you already have access, false otherwise.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchase4SMarketDataTixApi(): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "purchase4SMarketDataTixApi" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#sell:member(1)", - "docComment": "/**\n * Sell stocks.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB Attempts to sell shares of a stock using a Market Order.\n *\n * If the specified number of shares in the function exceeds the amount that the player actually owns, then this function will sell all owned shares. Remember that every transaction on the stock exchange costs a certain commission fee.\n *\n * The net profit made from selling stocks with this function is reflected in the script’s statistics. This net profit is calculated as:\n *\n * shares * (sell_price - average_price_of_purchased_shares)\n *\n * If the sale is successful, this function will return the stock price at which each share was sold. Otherwise, it will return 0.\n *\n * @param sym - Stock symbol.\n *\n * @param shares - Number of shares to sell. Must be positive. Will be rounded to nearest integer.\n *\n * @returns The stock price at which each share was sold, otherwise 0 if the shares weren't sold.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sell(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "shares", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "sell" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#sellShort:member(1)", - "docComment": "/**\n * Sell short stock.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB Attempts to sell a short position of a stock using a Market Order.\n *\n * The ability to short a stock is **not** immediately available to the player and must be unlocked later on in the game.\n *\n * If the specified number of shares exceeds the amount that the player actually owns, then this function will sell all owned shares. Remember that every transaction on the stock exchange costs a certain commission fee.\n *\n * If the sale is successful, this function will return the stock price at which each share was sold. Otherwise it will return 0.\n *\n * @param sym - Stock symbol.\n *\n * @param shares - Number of shares to sell. Must be positive. Will be rounded to nearest integer.\n *\n * @returns The stock price at which each share was sold, otherwise 0 if the shares weren't sold.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sellShort(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "shares", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "sellShort" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!TIX#short:member(1)", - "docComment": "/**\n * Short stocks.\n *\n * @remarks\n *\n * RAM cost: 2.5 GB Attempts to purchase a short position of a stock using a Market Order.\n *\n * The ability to short a stock is **not** immediately available to the player and must be unlocked later on in the game.\n *\n * If the player does not have enough money to purchase the specified number of shares, then no shares will be purchased. Remember that every transaction on the stock exchange costs a certain commission fee.\n *\n * If the purchase is successful, this function will return the stock price at which each share was purchased. Otherwise, it will return 0.\n *\n * @param sym - Stock symbol.\n *\n * @param shares - Number of shares to short. Must be positive. Will be rounded to nearest integer.\n *\n * @returns The stock price at which each share was purchased, otherwise 0 if the shares weren't purchased.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "short(sym: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", shares: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sym", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "shares", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "short" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!UserInterface:interface", - "docComment": "/**\n * User Interface API.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface UserInterface " - } - ], - "releaseTag": "Public", - "name": "UserInterface", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!UserInterface#getGameInfo:member(1)", - "docComment": "/**\n * Gets the current game information (version, commit, ...)\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getGameInfo(): " - }, - { - "kind": "Reference", - "text": "GameInfo", - "canonicalReference": "bitburner!GameInfo:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getGameInfo" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!UserInterface#getStyles:member(1)", - "docComment": "/**\n * Get the current styles\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns An object containing the player's styles\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getStyles(): " - }, - { - "kind": "Reference", - "text": "IStyleSettings", - "canonicalReference": "bitburner!IStyleSettings:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getStyles" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!UserInterface#getTheme:member(1)", - "docComment": "/**\n * Get the current theme\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @returns An object containing the theme's colors\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getTheme(): " - }, - { - "kind": "Reference", - "text": "UserInterfaceTheme", - "canonicalReference": "bitburner!UserInterfaceTheme:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getTheme" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!UserInterface#resetStyles:member(1)", - "docComment": "/**\n * Resets the player's styles to the default values\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "resetStyles(): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "resetStyles" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!UserInterface#resetTheme:member(1)", - "docComment": "/**\n * Resets the player's theme to the default values\n *\n * @remarks\n *\n * RAM cost: 0 GB\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "resetTheme(): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "resetTheme" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!UserInterface#setStyles:member(1)", - "docComment": "/**\n * Sets the current styles\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @example\n *\n * Usage example (NS2)\n * ```ts\n * const styles = ns.ui.getStyles();\n * styles.fontFamily = 'Comic Sans Ms';\n * ns.ui.setStyles(styles);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setStyles(newStyles: " - }, - { - "kind": "Reference", - "text": "IStyleSettings", - "canonicalReference": "bitburner!IStyleSettings:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "newStyles", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "setStyles" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!UserInterface#setTheme:member(1)", - "docComment": "/**\n * Sets the current theme\n *\n * @remarks\n *\n * RAM cost: 0 GB\n *\n * @example\n *\n * Usage example (NS2)\n * ```ts\n * const theme = ns.ui.getTheme();\n * theme.primary = '#ff5500';\n * ns.ui.setTheme(theme);\n * ```\n *\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setTheme(newTheme: " - }, - { - "kind": "Reference", - "text": "UserInterfaceTheme", - "canonicalReference": "bitburner!UserInterfaceTheme:interface" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "newTheme", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "name": "setTheme" - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!Warehouse:interface", - "docComment": "/**\n * Warehouse for a division in a city\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "interface Warehouse " - } - ], - "releaseTag": "Public", - "name": "Warehouse", - "members": [ - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Warehouse#level:member", - "docComment": "/**\n * Amount of size upgrade bought\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "level: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "level", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Warehouse#loc:member", - "docComment": "/**\n * City in which the warehouse is located\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "loc: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "loc", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Warehouse#size:member", - "docComment": "/**\n * Total space in the warehouse\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "size: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "size", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Warehouse#sizeUsed:member", - "docComment": "/**\n * Used space in the warehouse\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sizeUsed: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "sizeUsed", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "kind": "PropertySignature", - "canonicalReference": "bitburner!Warehouse#smartSupplyEnabled:member", - "docComment": "/**\n * Smart Supply status in the warehouse\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "smartSupplyEnabled: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "releaseTag": "Public", - "name": "smartSupplyEnabled", - "propertyTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - } - ], - "extendsTokenRanges": [] - }, - { - "kind": "Interface", - "canonicalReference": "bitburner!WarehouseAPI:interface", - "docComment": "/**\n * Corporation Warehouse API\n *\n * @remarks\n *\n * Requires the Warehouse API upgrade from your corporation.\n *\n * @public\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "export interface WarehouseAPI " - } - ], - "releaseTag": "Public", - "name": "WarehouseAPI", - "members": [ - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#buyMaterial:member(1)", - "docComment": "/**\n * Set material buy data\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param materialName - Name of the material\n *\n * @param amt - Amount of material to buy\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "buyMaterial(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", materialName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", amt: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "materialName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "amt", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "buyMaterial" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#cancelExportMaterial:member(1)", - "docComment": "/**\n * Cancel material export\n *\n * @param sourceDivision - Source division\n *\n * @param sourceCity - Source city\n *\n * @param targetDivision - Target division\n *\n * @param targetCity - Target city\n *\n * @param materialName - Name of the material\n *\n * @param amt - Amount of material to export.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "cancelExportMaterial(\n sourceDivision: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n sourceCity: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n targetDivision: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n targetCity: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n materialName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n amt: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ",\n ): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 13, - "endIndex": 14 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sourceDivision", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "sourceCity", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "targetDivision", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "targetCity", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "parameterName": "materialName", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - } - }, - { - "parameterName": "amt", - "parameterTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - } - } - ], - "name": "cancelExportMaterial" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#discontinueProduct:member(1)", - "docComment": "/**\n * Discontinue a product.\n *\n * @param divisionName - Name of the division\n *\n * @param productName - Name of the product\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "discontinueProduct(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", productName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "productName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "discontinueProduct" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#exportMaterial:member(1)", - "docComment": "/**\n * Set material export data\n *\n * @param sourceDivision - Source division\n *\n * @param sourceCity - Source city\n *\n * @param targetDivision - Target division\n *\n * @param targetCity - Target city\n *\n * @param materialName - Name of the material\n *\n * @param amt - Amount of material to export.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "exportMaterial(\n sourceDivision: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n sourceCity: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n targetDivision: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n targetCity: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n materialName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n amt: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ",\n ): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 13, - "endIndex": 14 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "sourceDivision", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "sourceCity", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "targetDivision", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "targetCity", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "parameterName": "materialName", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - } - }, - { - "parameterName": "amt", - "parameterTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - } - } - ], - "name": "exportMaterial" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#getMaterial:member(1)", - "docComment": "/**\n * Get material data\n *\n * @param divisionName - Name of the division\n *\n * @param materialName - Name of the material\n *\n * @returns material data\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getMaterial(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", materialName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Material", - "canonicalReference": "bitburner!Material:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "materialName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "getMaterial" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#getProduct:member(1)", - "docComment": "/**\n * Get product data\n *\n * @param divisionName - Name of the division\n *\n * @param productName - Name of the product\n *\n * @returns product data\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getProduct(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", productName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Product", - "canonicalReference": "bitburner!Product:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "productName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getProduct" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#getPurchaseWarehouseCost:member(1)", - "docComment": "/**\n * Gets the cost to purchase a warehouse\n *\n * @returns cost\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getPurchaseWarehouseCost(): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [], - "name": "getPurchaseWarehouseCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#getUpgradeWarehouseCost:member(1)", - "docComment": "/**\n * Gets the cost to upgrade a warehouse to the next level\n *\n * @returns cost to upgrade\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getUpgradeWarehouseCost(adivisionName: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ", acityName: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "adivisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "acityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getUpgradeWarehouseCost" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#getWarehouse:member(1)", - "docComment": "/**\n * Get warehouse data\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @returns warehouse data\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "getWarehouse(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Reference", - "text": "Warehouse", - "canonicalReference": "bitburner!Warehouse:interface" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "getWarehouse" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#hasWarehouse:member(1)", - "docComment": "/**\n * Check if you have a warehouse in city\n *\n * @returns true if warehouse is present, false if not\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "hasWarehouse(adivisionName: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": ", acityName: " - }, - { - "kind": "Content", - "text": "any" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "adivisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "acityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "hasWarehouse" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#makeProduct:member(1)", - "docComment": "/**\n * Create a new product\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param productName - Name of the product\n *\n * @param designInvest - Amount to invest for the design of the product.\n *\n * @param marketingInvest - Amount to invest for the marketing of the product.\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "makeProduct(\n divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n productName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n designInvest: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ",\n marketingInvest: " - }, - { - "kind": "Content", - "text": "number" - }, - { - "kind": "Content", - "text": ",\n ): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "productName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "designInvest", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "parameterName": "marketingInvest", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - } - } - ], - "name": "makeProduct" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#purchaseWarehouse:member(1)", - "docComment": "/**\n * Purchase warehouse for a new city\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "purchaseWarehouse(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "purchaseWarehouse" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#sellMaterial:member(1)", - "docComment": "/**\n * Set material sell data.\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param materialName - Name of the material\n *\n * @param amt - Amount to sell, can be \"MAX\"\n *\n * @param price - Price to sell, can be \"MP\"\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sellMaterial(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", materialName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", amt: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", price: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "materialName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "amt", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "parameterName": "price", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - } - } - ], - "name": "sellMaterial" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#sellProduct:member(1)", - "docComment": "/**\n * Set product sell data.\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param productName - Name of the product\n *\n * @param amt - Amount to sell, can be \"MAX\"\n *\n * @param price - Price to sell, can be \"MP\"\n *\n * @param all - Sell in all city\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "sellProduct(\n divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n productName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n amt: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n price: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ",\n all: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": ",\n ): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 13, - "endIndex": 14 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "productName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "amt", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - }, - { - "parameterName": "price", - "parameterTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - } - }, - { - "parameterName": "all", - "parameterTypeTokenRange": { - "startIndex": 11, - "endIndex": 12 - } - } - ], - "name": "sellProduct" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#setMaterialMarketTA1:member(1)", - "docComment": "/**\n * Set market TA 1 for a material.\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param materialName - Name of the material\n *\n * @param on - market ta enabled\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setMaterialMarketTA1(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", materialName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", on: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "materialName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "on", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "setMaterialMarketTA1" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#setMaterialMarketTA2:member(1)", - "docComment": "/**\n * Set market TA 2 for a material.\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param materialName - Name of the material\n *\n * @param on - market ta enabled\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setMaterialMarketTA2(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", materialName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", on: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 9, - "endIndex": 10 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "materialName", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - }, - { - "parameterName": "on", - "parameterTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - } - } - ], - "name": "setMaterialMarketTA2" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#setProductMarketTA1:member(1)", - "docComment": "/**\n * Set market TA 1 for a product.\n *\n * @param divisionName - Name of the division\n *\n * @param productName - Name of the product\n *\n * @param on - market ta enabled\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setProductMarketTA1(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", productName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", on: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "productName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "on", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setProductMarketTA1" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#setProductMarketTA2:member(1)", - "docComment": "/**\n * Set market TA 2 for a product.\n *\n * @param divisionName - Name of the division\n *\n * @param productName - Name of the product\n *\n * @param on - market ta enabled\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setProductMarketTA2(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", productName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", on: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "productName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "on", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setProductMarketTA2" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#setSmartSupply:member(1)", - "docComment": "/**\n * Set smart supply\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n *\n * @param enabled - smart supply enabled\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "setSmartSupply(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", enabled: " - }, - { - "kind": "Content", - "text": "boolean" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 7, - "endIndex": 8 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - }, - { - "parameterName": "enabled", - "parameterTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - } - } - ], - "name": "setSmartSupply" - }, - { - "kind": "MethodSignature", - "canonicalReference": "bitburner!WarehouseAPI#upgradeWarehouse:member(1)", - "docComment": "/**\n * Upgrade warehouse\n *\n * @param divisionName - Name of the division\n *\n * @param cityName - Name of the city\n */\n", - "excerptTokens": [ - { - "kind": "Content", - "text": "upgradeWarehouse(divisionName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": ", cityName: " - }, - { - "kind": "Content", - "text": "string" - }, - { - "kind": "Content", - "text": "): " - }, - { - "kind": "Content", - "text": "void" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isOptional": false, - "returnTypeTokenRange": { - "startIndex": 5, - "endIndex": 6 - }, - "releaseTag": "Public", - "overloadIndex": 1, - "parameters": [ - { - "parameterName": "divisionName", - "parameterTypeTokenRange": { - "startIndex": 1, - "endIndex": 2 - } - }, - { - "parameterName": "cityName", - "parameterTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 - } - } - ], - "name": "upgradeWarehouse" - } - ], - "extendsTokenRanges": [] - } - ] - } - ] -} diff --git a/package.json b/package.json index 6164663fa..b2b0f22b8 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "cy:dev": "start-server-and-test start:dev http://localhost:8000 cy:open", "cy:open": "cypress open", "cy:run": "cypress run", - "doc": "npx api-extractor run && npx api-documenter markdown", + "doc": "npx api-extractor run && npx api-documenter markdown && rm input/bitburner.api.json && rm -r input", "format": "prettier --write .", "start": "http-server -p 8000", "start:dev": "webpack-dev-server --progress --env.devServer --mode development", From bf6366cef4ce45ccd7f73d0c612cf81da6080624 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 26 Jan 2022 05:13:38 -0500 Subject: [PATCH 79/85] Move markdown doc & quotes to ./docs subfolder --- README.md | 6 +++--- BN14.md => doc/BN14.md | 0 CONTRIBUTING.md => doc/CONTRIBUTING.md | 2 +- FAQ.md => doc/FAQ.md | 0 Quotes.txt => doc/Quotes.txt | 0 doc/source/gamefrozen.rst | 2 +- src/Themes/README.md | 2 +- 7 files changed, 6 insertions(+), 6 deletions(-) rename BN14.md => doc/BN14.md (100%) rename CONTRIBUTING.md => doc/CONTRIBUTING.md (97%) rename FAQ.md => doc/FAQ.md (100%) rename Quotes.txt => doc/Quotes.txt (100%) diff --git a/README.md b/README.md index 9a239435b..0401f18f6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Bitburner is a programming-based [incremental game](https://en.wikipedia.org/wik that revolves around hacking and cyberpunk themes. The game can be played at https://danielyxie.github.io/bitburner or installed through [Steam](https://store.steampowered.com/app/1812820/Bitburner/). -See the [frequently asked questions](./FAQ.md) for more information . To discuss the game or get help, join the [official discord server](https://discord.gg/TFc3hKD) +See the [frequently asked questions](./doc/FAQ.md) for more information . To discuss the game or get help, join the [official discord server](https://discord.gg/TFc3hKD) # Documentation @@ -18,13 +18,13 @@ The [in-game documentation](./markdown/bitburner.md) is generated from the [Type Anyone is welcome to contribute to the documentation by editing the [source files](/doc/source) and then making a pull request with your contributions. For further guidance, please refer to the "As A Documentor" section of -[CONTRIBUTING](CONTRIBUTING.md). +[CONTRIBUTING](./doc/CONTRIBUTING.md). # Contribution There are many ways to contribute to the game. It can be as simple as fixing a typo, correcting a bug, or improving the UI. For guidance on doing so, -please refer to the [CONTRIBUTING](CONTRIBUTING.md) document. +please refer to the [CONTRIBUTING](./doc/CONTRIBUTING.md) document. You will retain all ownership of the Copyright of any contributions you make, and will have the same rights to use or license your contributions. By diff --git a/BN14.md b/doc/BN14.md similarity index 100% rename from BN14.md rename to doc/BN14.md diff --git a/CONTRIBUTING.md b/doc/CONTRIBUTING.md similarity index 97% rename from CONTRIBUTING.md rename to doc/CONTRIBUTING.md index a6cfd9dbd..71ec878f8 100644 --- a/CONTRIBUTING.md +++ b/doc/CONTRIBUTING.md @@ -182,7 +182,7 @@ To contribute to and view your changes to the BitBurner documentation on [Read T Docs](http://bitburner.readthedocs.io/), you will need to have Python installed, along with [Sphinx](http://www.sphinx-doc.org). -To make change to the [in-game documentation](./markdown/bitburner.md), you will need to modify the [TypeScript definitions](./src/ScriptEditor/NetscriptDefinitions.d.ts), not the markdown files. +To make change to the [in-game documentation](../markdown/bitburner.md), you will need to modify the [TypeScript definitions](../src/ScriptEditor/NetscriptDefinitions.d.ts), not the markdown files. We are using [API Extractor](https://api-extractor.com/pages/tsdoc/doc_comment_syntax/) (tsdoc hints) to generate the markdown doc. Make your changes to the TypeScript definitions and then run `npm run doc`. diff --git a/FAQ.md b/doc/FAQ.md similarity index 100% rename from FAQ.md rename to doc/FAQ.md diff --git a/Quotes.txt b/doc/Quotes.txt similarity index 100% rename from Quotes.txt rename to doc/Quotes.txt diff --git a/doc/source/gamefrozen.rst b/doc/source/gamefrozen.rst index 7b29bb448..03876ae09 100644 --- a/doc/source/gamefrozen.rst +++ b/doc/source/gamefrozen.rst @@ -23,4 +23,4 @@ Bug --- Otherwise, the game is probably frozen/stuck due to a bug. To report a bug, follow -the guidelines `here `_. +the guidelines `here `_. diff --git a/src/Themes/README.md b/src/Themes/README.md index 3dffe710d..160d75e05 100644 --- a/src/Themes/README.md +++ b/src/Themes/README.md @@ -2,7 +2,7 @@ Feel free to contribute a new theme by submitting a pull request to the game! -See [CONTRIBUTING.md](/CONTRIBUTING.md) for details. +See [CONTRIBUTING.md](/doc/CONTRIBUTING.md) for details. ## How create a new theme From a53e0c09af5fcfd8e610decaa25ceed5bd75a5b1 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 26 Jan 2022 05:14:25 -0500 Subject: [PATCH 80/85] Move steam files to ./assets/Steam subfolder --- steam_api.dll => assets/Steam/steam_api.dll | Bin steam_api.lib => assets/Steam/steam_api.lib | Bin steam_appid.txt => assets/Steam/steam_appid.txt | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename steam_api.dll => assets/Steam/steam_api.dll (100%) rename steam_api.lib => assets/Steam/steam_api.lib (100%) rename steam_appid.txt => assets/Steam/steam_appid.txt (100%) diff --git a/steam_api.dll b/assets/Steam/steam_api.dll similarity index 100% rename from steam_api.dll rename to assets/Steam/steam_api.dll diff --git a/steam_api.lib b/assets/Steam/steam_api.lib similarity index 100% rename from steam_api.lib rename to assets/Steam/steam_api.lib diff --git a/steam_appid.txt b/assets/Steam/steam_appid.txt similarity index 100% rename from steam_appid.txt rename to assets/Steam/steam_appid.txt From f943e55e8667c424d7caece11bfae6580a7d78e5 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Tue, 25 Jan 2022 16:38:54 -0500 Subject: [PATCH 81/85] Move engines-check to ./tools subfolder --- .eslintignore | 2 +- package.json | 2 +- {scripts => tools/engines-check}/.eslintrc.js | 0 {scripts => tools/engines-check}/engines-check.js | 0 {scripts => tools/engines-check}/semver.js | 0 5 files changed, 2 insertions(+), 2 deletions(-) rename {scripts => tools/engines-check}/.eslintrc.js (100%) rename {scripts => tools/engines-check}/engines-check.js (100%) rename {scripts => tools/engines-check}/semver.js (100%) diff --git a/.eslintignore b/.eslintignore index 198118748..716b1faae 100644 --- a/.eslintignore +++ b/.eslintignore @@ -13,7 +13,7 @@ cypress/ doc/ markdown/ netscript_tests/ -scripts/ +tools/engines-check/ electron/lib electron/greenworks.js diff --git a/package.json b/package.json index 6164663fa..a2f22e671 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "build:dev": "webpack --mode development", "lint": "eslint --fix . --ext js,jsx,ts,tsx", "lint:report": "eslint --ext js,jsx,ts,tsx .", - "preinstall": "node ./scripts/engines-check.js", + "preinstall": "node ./tools/engines-check/engines-check.js", "test": "jest", "test:watch": "jest --watch", "watch": "webpack --watch --mode production", diff --git a/scripts/.eslintrc.js b/tools/engines-check/.eslintrc.js similarity index 100% rename from scripts/.eslintrc.js rename to tools/engines-check/.eslintrc.js diff --git a/scripts/engines-check.js b/tools/engines-check/engines-check.js similarity index 100% rename from scripts/engines-check.js rename to tools/engines-check/engines-check.js diff --git a/scripts/semver.js b/tools/engines-check/semver.js similarity index 100% rename from scripts/semver.js rename to tools/engines-check/semver.js From 8e119b2b5b55b17b56dda504591c9575fda7bb0b Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Tue, 25 Jan 2022 16:24:09 -0500 Subject: [PATCH 82/85] Move cypress & netscript tests to ./test subfolder --- .eslintignore | 19 ++++++------ cypress.json | 12 +++++--- .../cypress}/integration/naviguation.spec.ts | 0 .../cypress}/integration/netscript.spec.ts | 0 .../cypress}/integration/tutorial.spec.ts | 0 {cypress => test/cypress}/plugins/index.js | 0 {cypress => test/cypress}/support/commands.ts | 0 .../cypress}/support/globalHooks.ts | 0 {cypress => test/cypress}/support/index.js | 0 .../Netscript/DynamicRamCalculation.test.js | 14 ++++----- .../Netscript/StaticRamCalculation.test.js | 6 ++-- test/{ => jest}/README.md | 0 test/{ => jest}/Script/Script.test.ts | 6 ++-- test/{ => jest}/StockMarket.test.ts | 30 +++++++++---------- test/{ => jest}/StringHelperFunctions.test.ts | 2 +- test/{ => jest}/Terminal/Directory.test.js | 2 +- ...neAllPossibilitiesForTabCompletion.test.ts | 12 ++++---- .../netscript}/tb_basic.script | 0 .../netscript}/tb_foo.script | 0 .../netscript}/tb_functions.script | 0 .../netscript}/tb_multiarray.script | 0 .../netscript}/tb_ports.script | 0 .../netscript}/tb_remote.script | 0 .../netscript}/tb_start.script | 0 24 files changed, 53 insertions(+), 50 deletions(-) rename {cypress => test/cypress}/integration/naviguation.spec.ts (100%) rename {cypress => test/cypress}/integration/netscript.spec.ts (100%) rename {cypress => test/cypress}/integration/tutorial.spec.ts (100%) rename {cypress => test/cypress}/plugins/index.js (100%) rename {cypress => test/cypress}/support/commands.ts (100%) rename {cypress => test/cypress}/support/globalHooks.ts (100%) rename {cypress => test/cypress}/support/index.js (100%) rename test/{ => jest}/Netscript/DynamicRamCalculation.test.js (98%) rename test/{ => jest}/Netscript/StaticRamCalculation.test.js (99%) rename test/{ => jest}/README.md (100%) rename test/{ => jest}/Script/Script.test.ts (88%) rename test/{ => jest}/StockMarket.test.ts (98%) rename test/{ => jest}/StringHelperFunctions.test.ts (92%) rename test/{ => jest}/Terminal/Directory.test.js (99%) rename test/{ => jest}/Terminal/determineAllPossibilitiesForTabCompletion.test.ts (94%) rename {netscript_tests => test/netscript}/tb_basic.script (100%) rename {netscript_tests => test/netscript}/tb_foo.script (100%) rename {netscript_tests => test/netscript}/tb_functions.script (100%) rename {netscript_tests => test/netscript}/tb_multiarray.script (100%) rename {netscript_tests => test/netscript}/tb_ports.script (100%) rename {netscript_tests => test/netscript}/tb_remote.script (100%) rename {netscript_tests => test/netscript}/tb_start.script (100%) diff --git a/.eslintignore b/.eslintignore index 716b1faae..9f6599e8c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,27 +1,26 @@ node_modules/ -dist/ -input/ .dist .tmp .package - -assets/ -css/ +.build .cypress/ -cypress/ + +dist/ +input/ +assets/ doc/ markdown/ -netscript_tests/ -tools/engines-check/ + + +test/netscript/ electron/lib electron/greenworks.js src/ThirdParty/* src/JSInterpreter.js +tools/engines-check/ -test/*.bundle.* editor.main.js main.bundle.js webpack.config.js -webpack.config-test.js diff --git a/cypress.json b/cypress.json index 97707ced4..269aac154 100644 --- a/cypress.json +++ b/cypress.json @@ -1,10 +1,14 @@ { "baseUrl": "http://localhost:8000", - "fixturesFolder": false, "trashAssetsBeforeRuns": true, - "screenshotsFolder": ".cypress/screenshots", - "videosFolder": ".cypress/videos", "videoUploadOnPasses": false, "viewportWidth": 1980, - "viewportHeight": 1080 + "viewportHeight": 1080, + "fixturesFolder": "test/cypress/fixtures", + "integrationFolder": "test/cypress/integration", + "pluginsFile": "test/cypress/plugins/index.js", + "supportFile": "test/cypress/support/index.js", + "screenshotsFolder": ".cypress/screenshots", + "videosFolder": ".cypress/videos", + "downloadsFolder": ".cypress/downloads" } diff --git a/cypress/integration/naviguation.spec.ts b/test/cypress/integration/naviguation.spec.ts similarity index 100% rename from cypress/integration/naviguation.spec.ts rename to test/cypress/integration/naviguation.spec.ts diff --git a/cypress/integration/netscript.spec.ts b/test/cypress/integration/netscript.spec.ts similarity index 100% rename from cypress/integration/netscript.spec.ts rename to test/cypress/integration/netscript.spec.ts diff --git a/cypress/integration/tutorial.spec.ts b/test/cypress/integration/tutorial.spec.ts similarity index 100% rename from cypress/integration/tutorial.spec.ts rename to test/cypress/integration/tutorial.spec.ts diff --git a/cypress/plugins/index.js b/test/cypress/plugins/index.js similarity index 100% rename from cypress/plugins/index.js rename to test/cypress/plugins/index.js diff --git a/cypress/support/commands.ts b/test/cypress/support/commands.ts similarity index 100% rename from cypress/support/commands.ts rename to test/cypress/support/commands.ts diff --git a/cypress/support/globalHooks.ts b/test/cypress/support/globalHooks.ts similarity index 100% rename from cypress/support/globalHooks.ts rename to test/cypress/support/globalHooks.ts diff --git a/cypress/support/index.js b/test/cypress/support/index.js similarity index 100% rename from cypress/support/index.js rename to test/cypress/support/index.js diff --git a/test/Netscript/DynamicRamCalculation.test.js b/test/jest/Netscript/DynamicRamCalculation.test.js similarity index 98% rename from test/Netscript/DynamicRamCalculation.test.js rename to test/jest/Netscript/DynamicRamCalculation.test.js index 1a926ee37..55f69203d 100644 --- a/test/Netscript/DynamicRamCalculation.test.js +++ b/test/jest/Netscript/DynamicRamCalculation.test.js @@ -1,13 +1,13 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { jest, describe, expect, test } from "@jest/globals"; -import { Player } from "../../src/Player"; -import { NetscriptFunctions } from "../../src/NetscriptFunctions"; -import { getRamCost, RamCostConstants } from "../../src/Netscript/RamCostGenerator"; -import { Environment } from "../../src/Netscript/Environment"; -import { RunningScript } from "../../src/Script/RunningScript"; -import { Script } from "../../src/Script/Script"; -import { SourceFileFlags } from "../../src/SourceFile/SourceFileFlags"; +import { Player } from "../../../src/Player"; +import { NetscriptFunctions } from "../../../src/NetscriptFunctions"; +import { getRamCost, RamCostConstants } from "../../../src/Netscript/RamCostGenerator"; +import { Environment } from "../../../src/Netscript/Environment"; +import { RunningScript } from "../../../src/Script/RunningScript"; +import { Script } from "../../../src/Script/Script"; +import { SourceFileFlags } from "../../../src/SourceFile/SourceFileFlags"; jest.mock(`!!raw-loader!../NetscriptDefinitions.d.ts`, () => "", { virtual: true, diff --git a/test/Netscript/StaticRamCalculation.test.js b/test/jest/Netscript/StaticRamCalculation.test.js similarity index 99% rename from test/Netscript/StaticRamCalculation.test.js rename to test/jest/Netscript/StaticRamCalculation.test.js index 31bff7e1c..4e615100e 100644 --- a/test/Netscript/StaticRamCalculation.test.js +++ b/test/jest/Netscript/StaticRamCalculation.test.js @@ -1,9 +1,9 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { jest, describe, expect } from "@jest/globals"; -import { Player } from "../../src/Player"; -import { getRamCost, RamCostConstants } from "../../src/Netscript/RamCostGenerator"; -import { calculateRamUsage } from "../../src/Script/RamCalculations"; +import { Player } from "../../../src/Player"; +import { getRamCost, RamCostConstants } from "../../../src/Netscript/RamCostGenerator"; +import { calculateRamUsage } from "../../../src/Script/RamCalculations"; jest.mock(`!!raw-loader!../NetscriptDefinitions.d.ts`, () => "", { virtual: true, diff --git a/test/README.md b/test/jest/README.md similarity index 100% rename from test/README.md rename to test/jest/README.md diff --git a/test/Script/Script.test.ts b/test/jest/Script/Script.test.ts similarity index 88% rename from test/Script/Script.test.ts rename to test/jest/Script/Script.test.ts index f0914d3c8..82c6d3b11 100644 --- a/test/Script/Script.test.ts +++ b/test/jest/Script/Script.test.ts @@ -1,8 +1,8 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { jest, describe, expect, test } from "@jest/globals"; -import { Script } from "../../src/Script/Script"; -import { Player } from "../../src/Player"; +import { Script } from "../../../src/Script/Script"; +import { Player } from "../../../src/Player"; jest.mock(`!!raw-loader!../NetscriptDefinitions.d.ts`, () => "", { virtual: true, @@ -26,4 +26,4 @@ describe("Validate Save Script Works", function () { expect(script.code).toEqual(code) expect(script.server).toEqual(server) }); -}); \ No newline at end of file +}); diff --git a/test/StockMarket.test.ts b/test/jest/StockMarket.test.ts similarity index 98% rename from test/StockMarket.test.ts rename to test/jest/StockMarket.test.ts index 92c2d720f..2abc16ea9 100644 --- a/test/StockMarket.test.ts +++ b/test/jest/StockMarket.test.ts @@ -1,25 +1,25 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { jest, describe, expect, test } from '@jest/globals' -import { CONSTANTS } from "../src/Constants"; -import { Player } from "../src/Player"; -import { IMap } from "../src/types"; +import { CONSTANTS } from "../../src/Constants"; +import { Player } from "../../src/Player"; +import { IMap } from "../../src/types"; -import { Company } from "../src/Company/Company"; -import { Server } from "../src/Server/Server"; +import { Company } from "../../src/Company/Company"; +import { Server } from "../../src/Server/Server"; -import { buyStock, sellStock, shortStock, sellShort } from "../src/StockMarket/BuyingAndSelling"; -import { IStockMarket } from "../src/StockMarket/IStockMarket"; -import { Order } from "../src/StockMarket/Order"; +import { buyStock, sellStock, shortStock, sellShort } from "../../src/StockMarket/BuyingAndSelling"; +import { IStockMarket } from "../../src/StockMarket/IStockMarket"; +import { Order } from "../../src/StockMarket/Order"; import { forecastForecastChangeFromCompanyWork, forecastForecastChangeFromHack, influenceStockThroughCompanyWork, influenceStockThroughServerGrow, influenceStockThroughServerHack, -} from "../src/StockMarket/PlayerInfluencing"; -import { processOrders, IProcessOrderRefs } from "../src/StockMarket/OrderProcessing"; -import { Stock, StockForecastInfluenceLimit } from "../src/StockMarket/Stock"; +} from "../../src/StockMarket/PlayerInfluencing"; +import { processOrders, IProcessOrderRefs } from "../../src/StockMarket/OrderProcessing"; +import { Stock, StockForecastInfluenceLimit } from "../../src/StockMarket/Stock"; import { cancelOrder, deleteStockMarket, @@ -29,15 +29,15 @@ import { processStockPrices, StockMarket, SymbolToStockMap, -} from "../src/StockMarket/StockMarket"; +} from "../../src/StockMarket/StockMarket"; import { forecastChangePerPriceMovement, getBuyTransactionCost, getSellTransactionGain, processTransactionForecastMovement, -} from "../src/StockMarket/StockMarketHelpers"; -import { OrderTypes } from "../src/StockMarket/data/OrderTypes"; -import { PositionTypes } from "../src/StockMarket/data/PositionTypes"; +} from "../../src/StockMarket/StockMarketHelpers"; +import { OrderTypes } from "../../src/StockMarket/data/OrderTypes"; +import { PositionTypes } from "../../src/StockMarket/data/PositionTypes"; jest.mock(`!!raw-loader!../NetscriptDefinitions.d.ts`, () => '', { virtual: true, diff --git a/test/StringHelperFunctions.test.ts b/test/jest/StringHelperFunctions.test.ts similarity index 92% rename from test/StringHelperFunctions.test.ts rename to test/jest/StringHelperFunctions.test.ts index 637963c6a..ee6d21dec 100644 --- a/test/StringHelperFunctions.test.ts +++ b/test/jest/StringHelperFunctions.test.ts @@ -1,6 +1,6 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { jest, describe, expect, test } from '@jest/globals' -import { convertTimeMsToTimeElapsedString } from "../src/utils/StringHelperFunctions"; +import { convertTimeMsToTimeElapsedString } from "../../src/utils/StringHelperFunctions"; describe("StringHelperFunctions Tests", function () { it("transforms strings", () => { diff --git a/test/Terminal/Directory.test.js b/test/jest/Terminal/Directory.test.js similarity index 99% rename from test/Terminal/Directory.test.js rename to test/jest/Terminal/Directory.test.js index a054be567..6ecc529bf 100644 --- a/test/Terminal/Directory.test.js +++ b/test/jest/Terminal/Directory.test.js @@ -1,6 +1,6 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { jest, describe, expect, test } from '@jest/globals' -import * as dirHelpers from "../../src/Terminal/DirectoryHelpers"; +import * as dirHelpers from "../../../src/Terminal/DirectoryHelpers"; describe("Terminal Directory Tests", function () { describe("removeLeadingSlash()", function () { diff --git a/test/Terminal/determineAllPossibilitiesForTabCompletion.test.ts b/test/jest/Terminal/determineAllPossibilitiesForTabCompletion.test.ts similarity index 94% rename from test/Terminal/determineAllPossibilitiesForTabCompletion.test.ts rename to test/jest/Terminal/determineAllPossibilitiesForTabCompletion.test.ts index 513d0809c..52da0ad7a 100644 --- a/test/Terminal/determineAllPossibilitiesForTabCompletion.test.ts +++ b/test/jest/Terminal/determineAllPossibilitiesForTabCompletion.test.ts @@ -2,12 +2,12 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { jest, describe, expect, test } from "@jest/globals"; -import { Player } from "../../src/Player"; -import { determineAllPossibilitiesForTabCompletion } from "../../src/Terminal/determineAllPossibilitiesForTabCompletion"; -import { Server } from "../../src/Server/Server"; -import { AddToAllServers, prestigeAllServers } from "../../src/Server/AllServers"; -import { LocationName } from "../../src/Locations/data/LocationNames"; -import { CodingContract } from "../../src/CodingContracts"; +import { Player } from "../../../src/Player"; +import { determineAllPossibilitiesForTabCompletion } from "../../../src/Terminal/determineAllPossibilitiesForTabCompletion"; +import { Server } from "../../../src/Server/Server"; +import { AddToAllServers, prestigeAllServers } from "../../../src/Server/AllServers"; +import { LocationName } from "../../../src/Locations/data/LocationNames"; +import { CodingContract } from "../../../src/CodingContracts"; jest.mock(`!!raw-loader!../NetscriptDefinitions.d.ts`, () => "", { virtual: true, diff --git a/netscript_tests/tb_basic.script b/test/netscript/tb_basic.script similarity index 100% rename from netscript_tests/tb_basic.script rename to test/netscript/tb_basic.script diff --git a/netscript_tests/tb_foo.script b/test/netscript/tb_foo.script similarity index 100% rename from netscript_tests/tb_foo.script rename to test/netscript/tb_foo.script diff --git a/netscript_tests/tb_functions.script b/test/netscript/tb_functions.script similarity index 100% rename from netscript_tests/tb_functions.script rename to test/netscript/tb_functions.script diff --git a/netscript_tests/tb_multiarray.script b/test/netscript/tb_multiarray.script similarity index 100% rename from netscript_tests/tb_multiarray.script rename to test/netscript/tb_multiarray.script diff --git a/netscript_tests/tb_ports.script b/test/netscript/tb_ports.script similarity index 100% rename from netscript_tests/tb_ports.script rename to test/netscript/tb_ports.script diff --git a/netscript_tests/tb_remote.script b/test/netscript/tb_remote.script similarity index 100% rename from netscript_tests/tb_remote.script rename to test/netscript/tb_remote.script diff --git a/netscript_tests/tb_start.script b/test/netscript/tb_start.script similarity index 100% rename from netscript_tests/tb_start.script rename to test/netscript/tb_start.script From 412ef543c8ab94f24d3a0a83f940b304412a94b3 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 26 Jan 2022 05:47:27 -0500 Subject: [PATCH 83/85] Run `npm audit fix` to resolve vulnerabilities It did not resolve all of the vulns as some are gated behind breaking changes. Most of them seem to be resolved when updating to webpack 5 Also moves devDependencies out of normal dependencies, as a few libs were better suited for dev. --- package-lock.json | 1912 ++++++++++++++++++++++++++++++++++----------- package.json | 20 +- 2 files changed, 1460 insertions(+), 472 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d43b734f..919045e1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,30 +1,22 @@ { "name": "bitburner", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "1.2.0", + "name": "bitburner", + "version": "1.3.0", "hasInstallScript": true, "license": "SEE LICENSE IN license.txt", "dependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", "@material-ui/core": "^4.12.3", - "@microsoft/api-documenter": "^7.13.65", - "@microsoft/api-extractor": "^7.18.17", "@monaco-editor/react": "^4.2.2", "@mui/icons-material": "^5.0.3", "@mui/material": "^5.0.3", "@mui/styles": "^5.0.1", - "@types/acorn": "^4.0.6", - "@types/escodegen": "^0.0.7", - "@types/numeral": "0.0.25", - "@types/react": "^17.0.21", - "@types/react-beautiful-dnd": "^13.1.2", - "@types/react-dom": "^17.0.9", - "@types/react-resizable": "^1.7.3", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^5.0.0", @@ -44,7 +36,6 @@ "notistack": "^2.0.2", "numeral": "2.0.6", "prop-types": "^15.8.0", - "raw-loader": "^4.0.2", "react": "^17.0.2", "react-beautiful-dnd": "^13.1.0", "react-dom": "^17.0.2", @@ -57,10 +48,19 @@ "@babel/preset-env": "^7.15.0", "@babel/preset-react": "^7.0.0", "@babel/preset-typescript": "^7.15.0", + "@microsoft/api-documenter": "^7.13.65", + "@microsoft/api-extractor": "^7.18.17", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.1", "@testing-library/cypress": "^8.0.1", + "@types/acorn": "^4.0.6", + "@types/escodegen": "^0.0.7", "@types/file-saver": "^2.0.3", "@types/lodash": "^4.14.168", + "@types/numeral": "0.0.25", + "@types/react": "^17.0.21", + "@types/react-beautiful-dnd": "^13.1.2", + "@types/react-dom": "^17.0.9", + "@types/react-resizable": "^1.7.3", "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", "babel-jest": "^27.0.6", @@ -69,6 +69,7 @@ "electron": "^14.0.2", "electron-packager": "^15.4.0", "eslint": "^7.24.0", + "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^6.3.3", "html-webpack-plugin": "^3.2.0", "http-server": "^13.0.1", @@ -77,6 +78,7 @@ "lodash": "^4.17.21", "mini-css-extract-plugin": "^0.4.1", "prettier": "^2.3.2", + "raw-loader": "^4.0.2", "react-refresh": "^0.10.0", "regenerator-runtime": "^0.13.9", "source-map": "^0.7.3", @@ -3037,14 +3039,15 @@ } }, "node_modules/@microsoft/api-documenter": { - "version": "7.13.65", - "resolved": "https://registry.npmjs.org/@microsoft/api-documenter/-/api-documenter-7.13.65.tgz", - "integrity": "sha512-cajrUQaNTjzRXMzftUhTku5J4BHSqrCiPXv3tCzdWnii9FxZpqvAYZelfW0/Tz9gjM9kYEMp9Msetf41AR1u7A==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-documenter/-/api-documenter-7.15.1.tgz", + "integrity": "sha512-4NBMYriTV6m5RIrXzzQAWr6IjgIcTQ8cSPGBtcFpA30Knyfrjag0i87QjlXZhiPS48NtwRrn9ktzd6q0WthO3A==", + "dev": true, "dependencies": { - "@microsoft/api-extractor-model": "7.13.14", + "@microsoft/api-extractor-model": "7.15.3", "@microsoft/tsdoc": "0.13.2", - "@rushstack/node-core-library": "3.43.0", - "@rushstack/ts-command-line": "4.10.3", + "@rushstack/node-core-library": "3.45.0", + "@rushstack/ts-command-line": "4.10.6", "colors": "~1.2.1", "js-yaml": "~3.13.1", "resolve": "~1.17.0" @@ -3057,6 +3060,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true, "engines": { "node": ">=0.1.90" } @@ -3065,6 +3069,7 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3077,6 +3082,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "dependencies": { "path-parse": "^1.0.6" }, @@ -3085,41 +3091,44 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.18.17", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.18.17.tgz", - "integrity": "sha512-gZuJ//FAyfrOqWssY0cyU2bEo8FOIaIYVs+pU5IDyfImkye6YkT2Qnm5PAFhyYSkfUjV5SjvyuP4+VsDfS3jww==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.19.4.tgz", + "integrity": "sha512-iehC6YA3DGJvxTUaK7HUtQmP6hAQU07+Q/OR8TG4dVR6KpqCi9UPEVk8AgCvQkiK+6FbVEFQTx0qLuYk4EeuHg==", + "dev": true, "dependencies": { - "@microsoft/api-extractor-model": "7.13.14", + "@microsoft/api-extractor-model": "7.15.3", "@microsoft/tsdoc": "0.13.2", "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.43.0", - "@rushstack/rig-package": "0.3.4", - "@rushstack/ts-command-line": "4.10.3", + "@rushstack/node-core-library": "3.45.0", + "@rushstack/rig-package": "0.3.7", + "@rushstack/ts-command-line": "4.10.6", "colors": "~1.2.1", "lodash": "~4.17.15", "resolve": "~1.17.0", "semver": "~7.3.0", "source-map": "~0.6.1", - "typescript": "~4.4.2" + "typescript": "~4.5.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.13.14.tgz", - "integrity": "sha512-mKc917+QhOuOZebSnE77i8Tavj/G5ydIFoJqDIY9LpmAfJjsVHgL2pc7vkvW58QTxH2wadIDK1tLzcteOMEt4w==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.15.3.tgz", + "integrity": "sha512-NkSjolmSI7NGvbdz0Y7kjQfdpD+j9E5CwXTxEyjDqxd10MI7GXV8DnAsQ57GFJcgHKgTjf2aUnYfMJ9w3aMicw==", + "dev": true, "dependencies": { "@microsoft/tsdoc": "0.13.2", "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.43.0" + "@rushstack/node-core-library": "3.45.0" } }, "node_modules/@microsoft/api-extractor/node_modules/colors": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true, "engines": { "node": ">=0.1.90" } @@ -3128,6 +3137,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "dependencies": { "path-parse": "^1.0.6" }, @@ -3139,6 +3149,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -3153,6 +3164,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3160,12 +3172,14 @@ "node_modules/@microsoft/tsdoc": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", - "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==" + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "dev": true }, "node_modules/@microsoft/tsdoc-config": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "dev": true, "dependencies": { "@microsoft/tsdoc": "0.13.2", "ajv": "~6.12.6", @@ -3177,6 +3191,7 @@ "version": "1.19.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, "dependencies": { "is-core-module": "^2.1.0", "path-parse": "^1.0.6" @@ -3592,9 +3607,10 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.43.0.tgz", - "integrity": "sha512-MFLW+6X83k6o8m8KnWkDhL/8NCJYHbFnnDokPSX1UHC3JwiEvVhHmEnxZv2YEzwnXeFYoKViub2G2t2liHbHLA==", + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.45.0.tgz", + "integrity": "sha512-YMuIJl19vQT1+g/OU9mLY6T5ZBT9uDlmeXExDQACpGuxTJW+LHNbk/lRX+eCApQI2eLBlaL4U68r3kZlqwbdmw==", + "dev": true, "dependencies": { "@types/node": "12.20.24", "colors": "~1.2.1", @@ -3604,18 +3620,20 @@ "resolve": "~1.17.0", "semver": "~7.3.0", "timsort": "~0.3.0", - "z-schema": "~3.18.3" + "z-schema": "~5.0.2" } }, "node_modules/@rushstack/node-core-library/node_modules/@types/node": { "version": "12.20.24", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==" + "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "dev": true }, "node_modules/@rushstack/node-core-library/node_modules/colors": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true, "engines": { "node": ">=0.1.90" } @@ -3624,6 +3642,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -3637,6 +3656,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -3645,6 +3665,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "dependencies": { "path-parse": "^1.0.6" }, @@ -3656,6 +3677,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -3670,14 +3692,16 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/@rushstack/rig-package": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.4.tgz", - "integrity": "sha512-NsCzPxPQ8cu7lnqa/4xBQXuCJwaBrb5vEbOC8Q/bMQK7GDOxeVUN3/f+NCYjgQSl39toAm8jQJ7TJe+RYYX3yQ==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.7.tgz", + "integrity": "sha512-pzMsTSeTC8IiZ6EJLr53gGMvhT4oLWH+hxD7907cHyWuIUlEXFtu/2pK25vUQT13nKp5DJCWxXyYoGRk/h6rtA==", + "dev": true, "dependencies": { "resolve": "~1.17.0", "strip-json-comments": "~3.1.1" @@ -3687,6 +3711,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "dependencies": { "path-parse": "^1.0.6" }, @@ -3695,9 +3720,10 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.3.tgz", - "integrity": "sha512-DdDfwr8CO6CP/kBZlQrrwKyA6UxOteujaIBrmoHa+J+dyLZC19YA/LK0fAHjr2qHLAJHHXVpZwPH8BpqN84oVg==", + "version": "4.10.6", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.6.tgz", + "integrity": "sha512-Y3GkUag39sTIlukDg9mUp8MCHrrlJ27POrBNRQGc/uF+VVgX8M7zMzHch5zP6O1QVquWgD7Engdpn2piPYaS/g==", + "dev": true, "dependencies": { "@types/argparse": "1.0.38", "argparse": "~1.0.9", @@ -3709,6 +3735,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true, "engines": { "node": ">=0.1.90" } @@ -3892,6 +3919,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, "dependencies": { "@types/estree": "*" } @@ -3899,7 +3927,8 @@ "node_modules/@types/argparse": { "version": "1.0.38", "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==" + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true }, "node_modules/@types/aria-query": { "version": "4.2.2", @@ -3951,12 +3980,14 @@ "node_modules/@types/escodegen": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.7.tgz", - "integrity": "sha512-46oENdSRNEJXCNrPJoC3vRolZJpfeEm7yvATkd2bCncKFG0PUEyfBCaoacfpcXH4Y5RRuqdVj3J7TI+wwn2SbQ==" + "integrity": "sha512-46oENdSRNEJXCNrPJoC3vRolZJpfeEm7yvATkd2bCncKFG0PUEyfBCaoacfpcXH4Y5RRuqdVj3J7TI+wwn2SbQ==", + "dev": true }, "node_modules/@types/estree": { "version": "0.0.50", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true }, "node_modules/@types/file-saver": { "version": "2.0.3", @@ -4019,7 +4050,8 @@ "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true }, "node_modules/@types/lodash": { "version": "4.14.175", @@ -4042,7 +4074,8 @@ "node_modules/@types/numeral": { "version": "0.0.25", "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-0.0.25.tgz", - "integrity": "sha512-ShHzHkYD+Ldw3eyttptCpUhF1/mkInWwasQkCNXZHOsJMJ/UMa8wXrxSrTJaVk0r4pLK/VnESVM0wFsfQzNEKQ==" + "integrity": "sha512-ShHzHkYD+Ldw3eyttptCpUhF1/mkInWwasQkCNXZHOsJMJ/UMa8wXrxSrTJaVk0r4pLK/VnESVM0wFsfQzNEKQ==", + "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -4074,6 +4107,7 @@ "version": "13.1.2", "resolved": "https://registry.npmjs.org/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.2.tgz", "integrity": "sha512-+OvPkB8CdE/bGdXKyIhc/Lm2U7UAYCCJgsqmopFmh9gbAudmslkI8eOrPDjg4JhwSE6wytz4a3/wRjKtovHVJg==", + "dev": true, "dependencies": { "@types/react": "*" } @@ -4082,6 +4116,7 @@ "version": "17.0.9", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.9.tgz", "integrity": "sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==", + "dev": true, "dependencies": { "@types/react": "*" } @@ -4109,6 +4144,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/@types/react-resizable/-/react-resizable-1.7.4.tgz", "integrity": "sha512-+xsGkd+Gvb9+8mLR1EyhNN8kBRJcsT1uJF4WpkFpFPIoApX2S89BmJA2RVtMdkhwe6YxV4RbHfaJ3bIdcgHc7g==", + "dev": true, "dependencies": { "@types/react": "*" } @@ -4360,6 +4396,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, "dependencies": { "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -4369,22 +4406,26 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true }, "node_modules/@webassemblyjs/helper-code-frame": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, "dependencies": { "@webassemblyjs/wast-printer": "1.9.0" } @@ -4392,12 +4433,14 @@ "node_modules/@webassemblyjs/helper-fsm": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true }, "node_modules/@webassemblyjs/helper-module-context": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0" } @@ -4405,12 +4448,14 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -4422,6 +4467,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4430,6 +4476,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -4437,12 +4484,14 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -4458,6 +4507,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -4470,6 +4520,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -4481,6 +4532,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-api-error": "1.9.0", @@ -4494,6 +4546,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/floating-point-hex-parser": "1.9.0", @@ -4507,6 +4560,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/wast-parser": "1.9.0", @@ -4516,12 +4570,14 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, "node_modules/abab": { "version": "2.0.5", @@ -4630,6 +4686,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4645,6 +4702,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, "peerDependencies": { "ajv": ">=5.0.0" } @@ -4653,6 +4711,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -4681,18 +4740,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -4729,7 +4776,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "devOptional": true, + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4741,7 +4788,8 @@ "node_modules/aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "node_modules/arch": { "version": "2.2.0", @@ -4772,6 +4820,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -4779,7 +4828,8 @@ "node_modules/argparse/node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "node_modules/aria-query": { "version": "4.2.2", @@ -4798,6 +4848,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4806,6 +4857,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4814,6 +4866,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4852,6 +4905,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4910,6 +4964,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -4920,12 +4975,14 @@ "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" @@ -4943,12 +5000,14 @@ "node_modules/assert/node_modules/inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true }, "node_modules/assert/node_modules/util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, "dependencies": { "inherits": "2.0.1" } @@ -4957,6 +5016,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4983,7 +5043,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "devOptional": true + "dev": true }, "node_modules/async-limiter": { "version": "1.0.1", @@ -5010,6 +5070,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, "bin": { "atob": "bin/atob.js" }, @@ -5310,12 +5371,14 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -5333,6 +5396,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -5344,6 +5408,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -5398,6 +5463,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, "engines": { "node": "*" } @@ -5406,7 +5472,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -5415,6 +5481,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" @@ -5429,12 +5496,14 @@ "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, "node_modules/bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true }, "node_modules/body-parser": { "version": "1.19.0", @@ -5521,6 +5590,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5530,7 +5600,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "devOptional": true, + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -5541,7 +5611,8 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true }, "node_modules/browser-process-hrtime": { "version": "1.0.0", @@ -5553,6 +5624,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -5566,6 +5638,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -5576,6 +5649,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -5587,6 +5661,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -5596,6 +5671,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", @@ -5612,6 +5688,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5625,6 +5702,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -5644,6 +5722,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -5652,6 +5731,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, "dependencies": { "pako": "~1.0.5" } @@ -5691,6 +5771,7 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -5731,7 +5812,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/buffer-indexof": { "version": "1.1.1", @@ -5742,17 +5824,20 @@ "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, "node_modules/buffer/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true }, "node_modules/bytes": { "version": "3.0.0", @@ -5767,6 +5852,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -5916,7 +6002,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "devOptional": true, + "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5936,12 +6022,14 @@ "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, "engines": { "node": ">=6.0" } @@ -5962,6 +6050,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5977,6 +6066,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -5991,6 +6081,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -6002,6 +6093,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -6013,6 +6105,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -6023,12 +6116,14 @@ "node_modules/class-utils/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/class-utils/node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -6040,6 +6135,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -6051,6 +6147,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -6064,6 +6161,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6195,6 +6293,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -6270,7 +6369,8 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, "node_modules/compare-version": { "version": "0.1.2", @@ -6284,7 +6384,8 @@ "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "node_modules/compressible": { "version": "2.0.18", @@ -6334,12 +6435,14 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "engines": [ "node >= 0.8" ], @@ -6353,12 +6456,14 @@ "node_modules/concat-stream/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6373,6 +6478,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -6460,6 +6566,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, "dependencies": { "date-now": "^0.1.4" } @@ -6467,7 +6574,8 @@ "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.3", @@ -6517,6 +6625,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, "dependencies": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -6530,6 +6639,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6549,6 +6659,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -6560,6 +6671,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6643,6 +6755,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -6651,12 +6764,14 @@ "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -6669,6 +6784,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -6720,6 +6836,7 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -6878,7 +6995,8 @@ "node_modules/cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true }, "node_modules/cypress": { "version": "8.6.0", @@ -7066,7 +7184,8 @@ "node_modules/date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true }, "node_modules/dayjs": { "version": "1.10.7", @@ -7103,6 +7222,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, "engines": { "node": ">=0.10" } @@ -7309,6 +7429,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -7444,6 +7565,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -7492,6 +7614,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -7501,7 +7624,8 @@ "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/dir-glob": { "version": "3.0.1", @@ -7580,6 +7704,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, "engines": { "node": ">=0.4", "npm": ">=1.2" @@ -7621,6 +7746,7 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -7631,12 +7757,14 @@ "node_modules/duplexify/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/duplexify/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7651,6 +7779,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -7842,6 +7971,7 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -7855,7 +7985,8 @@ "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/emittery": { "version": "0.8.1", @@ -7879,6 +8010,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, "engines": { "node": ">= 4" } @@ -7896,6 +8028,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } @@ -7904,6 +8037,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", @@ -7916,12 +8050,14 @@ "node_modules/enhanced-resolve/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/enhanced-resolve/node_modules/memory-fs": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -7934,6 +8070,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7948,6 +8085,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -7977,6 +8115,7 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, "dependencies": { "prr": "~1.0.1" }, @@ -8462,6 +8601,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -8473,6 +8613,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, "engines": { "node": ">=4.0" } @@ -8533,6 +8674,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, "engines": { "node": ">=0.8.x" } @@ -8553,6 +8695,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -8606,6 +8749,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -8623,6 +8767,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { "ms": "2.0.0" } @@ -8631,6 +8776,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -8642,6 +8788,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -8653,6 +8800,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -8664,6 +8812,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -8674,12 +8823,14 @@ "node_modules/expand-brackets/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/expand-brackets/node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -8691,6 +8842,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -8702,6 +8854,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -8715,6 +8868,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8723,6 +8877,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8730,7 +8885,8 @@ "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "node_modules/expand-tilde": { "version": "2.0.2", @@ -8860,6 +9016,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -8872,6 +9029,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -8890,6 +9048,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -8901,6 +9060,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -8912,6 +9072,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8948,7 +9109,8 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-glob": { "version": "3.2.7", @@ -8969,7 +9131,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -9018,7 +9181,8 @@ "node_modules/figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true }, "node_modules/figures": { "version": "3.2.0", @@ -9056,6 +9220,55 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/file-saver": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", @@ -9065,6 +9278,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, "optional": true }, "node_modules/filename-reserved-regex": { @@ -9097,7 +9311,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "devOptional": true, + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -9395,6 +9609,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" @@ -9403,12 +9618,14 @@ "node_modules/flush-write-stream/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/flush-write-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9423,14 +9640,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true, "funding": [ { @@ -9451,6 +9669,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9653,6 +9872,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "dependencies": { "map-cache": "^0.2.2" }, @@ -9679,6 +9899,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -9687,12 +9908,14 @@ "node_modules/from2/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/from2/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9707,6 +9930,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -9741,6 +9965,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", @@ -9751,12 +9976,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -9931,6 +10158,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9963,7 +10191,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -10252,6 +10480,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -10265,6 +10494,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -10276,12 +10506,14 @@ "node_modules/has-values/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -10293,6 +10525,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -10304,6 +10537,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -10315,6 +10549,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -10328,6 +10563,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10341,6 +10577,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -10360,6 +10597,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -10368,6 +10606,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -10386,6 +10625,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -10837,7 +11077,8 @@ "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true }, "node_modules/https-proxy-agent": { "version": "5.0.0", @@ -10882,6 +11123,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -10900,7 +11142,8 @@ "node_modules/iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true }, "node_modules/ignore": { "version": "5.1.8", @@ -10943,6 +11186,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, "engines": { "node": ">=8" } @@ -10983,12 +11227,14 @@ "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -11072,6 +11318,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -11116,7 +11363,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -11179,6 +11426,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -11205,6 +11453,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -11233,6 +11482,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -11244,7 +11494,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -11271,7 +11521,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -11316,7 +11566,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.12.0" } @@ -11390,6 +11640,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "dependencies": { "isobject": "^3.0.1" }, @@ -11504,6 +11755,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -11523,7 +11775,8 @@ "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, "node_modules/isbinaryfile": { "version": "3.0.3", @@ -11547,6 +11800,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -13749,7 +14003,8 @@ "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true }, "node_modules/joi": { "version": "17.4.2", @@ -13889,7 +14144,8 @@ "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -13897,15 +14153,16 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -13929,6 +14186,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, "dependencies": { "minimist": "^1.2.0" }, @@ -13949,18 +14207,18 @@ } }, "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, - "engines": [ - "node >=0.6.0" - ], "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" } }, "node_modules/jss": { @@ -14111,6 +14369,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -14229,6 +14488,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true, "engines": { "node": ">=4.3.0 <5.0.0 || >=5.10" } @@ -14237,6 +14497,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -14264,7 +14525,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.clonedeep": { "version": "4.5.0", @@ -14281,12 +14543,14 @@ "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -14523,6 +14787,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -14567,6 +14832,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -14581,6 +14847,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "dependencies": { "object-visit": "^1.0.0" }, @@ -14656,6 +14923,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -14692,6 +14960,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -14700,12 +14969,14 @@ "node_modules/memory-fs/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/memory-fs/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14720,6 +14991,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -14776,6 +15048,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -14787,7 +15060,8 @@ "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/mime": { "version": "1.6.0", @@ -14874,17 +15148,20 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14901,6 +15178,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -14918,6 +15196,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -14934,6 +15213,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, "dependencies": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", @@ -14947,6 +15227,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14966,6 +15247,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -15001,12 +15283,14 @@ "version": "2.15.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, "optional": true }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -15042,7 +15326,8 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "node_modules/nice-try": { "version": "1.0.5", @@ -15078,6 +15363,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, "dependencies": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -15107,17 +15393,20 @@ "node_modules/node-libs-browser/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/node-libs-browser/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true }, "node_modules/node-libs-browser/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15132,6 +15421,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -15140,6 +15430,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -15148,6 +15439,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -15202,7 +15494,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -15327,6 +15619,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -15340,6 +15633,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -15351,6 +15645,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -15361,12 +15656,14 @@ "node_modules/object-copy/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/object-copy/node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -15378,6 +15675,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -15391,6 +15689,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -15399,6 +15698,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -15444,6 +15744,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "dependencies": { "isobject": "^3.0.0" }, @@ -15490,6 +15791,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "dependencies": { "isobject": "^3.0.1" }, @@ -15528,6 +15830,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -15636,7 +15939,8 @@ "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true }, "node_modules/ospath": { "version": "1.2.2", @@ -15723,6 +16027,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "engines": { "node": ">=6" } @@ -15736,6 +16041,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, "dependencies": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -15745,12 +16051,14 @@ "node_modules/parallel-transform/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/parallel-transform/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15765,6 +16073,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -15793,6 +16102,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -15858,6 +16168,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -15865,13 +16176,14 @@ "node_modules/path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "devOptional": true + "dev": true }, "node_modules/path-exists": { "version": "4.0.0", @@ -15886,6 +16198,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -15931,6 +16244,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -15963,7 +16277,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8.6" }, @@ -16200,6 +16514,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -16287,6 +16602,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, "engines": { "node": ">= 0.6.0" } @@ -16308,7 +16624,8 @@ "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true }, "node_modules/prompts": { "version": "2.4.2", @@ -16367,7 +16684,8 @@ "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true }, "node_modules/ps-tree": { "version": "1.2.0", @@ -16394,6 +16712,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -16406,12 +16725,14 @@ "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -16421,6 +16742,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -16431,6 +16753,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -16440,6 +16763,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, "engines": { "node": ">=6" } @@ -16458,6 +16782,7 @@ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, "engines": { "node": ">=0.4.x" } @@ -16466,6 +16791,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, "engines": { "node": ">=0.4.x" } @@ -16511,6 +16837,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -16519,6 +16846,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -16561,6 +16889,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -16580,6 +16909,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -16594,6 +16924,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -16846,6 +17177,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -16857,7 +17189,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -16909,6 +17241,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -17002,7 +17335,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "devOptional": true + "dev": true }, "node_modules/renderkid": { "version": "2.0.7", @@ -17125,6 +17458,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -17133,6 +17467,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, "engines": { "node": ">=0.10" } @@ -17339,7 +17674,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true }, "node_modules/responselike": { "version": "1.0.2", @@ -17367,6 +17703,7 @@ "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, "engines": { "node": ">=0.12" } @@ -17429,6 +17766,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -17479,6 +17817,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, "dependencies": { "aproba": "^1.1.1" } @@ -17504,6 +17843,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "dependencies": { "ret": "~0.1.10" } @@ -17511,7 +17851,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/saxes": { "version": "3.1.11", @@ -17538,6 +17879,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -17564,9 +17906,9 @@ "dev": true }, "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "dependencies": { "node-forge": "^0.10.0" @@ -17754,6 +18096,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -17768,6 +18111,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -17779,6 +18123,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -17786,7 +18131,8 @@ "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true }, "node_modules/setprototypeof": { "version": "1.1.1", @@ -17798,6 +18144,7 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -17912,6 +18259,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", @@ -17930,6 +18278,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -17943,6 +18292,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -17954,6 +18304,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "dependencies": { "kind-of": "^3.2.0" }, @@ -17964,12 +18315,14 @@ "node_modules/snapdragon-util/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/snapdragon-util/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -17981,6 +18334,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { "ms": "2.0.0" } @@ -17989,6 +18343,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -18000,6 +18355,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -18011,6 +18367,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -18022,6 +18379,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -18032,12 +18390,14 @@ "node_modules/snapdragon/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/snapdragon/node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -18049,6 +18409,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -18060,6 +18421,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -18073,6 +18435,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -18081,6 +18444,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -18088,12 +18452,14 @@ "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "node_modules/snapdragon/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -18135,7 +18501,8 @@ "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true }, "node_modules/source-map": { "version": "0.7.3", @@ -18150,6 +18517,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -18162,6 +18530,7 @@ "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -18171,6 +18540,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -18178,7 +18548,8 @@ "node_modules/source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true }, "node_modules/spdx-correct": { "version": "3.1.1", @@ -18322,6 +18693,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "dependencies": { "extend-shallow": "^3.0.0" }, @@ -18462,6 +18834,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -18474,6 +18847,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -18485,6 +18859,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -18496,6 +18871,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -18506,12 +18882,14 @@ "node_modules/static-extend/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/static-extend/node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -18523,6 +18901,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -18534,6 +18913,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -18547,6 +18927,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -18573,6 +18954,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, "dependencies": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -18581,12 +18963,14 @@ "node_modules/stream-browserify/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -18601,6 +18985,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -18618,6 +19003,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -18627,6 +19013,7 @@ "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -18638,12 +19025,14 @@ "node_modules/stream-http/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/stream-http/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -18658,6 +19047,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -18665,17 +19055,20 @@ "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true }, "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true }, "node_modules/string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, "engines": { "node": ">=0.6.19" } @@ -18776,6 +19169,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -18965,6 +19359,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, "engines": { "node": ">=6" } @@ -18989,6 +19384,7 @@ "version": "4.8.0", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, "dependencies": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -19005,6 +19401,7 @@ "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, "dependencies": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -19027,6 +19424,7 @@ "version": "12.0.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, "dependencies": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -19049,6 +19447,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -19062,6 +19461,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "dependencies": { "locate-path": "^3.0.0" }, @@ -19073,6 +19473,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -19092,6 +19493,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, "engines": { "node": ">=4" } @@ -19100,6 +19502,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -19112,6 +19515,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -19120,6 +19524,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -19132,6 +19537,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, "dependencies": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -19152,6 +19558,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -19166,6 +19573,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "dependencies": { "p-limit": "^2.0.0" }, @@ -19177,6 +19585,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, "engines": { "node": ">=4" } @@ -19185,6 +19594,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, "engines": { "node": ">=6" } @@ -19193,6 +19603,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, "dependencies": { "find-up": "^3.0.0" }, @@ -19204,6 +19615,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -19215,6 +19627,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -19228,6 +19641,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -19236,6 +19650,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -19244,6 +19659,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -19252,6 +19668,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, "dependencies": { "figgy-pudding": "^3.5.1" } @@ -19259,17 +19676,20 @@ "node_modules/terser-webpack-plugin/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -19336,6 +19756,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -19344,12 +19765,14 @@ "node_modules/through2/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -19364,6 +19787,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -19378,6 +19802,7 @@ "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, "dependencies": { "setimmediate": "^1.0.4" }, @@ -19388,7 +19813,8 @@ "node_modules/timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true }, "node_modules/tiny-invariant": { "version": "1.2.0", @@ -19421,7 +19847,8 @@ "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true }, "node_modules/to-fast-properties": { "version": "2.0.0", @@ -19435,6 +19862,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -19445,12 +19873,14 @@ "node_modules/to-object-path/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/to-object-path/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -19471,6 +19901,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -19485,7 +19916,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -19575,7 +20006,8 @@ "node_modules/tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true }, "node_modules/tunnel": { "version": "0.0.6", @@ -19654,7 +20086,8 @@ "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", @@ -19666,9 +20099,10 @@ } }, "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19779,6 +20213,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -19793,6 +20228,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -19801,6 +20237,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, "dependencies": { "unique-slug": "^2.0.0" } @@ -19809,6 +20246,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" } @@ -19835,6 +20273,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -19847,6 +20286,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -19860,6 +20300,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "dependencies": { "isarray": "1.0.0" }, @@ -19871,6 +20312,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -19878,7 +20320,8 @@ "node_modules/unset-value/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "node_modules/untildify": { "version": "4.0.0", @@ -19893,7 +20336,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "devOptional": true, + "dev": true, "engines": { "node": ">=4", "yarn": "*" @@ -19909,6 +20352,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -19917,12 +20361,14 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true }, "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -19959,12 +20405,14 @@ "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -19981,6 +20429,7 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, "dependencies": { "inherits": "2.0.3" } @@ -20003,7 +20452,8 @@ "node_modules/util/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "node_modules/utila": { "version": "0.4.0", @@ -20061,9 +20511,10 @@ } }, "node_modules/validator": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz", - "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "dev": true, "engines": { "node": ">= 0.10" } @@ -20100,7 +20551,8 @@ "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "node_modules/w3c-hr-time": { "version": "1.0.2", @@ -20169,6 +20621,7 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" @@ -20182,6 +20635,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, "optional": true, "dependencies": { "chokidar": "^2.1.8" @@ -20191,6 +20645,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "optional": true, "dependencies": { "micromatch": "^3.1.4", @@ -20201,6 +20656,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "optional": true, "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -20213,6 +20669,7 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -20222,6 +20679,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "optional": true, "dependencies": { "arr-flatten": "^1.1.0", @@ -20243,6 +20701,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -20256,6 +20715,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, "optional": true, "dependencies": { "anymatch": "^2.0.0", @@ -20278,6 +20738,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "optional": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -20293,6 +20754,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -20306,6 +20768,7 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -20323,6 +20786,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, "optional": true, "dependencies": { "is-glob": "^3.1.0", @@ -20333,6 +20797,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "optional": true, "dependencies": { "is-extglob": "^2.1.0" @@ -20345,6 +20810,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, "optional": true, "dependencies": { "binary-extensions": "^1.0.0" @@ -20357,12 +20823,14 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, "optional": true }, "node_modules/watchpack-chokidar2/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -20372,6 +20840,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" @@ -20384,6 +20853,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" @@ -20396,12 +20866,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, "optional": true }, "node_modules/watchpack-chokidar2/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "optional": true, "dependencies": { "arr-diff": "^4.0.0", @@ -20426,6 +20898,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -20441,6 +20914,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, "optional": true, "dependencies": { "graceful-fs": "^4.1.11", @@ -20455,6 +20929,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -20464,6 +20939,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "optional": true, "dependencies": { "is-number": "^3.0.0", @@ -20492,6 +20968,7 @@ "version": "4.46.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -20888,12 +21365,12 @@ } }, "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", "dev": true, "dependencies": { - "ansi-html": "0.0.7", + "ansi-html-community": "0.0.8", "bonjour": "^3.5.0", "chokidar": "^2.1.8", "compression": "^1.7.4", @@ -21581,6 +22058,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, "dependencies": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" @@ -21590,6 +22068,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -21598,6 +22077,7 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -21609,6 +22089,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -21629,6 +22110,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -21640,6 +22122,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, "dependencies": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -21652,6 +22135,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -21666,6 +22150,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -21676,12 +22161,14 @@ "node_modules/webpack/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/webpack/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -21690,6 +22177,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -21701,6 +22189,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -21712,6 +22201,7 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -21735,6 +22225,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -21748,6 +22239,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -21859,6 +22351,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, "dependencies": { "errno": "~0.1.7" } @@ -21916,7 +22409,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -21984,6 +22478,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, "engines": { "node": ">=0.4" } @@ -21991,12 +22486,14 @@ "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -22065,17 +22562,21 @@ } }, "node_modules/z-schema": { - "version": "3.18.4", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.18.4.tgz", - "integrity": "sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.2.tgz", + "integrity": "sha512-40TH47ukMHq5HrzkeVE40Ad7eIDKaRV2b+Qpi2prLc9X9eFJFzV7tMe5aH12e6avaSS/u5l653EQOv+J9PirPw==", + "dev": true, "dependencies": { - "lodash.get": "^4.0.0", - "lodash.isequal": "^4.0.0", - "validator": "^8.0.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" }, "bin": { "z-schema": "bin/z-schema" }, + "engines": { + "node": ">=8.0.0" + }, "optionalDependencies": { "commander": "^2.7.1" } @@ -22084,6 +22585,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, "optional": true } }, @@ -24188,14 +24690,15 @@ } }, "@microsoft/api-documenter": { - "version": "7.13.65", - "resolved": "https://registry.npmjs.org/@microsoft/api-documenter/-/api-documenter-7.13.65.tgz", - "integrity": "sha512-cajrUQaNTjzRXMzftUhTku5J4BHSqrCiPXv3tCzdWnii9FxZpqvAYZelfW0/Tz9gjM9kYEMp9Msetf41AR1u7A==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-documenter/-/api-documenter-7.15.1.tgz", + "integrity": "sha512-4NBMYriTV6m5RIrXzzQAWr6IjgIcTQ8cSPGBtcFpA30Knyfrjag0i87QjlXZhiPS48NtwRrn9ktzd6q0WthO3A==", + "dev": true, "requires": { - "@microsoft/api-extractor-model": "7.13.14", + "@microsoft/api-extractor-model": "7.15.3", "@microsoft/tsdoc": "0.13.2", - "@rushstack/node-core-library": "3.43.0", - "@rushstack/ts-command-line": "4.10.3", + "@rushstack/node-core-library": "3.45.0", + "@rushstack/ts-command-line": "4.10.6", "colors": "~1.2.1", "js-yaml": "~3.13.1", "resolve": "~1.17.0" @@ -24204,12 +24707,14 @@ "colors": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -24219,6 +24724,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -24226,33 +24732,36 @@ } }, "@microsoft/api-extractor": { - "version": "7.18.17", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.18.17.tgz", - "integrity": "sha512-gZuJ//FAyfrOqWssY0cyU2bEo8FOIaIYVs+pU5IDyfImkye6YkT2Qnm5PAFhyYSkfUjV5SjvyuP4+VsDfS3jww==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.19.4.tgz", + "integrity": "sha512-iehC6YA3DGJvxTUaK7HUtQmP6hAQU07+Q/OR8TG4dVR6KpqCi9UPEVk8AgCvQkiK+6FbVEFQTx0qLuYk4EeuHg==", + "dev": true, "requires": { - "@microsoft/api-extractor-model": "7.13.14", + "@microsoft/api-extractor-model": "7.15.3", "@microsoft/tsdoc": "0.13.2", "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.43.0", - "@rushstack/rig-package": "0.3.4", - "@rushstack/ts-command-line": "4.10.3", + "@rushstack/node-core-library": "3.45.0", + "@rushstack/rig-package": "0.3.7", + "@rushstack/ts-command-line": "4.10.6", "colors": "~1.2.1", "lodash": "~4.17.15", "resolve": "~1.17.0", "semver": "~7.3.0", "source-map": "~0.6.1", - "typescript": "~4.4.2" + "typescript": "~4.5.2" }, "dependencies": { "colors": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -24261,6 +24770,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -24268,29 +24778,33 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, "@microsoft/api-extractor-model": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.13.14.tgz", - "integrity": "sha512-mKc917+QhOuOZebSnE77i8Tavj/G5ydIFoJqDIY9LpmAfJjsVHgL2pc7vkvW58QTxH2wadIDK1tLzcteOMEt4w==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.15.3.tgz", + "integrity": "sha512-NkSjolmSI7NGvbdz0Y7kjQfdpD+j9E5CwXTxEyjDqxd10MI7GXV8DnAsQ57GFJcgHKgTjf2aUnYfMJ9w3aMicw==", + "dev": true, "requires": { "@microsoft/tsdoc": "0.13.2", "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.43.0" + "@rushstack/node-core-library": "3.45.0" } }, "@microsoft/tsdoc": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", - "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==" + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "dev": true }, "@microsoft/tsdoc-config": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "dev": true, "requires": { "@microsoft/tsdoc": "0.13.2", "ajv": "~6.12.6", @@ -24302,6 +24816,7 @@ "version": "1.19.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, "requires": { "is-core-module": "^2.1.0", "path-parse": "^1.0.6" @@ -24515,9 +25030,10 @@ "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==" }, "@rushstack/node-core-library": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.43.0.tgz", - "integrity": "sha512-MFLW+6X83k6o8m8KnWkDhL/8NCJYHbFnnDokPSX1UHC3JwiEvVhHmEnxZv2YEzwnXeFYoKViub2G2t2liHbHLA==", + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.45.0.tgz", + "integrity": "sha512-YMuIJl19vQT1+g/OU9mLY6T5ZBT9uDlmeXExDQACpGuxTJW+LHNbk/lRX+eCApQI2eLBlaL4U68r3kZlqwbdmw==", + "dev": true, "requires": { "@types/node": "12.20.24", "colors": "~1.2.1", @@ -24527,23 +25043,26 @@ "resolve": "~1.17.0", "semver": "~7.3.0", "timsort": "~0.3.0", - "z-schema": "~3.18.3" + "z-schema": "~5.0.2" }, "dependencies": { "@types/node": { "version": "12.20.24", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==" + "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "dev": true }, "colors": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -24554,6 +25073,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -24562,6 +25082,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -24570,6 +25091,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -24577,14 +25099,16 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true } } }, "@rushstack/rig-package": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.4.tgz", - "integrity": "sha512-NsCzPxPQ8cu7lnqa/4xBQXuCJwaBrb5vEbOC8Q/bMQK7GDOxeVUN3/f+NCYjgQSl39toAm8jQJ7TJe+RYYX3yQ==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.7.tgz", + "integrity": "sha512-pzMsTSeTC8IiZ6EJLr53gGMvhT4oLWH+hxD7907cHyWuIUlEXFtu/2pK25vUQT13nKp5DJCWxXyYoGRk/h6rtA==", + "dev": true, "requires": { "resolve": "~1.17.0", "strip-json-comments": "~3.1.1" @@ -24594,6 +25118,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -24601,9 +25126,10 @@ } }, "@rushstack/ts-command-line": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.3.tgz", - "integrity": "sha512-DdDfwr8CO6CP/kBZlQrrwKyA6UxOteujaIBrmoHa+J+dyLZC19YA/LK0fAHjr2qHLAJHHXVpZwPH8BpqN84oVg==", + "version": "4.10.6", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.10.6.tgz", + "integrity": "sha512-Y3GkUag39sTIlukDg9mUp8MCHrrlJ27POrBNRQGc/uF+VVgX8M7zMzHch5zP6O1QVquWgD7Engdpn2piPYaS/g==", + "dev": true, "requires": { "@types/argparse": "1.0.38", "argparse": "~1.0.9", @@ -24614,7 +25140,8 @@ "colors": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true } } }, @@ -24759,6 +25286,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, "requires": { "@types/estree": "*" } @@ -24766,7 +25294,8 @@ "@types/argparse": { "version": "1.0.38", "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==" + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true }, "@types/aria-query": { "version": "4.2.2", @@ -24818,12 +25347,14 @@ "@types/escodegen": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.7.tgz", - "integrity": "sha512-46oENdSRNEJXCNrPJoC3vRolZJpfeEm7yvATkd2bCncKFG0PUEyfBCaoacfpcXH4Y5RRuqdVj3J7TI+wwn2SbQ==" + "integrity": "sha512-46oENdSRNEJXCNrPJoC3vRolZJpfeEm7yvATkd2bCncKFG0PUEyfBCaoacfpcXH4Y5RRuqdVj3J7TI+wwn2SbQ==", + "dev": true }, "@types/estree": { "version": "0.0.50", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true }, "@types/file-saver": { "version": "2.0.3", @@ -24886,7 +25417,8 @@ "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true }, "@types/lodash": { "version": "4.14.175", @@ -24909,7 +25441,8 @@ "@types/numeral": { "version": "0.0.25", "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-0.0.25.tgz", - "integrity": "sha512-ShHzHkYD+Ldw3eyttptCpUhF1/mkInWwasQkCNXZHOsJMJ/UMa8wXrxSrTJaVk0r4pLK/VnESVM0wFsfQzNEKQ==" + "integrity": "sha512-ShHzHkYD+Ldw3eyttptCpUhF1/mkInWwasQkCNXZHOsJMJ/UMa8wXrxSrTJaVk0r4pLK/VnESVM0wFsfQzNEKQ==", + "dev": true }, "@types/parse-json": { "version": "4.0.0", @@ -24941,6 +25474,7 @@ "version": "13.1.2", "resolved": "https://registry.npmjs.org/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.2.tgz", "integrity": "sha512-+OvPkB8CdE/bGdXKyIhc/Lm2U7UAYCCJgsqmopFmh9gbAudmslkI8eOrPDjg4JhwSE6wytz4a3/wRjKtovHVJg==", + "dev": true, "requires": { "@types/react": "*" } @@ -24949,6 +25483,7 @@ "version": "17.0.9", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.9.tgz", "integrity": "sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==", + "dev": true, "requires": { "@types/react": "*" } @@ -24976,6 +25511,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/@types/react-resizable/-/react-resizable-1.7.4.tgz", "integrity": "sha512-+xsGkd+Gvb9+8mLR1EyhNN8kBRJcsT1uJF4WpkFpFPIoApX2S89BmJA2RVtMdkhwe6YxV4RbHfaJ3bIdcgHc7g==", + "dev": true, "requires": { "@types/react": "*" } @@ -25145,6 +25681,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, "requires": { "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -25154,22 +25691,26 @@ "@webassemblyjs/floating-point-hex-parser": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true }, "@webassemblyjs/helper-api-error": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true }, "@webassemblyjs/helper-buffer": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true }, "@webassemblyjs/helper-code-frame": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, "requires": { "@webassemblyjs/wast-printer": "1.9.0" } @@ -25177,12 +25718,14 @@ "@webassemblyjs/helper-fsm": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true }, "@webassemblyjs/helper-module-context": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0" } @@ -25190,12 +25733,14 @@ "@webassemblyjs/helper-wasm-bytecode": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -25207,6 +25752,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -25215,6 +25761,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, "requires": { "@xtuc/long": "4.2.2" } @@ -25222,12 +25769,14 @@ "@webassemblyjs/utf8": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true }, "@webassemblyjs/wasm-edit": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -25243,6 +25792,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -25255,6 +25805,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -25266,6 +25817,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-api-error": "1.9.0", @@ -25279,6 +25831,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/floating-point-hex-parser": "1.9.0", @@ -25292,6 +25845,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/wast-parser": "1.9.0", @@ -25301,12 +25855,14 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, "abab": { "version": "2.0.5", @@ -25388,6 +25944,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -25399,12 +25956,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, "requires": {} }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, "requires": {} }, "ansi-colors": { @@ -25422,12 +25981,6 @@ "type-fest": "^0.21.3" } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -25452,7 +26005,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "devOptional": true, + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -25461,7 +26014,8 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "arch": { "version": "2.2.0", @@ -25478,6 +26032,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" }, @@ -25485,7 +26040,8 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true } } }, @@ -25502,17 +26058,20 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, "array-equal": { "version": "1.0.0", @@ -25541,7 +26100,8 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "asar": { "version": "3.1.0", @@ -25585,6 +26145,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -25595,7 +26156,8 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true } } }, @@ -25603,6 +26165,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, "requires": { "object-assign": "^4.1.1", "util": "0.10.3" @@ -25611,12 +26174,14 @@ "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, "requires": { "inherits": "2.0.1" } @@ -25632,7 +26197,8 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "astral-regex": { "version": "2.0.0", @@ -25653,7 +26219,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "devOptional": true + "dev": true }, "async-limiter": { "version": "1.0.1", @@ -25676,7 +26242,8 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true }, "author-regex": { "version": "1.0.0", @@ -25904,12 +26471,14 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -25924,6 +26493,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -25933,7 +26503,8 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "basic-auth": { "version": "1.1.0", @@ -25967,18 +26538,20 @@ "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "devOptional": true + "dev": true }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, "optional": true, "requires": { "file-uri-to-path": "1.0.0" @@ -25993,12 +26566,14 @@ "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, "bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true }, "body-parser": { "version": "1.19.0", @@ -26078,6 +26653,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -26087,7 +26663,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "devOptional": true, + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -26095,7 +26671,8 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true }, "browser-process-hrtime": { "version": "1.0.0", @@ -26107,6 +26684,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -26120,6 +26698,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -26130,6 +26709,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -26141,6 +26721,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -26150,6 +26731,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", @@ -26166,6 +26748,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -26175,12 +26758,14 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -26191,6 +26776,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, "requires": { "pako": "~1.0.5" } @@ -26220,6 +26806,7 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -26229,7 +26816,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true } } }, @@ -26264,7 +26852,8 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "buffer-indexof": { "version": "1.1.1", @@ -26275,12 +26864,14 @@ "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true }, "bytes": { "version": "3.0.0", @@ -26292,6 +26883,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -26408,7 +27000,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "devOptional": true, + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -26423,12 +27015,14 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, "chromium-pickle-js": { "version": "0.2.0", @@ -26446,6 +27040,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -26461,6 +27056,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -26472,6 +27068,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -26480,6 +27077,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -26488,6 +27086,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -26497,12 +27096,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -26511,6 +27112,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -26521,6 +27123,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -26530,7 +27133,8 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -26633,6 +27237,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -26693,7 +27298,8 @@ "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, "compare-version": { "version": "0.1.2", @@ -26704,7 +27310,8 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "compressible": { "version": "2.0.18", @@ -26750,12 +27357,14 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -26766,12 +27375,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -26786,6 +27397,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -26864,6 +27476,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, "requires": { "date-now": "^0.1.4" } @@ -26871,7 +27484,8 @@ "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, "content-disposition": { "version": "0.5.3", @@ -26912,6 +27526,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, "requires": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -26925,6 +27540,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -26938,6 +27554,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -26947,7 +27564,8 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "core-js": { "version": "3.18.3", @@ -27007,6 +27625,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -27015,7 +27634,8 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true } } }, @@ -27023,6 +27643,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -27035,6 +27656,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -27070,6 +27692,7 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -27196,7 +27819,8 @@ "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true }, "cypress": { "version": "8.6.0", @@ -27344,7 +27968,8 @@ "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true }, "dayjs": { "version": "1.10.7", @@ -27369,7 +27994,8 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "decompress-response": { "version": "3.3.0", @@ -27530,6 +28156,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -27633,6 +28260,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -27672,6 +28300,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -27681,7 +28310,8 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true } } }, @@ -27755,7 +28385,8 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true }, "domexception": { "version": "1.0.1", @@ -27790,6 +28421,7 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -27800,12 +28432,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -27820,6 +28454,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -27983,6 +28618,7 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -27996,7 +28632,8 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true } } }, @@ -28015,7 +28652,8 @@ "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true }, "encodeurl": { "version": "1.0.2", @@ -28027,6 +28665,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -28035,6 +28674,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", @@ -28044,12 +28684,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "memory-fs": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -28059,6 +28701,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -28073,6 +28716,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -28098,6 +28742,7 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, "requires": { "prr": "~1.0.1" } @@ -28451,6 +29096,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -28458,7 +29104,8 @@ "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true } } }, @@ -28508,7 +29155,8 @@ "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true }, "eventsource": { "version": "1.1.0", @@ -28523,6 +29171,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -28564,6 +29213,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -28578,6 +29228,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -28586,6 +29237,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -28594,6 +29246,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -28602,6 +29255,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -28610,6 +29264,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -28619,12 +29274,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -28633,6 +29290,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -28643,6 +29301,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -28652,17 +29311,20 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -28780,6 +29442,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -28789,6 +29452,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -28804,6 +29468,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -28812,6 +29477,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -28819,7 +29485,8 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -28844,7 +29511,8 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-glob": { "version": "3.2.7", @@ -28862,7 +29530,8 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -28908,7 +29577,8 @@ "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true }, "figures": { "version": "3.2.0", @@ -28936,6 +29606,38 @@ "flat-cache": "^3.0.4" } }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, "file-saver": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", @@ -28945,6 +29647,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, "optional": true }, "filename-reserved-regex": { @@ -28968,7 +29671,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "devOptional": true, + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -29218,6 +29921,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" @@ -29226,12 +29930,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -29246,6 +29952,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -29253,15 +29960,16 @@ } }, "follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "forever-agent": { "version": "0.6.1", @@ -29396,6 +30104,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -29416,6 +30125,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -29424,12 +30134,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -29444,6 +30156,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -29477,6 +30190,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", @@ -29487,12 +30201,14 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "function-bind": { @@ -29633,7 +30349,8 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "getos": { "version": "3.2.1", @@ -29665,7 +30382,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -29881,6 +30598,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -29891,6 +30609,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -29899,12 +30618,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -29913,6 +30634,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -29923,6 +30645,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -29933,6 +30656,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -29943,6 +30667,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -29952,12 +30677,14 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -29968,6 +30695,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -29983,6 +30711,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -30378,7 +31107,8 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true }, "https-proxy-agent": { "version": "5.0.0", @@ -30413,12 +31143,14 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, "iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true }, "ignore": { "version": "5.1.8", @@ -30450,7 +31182,8 @@ "import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true }, "import-local": { "version": "3.0.3", @@ -30476,12 +31209,14 @@ "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -30547,6 +31282,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -30579,7 +31315,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -30621,6 +31357,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -30638,6 +31375,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -30654,6 +31392,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -30662,7 +31401,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "devOptional": true + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -30680,7 +31419,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -30710,7 +31449,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true + "dev": true }, "is-number-object": { "version": "1.0.6", @@ -30762,6 +31501,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -30836,7 +31576,8 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, "is-wsl": { "version": "2.2.0", @@ -30850,7 +31591,8 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, "isbinaryfile": { "version": "3.0.3", @@ -30870,7 +31612,8 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -32515,7 +33258,8 @@ "jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true }, "joi": { "version": "17.4.2", @@ -32628,7 +33372,8 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -32636,15 +33381,16 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -32668,6 +33414,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, "requires": { "minimist": "^1.2.0" } @@ -32683,14 +33430,14 @@ } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, @@ -32836,7 +33583,8 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, "kleur": { "version": "3.0.3", @@ -32926,12 +33674,14 @@ "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true }, "loader-utils": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -32950,7 +33700,8 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash.clonedeep": { "version": "4.5.0", @@ -32967,12 +33718,14 @@ "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true }, "lodash.merge": { "version": "4.6.2", @@ -33149,6 +33902,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -33180,7 +33934,8 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-stream": { "version": "0.1.0", @@ -33192,6 +33947,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -33246,6 +34002,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -33276,6 +34033,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -33284,12 +34042,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -33304,6 +34064,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -33353,6 +34114,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -33361,7 +34123,8 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true } } }, @@ -33425,17 +34188,20 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -33449,6 +34215,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -33463,6 +34230,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -33476,6 +34244,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, "requires": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", @@ -33489,6 +34258,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -33502,6 +34272,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -33533,12 +34304,14 @@ "version": "2.15.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, "optional": true }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -33568,7 +34341,8 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "nice-try": { "version": "1.0.5", @@ -33601,6 +34375,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, "requires": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -33630,17 +34405,20 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -33655,6 +34433,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -33665,6 +34444,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" }, @@ -33672,7 +34452,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } } @@ -33713,7 +34494,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true + "dev": true }, "normalize-url": { "version": "4.5.1", @@ -33794,6 +34575,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -33804,6 +34586,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -33812,6 +34595,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -33819,12 +34603,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -33833,6 +34619,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -33842,7 +34629,8 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -33850,6 +34638,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -33882,6 +34671,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { "isobject": "^3.0.0" } @@ -33913,6 +34703,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -33942,6 +34733,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -34027,7 +34819,8 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true }, "ospath": { "version": "1.2.2", @@ -34086,7 +34879,8 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "pako": { "version": "1.0.11", @@ -34097,6 +34891,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, "requires": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -34106,12 +34901,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -34126,6 +34923,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -34153,6 +34951,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, "requires": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -34202,18 +35001,20 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "devOptional": true + "dev": true }, "path-exists": { "version": "4.0.0", @@ -34224,7 +35025,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -34261,6 +35063,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -34290,7 +35093,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "devOptional": true + "dev": true }, "pify": { "version": "2.3.0", @@ -34469,7 +35272,8 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, "prelude-ls": { "version": "1.2.1", @@ -34528,7 +35332,8 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true }, "process-nextick-args": { "version": "2.0.1", @@ -34544,7 +35349,8 @@ "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true }, "prompts": { "version": "2.4.2", @@ -34599,7 +35405,8 @@ "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true }, "ps-tree": { "version": "1.2.0", @@ -34620,6 +35427,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -34632,7 +35440,8 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true } } }, @@ -34640,6 +35449,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -34649,6 +35459,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -34659,6 +35470,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -34669,7 +35481,8 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "qs": { "version": "6.5.2", @@ -34680,12 +35493,14 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true }, "querystringify": { "version": "2.2.0", @@ -34714,6 +35529,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -34722,6 +35538,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -34757,6 +35574,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -34766,6 +35584,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -34774,6 +35593,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -34964,6 +35784,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -34975,7 +35796,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -35021,6 +35842,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -35089,7 +35911,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "devOptional": true + "dev": true }, "renderkid": { "version": "2.0.7", @@ -35179,12 +36001,14 @@ "repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "request": { "version": "2.88.2", @@ -35345,7 +36169,8 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true }, "responselike": { "version": "1.0.2", @@ -35369,7 +36194,8 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, "retry": { "version": "0.12.0", @@ -35412,6 +36238,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -35445,6 +36272,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, "requires": { "aproba": "^1.1.1" } @@ -35467,6 +36295,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { "ret": "~0.1.10" } @@ -35474,7 +36303,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "saxes": { "version": "3.1.11", @@ -35498,6 +36328,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -35517,9 +36348,9 @@ "dev": true }, "selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "requires": { "node-forge": "^0.10.0" @@ -35685,6 +36516,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -35696,6 +36528,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -35703,14 +36536,16 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true }, "setprototypeof": { "version": "1.1.1", @@ -35722,6 +36557,7 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -35811,6 +36647,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -35826,6 +36663,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -35834,6 +36672,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -35842,6 +36681,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -35850,6 +36690,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -35858,6 +36699,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -35867,12 +36709,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -35881,6 +36725,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -35891,6 +36736,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -35900,22 +36746,26 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -35923,6 +36773,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -35933,6 +36784,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -35943,6 +36795,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -35950,12 +36803,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -36001,7 +36856,8 @@ "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true }, "source-map": { "version": "0.7.3", @@ -36013,6 +36869,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -36025,6 +36882,7 @@ "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -36033,14 +36891,16 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, "source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true }, "spdx-correct": { "version": "3.1.1", @@ -36159,6 +37019,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -36263,6 +37124,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -36272,6 +37134,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -36280,6 +37143,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -36288,6 +37152,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -36297,12 +37162,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -36311,6 +37178,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -36321,6 +37189,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -36330,7 +37199,8 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -36350,6 +37220,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -36358,12 +37229,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -36378,6 +37251,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -36397,6 +37271,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -36406,6 +37281,7 @@ "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -36417,12 +37293,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -36437,6 +37315,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -36446,17 +37325,20 @@ "stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true }, "string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true }, "string-length": { "version": "4.0.2", @@ -36529,7 +37411,8 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "strip-outer": { "version": "1.0.1", @@ -36675,7 +37558,8 @@ "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true }, "terminal-link": { "version": "2.1.1", @@ -36691,6 +37575,7 @@ "version": "4.8.0", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -36700,12 +37585,14 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -36713,6 +37600,7 @@ "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -36729,6 +37617,7 @@ "version": "12.0.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -36751,6 +37640,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -36761,6 +37651,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -36769,6 +37660,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -36781,12 +37673,14 @@ "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -36796,6 +37690,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "requires": { "yallist": "^3.0.2" } @@ -36804,6 +37699,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -36813,6 +37709,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, "requires": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -36830,6 +37727,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -36838,6 +37736,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "requires": { "p-limit": "^2.0.0" } @@ -36845,17 +37744,20 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, "requires": { "find-up": "^3.0.0" } @@ -36864,6 +37766,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -36872,6 +37775,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, "requires": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -36881,12 +37785,14 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, "serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, "requires": { "randombytes": "^2.1.0" } @@ -36894,12 +37800,14 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, "requires": { "figgy-pudding": "^3.5.1" } @@ -36907,7 +37815,8 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, @@ -36966,6 +37875,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -36974,12 +37884,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -36994,6 +37906,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -37010,6 +37923,7 @@ "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, "requires": { "setimmediate": "^1.0.4" } @@ -37017,7 +37931,8 @@ "timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true }, "tiny-invariant": { "version": "1.2.0", @@ -37047,7 +37962,8 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true }, "to-fast-properties": { "version": "2.0.0", @@ -37058,6 +37974,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -37065,12 +37982,14 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -37087,6 +38006,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -37098,7 +38018,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -37169,7 +38089,8 @@ "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true }, "tunnel": { "version": "0.0.6", @@ -37227,7 +38148,8 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", @@ -37239,9 +38161,10 @@ } }, "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==" + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true }, "uglify-js": { "version": "3.4.10", @@ -37320,6 +38243,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -37330,7 +38254,8 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -37338,6 +38263,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, "requires": { "unique-slug": "^2.0.0" } @@ -37346,6 +38272,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, "requires": { "imurmurhash": "^0.1.4" } @@ -37366,6 +38293,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -37375,6 +38303,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -37385,6 +38314,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -37394,12 +38324,14 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true } } }, @@ -37413,7 +38345,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "devOptional": true + "dev": true }, "upper-case": { "version": "1.1.3", @@ -37425,6 +38357,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -37432,12 +38365,14 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -37446,7 +38381,8 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true } } }, @@ -37478,7 +38414,8 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "use-memo-one": { "version": "1.1.2", @@ -37490,6 +38427,7 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, "requires": { "inherits": "2.0.3" }, @@ -37497,7 +38435,8 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true } } }, @@ -37562,9 +38501,10 @@ } }, "validator": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz", - "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA==" + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "dev": true }, "vary": { "version": "1.1.2", @@ -37594,7 +38534,8 @@ "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "w3c-hr-time": { "version": "1.0.2", @@ -37659,6 +38600,7 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, "requires": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", @@ -37670,6 +38612,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, "optional": true, "requires": { "chokidar": "^2.1.8" @@ -37679,6 +38622,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "optional": true, "requires": { "micromatch": "^3.1.4", @@ -37689,6 +38633,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" @@ -37700,12 +38645,14 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, "optional": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "optional": true, "requires": { "arr-flatten": "^1.1.0", @@ -37724,6 +38671,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" @@ -37735,6 +38683,7 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, "optional": true, "requires": { "anymatch": "^2.0.0", @@ -37755,6 +38704,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "optional": true, "requires": { "extend-shallow": "^2.0.1", @@ -37767,6 +38717,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" @@ -37778,6 +38729,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", @@ -37788,6 +38740,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, "optional": true, "requires": { "is-glob": "^3.1.0", @@ -37798,6 +38751,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "optional": true, "requires": { "is-extglob": "^2.1.0" @@ -37809,6 +38763,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, "optional": true, "requires": { "binary-extensions": "^1.0.0" @@ -37818,18 +38773,21 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, "optional": true }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, "optional": true }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" @@ -37839,6 +38797,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" @@ -37850,12 +38809,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, "optional": true }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "optional": true, "requires": { "arr-diff": "^4.0.0", @@ -37877,6 +38838,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -37892,6 +38854,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, "optional": true, "requires": { "graceful-fs": "^4.1.11", @@ -37903,6 +38866,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -37912,6 +38876,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "optional": true, "requires": { "is-number": "^3.0.0", @@ -37939,6 +38904,7 @@ "version": "4.46.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -37968,12 +38934,14 @@ "acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -37991,6 +38959,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -38001,6 +38970,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -38010,6 +38980,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -38021,6 +38992,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -38030,17 +39002,20 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -38049,6 +39024,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -38059,6 +39035,7 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -38079,6 +39056,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, "requires": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -38089,6 +39067,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -38362,12 +39341,12 @@ } }, "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", "dev": true, "requires": { - "ansi-html": "0.0.7", + "ansi-html-community": "0.0.8", "bonjour": "^3.5.0", "chokidar": "^2.1.8", "compression": "^1.7.4", @@ -38927,6 +39906,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" @@ -38935,7 +39915,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -39024,6 +40005,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, "requires": { "errno": "~0.1.7" } @@ -39068,7 +40050,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "3.0.3", @@ -39115,17 +40098,20 @@ "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yaml": { "version": "1.10.2", @@ -39178,20 +40164,22 @@ "dev": true }, "z-schema": { - "version": "3.18.4", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.18.4.tgz", - "integrity": "sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.2.tgz", + "integrity": "sha512-40TH47ukMHq5HrzkeVE40Ad7eIDKaRV2b+Qpi2prLc9X9eFJFzV7tMe5aH12e6avaSS/u5l653EQOv+J9PirPw==", + "dev": true, "requires": { "commander": "^2.7.1", - "lodash.get": "^4.0.0", - "lodash.isequal": "^4.0.0", - "validator": "^8.0.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" }, "dependencies": { "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, "optional": true } } diff --git a/package.json b/package.json index 6164663fa..7bc409f68 100644 --- a/package.json +++ b/package.json @@ -13,19 +13,10 @@ "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", "@material-ui/core": "^4.12.3", - "@microsoft/api-documenter": "^7.13.65", - "@microsoft/api-extractor": "^7.18.17", "@monaco-editor/react": "^4.2.2", "@mui/icons-material": "^5.0.3", "@mui/material": "^5.0.3", "@mui/styles": "^5.0.1", - "@types/acorn": "^4.0.6", - "@types/escodegen": "^0.0.7", - "@types/numeral": "0.0.25", - "@types/react": "^17.0.21", - "@types/react-beautiful-dnd": "^13.1.2", - "@types/react-dom": "^17.0.9", - "@types/react-resizable": "^1.7.3", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^5.0.0", @@ -45,7 +36,6 @@ "notistack": "^2.0.2", "numeral": "2.0.6", "prop-types": "^15.8.0", - "raw-loader": "^4.0.2", "react": "^17.0.2", "react-beautiful-dnd": "^13.1.0", "react-dom": "^17.0.2", @@ -59,10 +49,19 @@ "@babel/preset-env": "^7.15.0", "@babel/preset-react": "^7.0.0", "@babel/preset-typescript": "^7.15.0", + "@microsoft/api-documenter": "^7.13.65", + "@microsoft/api-extractor": "^7.18.17", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.1", "@testing-library/cypress": "^8.0.1", + "@types/acorn": "^4.0.6", + "@types/escodegen": "^0.0.7", "@types/file-saver": "^2.0.3", "@types/lodash": "^4.14.168", + "@types/numeral": "0.0.25", + "@types/react": "^17.0.21", + "@types/react-beautiful-dnd": "^13.1.2", + "@types/react-dom": "^17.0.9", + "@types/react-resizable": "^1.7.3", "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", "babel-jest": "^27.0.6", @@ -80,6 +79,7 @@ "lodash": "^4.17.21", "mini-css-extract-plugin": "^0.4.1", "prettier": "^2.3.2", + "raw-loader": "^4.0.2", "react-refresh": "^0.10.0", "regenerator-runtime": "^0.13.9", "source-map": "^0.7.3", From 069b7831d1b53015bb0b72313245574879808009 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 26 Jan 2022 06:01:08 -0500 Subject: [PATCH 84/85] Move main bundle output to ./dist subfolder Excludes the index.html so that the github page can still work as is. This will declutter the root of the repo a fair bit. --- .gitignore | 1 - favicon.ico => assets/favicon.ico | Bin package.sh | 23 +++-------------------- webpack.config.js | 9 +++++---- 4 files changed, 8 insertions(+), 25 deletions(-) rename favicon.ico => assets/favicon.ico (100%) diff --git a/.gitignore b/.gitignore index 1ca4801dc..29fc689d4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ Netburner.txt /doc/build /node_modules /electron/node_modules -/dist/*.map /test/*.map /test/*.bundle.* /test/*.css diff --git a/favicon.ico b/assets/favicon.ico similarity index 100% rename from favicon.ico rename to assets/favicon.ico diff --git a/package.sh b/package.sh index 1ea44de58..274b1469b 100755 --- a/package.sh +++ b/package.sh @@ -3,27 +3,10 @@ # Clear out any files remaining from old builds rm -rf .package -mkdir -p .package/dist/src/ThirdParty || true -mkdir -p .package/src/ThirdParty || true -mkdir -p .package/node_modules || true - -cp index.html .package +mkdir -p .package/dist/ cp -r electron/* .package -cp -r dist/ext .package/dist -cp -r dist/icons .package/dist -cp -r dist/images .package/dist - -# The css files -cp dist/vendor.css .package/dist -cp main.css .package/main.css - -# The js files. -cp dist/vendor.bundle.js .package/dist/vendor.bundle.js -cp main.bundle.js .package/main.bundle.js - -# Source maps -cp dist/vendor.bundle.js.map .package/dist/vendor.bundle.js.map -cp main.bundle.js.map .package/main.bundle.js.map +cp -r dist .package +cp index.html .package/index.html # Install electron sub-dependencies cd electron diff --git a/webpack.config.js b/webpack.config.js index 4a62292dd..c96e565be 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -63,7 +63,8 @@ module.exports = (env, argv) => { new HtmlWebpackPlugin({ title: "Bitburner", template: "src/index.html", - favicon: "favicon.ico", + filename: "../index.html", + favicon: "assets/favicon.ico", googleAnalytics: { trackingId: "UA-100157497-1", }, @@ -136,7 +137,7 @@ module.exports = (env, argv) => { // }, entry: entry, output: { - path: path.resolve(__dirname, "./"), + path: path.resolve(__dirname, outputDirectory), filename: "[name].bundle.js", }, module: { @@ -161,7 +162,7 @@ module.exports = (env, argv) => { loader: 'file-loader', options: { name: '[contenthash].[ext]', - outputPath: 'dist/images', + outputPath: 'images', }, }, ], @@ -184,7 +185,7 @@ module.exports = (env, argv) => { cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, - name: `${outputDirectory}/vendor`, + name: `vendor`, chunks: "all", }, }, From 70eef25d63f7317067d963a575578a26457344b4 Mon Sep 17 00:00:00 2001 From: Martin Fournier Date: Wed, 26 Jan 2022 06:03:45 -0500 Subject: [PATCH 85/85] Rebuild the app using the new webpack config --- dist/favicon.ico | Bin 0 -> 15406 bytes dist/main.bundle.js | 20 ++++++++++++++++++++ dist/main.bundle.js.map | 1 + dist/vendor.bundle.js | 36 ++++++++++++++++++------------------ dist/vendor.bundle.js.map | 1 + index.html | 2 +- main.bundle.js | 20 -------------------- main.bundle.js.map | 1 - 8 files changed, 41 insertions(+), 40 deletions(-) create mode 100644 dist/favicon.ico create mode 100644 dist/main.bundle.js create mode 100644 dist/main.bundle.js.map create mode 100644 dist/vendor.bundle.js.map delete mode 100644 main.bundle.js delete mode 100644 main.bundle.js.map diff --git a/dist/favicon.ico b/dist/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..531647d81a1cc81618973518df17f0dbc6bf72dc GIT binary patch literal 15406 zcmeI2S*%@S6vua~rfRr`@*udzl+rc?5kwW?k%-v?4-)h6|Ezv{pL5T}70yk5`PN?RzlQzo;hcNhrkU1k(2R^U zT1T6+XEeS1XW%?^uDRt;UiP8`C;poF~Y~#z$Uga*b0Id$4HGE==Gf z2hFL)<`|;aU9!&-_la%A)dlQj;%tE?W{UiU^1)RC-(KPZahf>2*mJcKLlb(Af#XHu zBoVWX6+bcTMsSYo-{As3KEQrNY$?tc7m1|;KVV-dm}x|y#orXLxi;5{BgDnx8gXU; z8y~T21=l#|b37){0JWYeL|y!7&_YuMn4*tV?W>hQ`yq`LL)?KglXBft&dQW!NeLY>wDEK^G zK61!){X}h^*-ynT;T*<9~=u`ae6*d7bJDgGz5`n`m|hF@1|JS6zu0NBx!b9ql} zCHQQ{K1xs%&BKE46o5^wMZ)isT7PtLt+2iSl{$`|(`4Tv_|9@?0bk5QZthP%zfU;M zkO%nP<~VxNFM53-`$NG#bdpEEVV<8FK0?*-S; z4;?<&W5+DSAYXIWhsIapd?yQE;|7icon%g<`Ag9gZLvvUqw-jn&A zg5RND?ODCCNkql@VH+qYDK;2vL6?hiO^%?BSu}hfr zE3vGAjnDTh=Jh&mH_~T3?zZ>G&oSrxi}<%-3)HoA<*-LBQ+nvaX+!tVuY z*7W$jCdV1h39`1W-ePH?U%l7Qy*Zvyz;si=a@O$kBVpdse=g0RysKq>&T64u7E!tZCM1AzzU-0|L zGBG0d6JL}y*PAK-vjyxN_uMTMzgN5?4iNOp`pFzqZ;^OiydjPh_&A@{W%c^R(0pFt z?*e%y&uy#kH78^5s{XGDelPI-@fo~6e$JJ@qr5LTXY#Vf&z*B1k840KJzYN;o4Wk& zd~~Xr=jT4=zF>x!InHHVK5R71l5=A|deDn__$Iry^~(N@)blaHeG~T#`x^HWF*IHC z=bDq9o&2^v$-Op__GR&k@MjhqA2Bq&=C57rLCz!Y$>r*~Rxq#EX`A2YL?7qn{+t_i z@zd*F!85}Q5u3t({5d!3;$I_H3Z9{O*G0VFl{&l!#>IJ} z_DrGicSy|ns{DMeMK5f8{q8@#&Jq3|h+4hYws#0MPY`nqj`1HTs5?X4F1``Ri|GaI z6@nNVwB(R`qS(ve7(aUhv4`04?&>;++B<~YHG=E;oWY)cFU}XtO5GjA3*u=pDt0RN zi&}RSXwZ`LgP`V1##^%KMbEZ(SJ(V;5BNKTTDAS(SN{9OXJWpfE_=j1`?$R|R zui890$B%1zYI6VN?+=kTOR@XKxY$kLXTQ0IfQ^qB8nom@zOVVSvNn(Fvt85gs$RA4 zZ=QRoG=7iO>crln^;~S8RpRdm|Nd61lXLyJruWaXH&mbJ6QAeBY^?Zeb+RV%yXx2K zL|$zTJ#%htGy47zRpy#|@T z*Pd*l-d77|ndtmKDd$UZt)Nbv13h`hh`lLzug?^`3s(!y18wYs_lA^jNpM7Hnv{5I{v2D$L*^3***J8dPFXm_8W(#ugT`pFN6U9sseX;Sa5NObn zLoPLZetOXBMnP|MQ3tzi?(o<22Ptp0*uUh{pPt^A{JG*I!M(Akh`!kPi0v(+SFH{` z=tWO-wRs}Hw$}7fvupmi?)2ufdWqoq25fx9YWJb#(egc$e}i0Gz{WSxI?Pm?CuXg!HT@uccT;cvUlr^w=ru^4+B~(n!-t;#uL9VE z_T@WsynnC;AX z{JB@ZGj{3t9hL7^@w+PXKVQHmH}7q~`=9INUR`rdCYG;hzQ@|;|Euqf$()1d=IdUY yKWjXHs_lH;nLoeBvSzAh?$tlvW4-jl__}xga4&{?@&C97^zk|T8ScPfJMafg{iuKd literal 0 HcmV?d00001 diff --git a/dist/main.bundle.js b/dist/main.bundle.js new file mode 100644 index 000000000..b2d975eba --- /dev/null +++ b/dist/main.bundle.js @@ -0,0 +1,20 @@ +!function(e){function t(t){for(var n,i,s=t[0],l=t[1],c=t[2],m=0,h=[];m{if(4===t.bitNodeN)return e;const a=t.sourceFileLvl(4);return a<=1?16*e:2===a?4*e:e}}const o={hacknet:{numNodes:0,purchaseNode:0,getPurchaseNodeCost:0,getNodeStats:0,upgradeLevel:0,upgradeRam:0,upgradeCore:0,upgradeCache:0,getLevelUpgradeCost:0,getRamUpgradeCost:0,getCoreUpgradeCost:0,getCacheUpgradeCost:0,numHashes:0,hashCost:0,spendHashes:0},sprintf:0,vsprintf:0,scan:n.ScriptScanRamCost,hack:n.ScriptHackRamCost,hackAnalyzeThreads:n.ScriptHackAnalyzeRamCost,hackAnalyze:n.ScriptHackAnalyzeRamCost,hackAnalyzeSecurity:n.ScriptHackAnalyzeRamCost,hackAnalyzeChance:n.ScriptHackAnalyzeRamCost,sleep:0,share:2.4,getSharePower:.2,grow:n.ScriptGrowRamCost,growthAnalyze:n.ScriptGrowthAnalyzeRamCost,growthAnalyzeSecurity:n.ScriptGrowthAnalyzeRamCost,weaken:n.ScriptWeakenRamCost,weakenAnalyze:n.ScriptWeakenAnalyzeRamCost,print:0,printf:0,tprint:0,clearLog:0,disableLog:0,enableLog:0,isLogEnabled:0,getScriptLogs:0,nuke:n.ScriptPortProgramRamCost,brutessh:n.ScriptPortProgramRamCost,ftpcrack:n.ScriptPortProgramRamCost,relaysmtp:n.ScriptPortProgramRamCost,httpworm:n.ScriptPortProgramRamCost,sqlinject:n.ScriptPortProgramRamCost,run:n.ScriptRunRamCost,exec:n.ScriptExecRamCost,spawn:n.ScriptSpawnRamCost,kill:n.ScriptKillRamCost,killall:n.ScriptKillRamCost,exit:0,scp:n.ScriptScpRamCost,ls:n.ScriptScanRamCost,ps:n.ScriptScanRamCost,hasRootAccess:n.ScriptHasRootAccessRamCost,getIp:n.ScriptGetHostnameRamCost,getHostname:n.ScriptGetHostnameRamCost,getHackingLevel:n.ScriptGetHackingLevelRamCost,getHackingMultipliers:n.ScriptGetMultipliersRamCost,getHacknetMultipliers:n.ScriptGetMultipliersRamCost,getBitNodeMultipliers:n.ScriptGetMultipliersRamCost,getServer:n.ScriptGetMultipliersRamCost/2,getServerMoneyAvailable:n.ScriptGetServerRamCost,getServerSecurityLevel:n.ScriptGetServerRamCost,getServerBaseSecurityLevel:n.ScriptGetServerRamCost,getServerMinSecurityLevel:n.ScriptGetServerRamCost,getServerRequiredHackingLevel:n.ScriptGetServerRamCost,getServerMaxMoney:n.ScriptGetServerRamCost,getServerGrowth:n.ScriptGetServerRamCost,getServerNumPortsRequired:n.ScriptGetServerRamCost,getServerRam:n.ScriptGetServerRamCost,getServerMaxRam:n.ScriptGetServerMaxRam,getServerUsedRam:n.ScriptGetServerUsedRam,serverExists:n.ScriptGetServerRamCost,fileExists:n.ScriptFileExistsRamCost,isRunning:n.ScriptIsRunningRamCost,stock:{getSymbols:n.ScriptGetStockRamCost,getPrice:n.ScriptGetStockRamCost,getAskPrice:n.ScriptGetStockRamCost,getBidPrice:n.ScriptGetStockRamCost,getPosition:n.ScriptGetStockRamCost,getMaxShares:n.ScriptGetStockRamCost,getPurchaseCost:n.ScriptGetStockRamCost,getSaleGain:n.ScriptGetStockRamCost,buy:n.ScriptBuySellStockRamCost,sell:n.ScriptBuySellStockRamCost,short:n.ScriptBuySellStockRamCost,sellShort:n.ScriptBuySellStockRamCost,placeOrder:n.ScriptBuySellStockRamCost,cancelOrder:n.ScriptBuySellStockRamCost,getOrders:n.ScriptBuySellStockRamCost,getVolatility:n.ScriptBuySellStockRamCost,getForecast:n.ScriptBuySellStockRamCost,purchase4SMarketData:n.ScriptBuySellStockRamCost,purchase4SMarketDataTixApi:n.ScriptBuySellStockRamCost},getPurchasedServerLimit:n.ScriptGetPurchasedServerLimit,getPurchasedServerMaxRam:n.ScriptGetPurchasedServerMaxRam,getPurchasedServerCost:n.ScriptGetPurchaseServerRamCost,purchaseServer:n.ScriptPurchaseServerRamCost,deleteServer:n.ScriptPurchaseServerRamCost,getPurchasedServers:n.ScriptPurchaseServerRamCost,write:0,tryWritePort:0,read:0,peek:0,clear:0,writePort:0,readPort:0,getPortHandle:0,rm:n.ScriptReadWriteRamCost,scriptRunning:n.ScriptArbScriptRamCost,scriptKill:n.ScriptArbScriptRamCost,getScriptName:0,getScriptRam:n.ScriptGetScriptRamCost,getHackTime:n.ScriptGetHackTimeRamCost,getGrowTime:n.ScriptGetHackTimeRamCost,getWeakenTime:n.ScriptGetHackTimeRamCost,getScriptIncome:n.ScriptGetScriptRamCost,getScriptExpGain:n.ScriptGetScriptRamCost,getRunningScript:n.ScriptGetRunningScriptRamCost,nFormat:0,getTimeSinceLastAug:n.ScriptGetHackTimeRamCost,prompt:0,wget:0,getFavorToDonate:n.ScriptGetFavorToDonate,getPlayer:n.ScriptSingularityFn1RamCost/4,mv:0,getOwnedSourceFiles:n.ScriptGetOwnedSourceFiles,universityCourse:r(n.ScriptSingularityFn1RamCost),gymWorkout:r(n.ScriptSingularityFn1RamCost),travelToCity:r(n.ScriptSingularityFn1RamCost),goToLocation:r(n.ScriptSingularityFn1RamCost),purchaseTor:r(n.ScriptSingularityFn1RamCost),purchaseProgram:r(n.ScriptSingularityFn1RamCost),getCurrentServer:r(n.ScriptSingularityFn1RamCost),connect:r(n.ScriptSingularityFn1RamCost),manualHack:r(n.ScriptSingularityFn1RamCost),installBackdoor:r(n.ScriptSingularityFn1RamCost),getStats:r(n.ScriptSingularityFn1RamCost/4),getCharacterInformation:r(n.ScriptSingularityFn1RamCost/4),hospitalize:r(n.ScriptSingularityFn1RamCost/4),isBusy:r(n.ScriptSingularityFn1RamCost/4),stopAction:r(n.ScriptSingularityFn1RamCost/2),upgradeHomeRam:r(n.ScriptSingularityFn2RamCost),upgradeHomeCores:r(n.ScriptSingularityFn2RamCost),getUpgradeHomeRamCost:r(n.ScriptSingularityFn2RamCost/2),getUpgradeHomeCoresCost:r(n.ScriptSingularityFn2RamCost/2),workForCompany:r(n.ScriptSingularityFn2RamCost),applyToCompany:r(n.ScriptSingularityFn2RamCost),getCompanyRep:r(n.ScriptSingularityFn2RamCost/3),getCompanyFavor:r(n.ScriptSingularityFn2RamCost/3),getCompanyFavorGain:r(n.ScriptSingularityFn2RamCost/4),checkFactionInvitations:r(n.ScriptSingularityFn2RamCost),joinFaction:r(n.ScriptSingularityFn2RamCost),workForFaction:r(n.ScriptSingularityFn2RamCost),getFactionRep:r(n.ScriptSingularityFn2RamCost/3),getFactionFavor:r(n.ScriptSingularityFn2RamCost/3),getFactionFavorGain:r(n.ScriptSingularityFn2RamCost/4),donateToFaction:r(n.ScriptSingularityFn3RamCost),createProgram:r(n.ScriptSingularityFn3RamCost),commitCrime:r(n.ScriptSingularityFn3RamCost),getCrimeChance:r(n.ScriptSingularityFn3RamCost),getCrimeStats:r(n.ScriptSingularityFn3RamCost),getOwnedAugmentations:r(n.ScriptSingularityFn3RamCost),getAugmentationsFromFaction:r(n.ScriptSingularityFn3RamCost),getAugmentationCost:r(n.ScriptSingularityFn3RamCost),getAugmentationPrereq:r(n.ScriptSingularityFn3RamCost),getAugmentationPrice:r(n.ScriptSingularityFn3RamCost/2),getAugmentationRepReq:r(n.ScriptSingularityFn3RamCost/2),getAugmentationStats:r(n.ScriptSingularityFn3RamCost),purchaseAugmentation:r(n.ScriptSingularityFn3RamCost),softReset:r(n.ScriptSingularityFn3RamCost),installAugmentations:r(n.ScriptSingularityFn3RamCost),isFocused:r(.1),setFocus:r(.1),gang:{createGang:n.ScriptGangApiBaseRamCost/4,inGang:n.ScriptGangApiBaseRamCost/4,getMemberNames:n.ScriptGangApiBaseRamCost/4,getGangInformation:n.ScriptGangApiBaseRamCost/2,getOtherGangInformation:n.ScriptGangApiBaseRamCost/2,getMemberInformation:n.ScriptGangApiBaseRamCost/2,canRecruitMember:n.ScriptGangApiBaseRamCost/4,recruitMember:n.ScriptGangApiBaseRamCost/2,getTaskNames:n.ScriptGangApiBaseRamCost/4,getTaskStats:n.ScriptGangApiBaseRamCost/4,setMemberTask:n.ScriptGangApiBaseRamCost/2,getEquipmentNames:n.ScriptGangApiBaseRamCost/4,getEquipmentCost:n.ScriptGangApiBaseRamCost/2,getEquipmentType:n.ScriptGangApiBaseRamCost/2,getEquipmentStats:n.ScriptGangApiBaseRamCost/2,purchaseEquipment:n.ScriptGangApiBaseRamCost,ascendMember:n.ScriptGangApiBaseRamCost,getAscensionResult:n.ScriptGangApiBaseRamCost/2,setTerritoryWarfare:n.ScriptGangApiBaseRamCost/2,getChanceToWinClash:n.ScriptGangApiBaseRamCost,getBonusTime:0},bladeburner:{getContractNames:n.ScriptBladeburnerApiBaseRamCost/10,getOperationNames:n.ScriptBladeburnerApiBaseRamCost/10,getBlackOpNames:n.ScriptBladeburnerApiBaseRamCost/10,getBlackOpRank:n.ScriptBladeburnerApiBaseRamCost/2,getGeneralActionNames:n.ScriptBladeburnerApiBaseRamCost/10,getSkillNames:n.ScriptBladeburnerApiBaseRamCost/10,startAction:n.ScriptBladeburnerApiBaseRamCost,stopBladeburnerAction:n.ScriptBladeburnerApiBaseRamCost/2,getCurrentAction:n.ScriptBladeburnerApiBaseRamCost/4,getActionTime:n.ScriptBladeburnerApiBaseRamCost,getActionEstimatedSuccessChance:n.ScriptBladeburnerApiBaseRamCost,getActionRepGain:n.ScriptBladeburnerApiBaseRamCost,getActionCountRemaining:n.ScriptBladeburnerApiBaseRamCost,getActionMaxLevel:n.ScriptBladeburnerApiBaseRamCost,getActionCurrentLevel:n.ScriptBladeburnerApiBaseRamCost,getActionAutolevel:n.ScriptBladeburnerApiBaseRamCost,setActionAutolevel:n.ScriptBladeburnerApiBaseRamCost,setActionLevel:n.ScriptBladeburnerApiBaseRamCost,getRank:n.ScriptBladeburnerApiBaseRamCost,getSkillPoints:n.ScriptBladeburnerApiBaseRamCost,getSkillLevel:n.ScriptBladeburnerApiBaseRamCost,getSkillUpgradeCost:n.ScriptBladeburnerApiBaseRamCost,upgradeSkill:n.ScriptBladeburnerApiBaseRamCost,getTeamSize:n.ScriptBladeburnerApiBaseRamCost,setTeamSize:n.ScriptBladeburnerApiBaseRamCost,getCityEstimatedPopulation:n.ScriptBladeburnerApiBaseRamCost,getCityCommunities:n.ScriptBladeburnerApiBaseRamCost,getCityChaos:n.ScriptBladeburnerApiBaseRamCost,getCity:n.ScriptBladeburnerApiBaseRamCost,switchCity:n.ScriptBladeburnerApiBaseRamCost,getStamina:n.ScriptBladeburnerApiBaseRamCost,joinBladeburnerFaction:n.ScriptBladeburnerApiBaseRamCost,joinBladeburnerDivision:n.ScriptBladeburnerApiBaseRamCost,getBonusTime:0},codingcontract:{attempt:n.ScriptCodingContractBaseRamCost,getContractType:n.ScriptCodingContractBaseRamCost/2,getData:n.ScriptCodingContractBaseRamCost/2,getDescription:n.ScriptCodingContractBaseRamCost/2,getNumTriesRemaining:n.ScriptCodingContractBaseRamCost/5},sleeve:{getNumSleeves:n.ScriptSleeveBaseRamCost,setToShockRecovery:n.ScriptSleeveBaseRamCost,setToSynchronize:n.ScriptSleeveBaseRamCost,setToCommitCrime:n.ScriptSleeveBaseRamCost,setToUniversityCourse:n.ScriptSleeveBaseRamCost,travel:n.ScriptSleeveBaseRamCost,setToCompanyWork:n.ScriptSleeveBaseRamCost,setToFactionWork:n.ScriptSleeveBaseRamCost,setToGymWorkout:n.ScriptSleeveBaseRamCost,getSleeveStats:n.ScriptSleeveBaseRamCost,getTask:n.ScriptSleeveBaseRamCost,getInformation:n.ScriptSleeveBaseRamCost,getSleeveAugmentations:n.ScriptSleeveBaseRamCost,getSleevePurchasableAugs:n.ScriptSleeveBaseRamCost,purchaseSleeveAug:n.ScriptSleeveBaseRamCost},stanek:{charge:n.ScriptStanekCharge,fragmentDefinitions:n.ScriptStanekFragmentDefinitions,activeFragments:n.ScriptStanekPlacedFragments,clear:n.ScriptStanekClear,canPlace:n.ScriptStanekCanPlace,place:n.ScriptStanekPlace,get:n.ScriptStanekFragmentAt,remove:n.ScriptStanekDeleteAt},ui:{getTheme:0,setTheme:0,resetTheme:0,getStyles:0,setStyles:0,resetStyles:0,getGameInfo:0},heart:{break:0}};function i(e,...t){if(0===t.length)return console.warn("No arguments passed to getRamCost()"),0;let a=o[t[0]];for(let e=1;eObject(i.a)({unbuyable:{color:e.palette.action.disabled},money:{color:e.colors.money}}));function l(e){const t=s();if(void 0!==e.player){if("number"!=typeof e.money)throw new Error("if player if provided, money should be number, contact dev");if(!e.player.canAfford(e.money))return n.createElement("span",{className:t.unbuyable},r.a.formatMoney(e.money))}return n.createElement("span",{className:t.money},"number"==typeof e.money?r.a.formatMoney(e.money):e.money)}},,,function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));const n={}},function(e,t,a){"use strict";a.d(t,"c",(function(){return r})),a.d(t,"b",(function(){return o})),a.d(t,"a",(function(){return i}));var n=a(357);function r(e,t){if(null==t)return null;if("object"==typeof t&&"string"==typeof t.ctor&&void 0!==t.data){if("AllServersMap"===t.ctor)return console.warn("Converting AllServersMap for v0.43.1"),t.data;const e=r.constructors[t.ctor];if("function"==typeof e&&"function"==typeof e.fromJSON){const a=e.fromJSON(t);return void 0!==e.validationData&&Object(n.b)(a,e.validationData),a}}return t}function o(e,t,a){a||(a=Object.keys(t));const n={};for(let e=0;e{switch(typeof e){case"number":return e;case"object":return Object(i.a)(e.min,e.max);default:throw Error(`Do not know how to convert the type '${typeof e}' to a number`)}};for(const e of r.a){const r={hostname:e.hostname,ip:g(),numOpenPortsRequired:e.numOpenPortsRequired,organizationName:e.organizationName};void 0!==e.maxRamExponent&&(r.maxRam=Math.pow(2,o(e.maxRamExponent)));for(const t of a)void 0!==e[t]&&(r[t]=o(e[t]));const i=new n.a(r);for(const t of e.literature||[])i.messages.push(t);i.hostname===c.a.WorldDaemon&&(i.requiredHackingSkill*=u.a.WorldDaemonDifficulty),y(i),void 0!==e.networkLayer&&t[o(e.networkLayer)-1].push(i)}const s=(e,t)=>{for(const r of e)a=r,n=t(),a.serversOnNetwork.push(n.hostname),n.serversOnNetwork.push(a.hostname);var a,n};s(t[0],()=>e);for(let e=1;e{return(a=t[e-1])[Math.floor(Math.random()*a.length)];var a})}function E(){for(const e of Object.keys(m))delete m[e];m={}}function k(e){m=JSON.parse(e,s.c)}function v(e=!1){const t=JSON.parse(JSON.stringify(m),s.c);for(const a of Object.keys(t)){const n=t[a];if(e)n.runningScripts=[];else for(let e=0;e{let t=""+e%1e3;for(;t.length<3;)t="0"+t;return t})();let u="";return n>0&&(u+=n+" days "),o>0&&(u+=o+" hours "),s>0&&(u+=s+" minutes "),u+=(t?`${l}.${c}`:""+l)+" seconds",u}function o(e){if(!i(e))return"";if(0===e.length)return"";const t=e.concat().sort(),a=t[0],n=t[t.length-1],r=a.length;let o=0;for(;oObject(n.useContext)(o.Player),Router:()=>Object(n.useContext)(o.Router)}},function(e,t,a){"use strict";a.d(t,"j",(function(){return n})),a.d(t,"d",(function(){return r})),a.d(t,"i",(function(){return o})),a.d(t,"f",(function(){return i})),a.d(t,"b",(function(){return s})),a.d(t,"h",(function(){return l})),a.d(t,"a",(function(){return c})),a.d(t,"e",(function(){return u})),a.d(t,"k",(function(){return m})),a.d(t,"c",(function(){return h})),a.d(t,"g",(function(){return d}));const n=["Software Engineering Intern","Junior Software Engineer","Senior Software Engineer","Lead Software Developer","Head of Software","Head of Engineering","Vice President of Technology","Chief Technology Officer"],r=["IT Intern","IT Analyst","IT Manager","Systems Administrator"],o=["Security Engineer"],i=["Network Engineer","Network Administrator"],s=["Business Intern","Business Analyst","Business Manager","Operations Manager","Chief Financial Officer","Chief Executive Officer"],l=["Police Officer","Police Chief","Security Guard","Security Officer","Security Supervisor","Head of Security"],c=["Field Agent","Secret Agent","Special Operative"],u=["Waiter","Employee"],m=["Software Consultant","Senior Software Consultant"],h=["Business Consultant","Senior Business Consultant"],d=["Part-time Waiter","Part-time Employee"]},,function(e,t,a){"use strict";function n(e,t){const a=Math.min(e,t),n=Math.max(e,t);return Math.floor(Math.random()*(n-a+1))+a}a.d(t,"a",(function(){return n}))},,,,function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));const n=["START","PURCHASE","PRODUCTION","SALE","EXPORT"],r={INITIALSHARES:1e9,SHARESPERPRICEUPDATE:1e6,IssueNewSharesCooldown:216e3,SellSharesCooldown:18e3,CyclesPerMarketCycle:50,CyclesPerIndustryStateCycle:50/n.length,SecsPerMarketCycle:10,Cities:["Aevum","Chongqing","Sector-12","New Tokyo","Ishima","Volhaven"],WarehouseInitialCost:5e9,WarehouseInitialSize:100,WarehouseUpgradeBaseCost:1e9,OfficeInitialCost:4e9,OfficeInitialSize:3,OfficeUpgradeBaseCost:1e9,BribeThreshold:1e14,BribeToRepRatio:1e9,ProductProductionCostRatio:5,DividendMaxPercentage:1,EmployeeSalaryMultiplier:3,CyclesPerEmployeeRaise:400,EmployeeRaiseAmount:50,BaseMaxProducts:3,AllCorporationStates:n,AllMaterials:["Water","Energy","Food","Plants","Metal","Hardware","Chemicals","Drugs","Robots","AI Cores","Real Estate"],FundingRoundShares:[.1,.35,.25,.2],FundingRoundMultiplier:[4,3,3,2.5]}},function(e,t,a){"use strict";a.d(t,"a",(function(){return n})),a.d(t,"c",(function(){return r})),a.d(t,"b",(function(){return o}));const n={MoneyGainPerLevel:1.5,BaseCost:1e3,LevelBaseCost:1,RamBaseCost:3e4,CoreBaseCost:5e5,PurchaseNextMult:1.85,UpgradeLevelMult:1.04,UpgradeRamMult:1.28,UpgradeCoreMult:1.48,MaxLevel:200,MaxRam:64,MaxCores:16},r={x1:1,x5:5,x10:10,MAX:"MAX"},o={HashesPerLevel:.001,BaseCost:5e4,RamBaseCost:2e5,CoreBaseCost:1e6,CacheBaseCost:1e7,PurchaseMult:3.2,UpgradeLevelMult:1.1,UpgradeRamMult:1.4,UpgradeCoreMult:1.55,UpgradeCacheMult:1.85,MaxServers:20,MaxLevel:300,MaxRam:8192,MaxCores:128,MaxCache:15}},function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(0),r=a(5),o=a(28),i=a(4),s=a(18),l=a(22);function c(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class u{constructor(e={info:"",moneyCost:0,name:"",repCost:0}){c(this,"baseCost",0),c(this,"baseRepRequirement",0),c(this,"isSpecial",!1),c(this,"level",0),c(this,"name",""),c(this,"owned",!1),c(this,"prereqs",[]),c(this,"mults",{}),c(this,"startingCost",0),this.name=e.name,this.info=e.info,this.prereqs=e.prereqs?e.prereqs:[],this.baseRepRequirement=e.repCost*r.a.AugmentationRepCost,this.baseCost=e.moneyCost*r.a.AugmentationMoneyCost,this.startingCost=this.baseCost,e.isSpecial&&(this.isSpecial=!0),this.level=0,e.hacking_mult&&(this.mults.hacking_mult=e.hacking_mult),e.strength_mult&&(this.mults.strength_mult=e.strength_mult),e.defense_mult&&(this.mults.defense_mult=e.defense_mult),e.dexterity_mult&&(this.mults.dexterity_mult=e.dexterity_mult),e.agility_mult&&(this.mults.agility_mult=e.agility_mult),e.charisma_mult&&(this.mults.charisma_mult=e.charisma_mult),e.hacking_exp_mult&&(this.mults.hacking_exp_mult=e.hacking_exp_mult),e.strength_exp_mult&&(this.mults.strength_exp_mult=e.strength_exp_mult),e.defense_exp_mult&&(this.mults.defense_exp_mult=e.defense_exp_mult),e.dexterity_exp_mult&&(this.mults.dexterity_exp_mult=e.dexterity_exp_mult),e.agility_exp_mult&&(this.mults.agility_exp_mult=e.agility_exp_mult),e.charisma_exp_mult&&(this.mults.charisma_exp_mult=e.charisma_exp_mult),e.hacking_chance_mult&&(this.mults.hacking_chance_mult=e.hacking_chance_mult),e.hacking_speed_mult&&(this.mults.hacking_speed_mult=e.hacking_speed_mult),e.hacking_money_mult&&(this.mults.hacking_money_mult=e.hacking_money_mult),e.hacking_grow_mult&&(this.mults.hacking_grow_mult=e.hacking_grow_mult),e.company_rep_mult&&(this.mults.company_rep_mult=e.company_rep_mult),e.faction_rep_mult&&(this.mults.faction_rep_mult=e.faction_rep_mult),e.crime_money_mult&&(this.mults.crime_money_mult=e.crime_money_mult),e.crime_success_mult&&(this.mults.crime_success_mult=e.crime_success_mult),e.work_money_mult&&(this.mults.work_money_mult=e.work_money_mult),e.hacknet_node_money_mult&&(this.mults.hacknet_node_money_mult=e.hacknet_node_money_mult),e.hacknet_node_purchase_cost_mult&&(this.mults.hacknet_node_purchase_cost_mult=e.hacknet_node_purchase_cost_mult),e.hacknet_node_ram_cost_mult&&(this.mults.hacknet_node_ram_cost_mult=e.hacknet_node_ram_cost_mult),e.hacknet_node_core_cost_mult&&(this.mults.hacknet_node_core_cost_mult=e.hacknet_node_core_cost_mult),e.hacknet_node_level_cost_mult&&(this.mults.hacknet_node_level_cost_mult=e.hacknet_node_level_cost_mult),e.bladeburner_max_stamina_mult&&(this.mults.bladeburner_max_stamina_mult=e.bladeburner_max_stamina_mult),e.bladeburner_stamina_gain_mult&&(this.mults.bladeburner_stamina_gain_mult=e.bladeburner_stamina_gain_mult),e.bladeburner_analysis_mult&&(this.mults.bladeburner_analysis_mult=e.bladeburner_analysis_mult),e.bladeburner_success_chance_mult&&(this.mults.bladeburner_success_chance_mult=e.bladeburner_success_chance_mult),void 0===e.stats?this.stats=function(e,t,a){const r=(e,t=0)=>e===1.0777-1?"7.77%":e===1.777-1?"77.7%":i.a.formatPercentage(e,t);let o=n.createElement(n.Fragment,null,"Effects:");return e.hacking_mult&&e.hacking_mult==e.strength_mult&&e.hacking_mult==e.defense_mult&&e.hacking_mult==e.dexterity_mult&&e.hacking_mult==e.agility_mult&&e.hacking_mult==e.charisma_mult?o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacking_mult-1)," all skills"):(e.hacking_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacking_mult-1)," hacking skill")),e.strength_mult&&e.strength_mult==e.defense_mult&&e.strength_mult==e.dexterity_mult&&e.strength_mult==e.agility_mult?o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.strength_mult-1)," combat skills"):(e.strength_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.strength_mult-1)," strength skill")),e.defense_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.defense_mult-1)," defense skill")),e.dexterity_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.dexterity_mult-1)," dexterity skill")),e.agility_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.agility_mult-1)," agility skill"))),e.charisma_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.charisma_mult-1)," Charisma skill"))),e.hacking_exp_mult&&e.hacking_exp_mult===e.strength_exp_mult&&e.hacking_exp_mult===e.defense_exp_mult&&e.hacking_exp_mult===e.dexterity_exp_mult&&e.hacking_exp_mult===e.agility_exp_mult&&e.hacking_exp_mult===e.charisma_exp_mult?o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacking_exp_mult-1)," exp for all skills"):(e.hacking_exp_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacking_exp_mult-1)," hacking exp")),e.strength_exp_mult&&e.strength_exp_mult===e.defense_exp_mult&&e.strength_exp_mult===e.dexterity_exp_mult&&e.strength_exp_mult===e.agility_exp_mult?o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.strength_exp_mult-1)," combat exp"):(e.strength_exp_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.strength_exp_mult-1)," strength exp")),e.defense_exp_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.defense_exp_mult-1)," defense exp")),e.dexterity_exp_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.dexterity_exp_mult-1)," dexterity exp")),e.agility_exp_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.agility_exp_mult-1)," agility exp"))),e.charisma_exp_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.charisma_exp_mult-1)," charisma exp"))),e.hacking_speed_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacking_speed_mult-1)," faster hack(), grow(), and weaken()")),e.hacking_chance_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacking_chance_mult-1)," hack() success chance")),e.hacking_money_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacking_money_mult-1)," hack() power")),e.hacking_grow_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacking_grow_mult-1)," grow() power")),e.faction_rep_mult&&e.faction_rep_mult===e.company_rep_mult?o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.faction_rep_mult-1)," reputation from factions and companies"):(e.faction_rep_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.faction_rep_mult-1)," reputation from factions")),e.company_rep_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.company_rep_mult-1)," reputation from companies"))),e.crime_money_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.crime_money_mult-1)," crime money")),e.crime_success_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.crime_success_mult-1)," crime success rate")),e.work_money_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.work_money_mult-1)," work money")),e.hacknet_node_money_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.hacknet_node_money_mult-1)," hacknet production")),e.hacknet_node_purchase_cost_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"-",r(-(e.hacknet_node_purchase_cost_mult-1))," hacknet nodes cost")),e.hacknet_node_level_cost_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"-",r(-(e.hacknet_node_level_cost_mult-1))," hacknet nodes upgrade cost")),e.bladeburner_max_stamina_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.bladeburner_max_stamina_mult-1)," Bladeburner Max Stamina")),e.bladeburner_stamina_gain_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.bladeburner_stamina_gain_mult-1)," Bladeburner Stamina gain")),e.bladeburner_analysis_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.bladeburner_analysis_mult-1)," Bladeburner Field Analysis effectiveness")),e.bladeburner_success_chance_mult&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"+",r(e.bladeburner_success_chance_mult-1)," Bladeburner Contracts and Operations success chance")),a&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"Start with ",n.createElement(s.a,{money:a})," after installing Augmentations.")),t&&(o=n.createElement(n.Fragment,null,o,n.createElement("br",null),"Start with ",t.join(" and ")," after installing Augmentations.")),o}(this.mults,e.programs,e.startingMoney):this.stats=e.stats}addToFactions(e){for(let t=0;tObject(i.a)({modal:{display:"flex",alignItems:"center",justifyContent:"center"},paper:{backgroundColor:e.palette.background.default,border:"2px solid "+e.palette.primary.main,boxShadow:`0px 3px 5px -1px ${e.palette.primary.dark},0px 5px 8px 0px ${e.palette.primary.dark},0px 1px 14px 0px ${e.palette.primary.dark}`,padding:2,maxWidth:"80%",maxHeight:"80%",overflow:"auto","&::-webkit-scrollbar":{display:"none"},scrollbarWidth:"none"}})),m=e=>{const t=u();return r.a.createElement(s.a,{disableRestoreFocus:!0,disableScrollLock:!0,disableEnforceFocus:!0,disableAutoFocus:!0,open:e.open,onClose:e.onClose,closeAfterTransition:!0,className:t.modal},r.a.createElement(l.a,{in:e.open},r.a.createElement("div",{className:t.paper},r.a.createElement(c.a,{sx:{m:2}},e.children))))}},function(e,t,a){"use strict";a.d(t,"b",(function(){return u})),a.d(t,"a",(function(){return m}));var n=a(0),r=a.n(n),o=a(45),i=a(200),s=a(113);function l(){return(l=Object.assign||function(e){for(var t=1;tr.a.createElement(o.a,l({},e,{classes:{root:c().root,...e.classes}})),m=e=>r.a.createElement(i.a,l({},e,{classes:{root:c().small,...e.classes}}))},function(e,t,a){"use strict";a.d(t,"f",(function(){return n})),a.d(t,"b",(function(){return m})),a.d(t,"e",(function(){return l})),a.d(t,"c",(function(){return c})),a.d(t,"a",(function(){return s})),a.d(t,"d",(function(){return u}));var n,r=a(2),o=a(60),i=a(353);!function(e){e[e.Start=0]="Start",e[e.GoToCharacterPage=1]="GoToCharacterPage",e[e.CharacterPage=2]="CharacterPage",e[e.CharacterGoToTerminalPage=3]="CharacterGoToTerminalPage",e[e.TerminalIntro=4]="TerminalIntro",e[e.TerminalHelp=5]="TerminalHelp",e[e.TerminalLs=6]="TerminalLs",e[e.TerminalScan=7]="TerminalScan",e[e.TerminalScanAnalyze1=8]="TerminalScanAnalyze1",e[e.TerminalScanAnalyze2=9]="TerminalScanAnalyze2",e[e.TerminalConnect=10]="TerminalConnect",e[e.TerminalAnalyze=11]="TerminalAnalyze",e[e.TerminalNuke=12]="TerminalNuke",e[e.TerminalManualHack=13]="TerminalManualHack",e[e.TerminalHackingMechanics=14]="TerminalHackingMechanics",e[e.TerminalGoHome=15]="TerminalGoHome",e[e.TerminalCreateScript=16]="TerminalCreateScript",e[e.TerminalTypeScript=17]="TerminalTypeScript",e[e.TerminalFree=18]="TerminalFree",e[e.TerminalRunScript=19]="TerminalRunScript",e[e.TerminalGoToActiveScriptsPage=20]="TerminalGoToActiveScriptsPage",e[e.ActiveScriptsPage=21]="ActiveScriptsPage",e[e.ActiveScriptsToTerminal=22]="ActiveScriptsToTerminal",e[e.TerminalTailScript=23]="TerminalTailScript",e[e.GoToHacknetNodesPage=24]="GoToHacknetNodesPage",e[e.HacknetNodesIntroduction=25]="HacknetNodesIntroduction",e[e.HacknetNodesGoToWorldPage=26]="HacknetNodesGoToWorldPage",e[e.WorldDescription=27]="WorldDescription",e[e.TutorialPageInfo=28]="TutorialPageInfo",e[e.End=29]="End"}(n||(n={}));const s={currStep:n.Start,isRunning:!1,stepIsDone:{[n.Start]:!1,[n.GoToCharacterPage]:!1,[n.CharacterPage]:!1,[n.CharacterGoToTerminalPage]:!1,[n.TerminalIntro]:!1,[n.TerminalHelp]:!1,[n.TerminalLs]:!1,[n.TerminalScan]:!1,[n.TerminalScanAnalyze1]:!1,[n.TerminalScanAnalyze2]:!1,[n.TerminalConnect]:!1,[n.TerminalAnalyze]:!1,[n.TerminalNuke]:!1,[n.TerminalManualHack]:!1,[n.TerminalHackingMechanics]:!1,[n.TerminalGoHome]:!1,[n.TerminalCreateScript]:!1,[n.TerminalTypeScript]:!1,[n.TerminalFree]:!1,[n.TerminalRunScript]:!1,[n.TerminalGoToActiveScriptsPage]:!1,[n.ActiveScriptsPage]:!1,[n.ActiveScriptsToTerminal]:!1,[n.TerminalTailScript]:!1,[n.GoToHacknetNodesPage]:!1,[n.HacknetNodesIntroduction]:!1,[n.HacknetNodesGoToWorldPage]:!1,[n.WorldDescription]:!1,[n.TutorialPageInfo]:!1,[n.End]:!1}};function l(){s.isRunning=!0,s.currStep=n.Start}function c(){s.stepIsDone[s.currStep]=!0,s.currStepn.Start&&(s.currStep-=1),i.a.emit()}function m(){s.isRunning=!1,s.currStep=n.Start,r.a.getHomeComputer().messages.push(o.a.HackersStartingHandbook),i.a.emit()}},function(e,t,a){"use strict";a.d(t,"eb",(function(){return Z})),a.d(t,"hb",(function(){return ee})),a.d(t,"ib",(function(){return te})),a.d(t,"qb",(function(){return ae})),a.d(t,"o",(function(){return ne})),a.d(t,"p",(function(){return re})),a.d(t,"Ob",(function(){return oe})),a.d(t,"tb",(function(){return ie})),a.d(t,"cb",(function(){return se})),a.d(t,"wb",(function(){return le})),a.d(t,"K",(function(){return ce})),a.d(t,"gb",(function(){return ue})),a.d(t,"s",(function(){return me})),a.d(t,"rb",(function(){return he})),a.d(t,"I",(function(){return de})),a.d(t,"L",(function(){return pe})),a.d(t,"G",(function(){return fe})),a.d(t,"H",(function(){return ge})),a.d(t,"D",(function(){return ye})),a.d(t,"E",(function(){return be})),a.d(t,"J",(function(){return Ee})),a.d(t,"lb",(function(){return ke})),a.d(t,"ub",(function(){return ve})),a.d(t,"kb",(function(){return _e})),a.d(t,"Ib",(function(){return we})),a.d(t,"jb",(function(){return Se})),a.d(t,"t",(function(){return Ce})),a.d(t,"Pb",(function(){return xe})),a.d(t,"B",(function(){return Oe})),a.d(t,"Jb",(function(){return Me})),a.d(t,"Rb",(function(){return Te})),a.d(t,"C",(function(){return Re})),a.d(t,"Hb",(function(){return Ae})),a.d(t,"Kb",(function(){return Ne})),a.d(t,"Gb",(function(){return Pe})),a.d(t,"Eb",(function(){return Ie})),a.d(t,"Db",(function(){return Fe})),a.d(t,"Fb",(function(){return De})),a.d(t,"Qb",(function(){return je})),a.d(t,"A",(function(){return Be})),a.d(t,"V",(function(){return Ge})),a.d(t,"U",(function(){return Le})),a.d(t,"X",(function(){return We})),a.d(t,"S",(function(){return He})),a.d(t,"T",(function(){return Ue})),a.d(t,"Q",(function(){return qe})),a.d(t,"R",(function(){return Ke})),a.d(t,"W",(function(){return $e})),a.d(t,"Bb",(function(){return ze})),a.d(t,"w",(function(){return Ve})),a.d(t,"y",(function(){return Ye})),a.d(t,"Ab",(function(){return Je})),a.d(t,"Lb",(function(){return Xe})),a.d(t,"x",(function(){return Qe})),a.d(t,"Cb",(function(){return Ze})),a.d(t,"v",(function(){return et})),a.d(t,"z",(function(){return tt})),a.d(t,"yb",(function(){return at})),a.d(t,"Mb",(function(){return nt})),a.d(t,"sb",(function(){return rt})),a.d(t,"db",(function(){return ot})),a.d(t,"f",(function(){return it})),a.d(t,"P",(function(){return st})),a.d(t,"nb",(function(){return lt})),a.d(t,"bb",(function(){return ct})),a.d(t,"m",(function(){return ut})),a.d(t,"l",(function(){return mt})),a.d(t,"e",(function(){return ht})),a.d(t,"j",(function(){return dt})),a.d(t,"g",(function(){return pt})),a.d(t,"c",(function(){return ft})),a.d(t,"b",(function(){return gt})),a.d(t,"k",(function(){return yt})),a.d(t,"a",(function(){return bt})),a.d(t,"d",(function(){return Et})),a.d(t,"h",(function(){return kt})),a.d(t,"n",(function(){return vt})),a.d(t,"i",(function(){return _t})),a.d(t,"fb",(function(){return wt})),a.d(t,"ob",(function(){return St})),a.d(t,"pb",(function(){return Ct})),a.d(t,"u",(function(){return xt})),a.d(t,"vb",(function(){return Ot})),a.d(t,"mb",(function(){return Mt})),a.d(t,"F",(function(){return Tt})),a.d(t,"Nb",(function(){return Rt})),a.d(t,"ab",(function(){return At})),a.d(t,"r",(function(){return Nt})),a.d(t,"Z",(function(){return Pt})),a.d(t,"Y",(function(){return It})),a.d(t,"N",(function(){return Ft})),a.d(t,"M",(function(){return Dt})),a.d(t,"O",(function(){return jt})),a.d(t,"xb",(function(){return Bt})),a.d(t,"q",(function(){return Gt})),a.d(t,"zb",(function(){return Lt}));var n=a(21),r=a(142),o=a(295),i=a(7),s=a(5),l=a(104),c=a(227),u=a(62),m=a(622),h=a(482),d=a(90),p=a(30),f=a(8),g=a(61),y=a(354),b=a(81),E=a(193),k=a(28),v=a(73),_=a(139),w=a(240),S=a(25),C=a(11),x=a(310),O=a(166),M=a(265),T=a(234),R=a(24),A=a(44),N=a(125),P=a(97),I=a(1234),F=a(1235),D=a(340),j=a(78),B=a(478),G=a(377),L=a(88),W=a(4),H=a(358),U=a(15),q=a(27),K=a(106),$=a(18),z=a(0),V=a.n(z),Y=a(338),J=a(164),X=a(699),Q=a(280);function Z(){const e=Object(N.f)({adminRights:!0,hostname:"home",ip:Object(R.e)(),isConnectedTo:!0,maxRam:8,organizationName:"Home PC",purchasedByPlayer:!0});this.currentServer=P.a.Home,Object(R.a)(e),this.getHomeComputer().programs.push(g.a.NukeProgram.name)}function ee(){this.currentServer=P.a.Home,this.numPeopleKilled=0,this.hacking=1,this.strength=1,this.defense=1,this.dexterity=1,this.agility=1,this.charisma=1,this.hacking_exp=0,this.strength_exp=0,this.defense_exp=0,this.dexterity_exp=0,this.agility_exp=0,this.charisma_exp=0,this.money=1e3,this.city=S.a.Sector12,this.location=C.a.TravelAgency,this.companyName="",this.jobs={},this.purchasedServers=[],this.factions=[],this.factionInvitations=[],this.queuedAugmentations=[],this.resleeves=[];const e=Math.min(3,j.a[10]+(10===this.bitNodeN?1:0))+this.sleevesFromCovenant;this.sleeves.length>e&&(this.sleeves.length=e);for(let t=this.sleeves.length;t=100?this.sleeves[e].synchronize(this):this.sleeves[e].shockRecovery(this));this.isWorking=!1,this.currentWorkFactionName="",this.currentWorkFactionDescription="",this.createProgramName="",this.className="",this.crimeType="",this.workHackExpGainRate=0,this.workStrExpGainRate=0,this.workDefExpGainRate=0,this.workDexExpGainRate=0,this.workAgiExpGainRate=0,this.workChaExpGainRate=0,this.workRepGainRate=0,this.workMoneyGainRate=0,this.workHackExpGained=0,this.workStrExpGained=0,this.workDefExpGained=0,this.workDexExpGained=0,this.workAgiExpGained=0,this.workChaExpGained=0,this.workRepGained=0,this.workMoneyGained=0,this.timeWorked=0,this.lastUpdate=(new Date).getTime(),this.playtimeSinceLastAug=0,this.scriptProdSinceLastAug=0,this.moneySourceA.reset(),this.hacknetNodes.length=0,this.hashManager.prestige(),this.reapplyAllAugmentations(!0),this.hp=this.max_hp}function te(){this.prestigeAugmentation(),this.karma=0;for(let e=0;e0?this.intelligence=Math.floor(this.calculateSkill(this.intelligence_exp)):this.intelligence=0;const e=this.hp/this.max_hp;this.max_hp=Math.floor(10+this.defense/10),this.hp=Math.round(this.max_hp*e)}function ie(){this.hacking_chance_mult=1,this.hacking_speed_mult=1,this.hacking_money_mult=1,this.hacking_grow_mult=1,this.hacking_mult=1,this.strength_mult=1,this.defense_mult=1,this.dexterity_mult=1,this.agility_mult=1,this.charisma_mult=1,this.hacking_exp_mult=1,this.strength_exp_mult=1,this.defense_exp_mult=1,this.dexterity_exp_mult=1,this.agility_exp_mult=1,this.charisma_exp_mult=1,this.company_rep_mult=1,this.faction_rep_mult=1,this.crime_money_mult=1,this.crime_success_mult=1,this.hacknet_node_money_mult=1,this.hacknet_node_purchase_cost_mult=1,this.hacknet_node_ram_cost_mult=1,this.hacknet_node_core_cost_mult=1,this.hacknet_node_level_cost_mult=1,this.work_money_mult=1,this.bladeburner_max_stamina_mult=1,this.bladeburner_stamina_gain_mult=1,this.bladeburner_analysis_mult=1,this.bladeburner_success_chance_mult=1}function se(e){const t=this.getHomeComputer();if(null==t)return!1;for(let a=0;a=e}function he(e,t){this.moneySourceA instanceof H.a||(console.warn("Player.moneySourceA was not properly initialized. Resetting"),this.moneySourceA=new H.a),this.moneySourceB instanceof H.a||(console.warn("Player.moneySourceB was not properly initialized. Resetting"),this.moneySourceB=new H.a),this.moneySourceA.record(e,t),this.moneySourceB.record(e,t)}function de(e){isNaN(e)?console.error("ERR: NaN passed into Player.gainHackingExp()"):(this.hacking_exp+=e,this.hacking_exp<0&&(this.hacking_exp=0),this.hacking=Object(O.b)(this.hacking_exp,this.hacking_mult*s.a.HackingLevelMultiplier))}function pe(e){isNaN(e)?console.error("ERR: NaN passed into Player.gainStrengthExp()"):(this.strength_exp+=e,this.strength_exp<0&&(this.strength_exp=0),this.strength=Object(O.b)(this.strength_exp,this.strength_mult*s.a.StrengthLevelMultiplier))}function fe(e){if(isNaN(e))return void console.error("ERR: NaN passed into player.gainDefenseExp()");this.defense_exp+=e,this.defense_exp<0&&(this.defense_exp=0),this.defense=Object(O.b)(this.defense_exp,this.defense_mult*s.a.DefenseLevelMultiplier);const t=this.hp/this.max_hp;this.max_hp=Math.floor(10+this.defense/10),this.hp=Math.round(this.max_hp*t)}function ge(e){isNaN(e)?console.error("ERR: NaN passed into Player.gainDexterityExp()"):(this.dexterity_exp+=e,this.dexterity_exp<0&&(this.dexterity_exp=0),this.dexterity=Object(O.b)(this.dexterity_exp,this.dexterity_mult*s.a.DexterityLevelMultiplier))}function ye(e){isNaN(e)?console.error("ERR: NaN passed into Player.gainAgilityExp()"):(this.agility_exp+=e,this.agility_exp<0&&(this.agility_exp=0),this.agility=Object(O.b)(this.agility_exp,this.agility_mult*s.a.AgilityLevelMultiplier))}function be(e){isNaN(e)?console.error("ERR: NaN passed into Player.gainCharismaExp()"):(this.charisma_exp+=e,this.charisma_exp<0&&(this.charisma_exp=0),this.charisma=Object(O.b)(this.charisma_exp,this.charisma_mult*s.a.CharismaLevelMultiplier))}function Ee(e){isNaN(e)?console.error("ERROR: NaN passed into Player.gainIntelligenceExp()"):(j.a[5]>0||this.intelligence>0)&&(this.intelligence_exp+=e,this.intelligence=Math.floor(this.calculateSkill(this.intelligence_exp)))}function ke(e){const t=e.toLowerCase();return t.includes("hack")?this.hacking:t.includes("str")?this.strength:t.includes("def")?this.defense:t.includes("dex")?this.dexterity:t.includes("agi")?this.agility:t.includes("cha")?this.charisma:t.includes("int")?this.intelligence:0}function ve(e,t,a){this.workType!==f.a.WorkTypeFaction&&e===this.workType&&t===this.companyName||e===this.workType&&t===this.currentWorkFactionName&&a===this.factionWorkType||(this.isWorking&&this.singularityStopWork(),this.workHackExpGainRate=0,this.workStrExpGainRate=0,this.workDefExpGainRate=0,this.workDexExpGainRate=0,this.workAgiExpGainRate=0,this.workChaExpGainRate=0,this.workRepGainRate=0,this.workMoneyGainRate=0,this.workMoneyLossRate=0,this.workHackExpGained=0,this.workStrExpGained=0,this.workDefExpGained=0,this.workDexExpGained=0,this.workAgiExpGained=0,this.workChaExpGained=0,this.workRepGained=0,this.workMoneyGained=0,this.timeWorked=0,this.timeWorkedCreateProgram=0,this.currentWorkFactionName="",this.currentWorkFactionDescription="",this.createProgramName="",this.className="",this.workType="")}function _e(e=1){let t=1;this.hasAugmentation(i.a.NeuroreceptorManager)||(t=this.focus?1:f.a.BaseFocusBonus);const a=t*this.workHackExpGainRate*e,n=t*this.workStrExpGainRate*e,r=t*this.workDefExpGainRate*e,o=t*this.workDexExpGainRate*e,s=t*this.workAgiExpGainRate*e,l=t*this.workChaExpGainRate*e,c=(this.workMoneyGainRate-this.workMoneyLossRate)*e;this.gainHackingExp(a),this.gainStrengthExp(n),this.gainDefenseExp(r),this.gainDexterityExp(o),this.gainAgilityExp(s),this.gainCharismaExp(l),this.gainMoney(c,this.className?"class":"work"),this.workHackExpGained+=a,this.workStrExpGained+=n,this.workDefExpGained+=r,this.workDexExpGained+=o,this.workAgiExpGained+=s,this.workChaExpGained+=l,this.workRepGained+=t*this.workRepGainRate*e,this.workMoneyGained+=t*this.workMoneyGainRate*e,this.workMoneyGained-=t*this.workMoneyLossRate*e}function we(e){this.resetWorkStatus(f.a.WorkTypeCompany,e),this.isWorking=!0,this.companyName=e,this.workType=f.a.WorkTypeCompany,this.workHackExpGainRate=this.getWorkHackExpGain(),this.workStrExpGainRate=this.getWorkStrExpGain(),this.workDefExpGainRate=this.getWorkDefExpGain(),this.workDexExpGainRate=this.getWorkDexExpGain(),this.workAgiExpGainRate=this.getWorkAgiExpGain(),this.workChaExpGainRate=this.getWorkChaExpGain(),this.workRepGainRate=this.getWorkRepGain(),this.workMoneyGainRate=this.getWorkMoneyGain(),this.timeNeededToCompleteWork=f.a.MillisecondsPer8Hours}function Se(e,t=1){this.isWorking&&(this.workType==f.a.WorkTypeFaction?this.workForFaction(t)&&e.toFaction():this.workType==f.a.WorkTypeCreateProgram?this.createProgramWork(t)&&e.toTerminal():this.workType==f.a.WorkTypeStudyClass?this.takeClass(t)&&e.toCity():this.workType==f.a.WorkTypeCrime?this.commitCrime(t)&&e.toLocation(w.a[C.a.Slums]):this.workType==f.a.WorkTypeCompanyPartTime?this.workPartTime(t)&&e.toCity():this.work(t)&&e.toCity())}function Ce(){const e=Y.a.find(e=>e.specialName===this.companyName);if(!e)return.5;const t=Object(R.d)(e.hostname);return t instanceof A.a&&t&&t.backdoorInstalled?.75:.5}function xe(e){let t=!1;this.timeWorked+f.a._idleSpeed*e>=f.a.MillisecondsPer8Hours&&(t=!0,e=Math.round((f.a.MillisecondsPer8Hours-this.timeWorked)/f.a._idleSpeed)),this.timeWorked+=f.a._idleSpeed*e,this.workRepGainRate=this.getWorkRepGain(),this.workMoneyGainRate=this.getWorkMoneyGain(),this.processWorkEarnings(e);const a=u.a[this.companyName];return Object(B.a)(a,this.workRepGainRate,e),!!(t||this.timeWorked>=f.a.MillisecondsPer8Hours)&&(this.finishWork(!1),!0)}function Oe(e,t=!1){e&&(this.workRepGained*=this.cancelationPenalty());const a=.5===this.cancelationPenalty()?"half":"three-quarters";u.a[this.companyName].playerReputation+=this.workRepGained,this.updateSkillLevels();let n=V.a.createElement(V.a.Fragment,null,"You earned a total of: ",V.a.createElement("br",null),V.a.createElement($.a,{money:this.workMoneyGained}),V.a.createElement("br",null),V.a.createElement(K.a,{reputation:this.workRepGained})," reputation for the company ",V.a.createElement("br",null),this.workHackExpGained>0&&V.a.createElement(V.a.Fragment,null,W.a.formatExp(this.workHackExpGained)," hacking exp ",V.a.createElement("br",null)),this.workStrExpGained>0&&V.a.createElement(V.a.Fragment,null,W.a.formatExp(this.workStrExpGained)," strength exp ",V.a.createElement("br",null)),this.workDefExpGained>0&&V.a.createElement(V.a.Fragment,null,W.a.formatExp(this.workDefExpGained)," defense exp ",V.a.createElement("br",null)),this.workDexExpGained>0&&V.a.createElement(V.a.Fragment,null,W.a.formatExp(this.workDexExpGained)," dexterity exp ",V.a.createElement("br",null)),this.workAgiExpGained>0&&V.a.createElement(V.a.Fragment,null,W.a.formatExp(this.workAgiExpGained)," agility exp ",V.a.createElement("br",null)),this.workChaExpGained>0&&V.a.createElement(V.a.Fragment,null,W.a.formatExp(this.workChaExpGained)," charisma exp ",V.a.createElement("br",null)),V.a.createElement("br",null));if(n=e?V.a.createElement(V.a.Fragment,null,"You worked a short shift of ",Object(q.b)(this.timeWorked)," ",V.a.createElement("br",null),V.a.createElement("br",null),"Since you cancelled your work early, you only gained ",a," of the reputation you earned. ",V.a.createElement("br",null),V.a.createElement("br",null),n):V.a.createElement(V.a.Fragment,null,"You worked a full shift of 8 hours! ",V.a.createElement("br",null),V.a.createElement("br",null),n),t||Object(U.a)(n),this.isWorking=!1,this.focus=!1,this.resetWorkStatus(),t){return"You worked a short shift of "+Object(q.b)(this.timeWorked)+" and earned $"+W.a.formatMoney(this.workMoneyGained)+", "+W.a.formatReputation(this.workRepGained)+" reputation, "+W.a.formatExp(this.workHackExpGained)+" hacking exp, "+W.a.formatExp(this.workStrExpGained)+" strength exp, "+W.a.formatExp(this.workDefExpGained)+" defense exp, "+W.a.formatExp(this.workDexExpGained)+" dexterity exp, "+W.a.formatExp(this.workAgiExpGained)+" agility exp, and "+W.a.formatExp(this.workChaExpGained)+" charisma exp."}return""}function Me(e){this.resetWorkStatus(f.a.WorkTypeCompanyPartTime,e),this.isWorking=!0,this.companyName=e,this.workType=f.a.WorkTypeCompanyPartTime,this.workHackExpGainRate=this.getWorkHackExpGain(),this.workStrExpGainRate=this.getWorkStrExpGain(),this.workDefExpGainRate=this.getWorkDefExpGain(),this.workDexExpGainRate=this.getWorkDexExpGain(),this.workAgiExpGainRate=this.getWorkAgiExpGain(),this.workChaExpGainRate=this.getWorkChaExpGain(),this.workRepGainRate=this.getWorkRepGain(),this.workMoneyGainRate=this.getWorkMoneyGain(),this.timeNeededToCompleteWork=f.a.MillisecondsPer8Hours}function Te(e){let t=!1;return this.timeWorked+f.a._idleSpeed*e>=f.a.MillisecondsPer8Hours&&(t=!0,e=Math.round((f.a.MillisecondsPer8Hours-this.timeWorked)/f.a._idleSpeed)),this.timeWorked+=f.a._idleSpeed*e,this.workRepGainRate=this.getWorkRepGain(),this.processWorkEarnings(e),!!(t||this.timeWorked>=f.a.MillisecondsPer8Hours)&&(this.finishWorkPartTime(),!0)}function Re(e=!1){u.a[this.companyName].playerReputation+=this.workRepGained,this.updateSkillLevels();const t=V.a.createElement(V.a.Fragment,null,"You worked for ",Object(q.b)(this.timeWorked),V.a.createElement("br",null),V.a.createElement("br",null),"You earned a total of: ",V.a.createElement("br",null),V.a.createElement($.a,{money:this.workMoneyGained}),V.a.createElement("br",null),V.a.createElement(K.a,{reputation:this.workRepGained})," reputation for the company ",V.a.createElement("br",null),W.a.formatExp(this.workHackExpGained)," hacking exp ",V.a.createElement("br",null),W.a.formatExp(this.workStrExpGained)," strength exp ",V.a.createElement("br",null),W.a.formatExp(this.workDefExpGained)," defense exp ",V.a.createElement("br",null),W.a.formatExp(this.workDexExpGained)," dexterity exp ",V.a.createElement("br",null),W.a.formatExp(this.workAgiExpGained)," agility exp ",V.a.createElement("br",null),W.a.formatExp(this.workChaExpGained)," charisma exp",V.a.createElement("br",null));if(e||Object(U.a)(t),this.isWorking=!1,this.resetWorkStatus(),e){return"You worked for "+Object(q.b)(this.timeWorked)+" and earned a total of $"+W.a.formatMoney(this.workMoneyGained)+", "+W.a.formatReputation(this.workRepGained)+" reputation, "+W.a.formatExp(this.workHackExpGained)+" hacking exp, "+W.a.formatExp(this.workStrExpGained)+" strength exp, "+W.a.formatExp(this.workDefExpGained)+" defense exp, "+W.a.formatExp(this.workDexExpGained)+" dexterity exp, "+W.a.formatExp(this.workAgiExpGained)+" agility exp, and "+W.a.formatExp(this.workChaExpGained)+" charisma exp"}return""}function Ae(){this.focus=!0}function Ne(){this.focus=!1}function Pe(e){let t=1+e.favor/100;isNaN(t)&&(t=1),this.workRepGainRate*=t,this.workRepGainRate*=s.a.FactionWorkRepGain,this.isWorking=!0,this.workType=f.a.WorkTypeFaction,this.currentWorkFactionName=e.name,this.timeNeededToCompleteWork=f.a.MillisecondsPer20Hours}function Ie(e){this.resetWorkStatus(f.a.WorkTypeFaction,e.name,f.a.FactionWorkHacking),this.workHackExpGainRate=.15*this.hacking_exp_mult*s.a.FactionWorkExpGain,this.workRepGainRate=Object(T.c)(this,e),this.factionWorkType=f.a.FactionWorkHacking,this.currentWorkFactionDescription="carrying out hacking contracts",this.startFactionWork(e)}function Fe(e){this.resetWorkStatus(f.a.WorkTypeFaction,e.name,f.a.FactionWorkField),this.workHackExpGainRate=.1*this.hacking_exp_mult*s.a.FactionWorkExpGain,this.workStrExpGainRate=.1*this.strength_exp_mult*s.a.FactionWorkExpGain,this.workDefExpGainRate=.1*this.defense_exp_mult*s.a.FactionWorkExpGain,this.workDexExpGainRate=.1*this.dexterity_exp_mult*s.a.FactionWorkExpGain,this.workAgiExpGainRate=.1*this.agility_exp_mult*s.a.FactionWorkExpGain,this.workChaExpGainRate=.1*this.charisma_exp_mult*s.a.FactionWorkExpGain,this.workRepGainRate=Object(T.a)(this,e),this.factionWorkType=f.a.FactionWorkField,this.currentWorkFactionDescription="carrying out field missions",this.startFactionWork(e)}function De(e){this.resetWorkStatus(f.a.WorkTypeFaction,e.name,f.a.FactionWorkSecurity),this.workHackExpGainRate=.05*this.hacking_exp_mult*s.a.FactionWorkExpGain,this.workStrExpGainRate=.15*this.strength_exp_mult*s.a.FactionWorkExpGain,this.workDefExpGainRate=.15*this.defense_exp_mult*s.a.FactionWorkExpGain,this.workDexExpGainRate=.15*this.dexterity_exp_mult*s.a.FactionWorkExpGain,this.workAgiExpGainRate=.15*this.agility_exp_mult*s.a.FactionWorkExpGain,this.workChaExpGainRate=0*this.charisma_exp_mult*s.a.FactionWorkExpGain,this.workRepGainRate=Object(T.b)(this,e),this.factionWorkType=f.a.FactionWorkSecurity,this.currentWorkFactionDescription="performing security detail",this.startFactionWork(e)}function je(e){const t=k.a[this.currentWorkFactionName];switch(this.factionWorkType){case f.a.FactionWorkHacking:this.workRepGainRate=Object(T.c)(this,t);break;case f.a.FactionWorkField:this.workRepGainRate=Object(T.a)(this,t);break;case f.a.FactionWorkSecurity:this.workRepGainRate=Object(T.b)(this,t)}this.workRepGainRate*=s.a.FactionWorkRepGain;let a=!1;return this.timeWorked+f.a._idleSpeed*e>=f.a.MillisecondsPer20Hours&&(a=!0,e=Math.round((f.a.MillisecondsPer20Hours-this.timeWorked)/f.a._idleSpeed)),this.timeWorked+=f.a._idleSpeed*e,this.processWorkEarnings(e),!!(a||this.timeWorked>=f.a.MillisecondsPer20Hours)&&(this.finishFactionWork(!1),!0)}function Be(e,t=!1){const a=k.a[this.currentWorkFactionName];if(a.playerReputation+=this.workRepGained,this.updateSkillLevels(),t||Object(U.a)(V.a.createElement(V.a.Fragment,null,"You worked for your faction ",a.name," for a total of ",Object(q.b)(this.timeWorked)," ",V.a.createElement("br",null),V.a.createElement("br",null),"You earned a total of: ",V.a.createElement("br",null),V.a.createElement($.a,{money:this.workMoneyGained}),V.a.createElement("br",null),V.a.createElement(K.a,{reputation:this.workRepGained})," reputation for the faction ",V.a.createElement("br",null),W.a.formatExp(this.workHackExpGained)," hacking exp ",V.a.createElement("br",null),W.a.formatExp(this.workStrExpGained)," strength exp ",V.a.createElement("br",null),W.a.formatExp(this.workDefExpGained)," defense exp ",V.a.createElement("br",null),W.a.formatExp(this.workDexExpGained)," dexterity exp ",V.a.createElement("br",null),W.a.formatExp(this.workAgiExpGained)," agility exp ",V.a.createElement("br",null),W.a.formatExp(this.workChaExpGained)," charisma exp",V.a.createElement("br",null))),this.isWorking=!1,this.resetWorkStatus(),t){return"You worked for your faction "+a.name+" for a total of "+Object(q.b)(this.timeWorked)+". You earned "+W.a.formatReputation(this.workRepGained)+" rep, "+W.a.formatExp(this.workHackExpGained)+" hacking exp, "+W.a.formatExp(this.workStrExpGained)+" str exp, "+W.a.formatExp(this.workDefExpGained)+" def exp, "+W.a.formatExp(this.workDexExpGained)+" dex exp, "+W.a.formatExp(this.workAgiExpGained)+" agi exp, and "+W.a.formatExp(this.workChaExpGained)+" cha exp."}return""}function Ge(){let e=1;const t=u.a[this.companyName];j.a[11]>0&&(e=1+t.favor/100);const a=this.jobs[this.companyName],n=d.a[a];return null==n?(console.error(`Could not find CompanyPosition object for ${a}. Work salary will be 0`),0):n.baseSalary*t.salaryMultiplier*this.work_money_mult*s.a.CompanyWorkMoney*e}function Le(){const e=u.a[this.companyName],t=this.jobs[this.companyName],a=d.a[t];return null==e||null==a?(console.error(["Could not find Company object for "+this.companyName,`or CompanyPosition object for ${t}.`,"Work hack exp gain will be 0"].join(" ")),0):a.hackingExpGain*e.expMultiplier*this.hacking_exp_mult*s.a.CompanyWorkExpGain}function We(){const e=u.a[this.companyName],t=this.jobs[this.companyName],a=d.a[t];return null==e||null==a?(console.error(["Could not find Company object for "+this.companyName,`or CompanyPosition object for ${t}.`,"Work str exp gain will be 0"].join(" ")),0):a.strengthExpGain*e.expMultiplier*this.strength_exp_mult*s.a.CompanyWorkExpGain}function He(){const e=u.a[this.companyName],t=this.jobs[this.companyName],a=d.a[t];return null==e||null==a?(console.error(["Could not find Company object for "+this.companyName,`or CompanyPosition object for ${t}.`,"Work def exp gain will be 0"].join(" ")),0):a.defenseExpGain*e.expMultiplier*this.defense_exp_mult*s.a.CompanyWorkExpGain}function Ue(){const e=u.a[this.companyName],t=this.jobs[this.companyName],a=d.a[t];return null==e||null==a?(console.error(["Could not find Company object for "+this.companyName,`or CompanyPosition object for ${t}.`,"Work dex exp gain will be 0"].join(" ")),0):a.dexterityExpGain*e.expMultiplier*this.dexterity_exp_mult*s.a.CompanyWorkExpGain}function qe(){const e=u.a[this.companyName],t=this.jobs[this.companyName],a=d.a[t];return null==e||null==a?(console.error(["Could not find Company object for "+this.companyName,`or CompanyPosition object for ${t}.`,"Work agi exp gain will be 0"].join(" ")),0):a.agilityExpGain*e.expMultiplier*this.agility_exp_mult*s.a.CompanyWorkExpGain}function Ke(){const e=u.a[this.companyName],t=this.jobs[this.companyName],a=d.a[t];return null==e||null==a?(console.error(["Could not find Company object for "+this.companyName,`or CompanyPosition object for ${t}.`,"Work cha exp gain will be 0"].join(" ")),0):a.charismaExpGain*e.expMultiplier*this.charisma_exp_mult*s.a.CompanyWorkExpGain}function $e(){const e=u.a[this.companyName],t=this.jobs[this.companyName],a=d.a[t];if(null==e||null==a)return console.error(["Could not find Company object for "+this.companyName,`or CompanyPosition object for ${t}.`,"Work rep gain will be 0"].join(" ")),0;let n=a.calculateJobPerformance(this.hacking,this.strength,this.defense,this.dexterity,this.agility,this.charisma);n+=this.intelligence/f.a.MaxSkillLevel;let r=1+e.favor/100;return isNaN(r)&&(r=1),n*this.company_rep_mult*r}function ze(e,t,a){this.resetWorkStatus(),this.isWorking=!0,this.workType=f.a.WorkTypeCreateProgram,this.createProgramReqLvl=a,this.timeNeededToCompleteWork=t;for(let t=0;t=100)break;this.timeWorkedCreateProgram=n/100*this.timeNeededToCompleteWork,this.getHomeComputer().programs.splice(t,1)}}this.createProgramName=e}function Ve(e){let t=1;this.hasAugmentation(i.a.NeuroreceptorManager)||(t=this.focus?1:f.a.BaseFocusBonus);const a=this.createProgramReqLvl;let n=this.hacking/a*this.getIntelligenceBonus(3);return n=1+(n-1)/5,n*=t,this.timeWorked+=f.a._idleSpeed*e,this.timeWorkedCreateProgram+=f.a._idleSpeed*e*n,this.timeWorkedCreateProgram>=this.timeNeededToCompleteWork&&(this.finishCreateProgramWork(!1),!0)}function Ye(e){const t=this.createProgramName;if(!1===e)Object(U.a)("You've finished creating "+t+"!
The new program can be found on your home computer."),this.getHomeComputer().programs.push(t);else{const e=t+"-"+(Math.floor(this.timeWorkedCreateProgram/this.timeNeededToCompleteWork*1e4)/100).toString()+"%-INC";this.getHomeComputer().programs.push(e)}return e||this.gainIntelligenceExp(f.a.IntelligenceProgramBaseExpGain*this.timeWorked/1e3),this.isWorking=!1,this.resetWorkStatus(),"You've finished creating "+t+"! The new program can be found on your home computer."}function Je(e,t,a){this.resetWorkStatus(),this.isWorking=!0,this.workType=f.a.WorkTypeStudyClass,this.workCostMult=e,this.workExpMult=t,this.className=a;const n=Object(X.a)(this);this.workMoneyLossRate=n.workMoneyLossRate,this.workHackExpGainRate=n.workHackExpGainRate,this.workStrExpGainRate=n.workStrExpGainRate,this.workDefExpGainRate=n.workDefExpGainRate,this.workDexExpGainRate=n.workDexExpGainRate,this.workAgiExpGainRate=n.workAgiExpGainRate,this.workChaExpGainRate=n.workChaExpGainRate}function Xe(e){this.timeWorked+=f.a._idleSpeed*e;const t=Object(X.a)(this);return this.workMoneyLossRate=t.workMoneyLossRate,this.workHackExpGainRate=t.workHackExpGainRate,this.workStrExpGainRate=t.workStrExpGainRate,this.workDefExpGainRate=t.workDefExpGainRate,this.workDexExpGainRate=t.workDexExpGainRate,this.workAgiExpGainRate=t.workAgiExpGainRate,this.workChaExpGainRate=t.workChaExpGainRate,this.processWorkEarnings(e),!1}function Qe(e=!1){if(this.gainIntelligenceExp(f.a.IntelligenceClassBaseExpGain*Math.round(this.timeWorked/1e3)),this.workMoneyGained>0)throw new Error("ERR: Somehow gained money while taking class");if(this.updateSkillLevels(),e||Object(U.a)(V.a.createElement(V.a.Fragment,null,"After ",this.className," for ",Object(q.b)(this.timeWorked),", ",V.a.createElement("br",null),"you spent a total of ",V.a.createElement($.a,{money:-this.workMoneyGained}),". ",V.a.createElement("br",null),V.a.createElement("br",null),"You earned a total of: ",V.a.createElement("br",null),W.a.formatExp(this.workHackExpGained)," hacking exp ",V.a.createElement("br",null),W.a.formatExp(this.workStrExpGained)," strength exp ",V.a.createElement("br",null),W.a.formatExp(this.workDefExpGained)," defense exp ",V.a.createElement("br",null),W.a.formatExp(this.workDexExpGained)," dexterity exp ",V.a.createElement("br",null),W.a.formatExp(this.workAgiExpGained)," agility exp ",V.a.createElement("br",null),W.a.formatExp(this.workChaExpGained)," charisma exp",V.a.createElement("br",null))),this.isWorking=!1,e){const e="After "+this.className+" for "+Object(q.b)(this.timeWorked)+", you spent a total of "+W.a.formatMoney(-1*this.workMoneyGained)+". You earned a total of: "+W.a.formatExp(this.workHackExpGained)+" hacking exp, "+W.a.formatExp(this.workStrExpGained)+" strength exp, "+W.a.formatExp(this.workDefExpGained)+" defense exp, "+W.a.formatExp(this.workDexExpGained)+" dexterity exp, "+W.a.formatExp(this.workAgiExpGained)+" agility exp, and "+W.a.formatExp(this.workChaExpGained)+" charisma exp";return this.resetWorkStatus(),e}return this.resetWorkStatus(),""}function Ze(e,t,a,n,r,o,i,l,c,u,m=null){this.crimeType=t,this.resetWorkStatus(),this.isWorking=!0,this.focus=!0,this.workType=f.a.WorkTypeCrime,null!==m&&(this.committingCrimeThruSingFn=!0,this.singFnCrimeWorkerScript=m),this.workHackExpGained=a*this.hacking_exp_mult*s.a.CrimeExpGain,this.workStrExpGained=n*this.strength_exp_mult*s.a.CrimeExpGain,this.workDefExpGained=r*this.defense_exp_mult*s.a.CrimeExpGain,this.workDexExpGained=o*this.dexterity_exp_mult*s.a.CrimeExpGain,this.workAgiExpGained=i*this.agility_exp_mult*s.a.CrimeExpGain,this.workChaExpGained=l*this.charisma_exp_mult*s.a.CrimeExpGain,this.workMoneyGained=c*this.crime_money_mult*s.a.CrimeMoney,this.timeNeededToCompleteWork=u,e.toWork()}function et(e){return this.timeWorked+=f.a._idleSpeed*e,this.timeWorked>=this.timeNeededToCompleteWork&&(this.finishCrime(!1),!0)}function tt(e){if(!e){if(Object(y.a)(this,this.crimeType)){let e=null;for(const t of Object.keys(b.a))if(b.a[t].type==this.crimeType){e=b.a[t];break}if(null==e)return Object(U.a)(`ERR: Unrecognized crime type (${this.crimeType}). This is probably a bug please contact the developer`),"";this.gainMoney(this.workMoneyGained,"crime"),this.karma-=e.karma,this.numPeopleKilled+=e.kills,e.intelligence_exp>0&&this.gainIntelligenceExp(e.intelligence_exp),this.workHackExpGained*=2,this.workStrExpGained*=2,this.workDefExpGained*=2,this.workDexExpGained*=2,this.workAgiExpGained*=2,this.workChaExpGained*=2;const t=this.singFnCrimeWorkerScript;this.committingCrimeThruSingFn&&null!==t?null==t.disableLogs.ALL&&null==t.disableLogs.commitCrime&&t.scriptRef.log("SUCCESS: Crime successful! Gained "+W.a.formatMoney(this.workMoneyGained)+", "+W.a.formatExp(this.workHackExpGained)+" hack exp, "+W.a.formatExp(this.workStrExpGained)+" str exp, "+W.a.formatExp(this.workDefExpGained)+" def exp, "+W.a.formatExp(this.workDexExpGained)+" dex exp, "+W.a.formatExp(this.workAgiExpGained)+" agi exp, "+W.a.formatExp(this.workChaExpGained)+" cha exp."):Object(U.a)(V.a.createElement(V.a.Fragment,null,"Crime successful!",V.a.createElement("br",null),V.a.createElement("br",null),"You gained:",V.a.createElement("br",null),V.a.createElement($.a,{money:this.workMoneyGained}),V.a.createElement("br",null),W.a.formatExp(this.workHackExpGained)," hacking experience ",V.a.createElement("br",null),W.a.formatExp(this.workStrExpGained)," strength experience",V.a.createElement("br",null),W.a.formatExp(this.workDefExpGained)," defense experience",V.a.createElement("br",null),W.a.formatExp(this.workDexExpGained)," dexterity experience",V.a.createElement("br",null),W.a.formatExp(this.workAgiExpGained)," agility experience",V.a.createElement("br",null),W.a.formatExp(this.workChaExpGained)," charisma experience"))}else{this.workHackExpGained/=2,this.workStrExpGained/=2,this.workDefExpGained/=2,this.workDexExpGained/=2,this.workAgiExpGained/=2,this.workChaExpGained/=2;const e=this.singFnCrimeWorkerScript;this.committingCrimeThruSingFn&&null!==e?null==e.disableLogs.ALL&&null==e.disableLogs.commitCrime&&e.scriptRef.log("FAIL: Crime failed! Gained "+W.a.formatExp(this.workHackExpGained)+" hack exp, "+W.a.formatExp(this.workStrExpGained)+" str exp, "+W.a.formatExp(this.workDefExpGained)+" def exp, "+W.a.formatExp(this.workDexExpGained)+" dex exp, "+W.a.formatExp(this.workAgiExpGained)+" agi exp, "+W.a.formatExp(this.workChaExpGained)+" cha exp."):Object(U.a)(V.a.createElement(V.a.Fragment,null,"Crime failed!",V.a.createElement("br",null),V.a.createElement("br",null),"You gained:",V.a.createElement("br",null),W.a.formatExp(this.workHackExpGained)," hacking experience ",V.a.createElement("br",null),W.a.formatExp(this.workStrExpGained)," strength experience",V.a.createElement("br",null),W.a.formatExp(this.workDefExpGained)," defense experience",V.a.createElement("br",null),W.a.formatExp(this.workDexExpGained)," dexterity experience",V.a.createElement("br",null),W.a.formatExp(this.workAgiExpGained)," agility experience",V.a.createElement("br",null),W.a.formatExp(this.workChaExpGained)," charisma experience"))}this.gainHackingExp(this.workHackExpGained),this.gainStrengthExp(this.workStrExpGained),this.gainDefenseExp(this.workDefExpGained),this.gainDexterityExp(this.workDexExpGained),this.gainAgilityExp(this.workAgiExpGained),this.gainCharismaExp(this.workChaExpGained)}return this.committingCrimeThruSingFn=!1,this.singFnCrimeWorkerScript=null,this.isWorking=!1,this.crimeType="",this.resetWorkStatus(),""}function at(){if(!this.isWorking)return"";let e="";switch(this.workType){case f.a.WorkTypeStudyClass:e=this.finishClass(!0);break;case f.a.WorkTypeCompany:e=this.finishWork(!0,!0);break;case f.a.WorkTypeCompanyPartTime:e=this.finishWorkPartTime(!0);break;case f.a.WorkTypeFaction:e=this.finishFactionWork(!0,!0);break;case f.a.WorkTypeCreateProgram:e=this.finishCreateProgramWork(!0);break;case f.a.WorkTypeCrime:e=this.finishCrime(!0);break;default:return console.error(`Unrecognized work type (${this.workType})`),""}return e}function nt(e){return"number"!=typeof e?(console.warn("Player.takeDamage() called without a numeric argument: "+e),!1):(this.hp-=e,this.hp<=0&&(this.hospitalize(),!0))}function rt(e){"number"==typeof e?(this.hp+=e,this.hp>this.max_hp&&(this.hp=this.max_hp)):console.warn("Player.regenerateHp() called without a numeric argument: "+e)}function ot(){const e=Object(G.b)(this);return J.b.emit("You've been Hospitalized for "+W.a.formatMoney(e),"warning",2e3),this.loseMoney(e,"hospitalization"),this.hp=this.max_hp,e}function it(e,t=!1){let a=null;""!==this.companyName&&(a=u.a[this.companyName]);const n=this.jobs[this.companyName],r=u.a[this.location];if(!(r instanceof c.a))return console.error(`Could not find company that matches the location: ${this.location}. Player.applyToCompany() failed`),!1;let o=e;if(!this.isQualified(r,o)){const e=Object(h.a)(r,o);return t||Object(U.a)("Unforunately, you do not qualify for this position
"+e),!1}if(!r.hasPosition(o))return!1;for(;;){const e=Object(m.a)(o);if(null==e)break;if(!r.hasPosition(e))break;if(!this.isQualified(r,e))break;o=e}if(null!=a&&a.name==r.name&&o.name==n){const e=Object(m.a)(o);if(null==e)return t||Object(U.a)("You are already at the highest position for your field! No promotion available"),!1;if(r.hasPosition(e)){if(!t){const t=Object(h.a)(r,e);Object(U.a)("Unfortunately, you do not qualify for a promotion
"+t)}return!1}return t||Object(U.a)("You are already at the highest position for your field! No promotion available"),!1}return this.jobs[r.name]=o.name,!this.focus&&this.isWorking&&this.companyName!==this.location&&this.resetWorkStatus(),this.companyName=this.location,t||Object(U.a)("Congratulations! You were offered a new job at "+this.companyName+" as a "+o.name+"!"),!0}function st(e,t){let a=null;if(""!==this.companyName&&(a=u.a[this.companyName]),null==a||a.name!=e.name)return t;const n=this.jobs[this.companyName];if(!n)return t;const r=d.a[n];return r.isSoftwareJob()&&t.isSoftwareJob()||r.isITJob()&&t.isITJob()||r.isBusinessJob()&&t.isBusinessJob()||r.isSecurityEngineerJob()&&t.isSecurityEngineerJob()||r.isNetworkEngineerJob()&&t.isNetworkEngineerJob()||r.isSecurityJob()&&t.isSecurityJob()||r.isAgentJob()&&t.isAgentJob()||r.isSoftwareConsultantJob()&&t.isSoftwareConsultantJob()||r.isBusinessConsultantJob()&&t.isBusinessConsultantJob()||r.isPartTimeJob()&&t.isPartTimeJob()?Object(m.a)(r):t}function lt(e){1==this.isWorking&&this.workType.includes("Working for Company")&&this.companyName==e&&(this.isWorking=!1,this.companyName=""),this.companyName===e&&(this.companyName=""),delete this.jobs[e]}function ct(){return Boolean(Object.keys(this.jobs).length)}function ut(e=!1){return this.applyForJob(d.a[p.j[0]],e)}function mt(e=!1){return this.applyForJob(d.a[p.k[0]],e)}function ht(e=!1){return this.applyForJob(d.a[p.d[0]],e)}function dt(e=!1){const t=u.a[this.location];return this.isQualified(t,d.a[p.i[0]])?this.applyForJob(d.a[p.i[0]],e):(e||Object(U.a)("Unforunately, you do not qualify for this position"),!1)}function pt(e=!1){const t=u.a[this.location];if(this.isQualified(t,d.a[p.f[0]])){const t=d.a[p.f[0]];return this.applyForJob(t,e)}return e||Object(U.a)("Unforunately, you do not qualify for this position"),!1}function ft(e=!1){return this.applyForJob(d.a[p.b[0]],e)}function gt(e=!1){return this.applyForJob(d.a[p.c[0]],e)}function yt(e=!1){return this.applyForJob(d.a[p.h[2]],e)}function bt(e=!1){const t=u.a[this.location];if(this.isQualified(t,d.a[p.a[0]])){const t=d.a[p.a[0]];return this.applyForJob(t,e)}return e||Object(U.a)("Unforunately, you do not qualify for this position"),!1}function Et(e=!1){const t=u.a[this.location],a=p.e[1];return!!t.hasPosition(a)&&(this.isQualified(t,d.a[a])?(this.jobs[t.name]=a,!this.focus&&this.isWorking&&this.companyName!==t.name&&this.resetWorkStatus(),this.companyName=t.name,e||Object(U.a)("Congratulations, you are now employed at "+this.location),!0):(e||Object(U.a)("Unforunately, you do not qualify for this position"),!1))}function kt(e=!1){const t=u.a[this.location],a=p.g[1];return!!t.hasPosition(a)&&(this.isQualified(t,d.a[a])?(this.jobs[t.name]=a,!this.focus&&this.isWorking&&this.companyName!==t.name&&this.resetWorkStatus(),this.companyName=t.name,e||Object(U.a)("Congratulations, you are now employed part-time at "+this.location),!0):(e||Object(U.a)("Unforunately, you do not qualify for this position"),!1))}function vt(e=!1){const t=u.a[this.location],a=p.e[0];return!!t.hasPosition(a)&&(this.isQualified(t,d.a[a])?(this.jobs[t.name]=a,!this.focus&&this.isWorking&&this.companyName!==t.name&&this.resetWorkStatus(),this.companyName=t.name,e||Object(U.a)("Congratulations, you are now employed as a waiter at "+this.location),!0):(e||Object(U.a)("Unforunately, you do not qualify for this position"),!1))}function _t(e=!1){const t=u.a[this.location],a=p.g[0];return!!t.hasPosition(a)&&(this.isQualified(t,d.a[a])?(this.jobs[t.name]=a,!this.focus&&this.isWorking&&this.companyName!==t.name&&this.resetWorkStatus(),this.companyName=t.name,e||Object(U.a)("Congratulations, you are now employed as a part-time waiter at "+this.location),!0):(e||Object(U.a)("Unforunately, you do not qualify for this position"),!1))}function wt(e,t){const a=e.jobStatReqOffset,n=t.requiredHacking>0?t.requiredHacking+a:0,r=t.requiredStrength>0?t.requiredStrength+a:0,o=t.requiredDefense>0?t.requiredDefense+a:0,i=t.requiredDexterity>0?t.requiredDexterity+a:0,s=t.requiredDexterity>0?t.requiredDexterity+a:0,l=t.requiredCharisma>0?t.requiredCharisma+a:0;return this.hacking>=n&&this.strength>=r&&this.defense>=o&&this.dexterity>=i&&this.agility>=s&&this.charisma>=l&&e.playerReputation>=t.requiredReputation}function St(e=!0){e&&this.resetMultipliers();for(let e=0;et}const o=k.a.Illuminati;!o.isBanned&&!o.isMember&&!o.alreadyInvited&&t>=30&&this.money>=15e10&&this.hacking>=1500&&this.strength>=1200&&this.defense>=1200&&this.dexterity>=1200&&this.agility>=1200&&e.push(o);const i=k.a.Daedalus;!i.isBanned&&!i.isMember&&!i.alreadyInvited&&t>=Math.round(30*s.a.DaedalusAugsRequirement)&&this.money>=1e11&&(this.hacking>=2500||this.strength>=1500&&this.defense>=1500&&this.dexterity>=1500&&this.agility>=1500)&&e.push(i);const l=k.a["The Covenant"];!l.isBanned&&!l.isMember&&!l.alreadyInvited&&t>=20&&this.money>=75e9&&this.hacking>=850&&this.strength>=850&&this.defense>=850&&this.dexterity>=850&&this.agility>=850&&e.push(l);const c=k.a.ECorp;c.isBanned||c.isMember||c.alreadyInvited||!r(C.a.AevumECorp)||e.push(c);const m=k.a.MegaCorp;m.isBanned||m.isMember||m.alreadyInvited||!r(C.a.Sector12MegaCorp)||e.push(m);const h=k.a["Bachman & Associates"];h.isBanned||h.isMember||h.alreadyInvited||!r(C.a.AevumBachmanAndAssociates)||e.push(h);const d=k.a["Blade Industries"];d.isBanned||d.isMember||d.alreadyInvited||!r(C.a.Sector12BladeIndustries)||e.push(d);const p=k.a.NWO;p.isBanned||p.isMember||p.alreadyInvited||!r(C.a.VolhavenNWO)||e.push(p);const g=k.a["Clarke Incorporated"];g.isBanned||g.isMember||g.alreadyInvited||!r(C.a.AevumClarkeIncorporated)||e.push(g);const y=k.a["OmniTek Incorporated"];y.isBanned||y.isMember||y.alreadyInvited||!r(C.a.VolhavenOmniTekIncorporated)||e.push(y);const b=k.a["Four Sigma"];b.isBanned||b.isMember||b.alreadyInvited||!r(C.a.Sector12FourSigma)||e.push(b);const E=k.a["KuaiGong International"];E.isBanned||E.isMember||E.alreadyInvited||!r(C.a.ChongqingKuaiGongInternational)||e.push(E);const v=k.a["Fulcrum Secret Technologies"],_=Object(R.d)(P.a.FulcrumSecretTechnologies);if(!(_ instanceof A.a))throw new Error("Fulcrum Secret Technologies should be normal server");null==_?console.error("Could not find Fulcrum Secret Technologies Server"):v.isBanned||v.isMember||v.alreadyInvited||!_.backdoorInstalled||!r(C.a.AevumFulcrumTechnologies,25e4)||e.push(v);const w=k.a.BitRunners,x=Object(R.d)(P.a.BitRunnersServer);if(!(x instanceof A.a))throw new Error("BitRunners should be normal server");null==x?console.error("Could not find BitRunners Server"):w.isBanned||w.isMember||!x.backdoorInstalled||w.alreadyInvited||e.push(w);const O=k.a["The Black Hand"],M=Object(R.d)(P.a.TheBlackHandServer);if(!(M instanceof A.a))throw new Error("TheBlackHand should be normal server");null==M?console.error("Could not find The Black Hand Server"):O.isBanned||O.isMember||!M.backdoorInstalled||O.alreadyInvited||e.push(O);const T=k.a.NiteSec,N=Object(R.d)(P.a.NiteSecServer);if(!(N instanceof A.a))throw new Error("NiteSec should be normal server");null==N?console.error("Could not find NiteSec Server"):T.isBanned||T.isMember||!N.backdoorInstalled||T.alreadyInvited||e.push(T);const I=k.a.Chongqing;!I.isBanned&&!I.isMember&&!I.alreadyInvited&&this.money>=2e7&&this.city==S.a.Chongqing&&e.push(I);const F=k.a["Sector-12"];!F.isBanned&&!F.isMember&&!F.alreadyInvited&&this.money>=15e6&&this.city==S.a.Sector12&&e.push(F);const D=k.a["New Tokyo"];!D.isBanned&&!D.isMember&&!D.alreadyInvited&&this.money>=2e7&&this.city==S.a.NewTokyo&&e.push(D);const j=k.a.Aevum;!j.isBanned&&!j.isMember&&!j.alreadyInvited&&this.money>=4e7&&this.city==S.a.Aevum&&e.push(j);const B=k.a.Ishima;!B.isBanned&&!B.isMember&&!B.alreadyInvited&&this.money>=3e7&&this.city==S.a.Ishima&&e.push(B);const G=k.a.Volhaven;!G.isBanned&&!G.isMember&&!G.alreadyInvited&&this.money>=5e7&&this.city==S.a.Volhaven&&e.push(G);const W=k.a["Speakers for the Dead"];!W.isBanned&&!W.isMember&&!W.alreadyInvited&&this.hacking>=100&&this.strength>=300&&this.defense>=300&&this.dexterity>=300&&this.agility>=300&&this.numPeopleKilled>=30&&this.karma<=-45&&!a.includes(C.a.Sector12CIA)&&!a.includes(C.a.Sector12NSA)&&e.push(W);const H=k.a["The Dark Army"];!H.isBanned&&!H.isMember&&!H.alreadyInvited&&this.hacking>=300&&this.strength>=300&&this.defense>=300&&this.dexterity>=300&&this.agility>=300&&this.city==S.a.Chongqing&&this.numPeopleKilled>=5&&this.karma<=-45&&!a.includes(C.a.Sector12CIA)&&!a.includes(C.a.Sector12NSA)&&e.push(H);const U=k.a["The Syndicate"];!U.isBanned&&!U.isMember&&!U.alreadyInvited&&this.hacking>=200&&this.strength>=200&&this.defense>=200&&this.dexterity>=200&&this.agility>=200&&(this.city==S.a.Aevum||this.city==S.a.Sector12)&&this.money>=1e7&&this.karma<=-90&&!a.includes(C.a.Sector12CIA)&&!a.includes(C.a.Sector12NSA)&&e.push(U);const q=k.a.Silhouette;!q.isBanned&&!q.isMember&&!q.alreadyInvited&&(n.includes("Chief Technology Officer")||n.includes("Chief Financial Officer")||n.includes("Chief Executive Officer"))&&this.money>=15e6&&this.karma<=-22&&e.push(q);const K=k.a.Tetrads;!K.isBanned&&!K.isMember&&!K.alreadyInvited&&(this.city==S.a.Chongqing||this.city==S.a.NewTokyo||this.city==S.a.Ishima)&&this.strength>=75&&this.defense>=75&&this.dexterity>=75&&this.agility>=75&&this.karma<=-18&&e.push(K);const $=k.a["Slum Snakes"];!$.isBanned&&!$.isMember&&!$.alreadyInvited&&this.strength>=30&&this.defense>=30&&this.dexterity>=30&&this.agility>=30&&this.karma<=-9&&this.money>=1e6&&e.push($);const z=k.a.Netburners;let V=0,Y=0,J=0;for(let e=0;e=80&&V>=8&&Y>=4&&J>=100&&e.push(z);const X=k.a["Tian Di Hui"];!X.isBanned&&!X.isMember&&!X.alreadyInvited&&this.money>=1e6&&this.hacking>=50&&(this.city==S.a.Chongqing||this.city==S.a.NewTokyo||this.city==S.a.Ishima)&&e.push(X);const Q=k.a.CyberSec,Z=Object(R.d)(P.a.CyberSecServer);if(!(Z instanceof A.a))throw new Error("cybersec should be normal server");return null==Z?console.error("Could not find CyberSec Server"):Q.isBanned||Q.isMember||!Z.backdoorInstalled||Q.alreadyInvited||e.push(Q),e}function Ot(e){this.bitNodeN=e}function Mt(e){for(const t of this.queuedAugmentations)if(t.name==e)return void console.warn(`tried to queue ${e} twice, this may be a bug`);for(const t of this.augmentations)if(t.name==e)return void console.warn(`tried to queue ${e} twice, this may be a bug`);this.queuedAugmentations.push(new o.a(e))}function Tt(e,t=1){if(null==e||null==e.type||null==e)return"No reward for this contract";switch(e.type){case l.c.FactionReputation:if(null==e.name||!(k.a[e.name]instanceof E.a))return e.type=l.c.FactionReputationAll,this.gainCodingContractReward(e);const a=f.a.CodingContractBaseFactionRepGain*t;return k.a[e.name].playerReputation+=a,`Gained ${a} faction reputation for ${e.name}`;case l.c.FactionReputationAll:const n=f.a.CodingContractBaseFactionRepGain*t,r=["Bladeburners"],o=this.factions.slice().filter(e=>!r.includes(e));if(0==o.length)return e.type=l.c.Money,this.gainCodingContractReward(e,t);const i=Math.floor(n/o.length);for(const e of o)k.a[e]instanceof E.a&&(k.a[e].playerReputation+=i);return`Gained ${i} reputation for each of the following factions: ${o.toString()}`;case l.c.CompanyReputation:{if(null==e.name||!(u.a[e.name]instanceof c.a))return e.type=l.c.FactionReputationAll,this.gainCodingContractReward(e);const a=f.a.CodingContractBaseCompanyRepGain*t;return u.a[e.name].playerReputation+=a,`Gained ${a} company reputation for ${e.name}`}case l.c.Money:default:{const e=f.a.CodingContractBaseMoneyGain*t*s.a.CodingContractMoney;return this.gainMoney(e,"codingcontract"),"Gained "+W.a.formatMoney(e)}}}function Rt(e){return null==_.a[e]?(console.warn("Player.travel() called with invalid city: "+e),!1):(this.city=e,!0)}function At(e){return null==w.a[e]?(console.warn("Player.gotoLocation() called with invalid location: "+e),!1):(this.location=e,!0)}function Nt(){return 10===this.bitNodeN||j.a[10]>0}function Pt(e){this.exploits.includes(e)||(this.exploits.push(e),J.b.emit("SF -1 acquired!","success",2e3))}function It(e){const t=Q.a[e];t&&(this.achievements.map(e=>e.ID).includes(e)||(this.achievements.push({ID:e,unlockedOn:(new Date).getTime()}),J.b.emit(`Unlocked Achievement: "${t.Name}"`,"success",2e3)))}function Ft(e){return Object(M.a)(this.intelligence,e)}function Dt(){return this.moneySourceA.casino}function jt(e){return this.hasOwnProperty(e)?this[e]:1}function Bt(e,t){this.hasOwnProperty(e)&&(this[e]=t)}function Gt(){return 13===this.bitNodeN||j.a[13]>0}function Lt(e){const t=this.sourceFiles.find(t=>t.n===e);return t?t.lvl:0}},function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(517),r=a(5),o=a(848),i=a(303),s=a(22);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class c extends n.a{constructor(e={hostname:"",ip:Object(i.a)()}){super(e),l(this,"backdoorInstalled",!1),l(this,"baseDifficulty",1),l(this,"hackDifficulty",1),l(this,"minDifficulty",1),l(this,"moneyAvailable",0),l(this,"moneyMax",0),l(this,"numOpenPortsRequired",5),l(this,"openPortCount",0),l(this,"requiredHackingSkill",1),l(this,"serverGrowth",1),this.hostname.startsWith("hacknet-node-")&&(this.hostname=Object(o.a)(10)),this.purchasedByPlayer=null!=e.purchasedByPlayer&&e.purchasedByPlayer,this.maxRam=null!=e.maxRam?e.maxRam:0,this.requiredHackingSkill=null!=e.requiredHackingSkill?e.requiredHackingSkill:1,this.moneyAvailable=null!=e.moneyAvailable?e.moneyAvailable*r.a.ServerStartingMoney:0,this.moneyMax=25*this.moneyAvailable*r.a.ServerMaxMoney,this.hackDifficulty=null!=e.hackDifficulty?e.hackDifficulty*r.a.ServerStartingSecurity:1,this.baseDifficulty=this.hackDifficulty,this.minDifficulty=Math.max(1,Math.round(this.hackDifficulty/3)),this.serverGrowth=null!=e.serverGrowth?e.serverGrowth:1,this.numOpenPortsRequired=null!=e.numOpenPortsRequired?e.numOpenPortsRequired:5}capDifficulty(){this.hackDifficulty100&&(this.hackDifficulty=100)}changeMinimumSecurity(e,t=!1){t?this.minDifficulty*=e:this.minDifficulty+=e,this.minDifficulty=Math.max(1,this.minDifficulty)}changeMaximumMoney(e){if(this.moneyMax>1e13){const t=this.moneyMax-1e13;e=1+(e-1)/Math.log(t)/Math.log(8)}this.moneyMax*=e}fortify(e){this.hackDifficulty+=e,this.capDifficulty()}weaken(e){this.hackDifficulty-=e*r.a.ServerWeakenRate,this.capDifficulty()}toJSON(){return Object(s.b)("Server",this)}static fromJSON(e){return Object(s.a)(c,e.data)}}s.c.constructors.Server=c},,function(e,t,a){"use strict";a.d(t,"a",(function(){return o})),a.d(t,"b",(function(){return i})),a.d(t,"c",(function(){return s}));var n=a(0),r=a.n(n);const o={Corporation:r.a.createContext({}),Division:r.a.createContext({})},i=()=>Object(n.useContext)(o.Corporation),s=()=>Object(n.useContext)(o.Division)},,function(e,t,a){"use strict";a.d(t,"a",(function(){return s})),a.d(t,"d",(function(){return l})),a.d(t,"b",(function(){return c})),a.d(t,"c",(function(){return u})),a.d(t,"e",(function(){return m}));var n=a(0),r=a.n(n),o=a(122),i=a(132);const s={Energy:"Energy",Utilities:"Water Utilities",Agriculture:"Agriculture",Fishing:"Fishing",Mining:"Mining",Food:"Food",Tobacco:"Tobacco",Chemical:"Chemical",Pharmaceutical:"Pharmaceutical",Computer:"Computer Hardware",Robotics:"Robotics",Software:"Software",Healthcare:"Healthcare",RealEstate:"RealEstate"},l={Energy:225e9,Utilities:15e10,Agriculture:4e10,Fishing:8e10,Mining:3e11,Food:1e10,Tobacco:2e10,Chemical:7e10,Pharmaceutical:2e11,Computer:5e11,Robotics:1e12,Software:25e9,Healthcare:75e10,RealEstate:6e11},c={Energy:e=>r.a.createElement(r.a.Fragment,null,"Engage in the production and distribution of energy.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Energy,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),Utilities:e=>r.a.createElement(r.a.Fragment,null,"Distribute water and provide wastewater services.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Utilities,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),Agriculture:e=>r.a.createElement(r.a.Fragment,null,"Cultivate crops and breed livestock to produce food.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Agriculture,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: YES"),Fishing:e=>r.a.createElement(r.a.Fragment,null,"Produce food through the breeding and processing of fish and fish products.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Fishing,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),Mining:e=>r.a.createElement(r.a.Fragment,null,"Extract and process metals from the earth.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Mining,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),Food:e=>r.a.createElement(r.a.Fragment,null,"Create your own restaurants all around the world.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Food,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: YES"),Tobacco:e=>r.a.createElement(r.a.Fragment,null,"Create and distribute tobacco and tobacco-related products.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Tobacco,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: YES"),Chemical:e=>r.a.createElement(r.a.Fragment,null,"Produce industrial chemicals.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Chemical,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),Pharmaceutical:e=>r.a.createElement(r.a.Fragment,null,"Discover, develop, and create new pharmaceutical drugs.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Pharmaceutical,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),Computer:e=>r.a.createElement(r.a.Fragment,null,"Develop and manufacture new computer hardware and networking infrastructures.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Computer,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),Robotics:e=>r.a.createElement(r.a.Fragment,null,"Develop and create robots.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Robotics,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),Software:e=>r.a.createElement(r.a.Fragment,null,"Develop computer software and create AI Cores.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Software,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: YES"),Healthcare:e=>r.a.createElement(r.a.Fragment,null,"Create and manage hospitals.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.Healthcare,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO"),RealEstate:e=>r.a.createElement(r.a.Fragment,null,"Develop and manage real estate properties.",r.a.createElement("br",null),r.a.createElement("br",null),"Starting cost: ",r.a.createElement(i.a,{money:l.RealEstate,corp:e}),r.a.createElement("br",null),"Recommended starting Industry: NO")},u={Energy:Object(o.a)(),Utilities:Object(o.a)(),Agriculture:Object(o.a)(),Fishing:Object(o.a)(),Mining:Object(o.a)(),Food:Object(o.b)(),Tobacco:Object(o.b)(),Chemical:Object(o.a)(),Pharmaceutical:Object(o.b)(),Computer:Object(o.b)(),Robotics:Object(o.b)(),Software:Object(o.b)(),Healthcare:Object(o.b)(),RealEstate:Object(o.b)()};function m(){u.Energy=Object(o.a)(),u.Utilities=Object(o.a)(),u.Agriculture=Object(o.a)(),u.Fishing=Object(o.a)(),u.Mining=Object(o.a)(),u.Food=Object(o.a)(),u.Tobacco=Object(o.a)(),u.Chemical=Object(o.a)(),u.Pharmaceutical=Object(o.a)(),u.Computer=Object(o.a)(),u.Robotics=Object(o.a)(),u.Software=Object(o.a)(),u.Healthcare=Object(o.a)(),u.RealEstate=Object(o.a)()}},function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));const n={Operations:"Operations",Engineer:"Engineer",Business:"Business",Management:"Management",RandD:"Research & Development",Training:"Training",Unassigned:"Unassigned"}},,function(e,t,a){"use strict";let n;a.d(t,"a",(function(){return n})),function(e){e[e.Company=0]="Company",e[e.Gym=1]="Gym",e[e.Hospital=2]="Hospital",e[e.Slums=3]="Slums",e[e.Special=4]="Special",e[e.StockMarket=5]="StockMarket",e[e.TechVendor=6]="TechVendor",e[e.TravelAgency=7]="TravelAgency",e[e.University=8]="University",e[e.Casino=9]="Casino"}(n||(n={}))},,,,function(e,t,a){"use strict";a.d(t,"g",(function(){return f})),a.d(t,"l",(function(){return g})),a.d(t,"h",(function(){return y})),a.d(t,"a",(function(){return b})),a.d(t,"b",(function(){return E})),a.d(t,"e",(function(){return k})),a.d(t,"f",(function(){return v})),a.d(t,"d",(function(){return _})),a.d(t,"c",(function(){return w})),a.d(t,"n",(function(){return S})),a.d(t,"o",(function(){return C})),a.d(t,"k",(function(){return x})),a.d(t,"j",(function(){return O})),a.d(t,"i",(function(){return M})),a.d(t,"p",(function(){return R})),a.d(t,"m",(function(){return A}));var n=a(210),r=a(195),o=a(173),i=a(37),s=a(88),l=a(351),c=a(232),u=a(352),m=a(42),h=a(24),d=a(44),p=a(78);function f(e){return 9===e.bitNodeN||p.a[9]>0}function g(e){if(m.a.isRunning){if(m.a.currStep!==m.f.HacknetNodesIntroduction)return-1;Object(m.c)()}const t=e.hacknetNodes.length;if(f(e)){const a=E(e);if(isNaN(a))throw new Error("Calculated cost of purchasing HacknetServer is NaN");return!e.canAfford(a)||t>=i.b.MaxServers?-1:(e.loseMoney(a,"hacknet_expenses"),e.createHacknetServer(),R(e),t)}{const a=b(e);if(isNaN(a))throw new Error("Calculated cost of purchasing HacknetNode is NaN");if(!e.canAfford(a))return-1;const r="hacknet-node-"+t,o=new n.a(r,e.hacknet_node_money_mult);return e.loseMoney(a,"hacknet_expenses"),e.hacknetNodes.push(o),t}}function y(e){return f(e)&&e.hacknetNodes.length>=i.b.MaxServers}function b(e){return Object(r.d)(e.hacknetNodes.length+1,e.hacknet_node_purchase_cost_mult)}function E(e){return Object(o.f)(e.hacknetNodes.length+1,e.hacknet_node_purchase_cost_mult)}function k(e,t,a){if(null==a)throw new Error("getMaxNumberLevelUpgrades() called without maxLevel arg");if(e.moneyt.calculateLevelUpgradeCost(o,e.hacknet_node_level_cost_mult))return o;for(;n<=r;){const i=(n+r)/2|0;if(i!==a&&e.money>t.calculateLevelUpgradeCost(i,e.hacknet_node_level_cost_mult)&&e.moneyt.calculateLevelUpgradeCost(i,e.hacknet_node_level_cost_mult)))return Math.min(o,i);n=i+1}}return 0}function v(e,t,a){if(null==a)throw new Error("getMaxNumberRamUpgrades() called without maxLevel arg");if(e.moneyt.calculateRamUpgradeCost(n,e.hacknet_node_ram_cost_mult))return n;for(let a=n-1;a>=0;--a)if(e.money>t.calculateRamUpgradeCost(a,e.hacknet_node_ram_cost_mult))return a;return 0}function _(e,t,a){if(null==a)throw new Error("getMaxNumberCoreUpgrades() called without maxLevel arg");if(e.moneyt.calculateCoreUpgradeCost(o,e.hacknet_node_core_cost_mult))return o;for(;n<=r;){const i=(n+r)/2|0;if(i!=a&&e.money>t.calculateCoreUpgradeCost(i,e.hacknet_node_core_cost_mult)&&e.moneyt.calculateCoreUpgradeCost(i,e.hacknet_node_core_cost_mult)))return Math.min(o,i);n=i+1}}return 0}function w(e,t,a){if(null==a)throw new Error("getMaxNumberCacheUpgrades() called without maxLevel arg");if(!e.canAfford(t.calculateCacheUpgradeCost(1)))return 0;let n=1,r=a-1;const o=a-t.cache;if(e.canAfford(t.calculateCacheUpgradeCost(o)))return o;for(;n<=r;){const i=(n+r)/2|0;if(i!=a&&e.canAfford(t.calculateCacheUpgradeCost(i))&&!e.canAfford(t.calculateCacheUpgradeCost(i+1)))return Math.min(o,i);if(e.canAfford(t.calculateCacheUpgradeCost(i))){if(!e.canAfford(t.calculateCacheUpgradeCost(i)))return Math.min(o,i);n=i+1}else r=i-1}return 0}function S(e,t,a=1){const n=Math.round(a),r=t.calculateLevelUpgradeCost(n,e.hacknet_node_level_cost_mult);if(isNaN(r)||r<=0||n<0)return!1;const o=t instanceof s.a;if(t.level>=(o?i.b.MaxLevel:i.a.MaxLevel))return!1;if(t.level+n>(o?i.b.MaxLevel:i.a.MaxLevel)){return S(e,t,Math.max(0,(o?i.b.MaxLevel:i.a.MaxLevel)-t.level))}return!!e.canAfford(r)&&(e.loseMoney(r,"hacknet_expenses"),t.upgradeLevel(n,e.hacknet_node_money_mult),!0)}function C(e,t,a=1){const r=Math.round(a),o=t.calculateRamUpgradeCost(r,e.hacknet_node_ram_cost_mult);if(isNaN(o)||o<=0||r<0)return!1;if(t instanceof s.a&&t.maxRam>=i.b.MaxRam)return!1;if(t instanceof n.a&&t.ram>=i.a.MaxRam)return!1;if(t instanceof s.a){if(t.maxRam*Math.pow(2,r)>i.b.MaxRam){return C(e,t,Math.max(0,Math.log2(Math.round(i.b.MaxRam/t.maxRam))))}}else if(t instanceof n.a&&t.ram*Math.pow(2,r)>i.a.MaxRam){return C(e,t,Math.max(0,Math.log2(Math.round(i.a.MaxRam/t.ram))))}return!!e.canAfford(o)&&(e.loseMoney(o,"hacknet_expenses"),t.upgradeRam(r,e.hacknet_node_money_mult),!0)}function x(e,t,a=1){const n=Math.round(a),r=t.calculateCoreUpgradeCost(n,e.hacknet_node_core_cost_mult);if(isNaN(r)||r<=0||n<0)return!1;const o=t instanceof s.a;if(t.cores>=(o?i.b.MaxCores:i.a.MaxCores))return!1;if(t.cores+n>(o?i.b.MaxCores:i.a.MaxCores)){return x(e,t,Math.max(0,(o?i.b.MaxCores:i.a.MaxCores)-t.cores))}return!!e.canAfford(r)&&(e.loseMoney(r,"hacknet_expenses"),t.upgradeCore(n,e.hacknet_node_money_mult),!0)}function O(e,t,a=1){const n=Math.round(a),r=t.calculateCacheUpgradeCost(n);if(isNaN(r)||r<=0||n<0)return!1;if(!(t instanceof s.a))return console.warn("purchaseCacheUpgrade() called for a non-HacknetNode"),!1;if(t.cache+n>i.b.MaxCache){return O(e,t,Math.max(0,i.b.MaxCache-t.cache))}return!!e.canAfford(r)&&(e.loseMoney(r,"hacknet_expenses"),t.upgradeCache(n),!0)}function M(e,t){return 0===e.hacknetNodes.length?0:f(e)?function(e,t){if(!(e.hashManager instanceof l.a))throw new Error("Player does not have a HashManager (should be in 'hashManager' prop)");let a=0;for(let r=0;r0){const t=c.a["Sell for Money"];if(null===t)throw new Error("Could not get the hash upgrade");if(!t.cost)throw new Error("Upgrade is not properly configured");const a=Math.floor(r/t.cost);a>0&&e.gainMoney(t.value*a,"hacknet")}return a}(e,t):e.hacknetNodes[0]instanceof n.a?function(e,t){let a=0;for(let n=0;n{var t;null!=i[(t=e).name]&&console.warn("Duplicate Company Position being defined: "+t.name),i[t.name]=new r.a(t)});for(const t of Object.keys(i)){const a=i[t];e[t]instanceof r.a?(a.favor=e[t].favor,isNaN(a.favor)&&(a.favor=0)):a.favor=0}}function l(e){i=JSON.parse(e,o.c)}},,,,,,,,,,function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"l",(function(){return NewIndustry})),__webpack_require__.d(__webpack_exports__,"k",(function(){return NewCity})),__webpack_require__.d(__webpack_exports__,"x",(function(){return UnlockUpgrade})),__webpack_require__.d(__webpack_exports__,"h",(function(){return LevelUpgrade})),__webpack_require__.d(__webpack_exports__,"g",(function(){return IssueDividends})),__webpack_require__.d(__webpack_exports__,"o",(function(){return SellMaterial})),__webpack_require__.d(__webpack_exports__,"p",(function(){return SellProduct})),__webpack_require__.d(__webpack_exports__,"u",(function(){return SetSmartSupply})),__webpack_require__.d(__webpack_exports__,"v",(function(){return SetSmartSupplyUseLeftovers})),__webpack_require__.d(__webpack_exports__,"c",(function(){return BuyMaterial})),__webpack_require__.d(__webpack_exports__,"a",(function(){return AssignJob})),__webpack_require__.d(__webpack_exports__,"y",(function(){return UpgradeOfficeSize})),__webpack_require__.d(__webpack_exports__,"w",(function(){return ThrowParty})),__webpack_require__.d(__webpack_exports__,"m",(function(){return PurchaseWarehouse})),__webpack_require__.d(__webpack_exports__,"z",(function(){return UpgradeWarehouse})),__webpack_require__.d(__webpack_exports__,"b",(function(){return BuyCoffee})),__webpack_require__.d(__webpack_exports__,"f",(function(){return HireAdVert})),__webpack_require__.d(__webpack_exports__,"j",(function(){return MakeProduct})),__webpack_require__.d(__webpack_exports__,"n",(function(){return Research})),__webpack_require__.d(__webpack_exports__,"e",(function(){return ExportMaterial})),__webpack_require__.d(__webpack_exports__,"d",(function(){return CancelExportMaterial})),__webpack_require__.d(__webpack_exports__,"i",(function(){return LimitProductProduction})),__webpack_require__.d(__webpack_exports__,"q",(function(){return SetMaterialMarketTA1})),__webpack_require__.d(__webpack_exports__,"r",(function(){return SetMaterialMarketTA2})),__webpack_require__.d(__webpack_exports__,"s",(function(){return SetProductMarketTA1})),__webpack_require__.d(__webpack_exports__,"t",(function(){return SetProductMarketTA2}));var _IndustryData__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(48),_Industry__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(883),_data_Constants__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(36),_OfficeSpace__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(355),_Product__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(379),_Warehouse__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(230),_Locations_Cities__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(139),_EmployeePositions__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(49),_IndustryUpgrades__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(305),_ResearchMap__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(266);function NewIndustry(e,t,a){for(let t=0;t_data_Constants__WEBPACK_IMPORTED_MODULE_2__.a.DividendMaxPercentage)throw new Error("Invalid value. Must be an integer between 0 and "+_data_Constants__WEBPACK_IMPORTED_MODULE_2__.a.DividendMaxPercentage);e.dividendPercentage=100*t}function SellMaterial(mat,amt,price){""===price&&(price="0"),""===amt&&(amt="0");let cost=price.replace(/\s+/g,"");cost=cost.replace(/[^-()\d/*+.MPe]/g,"");let temp=cost.replace(/MP/g,mat.bCost+"");try{temp=eval(temp)}catch(e){throw new Error("Invalid value or expression for sell price field: "+e)}if(null==temp||isNaN(parseFloat(temp))||parseFloat(temp)<0)throw new Error("Invalid value or expression for sell price field");if(cost.includes("MP")?mat.sCost=cost:mat.sCost=temp,amt=amt.toUpperCase(),amt.includes("MAX")||amt.includes("PROD")){let q=amt.replace(/\s+/g,"");q=q.replace(/[^-()\d/*+.MAXPROD]/g,"");let tempQty=q.replace(/MAX/g,"1");tempQty=tempQty.replace(/PROD/g,"1");try{tempQty=eval(tempQty)}catch(e){throw new Error("Invalid value or expression for sell price field: "+e)}if(null==tempQty||isNaN(parseFloat(tempQty))||parseFloat(tempQty)<0)throw new Error("Invalid value or expression for sell price field");mat.sllman[0]=!0,mat.sllman[1]=q}else{if(isNaN(parseFloat(amt))||parseFloat(amt)<0)throw new Error("Invalid value for sell quantity field! Must be numeric or 'MAX'");{let e=parseFloat(amt);isNaN(e)&&(e=0),0===e?(mat.sllman[0]=!1,mat.sllman[1]=0):(mat.sllman[0]=!0,mat.sllman[1]=e)}}}function SellProduct(product,city,amt,price,all){if(price.includes("MP")){price=price.replace(/\s+/g,""),price=price.replace(/[^-()\d/*+.MP]/g,"");let temp=price.replace(/MP/g,"1");try{temp=eval(temp)}catch(e){throw new Error("Invalid value or expression for sell quantity field: "+e)}if(null==temp||isNaN(parseFloat(temp))||parseFloat(temp)<0)throw new Error("Invalid value or expression for sell quantity field.");product.sCost=price}else{const e=parseFloat(price);if(isNaN(e))throw new Error("Invalid value for sell price field");product.sCost=e}const cities=Object.keys(_Locations_Cities__WEBPACK_IMPORTED_MODULE_6__.a);if(amt=amt.toUpperCase(),amt.includes("MAX")||amt.includes("PROD")){let qty=amt.replace(/\s+/g,"");qty=qty.replace(/[^-()\d/*+.MAXPROD]/g,"");let temp=qty.replace(/MAX/g,"1");temp=temp.replace(/PROD/g,"1");try{temp=eval(temp)}catch(e){throw new Error("Invalid value or expression for sell price field: "+e)}if(null==temp||isNaN(parseFloat(temp))||parseFloat(temp)<0)throw new Error("Invalid value or expression for sell price field");if(all)for(let e=0;e]/g,""),createCity:a,designCost:r,advCost:o});if(t.products[i.name]instanceof _Product__WEBPACK_IMPORTED_MODULE_4__.a)throw new Error("You already have a product with this name!");e.funds=e.funds-(r+o),t.products[i.name]=i}function Research(e,t){const a=_IndustryData__WEBPACK_IMPORTED_MODULE_0__.c[e.type];if(void 0===a)throw new Error(`No research tree for industry '${e.type}'`);if(!a.getAllNodes().includes(t))throw new Error(`No research named '${t}'`);const n=_ResearchMap__WEBPACK_IMPORTED_MODULE_9__.a[t];if(e.sciResearch.qty{var t;null!=o[(t=e).name]&&console.warn("Duplicate Company Position being defined: "+t.name),o[t.name]=new r.a(t)})},function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(11);const r={};r[n.a.AevumECorp]="ECP",r[n.a.Sector12MegaCorp]="MGCP",r[n.a.Sector12BladeIndustries]="BLD",r[n.a.AevumClarkeIncorporated]="CLRK",r[n.a.VolhavenOmniTekIncorporated]="OMTK",r[n.a.Sector12FourSigma]="FSIG",r[n.a.ChongqingKuaiGongInternational]="KGI",r[n.a.AevumFulcrumTechnologies]="FLCM",r[n.a.IshimaStormTechnologies]="STM",r[n.a.NewTokyoDefComm]="DCOMM",r[n.a.VolhavenHeliosLabs]="HLS",r[n.a.NewTokyoVitaLife]="VITA",r[n.a.Sector12IcarusMicrosystems]="ICRS",r[n.a.Sector12UniversalEnergy]="UNV",r[n.a.AevumAeroCorp]="AERO",r[n.a.VolhavenOmniaCybersystems]="OMN",r[n.a.ChongqingSolarisSpaceSystems]="SLRS",r[n.a.NewTokyoGlobalPharmaceuticals]="GPH",r[n.a.IshimaNovaMedical]="NVMD",r[n.a.AevumWatchdogSecurity]="WDS",r[n.a.VolhavenLexoCorp]="LXO",r[n.a.AevumRhoConstruction]="RHOC",r[n.a.Sector12AlphaEnterprises]="APHE",r[n.a.VolhavenSysCoreSecurities]="SYSC",r[n.a.VolhavenCompuTek]="CTK",r[n.a.AevumNetLinkTechnologies]="NTLK",r[n.a.IshimaOmegaSoftware]="OMGA",r[n.a.Sector12FoodNStuff]="FNS",r[n.a.Sector12JoesGuns]="JGN",r["Sigma Cosmetics"]="SGC",r["Catalyst Ventures"]="CTYS",r["Microdyne Technologies"]="MDYN",r["Titan Laboratories"]="TITN"},function(e,t,a){"use strict";a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}));const n=[".js",".script",".ns"];function r(e){return n.some(t=>e.endsWith(t))}},function(e,t,a){"use strict";a.d(t,"b",(function(){return o})),a.d(t,"c",(function(){return i})),a.d(t,"e",(function(){return s})),a.d(t,"d",(function(){return l})),a.d(t,"a",(function(){return c})),a.d(t,"f",(function(){return u}));var n=a(5),r=a(265);function o(e,t){const a=(100-e.hackDifficulty)/100,n=1.75*t.hacking,o=(n-e.requiredHackingSkill)/n*a*t.hacking_chance_mult*Object(r.a)(t.intelligence,1);return o>1?1:o<0?0:o}function i(e,t){null==e.baseDifficulty&&(e.baseDifficulty=e.hackDifficulty);let a=3;return a+=.3*e.baseDifficulty,a*t.hacking_exp_mult*n.a.HackExpGain}function s(e,t){const a=(100-e.hackDifficulty)/100*((t.hacking-(e.requiredHackingSkill-1))/t.hacking)*t.hacking_money_mult*n.a.ScriptHackMoney/240;return a<0?0:a>1?1:a}function l(e,t){let a=2.5*(e.requiredHackingSkill*e.hackDifficulty)+500;a/=t.hacking+50;return 5*a/(t.hacking_speed_mult*Object(r.a)(t.intelligence,1))}function c(e,t){return 3.2*l(e,t)}function u(e,t){return 4*l(e,t)}},function(e,t,a){"use strict";a.d(t,"a",(function(){return g})),a.d(t,"b",(function(){return y})),a.d(t,"j",(function(){return b})),a.d(t,"c",(function(){return E})),a.d(t,"i",(function(){return k})),a.d(t,"d",(function(){return v})),a.d(t,"f",(function(){return _})),a.d(t,"h",(function(){return w})),a.d(t,"k",(function(){return C})),a.d(t,"g",(function(){return x})),a.d(t,"e",(function(){return O}));var n=a(671),r=a(315),o=a(138),i=a(601),s=a(869),l=a(105),c=a(74),u=a(91),m=a(8),h=a(124),d=a(4),p=a(15),f=a(22);let g={lastUpdate:0,Orders:{},storedCycles:0,ticksUntilCycle:0};const y={};function b(e,t,a,i,s,l=null){if(!(e instanceof o.a))return l?l.log("stock.placeOrder",()=>`Invalid stock: '${e}'`):Object(p.a)("ERROR: Invalid stock passed to placeOrder() function"),!1;if("number"!=typeof t||"number"!=typeof a)return l?l.log("stock.placeOrder",()=>`Invalid arguments: shares='${t}' price='${a}'`):Object(p.a)("ERROR: Invalid numeric value provided for either 'shares' or 'price' argument"),!1;const c=new n.a(e.symbol,t,a,i,s);if(null==g.Orders){const e={};for(const t of Object.keys(g)){const a=g[t];a instanceof o.a&&(e[a.symbol]=[])}g.Orders=e}g.Orders[e.symbol].push(c);const u={stockMarket:g,symbolToStockMap:y};return Object(r.a)(e,c.type,c.pos,u),!0}function E(e,t=null){if(null==g.Orders)return!1;if(e.order&&e.order instanceof n.a){const t=e.order,a=g.Orders[t.stockSymbol];for(let e=0;e=t.cap&&(i=.1,t.b=!1),isNaN(i)&&(i=.5);const s=Math.random(),u={stockMarket:g,symbolToStockMap:y};sObject(k.a)({root:{"-ms-overflow-style":"none","scrollbar-width":"none",margin:e.spacing(0),flexGrow:1,display:"block",padding:"8px",minHeight:"100vh",boxSizing:"border-box"}}));let be={page:()=>{throw new Error("Router called before initialization")},toActiveScripts:()=>{throw new Error("Router called before initialization")},toAugmentations:()=>{throw new Error("Router called before initialization")},toBitVerse:()=>{throw new Error("Router called before initialization")},toBladeburner:()=>{throw new Error("Router called before initialization")},toStats:()=>{throw new Error("Router called before initialization")},toCity:()=>{throw new Error("Router called before initialization")},toCorporation:()=>{throw new Error("Router called before initialization")},toCreateProgram:()=>{throw new Error("Router called before initialization")},toDevMenu:()=>{throw new Error("Router called before initialization")},toFaction:()=>{throw new Error("Router called before initialization")},toFactions:()=>{throw new Error("Router called before initialization")},toGameOptions:()=>{throw new Error("Router called before initialization")},toGang:()=>{throw new Error("Router called before initialization")},toHacknetNodes:()=>{throw new Error("Router called before initialization")},toInfiltration:()=>{throw new Error("Router called before initialization")},toJob:()=>{throw new Error("Router called before initialization")},toMilestones:()=>{throw new Error("Router called before initialization")},toResleeves:()=>{throw new Error("Router called before initialization")},toScriptEditor:()=>{throw new Error("Router called before initialization")},toSleeves:()=>{throw new Error("Router called before initialization")},toStockMarket:()=>{throw new Error("Router called before initialization")},toTerminal:()=>{throw new Error("Router called before initialization")},toTravel:()=>{throw new Error("Router called before initialization")},toTutorial:()=>{throw new Error("Router called before initialization")},toWork:()=>{throw new Error("Router called before initialization")},toBladeburnerCinematic:()=>{throw new Error("Router called before initialization")},toLocation:()=>{throw new Error("Router called before initialization")},toStaneksGift:()=>{throw new Error("Router called before initialization")},toAchievements:()=>{throw new Error("Router called before initialization")},toThemeBrowser:()=>{throw new Error("Router called before initialization")}};function Ee({player:e,engine:t,terminal:a}){const E=ye(),[{files:k,vim:Ee},ke]=Object(n.useState)({files:{},vim:!1}),[ve,_e]=Object(n.useState)(function(e){return me.b?w.a.Recovery:e.isWorking?w.a.Work:w.a.Terminal}(e)),we=Object(n.useState)(0)[1],[Se,Ce]=Object(n.useState)(e.currentWorkFactionName?g.a[e.currentWorkFactionName]:void 0);if(void 0===Se&&ve===w.a.Faction)throw new Error("Trying to go to a page without the proper setup");const[xe,Oe]=Object(n.useState)(!1),[Me,Te]=Object(n.useState)(!1),[Re,Ae]=Object(n.useState)(void 0);if(void 0===Re&&(ve===w.a.Infiltration||ve===w.a.Location||ve===w.a.Job))throw new Error("Trying to go to a page without the proper setup");const[Ne,Pe]=Object(n.useState)(""),[Ie,Fe]=Object(n.useState)(0),[De,je]=Object(n.useState)(pe.a.IsSidebarOpened);function Be(){we(e=>e+1)}function Ge(){for(const e of Object(f.c)())e.runningScripts=[];i.c.saveGame(),setTimeout(()=>ge.reload(),2e3)}function Le(){Object(p.a)("Soft Reset!"),Object(d.a)(),Fe(Ie+1),be.toTerminal()}Object(n.useEffect)(()=>h.a.subscribe(Be),[]),be={page:()=>ve,toActiveScripts:()=>_e(w.a.ActiveScripts),toAugmentations:()=>_e(w.a.Augmentations),toBladeburner:()=>_e(w.a.Bladeburner),toStats:()=>_e(w.a.Stats),toCorporation:()=>_e(w.a.Corporation),toCreateProgram:()=>_e(w.a.CreateProgram),toDevMenu:()=>_e(w.a.DevMenu),toFaction:e=>{_e(w.a.Faction),e&&Ce(e)},toFactions:()=>_e(w.a.Factions),toGameOptions:()=>_e(w.a.Options),toGang:()=>_e(w.a.Gang),toHacknetNodes:()=>_e(w.a.Hacknet),toMilestones:()=>_e(w.a.Milestones),toResleeves:()=>_e(w.a.Resleeves),toScriptEditor:(e,t)=>{ke({files:e,vim:!(null==t||!t.vim)}),_e(w.a.ScriptEditor)},toSleeves:()=>_e(w.a.Sleeves),toStockMarket:()=>_e(w.a.StockMarket),toTerminal:()=>_e(w.a.Terminal),toTutorial:()=>_e(w.a.Tutorial),toJob:()=>{Ae(c.a[e.companyName]),_e(w.a.Job)},toCity:()=>{_e(w.a.City)},toTravel:()=>{e.gotoLocation(l.a.TravelAgency),_e(w.a.Travel)},toBitVerse:(e,t)=>{Oe(e),Te(t),Object(le.b)(),_e(w.a.BitVerse)},toInfiltration:e=>{Ae(e),_e(w.a.Infiltration)},toWork:()=>_e(w.a.Work),toBladeburnerCinematic:()=>{_e(w.a.BladeburnerCinematic),Pe(Ne)},toLocation:e=>{Ae(e),_e(w.a.Location)},toStaneksGift:()=>{_e(w.a.StaneksGift)},toAchievements:()=>{_e(w.a.Achievements)},toThemeBrowser:()=>{_e(w.a.ThemeBrowser)}},Object(n.useEffect)(()=>{ve!==w.a.Terminal&&window.scrollTo(0,0)});let We=r.a.createElement(_.a,null,"Cannot load"),He=!0,Ue=!0;switch(ve){case w.a.Recovery:We=r.a.createElement(me.c,{router:be,softReset:Le}),He=!1,Ue=!1;break;case w.a.BitVerse:We=r.a.createElement(J.a,{flume:xe,enter:ce.a,quick:Me}),He=!1,Ue=!1;break;case w.a.Infiltration:We=r.a.createElement(A.a,{location:Re}),He=!1,Ue=!1;break;case w.a.BladeburnerCinematic:We=r.a.createElement(ee.a,null),He=!1,Ue=!1;break;case w.a.Work:We=r.a.createElement(P.a,null),He=!1;break;case w.a.Terminal:We=r.a.createElement(H.a,{terminal:a,router:be,player:e});break;case w.a.Sleeves:We=r.a.createElement(F.a,null);break;case w.a.StaneksGift:We=r.a.createElement(X.a,{staneksGift:Q.b});break;case w.a.Stats:We=r.a.createElement(z.a,null);break;case w.a.ScriptEditor:We=r.a.createElement(L.a,{files:k,hostname:e.getCurrentServer().hostname,player:e,router:be,vim:Ee});break;case w.a.ActiveScripts:We=r.a.createElement(q.a,{workerScripts:te.a});break;case w.a.Hacknet:We=r.a.createElement(D.a,{player:e});break;case w.a.CreateProgram:We=r.a.createElement(G.a,null);break;case w.a.Factions:We=r.a.createElement(K.a,{player:e,router:be});break;case w.a.Faction:We=r.a.createElement($.a,{faction:Se});break;case w.a.Milestones:We=r.a.createElement(W.a,{player:e});break;case w.a.Tutorial:We=r.a.createElement(U.a,{reactivateTutorial:()=>{Object(d.a)(),be.toTerminal(),Object(u.e)()}});break;case w.a.DevMenu:We=r.a.createElement(O.a,{player:e,engine:t,router:be});break;case w.a.Gang:We=r.a.createElement(T.a,null);break;case w.a.Corporation:We=r.a.createElement(R.a,null);break;case w.a.Bladeburner:We=r.a.createElement(M.a,null);break;case w.a.Resleeves:We=r.a.createElement(N.a,null);break;case w.a.Travel:We=r.a.createElement(V.a,{p:e,router:be});break;case w.a.StockMarket:We=r.a.createElement(Y.a,{buyStockLong:y.a,buyStockShort:y.d,cancelOrder:b.c,eventEmitterForReset:b.e,initStockMarket:b.g,p:e,placeOrder:b.j,sellStockLong:y.c,sellStockShort:y.b,stockMarket:b.a});break;case w.a.City:We=r.a.createElement(B.a,null);break;case w.a.Job:case w.a.Location:We=r.a.createElement(j.a,{loc:Re});break;case w.a.Options:We=r.a.createElement(I.a,{player:e,router:be,save:()=>i.c.saveGame(),export:()=>{Object(s.c)(e),i.c.exportGame()},forceKill:Ge,softReset:Le});break;case w.a.Augmentations:We=r.a.createElement(x.a,{exportGameFn:()=>{Object(s.c)(e),i.c.exportGame()},installAugmentationsFn:()=>{Object(o.d)(),be.toTerminal()}});break;case w.a.Achievements:We=r.a.createElement(he.a,null);break;case w.a.ThemeBrowser:We=r.a.createElement(fe.a,{router:be})}return r.a.createElement(ue.a.Player.Provider,{value:e},r.a.createElement(ue.a.Router.Provider,{value:be},r.a.createElement(de.a,{key:Ie,router:be,softReset:Le},r.a.createElement(ne.c,null,r.a.createElement(S.a,{mode:u.a.isRunning?"tutorial":"overview"},u.a.isRunning?r.a.createElement(m.a,null):r.a.createElement(Z.a,{save:()=>i.c.saveGame(),killScripts:Ge})),He?r.a.createElement(v.a,{display:"flex",flexDirection:"row",width:"100%"},r.a.createElement(C.a,{player:e,router:be,page:ve,opened:De,onToggled:e=>{je(e),pe.a.IsSidebarOpened=e}}),r.a.createElement(v.a,{className:E.root},We)):r.a.createElement(v.a,{className:E.root},We),r.a.createElement(ae.a,null),Ue&&r.a.createElement(r.a.Fragment,null,r.a.createElement(re.c,null),r.a.createElement(oe.b,null),r.a.createElement(ie.b,null),r.a.createElement(se.b,null),r.a.createElement(ne.a,null))))))}},function(e,t,a){"use strict";a.d(t,"c",(function(){return o})),a.d(t,"b",(function(){return i})),a.d(t,"d",(function(){return s})),a.d(t,"a",(function(){return l}));var n=a(127),r=a(24);function o(e,t){return t.delayReject&&t.delayReject(),new Promise((function(a,n){t.delay=window.setTimeout(()=>{t.delay=null,t.delayReject=void 0,t.env.stopFlag?n(t):a()},e),t.delayReject=n}))}function i(e,t){const a=Object(r.d)(e.hostname);if(null==a)throw new Error("WorkerScript constructed with invalid server ip: "+e.hostname);for(const a of e.scriptRef.dependencies){var n,o;t=null!==(n=null===(o=t)||void 0===o?void 0:o.replace(new RegExp(a.url,"g"),a.filename))&&void 0!==n?n:t}return"|DELIMITER|"+a.hostname+"|DELIMITER|"+e.name+"|DELIMITER|"+t}function s(e,t,a){const n=e.scriptRef.threads;if(!a)return isNaN(n)||n<1?1:n;const r=0|a;if(isNaN(a)||r<1)throw i(e,`Invalid thread count passed to ${t}: ${a}. Threads must be a positive number.`);if(r>n)throw i(e,`Too many threads requested by ${t}. Requested: ${a}. Has: ${n}.`);return r}function l(e){if(!Object(n.a)(e))return!1;return 4==e.split("|DELIMITER|").length}},,function(e,t,a){"use strict";a.d(t,"a",(function(){return s}));var n=a(0),r=a.n(n),o=a(4),i=a(18);function s({money:e}){return r.a.createElement(i.a,{money:o.a.formatMoney(e)+" / sec"})}},function(e,t,a){"use strict";a.d(t,"d",(function(){return s})),a.d(t,"c",(function(){return l})),a.d(t,"b",(function(){return c})),a.d(t,"a",(function(){return u}));var n=a(800),r=a(22),o=a(518);class i{constructor(e,t,a,n,r,o){this.name=e,this.desc=t,this.generate=a,this.solver=n,this.difficulty=r,this.numTries=o}}const s={};for(const e of n.a)s[e.name]=new i(e.name,e.desc,e.gen,e.solver,e.difficulty,e.numTries);let l,c;!function(e){e[e.FactionReputation=0]="FactionReputation",e[e.FactionReputationAll=1]="FactionReputationAll",e[e.CompanyReputation=2]="CompanyReputation",e[e.Money=3]="Money"}(l||(l={})),function(e){e[e.Success=0]="Success",e[e.Failure=1]="Failure",e[e.Cancelled=2]="Cancelled"}(c||(c={}));class u{constructor(e="",t="Find Largest Prime Factor",a=null){var n,r,o;if(o=0,(r="tries")in(n=this)?Object.defineProperty(n,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[r]=o,this.fn=e,this.fn.endsWith(".cct")||(this.fn+=".cct"),null==s[t])throw new Error(`Error: invalid contract type: ${t} please contact developer`);this.type=t,this.data=s[t].generate(),this.reward=a}getData(){return this.data}getDescription(){return s[this.type].desc(this.data)}getDifficulty(){return s[this.type].difficulty}getMaxNumTries(){return s[this.type].numTries}getType(){return s[this.type].name}isSolution(e){return s[this.type].solver(this.data,e)}async prompt(){return new Promise(e=>{const t={c:this,onClose:()=>{e(c.Cancelled)},onAttempt:t=>{this.isSolution(t)?e(c.Success):e(c.Failure)}};o.a.emit(t)})}toJSON(){return Object(r.b)("CodingContract",this)}static fromJSON(e){return Object(r.a)(u,e.data)}}r.c.constructors.CodingContract=u},function(e,t,a){"use strict";let n;a.d(t,"a",(function(){return n})),function(e){e.LimitBuy="Limit Buy Order",e.LimitSell="Limit Sell Order",e.StopBuy="Stop Buy Order",e.StopSell="Stop Sell Order"}(n||(n={}))},function(e,t,a){"use strict";a.d(t,"a",(function(){return l}));var n=a(0),r=a(4),o=a(113),i=a(135);const s=Object(o.a)(e=>Object(i.a)({reputation:{color:e.colors.rep}}));function l({reputation:e}){const t=s();return n.createElement("span",{className:t.reputation},"number"==typeof e?r.a.formatReputation(e):e)}},,,,,function(e,t,a){"use strict";let n;a.d(t,"a",(function(){return n})),a.d(t,"b",(function(){return o})),a.d(t,"c",(function(){return i})),function(e){e.Bypass="Bypass",e.PrototypeTampering="PrototypeTampering",e.Unclickable="Unclickable",e.UndocumentedFunctionCall="UndocumentedFunctionCall",e.TimeCompression="TimeCompression",e.RealityAlteration="RealityAlteration",e.N00dles="N00dles",e.YoureNotMeantToAccessThis="YoureNotMeantToAccessThis",e.EditSaveFile="EditSaveFile"}(n||(n={}));const r={Bypass:"by circumventing the ram cost of document.",EditSaveFile:"by editing your save file.",PrototypeTampering:"by tampering with Numbers prototype.",TimeCompression:"by compressing time.",Unclickable:"by clicking the unclickable.",UndocumentedFunctionCall:"by looking beyond the documentation.",RealityAlteration:"by altering reality to suit your whims.",N00dles:"by harnessing the power of the n00dles.",YoureNotMeantToAccessThis:"by accessing the dev menu."};function o(e){return r[e]}function i(e){return e=e.filter(e=>Object.keys(n).includes(e)),[...new Set(e)]}},function(e,t,a){"use strict";a.d(t,"b",(function(){return o})),a.d(t,"a",(function(){return i}));var n=a(22),r=a(672);let o=new r.a;function i(e){o=e?JSON.parse(e,n.c):new r.a}},,,,,,,,,function(e,t,a){"use strict";a.d(t,"c",(function(){return g})),a.d(t,"d",(function(){return y})),a.d(t,"b",(function(){return b})),a.d(t,"f",(function(){return E})),a.d(t,"a",(function(){return k})),a.d(t,"e",(function(){return v}));var n=a(21),r=a(295),o=a(7),i=a(5),s=a(8),l=a(193),c=a(28),u=a(2),m=a(9),h=a(234),d=a(78),p=a(15),f=a(534);function g(e){u.a.receiveInvite(e.name),e.alreadyInvited=!0,m.a.SuppressFactionInvites||f.a.emit(e)}function y(e){if(e.isMember)return;e.isMember=!0,u.a.factions.push(e.name);const t=e.getInfo();for(const e of t.enemies)c.a[e]instanceof l.a&&(c.a[e].isBanned=!0);for(let t=0;t0)for(let a=0;a=e.baseCost*l.augmentationPriceMult){const t=new r.a(e.name);if(e.name==o.a.NeuroFluxGovernor&&(t.level=k()),u.a.queuedAugmentations.push(t),u.a.loseMoney(e.baseCost*l.augmentationPriceMult,"augmentations"),e.name==o.a.NeuroFluxGovernor){let t=k();--t;const a=Math.pow(s.a.NeuroFluxGovernorLevelMult,t);e.baseRepRequirement=500*a*i.a.AugmentationRepCost,e.baseCost=75e4*a*i.a.AugmentationMoneyCost;for(let t=0;t{delete this.subscribers[t]}}emit(...e){for(const t in this.subscribers){const a=this.subscribers[t];void 0!==a&&a(...e)}}}},function(e,t,a){"use strict";a.d(t,"f",(function(){return m})),a.d(t,"c",(function(){return h})),a.d(t,"e",(function(){return d})),a.d(t,"d",(function(){return p})),a.d(t,"a",(function(){return f})),a.d(t,"b",(function(){return g}));var n=a(24),r=a(44),o=a(540),i=a(5),s=a(8),l=a(61),c=a(60),u=a(670);function m(e){let t=e.hostname.replace(/ /g,"-");if(null!=e.ip&&Object(n.g)(e.ip)&&(e.ip=Object(n.e)()),null!=Object(n.d)(t)){t+="-0";for(let e=0;e<200&&(t=t.replace(/-[0-9]+$/,"-"+e),null!=Object(n.d)(t));++e);}return e.hostname=t,new r.a(e)}function h(e,t,a,n=1){let r=1+(s.a.ServerBaseGrowthRate-1)/e.hackDifficulty;r>s.a.ServerMaxGrowthRate&&(r=s.a.ServerMaxGrowthRate);const o=e.serverGrowth/100,l=1+(n-1)/16;return Math.log(t)/(Math.log(r)*a.hacking_grow_mult*o*i.a.ServerGrowthRate*l)}function d(e,t,a,n=1){let r=Object(o.a)(e,t,a,n);r<1&&(console.warn("serverGrowth calculated to be less than 1"),r=1);const i=e.moneyAvailable;if(e.moneyAvailable+=1*t,e.moneyAvailable*=r,Object(u.a)(e.moneyMax)&&isNaN(e.moneyAvailable)&&(e.moneyAvailable=e.moneyMax),Object(u.a)(e.moneyMax)&&e.moneyAvailable>e.moneyMax&&(e.moneyAvailable=e.moneyMax),i!==e.moneyAvailable){let r=h(e,e.moneyAvailable/i,a,n);r=Math.min(Math.max(0,Math.ceil(r)),t),e.fortify(2*s.a.ServerFortifyAmount*r)}return e.moneyAvailable/i}function p(e,t){const a=t.programs.includes(l.a.BitFlume.name);t.programs.length=0,t.runningScripts=[],t.serversOnNetwork=[],t.isConnectedTo=!0,t.ramUsed=0,t.programs.push(l.a.NukeProgram.name),a&&t.programs.push(l.a.BitFlume.name),t.scripts.forEach((function(a){a.updateRamUsage(e,t.scripts)})),t.messages.length=0,t.messages.push(c.a.HackersStartingHandbook)}function f(e,t){return t>e.serversOnNetwork.length?(console.error("Tried to get server on network that was out of range"),null):Object(n.d)(e.serversOnNetwork[t])}function g(e){return e instanceof r.a&&e.backdoorInstalled}},function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));const n={BladesIntuition:"Blade's Intuition",Cloak:"Cloak",Marksman:"Marksman",WeaponProficiency:"Weapon Proficiency",ShortCircuit:"Short-Circuit",DigitalObserver:"Digital Observer",Tracer:"Tracer",Overclock:"Overclock",Reaper:"Reaper",EvasiveSystem:"Evasive System",Datamancer:"Datamancer",CybersEdge:"Cyber's Edge",HandsOfMidas:"Hands of Midas",Hyperdrive:"Hyperdrive"}},function(e,t,a){"use strict";function n(e){return"string"==typeof e||e instanceof String}a.d(t,"a",(function(){return n}))},function(e,t,a){"use strict";a.d(t,"a",(function(){return g}));var n=a(0),r=a.n(n),o=a(552),i=a.n(o),s=a(941),l=a.n(s),c=a(108),u=a(553),m=a.n(u),h=a(548),d=a.n(h),p=a(83),f=a(20);function g(e){const[t,a]=Object(n.useState)("");const{label:o,placeholder:s,add:u,subtract:h,reset:g,tons:y}=e;return r.a.createElement(r.a.Fragment,null,r.a.createElement(p.a,{label:o,value:t,onChange:function(e){""===e.target.value?a(""):a(parseFloat(e.target.value))},placeholder:s,type:"number",InputProps:{startAdornment:r.a.createElement(r.a.Fragment,null,r.a.createElement(f.a,{title:"Add a lot"},r.a.createElement(c.a,{onClick:y,size:"large"},r.a.createElement(d.a,{style:{transform:"rotate(-90deg)"}}))),r.a.createElement(f.a,{title:"Add"},r.a.createElement(c.a,{onClick:()=>u("string"!=typeof t?t:0),size:"large"},r.a.createElement(i.a,null)))),endAdornment:r.a.createElement(r.a.Fragment,null,r.a.createElement(f.a,{title:"Remove"},r.a.createElement(c.a,{onClick:()=>h("string"!=typeof t?t:0),size:"large"},r.a.createElement(l.a,null))),r.a.createElement(f.a,{title:"Reset"},r.a.createElement(c.a,{onClick:g,size:"large"},r.a.createElement(m.a,null))))}}))}},,function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(327),r=a(22);class o extends n.a{constructor(e=null){super(e),this.count=1}getActionTimePenalty(){return 1.5}getChaosCompetencePenalty(){return 1}getChaosDifficultyBonus(){return 1}toJSON(){return Object(r.b)("BlackOperation",this)}static fromJSON(e){return Object(r.a)(o,e.data)}}r.c.constructors.BlackOperation=o},function(e,t,a){"use strict";a.d(t,"a",(function(){return r})),a.d(t,"b",(function(){return o}));var n=a(0);const r={Gang:a.n(n).a.createContext({})},o=()=>Object(n.useContext)(r.Gang)},function(e,t,a){"use strict";a.d(t,"a",(function(){return l}));var n=a(0),r=a(4),o=a(113),i=a(135);const s=Object(o.a)(e=>Object(i.a)({unbuyable:{color:e.palette.action.disabled},money:{color:e.colors.money}}));function l(e){const t=s();return e.corp.funds>e.money?n.createElement("span",{className:t.money},r.a.formatMoney(e.money)):n.createElement("span",{className:t.unbuyable},r.a.formatMoney(e.money))}},,function(e,t,a){"use strict";a.d(t,"a",(function(){return h}));var n=a(255),r=a(171),o=a(278),i=a(341),s=a(24),l=a(304),c=a(15),u=a(538),m=a(2);function h(e,t,a){if(null!=a&&"boolean"==typeof a||(a=!0),e instanceof n.a)return p(e),!0;if(e instanceof i.a&&"string"==typeof t){const n=d(e.pid,a);if(n)return n;for(const n of r.a.values())if(n.name==e.filename&&n.hostname==t&&Object(l.a)(n.args,e.args))return p(n,a),!0;return!1}return"number"==typeof e?d(e,a):(console.error("killWorkerScript() called with invalid argument:"),console.error(e),!1)}function d(e,t=!0){const a=r.a.get(e);return a instanceof n.a&&(p(a,t),!0)}function p(e,t=!0){if("function"==typeof e.atExit){try{e.atExit()}catch(t){Object(c.a)(`Error trying to call atExit for script ${e.name} on ${e.hostname} ${e.scriptRef.args} ${t}`)}e.atExit=void 0}e.env.stopFlag=!0,function(e){e instanceof n.a&&e.delay&&(clearTimeout(e.delay),e.delayReject&&e.delayReject(e))}(e),function(e,t=!0){const a=e.hostname,n=e.name,i=Object(s.d)(a);if(null==i)return void console.error("Could not find server on which this script is running: "+a);for(let t=0;t100?this.otlkMagForecast=100:this.otlkMagForecast<0&&(this.otlkMagForecast=0)}changePrice(e){this.lastPrice=this.price,this.price=e}cycleForecast(e=.1){const t=this.getForecastIncreaseChance();Math.random()5&&(this.otlkMag=Math.max(5,this.otlkMag-e))}influenceForecastForecast(e){this.otlkMagForecast>50?(this.otlkMagForecast-=e,this.otlkMagForecast=Math.max(50,this.otlkMagForecast)):this.otlkMagForecast<50&&(this.otlkMagForecast+=e,this.otlkMagForecast=Math.min(50,this.otlkMagForecast))}toJSON(){return Object(n.b)("Stock",this)}static fromJSON(e){return Object(n.a)(s,e.data)}}n.c.constructors.Stock=s},function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));const n={}},,,function(e,t,a){"use strict";a.d(t,"e",(function(){return C})),a.d(t,"d",(function(){return w})),a.d(t,"c",(function(){return k})),a.d(t,"a",(function(){return _})),a.d(t,"b",(function(){return S}));var n=a(38),r=a(21),o=a(295),i=a(7),s=a(5),l=a(8),c=a(28),u=a(2),m=a(323),h=a(61),d=a(78),p=a(15),f=a(1233),g=a(347),y=a(0),b=a.n(y);function E(e){const t=e.name;r.a[t]=e}function k(){for(const e of Object.keys(c.a))c.a.hasOwnProperty(e)&&(c.a[e].augmentations=[]);Object(f.a)(r.a);const e=function(){const e=[{bonuses:{hacking_chance_mult:1.25,hacking_speed_mult:1.1,hacking_money_mult:1.25,hacking_grow_mult:1.1},description:"Increases the player's hacking chance by 25%.
Increases the player's hacking speed by 10%.
Increases the amount of money the player's gains from hacking by 25%.
Improves grow() by 10%."},{bonuses:{hacking_mult:1.15,hacking_exp_mult:2},description:"Increases the player's hacking skill by 15%.
Increases the player's hacking experience gain rate by 100%."},{bonuses:{strength_mult:1.25,strength_exp_mult:2,defense_mult:1.25,defense_exp_mult:2,dexterity_mult:1.25,dexterity_exp_mult:2,agility_mult:1.25,agility_exp_mult:2},description:"Increases all of the player's combat stats by 25%.
Increases all of the player's combat stat experience gain rate by 100%."},{bonuses:{charisma_mult:1.5,charisma_exp_mult:2},description:"This augmentation increases the player's charisma by 50%.
Increases the player's charisma experience gain rate by 100%."},{bonuses:{hacknet_node_money_mult:1.2,hacknet_node_purchase_cost_mult:.85,hacknet_node_ram_cost_mult:.85,hacknet_node_core_cost_mult:.85,hacknet_node_level_cost_mult:.85},description:"Increases the amount of money produced by Hacknet Nodes by 20%.
Decreases all costs related to Hacknet Node by 15%."},{bonuses:{company_rep_mult:1.25,faction_rep_mult:1.15,work_money_mult:1.7},description:"Increases the amount of money the player gains from working by 70%.
Increases the amount of reputation the player gains when working for a company by 25%.
Increases the amount of reputation the player gains for a faction by 15%."},{bonuses:{crime_success_mult:2,crime_money_mult:2},description:"Increases the player's crime success rate by 100%.
Increases the amount of money the player gains from crimes by 100%."}],t=new g.b(Math.floor(u.a.lastUpdate/36e5));for(let e=0;e<5;e++)t.step();return e[Math.floor(e.length*t.random())]}(),t={name:i.a.UnstableCircadianModulator,moneyCost:5e9,repCost:362500,info:"An experimental nanobot injection. Its unstable nature leads to unpredictable results based on your circadian rhythm."};Object.keys(e.bonuses).forEach(a=>t[a]=e.bonuses[a]);const a=new n.a(t);a.addToFactions(["Speakers for the Dead"]),S(i.a.UnstableCircadianModulator)&&delete r.a[i.a.UnstableCircadianModulator],E(a);const o=new n.a({name:i.a.HemoRecirculator,moneyCost:45e6,repCost:1e4,info:"A heart implant that greatly increases the body's ability to effectively use and pump blood.",strength_mult:1.08,defense_mult:1.08,agility_mult:1.08,dexterity_mult:1.08});o.addToFactions(["Tetrads","The Dark Army","The Syndicate"]),S(i.a.HemoRecirculator)&&delete r.a[i.a.HemoRecirculator],E(o);const m=new n.a({name:i.a.Targeting1,moneyCost:15e6,repCost:5e3,info:"A cranial implant that is embedded within the inner ear structures and optic nerves. It regulates and enhances balance and hand-eye coordination.",dexterity_mult:1.1});m.addToFactions(["Slum Snakes","The Dark Army","The Syndicate","Sector-12","Ishima","OmniTek Incorporated","KuaiGong International","Blade Industries"]),S(i.a.Targeting1)&&delete r.a[i.a.Targeting1],E(m);const p=new n.a({name:i.a.Targeting2,moneyCost:425e5,repCost:8750,info:"This upgraded version of the 'Augmented Targeting' implant is capable of augmenting reality by digitally displaying weaknesses and vital signs of threats.",prereqs:[i.a.Targeting1],dexterity_mult:1.2});p.addToFactions(["The Dark Army","The Syndicate","Sector-12","OmniTek Incorporated","KuaiGong International","Blade Industries"]),S(i.a.Targeting2)&&delete r.a[i.a.Targeting2],E(p);const y=new n.a({name:i.a.Targeting3,moneyCost:115e6,repCost:27500,info:"The latest version of the 'Augmented Targeting' implant adds the ability to lock-on and track threats.",prereqs:[i.a.Targeting2],dexterity_mult:1.3});y.addToFactions(["The Dark Army","The Syndicate","OmniTek Incorporated","KuaiGong International","Blade Industries","The Covenant"]),S(i.a.Targeting3)&&delete r.a[i.a.Targeting3],E(y);const k=new n.a({name:i.a.SyntheticHeart,moneyCost:2875e6,repCost:75e4,info:"This advanced artificial heart, created from plasteel and graphene, is capable of pumping blood more efficiently than an organic heart.",agility_mult:1.5,strength_mult:1.5});k.addToFactions(["KuaiGong International","Fulcrum Secret Technologies","Speakers for the Dead","NWO","The Covenant","Daedalus","Illuminati"]),S(i.a.SyntheticHeart)&&delete r.a[i.a.SyntheticHeart],E(k);const _=new n.a({name:i.a.SynfibrilMuscle,repCost:437500,moneyCost:1125e6,info:"The myofibrils in human muscles are injected with special chemicals that react with the proteins inside the myofibrils, altering their underlying structure. The end result is muscles that are stronger and more elastic. Scientists have named these artificially enhanced units 'synfibrils'.",strength_mult:1.3,defense_mult:1.3});_.addToFactions(["KuaiGong International","Fulcrum Secret Technologies","Speakers for the Dead","NWO","The Covenant","Daedalus","Illuminati","Blade Industries"]),S(i.a.SynfibrilMuscle)&&delete r.a[i.a.SynfibrilMuscle],E(_);const w=new n.a({name:i.a.CombatRib1,repCost:7500,moneyCost:2375e4,info:"The rib cage is augmented to continuously release boosters into the bloodstream which increase the oxygen-carrying capacity of blood.",strength_mult:1.1,defense_mult:1.1});w.addToFactions(["Slum Snakes","The Dark Army","The Syndicate","Volhaven","Ishima","OmniTek Incorporated","KuaiGong International","Blade Industries"]),S(i.a.CombatRib1)&&delete r.a[i.a.CombatRib1],E(w);const C=new n.a({name:i.a.CombatRib2,repCost:18750,moneyCost:65e6,info:"An upgraded version of the 'Combat Rib' augmentation that adds potent stimulants which improve focus and endurance while decreasing reaction time and fatigue.",prereqs:[i.a.CombatRib1],strength_mult:1.14,defense_mult:1.14});C.addToFactions(["The Dark Army","The Syndicate","Volhaven","OmniTek Incorporated","KuaiGong International","Blade Industries"]),S(i.a.CombatRib2)&&delete r.a[i.a.CombatRib2],E(C);const x=new n.a({name:i.a.CombatRib3,repCost:35e3,moneyCost:12e7,info:"The latest version of the 'Combat Rib' augmentation releases advanced anabolic steroids that improve muscle mass and physical performance while being safe and free of side effects.",prereqs:[i.a.CombatRib2],strength_mult:1.18,defense_mult:1.18});x.addToFactions(["The Dark Army","The Syndicate","OmniTek Incorporated","KuaiGong International","Blade Industries","The Covenant"]),S(i.a.CombatRib3)&&delete r.a[i.a.CombatRib3],E(x);const O=new n.a({name:i.a.NanofiberWeave,repCost:37500,moneyCost:125e6,info:"Synthetic nanofibers are woven into the skin's extracellular matrix using electrospinning, which improves its regenerative and extracellular homeostasis abilities.",strength_mult:1.2,defense_mult:1.2});O.addToFactions(["Tian Di Hui","The Syndicate","The Dark Army","Speakers for the Dead","Blade Industries","Fulcrum Secret Technologies","OmniTek Incorporated"]),S(i.a.NanofiberWeave)&&delete r.a[i.a.NanofiberWeave],E(O);const M=new n.a({name:i.a.SubdermalArmor,repCost:875e3,moneyCost:325e7,info:"The NEMEAN Subdermal Weave is a thin, light-weight, graphene plating that houses a dilatant fluid. The material is implanted underneath the skin, and is the most advanced form of defensive enhancement that has ever been created. The dilatant fluid, despite being thin and light, is extremely effective at stopping piercing blows and reducing blunt trauma. The properties of graphene allow the plating to mitigate damage from any fire or electrical traumas.",defense_mult:2.2});M.addToFactions(["The Syndicate","Fulcrum Secret Technologies","Illuminati","Daedalus","The Covenant"]),S(i.a.SubdermalArmor)&&delete r.a[i.a.SubdermalArmor],E(M);const T=new n.a({name:i.a.WiredReflexes,repCost:1250,moneyCost:25e5,info:"Synthetic nerve-enhancements are injected into all major parts of the somatic nervous system, supercharging the spread of neural signals and increasing reflex speed.",agility_mult:1.05,dexterity_mult:1.05});T.addToFactions(["Tian Di Hui","Slum Snakes","Sector-12","Volhaven","Aevum","Ishima","The Syndicate","The Dark Army","Speakers for the Dead"]),S(i.a.WiredReflexes)&&delete r.a[i.a.WiredReflexes],E(T);const R=new n.a({name:i.a.GrapheneBoneLacings,repCost:1125e3,moneyCost:425e7,info:"Graphene is grafted and fused into the skeletal structure, enhancing bone density and tensile strength.",strength_mult:1.7,defense_mult:1.7});R.addToFactions(["Fulcrum Secret Technologies","The Covenant"]),S(i.a.GrapheneBoneLacings)&&delete r.a[i.a.GrapheneBoneLacings],E(R);const A=new n.a({name:i.a.BionicSpine,repCost:45e3,moneyCost:125e6,info:"The spine is reconstructed using plasteel and carbon fibers. It is now capable of stimulating and regulating neural signals passing through the spinal cord, improving senses and reaction speed. The 'Bionic Spine' also interfaces with all other 'Bionic' implants.",strength_mult:1.15,defense_mult:1.15,agility_mult:1.15,dexterity_mult:1.15});A.addToFactions(["Speakers for the Dead","The Syndicate","KuaiGong International","OmniTek Incorporated","Blade Industries"]),S(i.a.BionicSpine)&&delete r.a[i.a.BionicSpine],E(A);const N=new n.a({name:i.a.GrapheneBionicSpine,repCost:1625e3,moneyCost:6e9,info:"An upgrade to the 'Bionic Spine' augmentation. The spine is fused with graphene which enhances durability and supercharges all body functions.",prereqs:[i.a.BionicSpine],strength_mult:1.6,defense_mult:1.6,agility_mult:1.6,dexterity_mult:1.6});N.addToFactions(["Fulcrum Secret Technologies","ECorp"]),S(i.a.GrapheneBionicSpine)&&delete r.a[i.a.GrapheneBionicSpine],E(N);const P=new n.a({name:i.a.BionicLegs,repCost:15e4,moneyCost:375e6,info:"Cybernetic legs, created from plasteel and carbon fibers, enhance running speed.",agility_mult:1.6});P.addToFactions(["Speakers for the Dead","The Syndicate","KuaiGong International","OmniTek Incorporated","Blade Industries"]),S(i.a.BionicLegs)&&delete r.a[i.a.BionicLegs],E(P);const I=new n.a({name:i.a.GrapheneBionicLegs,repCost:75e4,moneyCost:45e8,info:"An upgrade to the 'Bionic Legs' augmentation. The legs are fused with graphene, greatly enhancing jumping ability.",prereqs:[i.a.BionicLegs],agility_mult:2.5});I.addToFactions(["MegaCorp","ECorp","Fulcrum Secret Technologies"]),S(i.a.GrapheneBionicLegs)&&delete r.a[i.a.GrapheneBionicLegs],E(I);const F=new n.a({name:i.a.SpeechProcessor,repCost:7500,moneyCost:5e7,info:"A cochlear implant with an embedded computer that analyzes incoming speech. The embedded computer processes characteristics of incoming speech, such as tone and inflection, to pick up on subtle cues and aid in social interactions.",charisma_mult:1.2});F.addToFactions(["Tian Di Hui","Chongqing","Sector-12","New Tokyo","Aevum","Ishima","Volhaven","Silhouette"]),S(i.a.SpeechProcessor)&&delete r.a[i.a.SpeechProcessor],E(F);const D=new n.a({name:i.a.TITN41Injection,repCost:25e3,moneyCost:19e7,info:"TITN is a series of viruses that targets and alters the sequences of human DNA in genes that control personality. The TITN-41 strain alters these genes so that the subject becomes more outgoing and socialable.",charisma_mult:1.15,charisma_exp_mult:1.15});D.addToFactions(["Silhouette"]),S(i.a.TITN41Injection)&&delete r.a[i.a.TITN41Injection],E(D);const j=new n.a({name:i.a.EnhancedSocialInteractionImplant,repCost:375e3,moneyCost:1375e6,info:"A cranial implant that greatly assists in the user's ability to analyze social situations and interactions. The system uses a wide variety of factors such as facial expressions, body language, and the voice tone, and inflection to determine the best course of action during socialsituations. The implant also uses deep learning software to continuously learn new behaviorpatterns and how to best respond.",charisma_mult:1.6,charisma_exp_mult:1.6});j.addToFactions(["Bachman & Associates","NWO","Clarke Incorporated","OmniTek Incorporated","Four Sigma"]),S(i.a.EnhancedSocialInteractionImplant)&&delete r.a[i.a.EnhancedSocialInteractionImplant],E(j);const B=new n.a({name:i.a.BitWire,repCost:3750,moneyCost:1e7,info:"A small brain implant embedded in the cerebrum. This regulates and improves the brain's computing capabilities.",hacking_mult:1.05});B.addToFactions(["CyberSec","NiteSec"]),S(i.a.BitWire)&&delete r.a[i.a.BitWire],E(B);const G=new n.a({name:i.a.ArtificialBioNeuralNetwork,repCost:275e3,moneyCost:3e9,info:"A network consisting of millions of nanoprocessors is embedded into the brain. The network is meant to mimic the way a biological brain solves a problem, with each nanoprocessor acting similar to the way a neuron would in a neural network. However, these nanoprocessors are programmed to perform computations much faster than organic neurons, allowing the user to solve much more complex problems at a much faster rate.",hacking_speed_mult:1.03,hacking_money_mult:1.15,hacking_mult:1.12});G.addToFactions(["BitRunners","Fulcrum Secret Technologies"]),S(i.a.ArtificialBioNeuralNetwork)&&delete r.a[i.a.ArtificialBioNeuralNetwork],E(G);const L=new n.a({name:i.a.ArtificialSynapticPotentiation,repCost:6250,moneyCost:8e7,info:"The body is injected with a chemical that artificially induces synaptic potentiation, otherwise known as the strengthening of synapses. This results in enhanced cognitive abilities.",hacking_speed_mult:1.02,hacking_chance_mult:1.05,hacking_exp_mult:1.05});L.addToFactions(["The Black Hand","NiteSec"]),S(i.a.ArtificialSynapticPotentiation)&&delete r.a[i.a.ArtificialSynapticPotentiation],E(L);const W=new n.a({name:i.a.EnhancedMyelinSheathing,repCost:1e5,moneyCost:1375e6,info:"Electrical signals are used to induce a new, artificial form of myelinogenesis in the human body. This process results in the proliferation of new, synthetic myelin sheaths in the nervous system. These myelin sheaths can propogate neuro-signals much faster than their organic counterparts, leading to greater processing speeds and better brain function.",hacking_speed_mult:1.03,hacking_exp_mult:1.1,hacking_mult:1.08});W.addToFactions(["Fulcrum Secret Technologies","BitRunners","The Black Hand"]),S(i.a.EnhancedMyelinSheathing)&&delete r.a[i.a.EnhancedMyelinSheathing],E(W);const H=new n.a({name:i.a.SynapticEnhancement,repCost:2e3,moneyCost:75e5,info:"A small cranial implant that continuously uses weak electrical signals to stimulate the brain and induce stronger synaptic activity. This improves the user's cognitive abilities.",hacking_speed_mult:1.03});H.addToFactions(["CyberSec","Aevum"]),S(i.a.SynapticEnhancement)&&delete r.a[i.a.SynapticEnhancement],E(H);const U=new n.a({name:i.a.NeuralRetentionEnhancement,repCost:2e4,moneyCost:25e7,info:"Chemical injections are used to permanently alter and strengthen the brain's neuronal circuits, strengthening the ability to retain information.",hacking_exp_mult:1.25});U.addToFactions(["NiteSec"]),S(i.a.NeuralRetentionEnhancement)&&delete r.a[i.a.NeuralRetentionEnhancement],E(U);const q=new n.a({name:i.a.DataJack,repCost:112500,moneyCost:45e7,info:"A brain implant that provides an interface for direct, wireless communication between a computer's main memory and the mind. This implant allows the user to not only access a computer's memory, but also alter and delete it.",hacking_money_mult:1.25});q.addToFactions(["BitRunners","The Black Hand","NiteSec","Chongqing","New Tokyo"]),S(i.a.DataJack)&&delete r.a[i.a.DataJack],E(q);const K=new n.a({name:i.a.ENM,repCost:15e3,moneyCost:25e7,info:"A thin device embedded inside the arm containing a wireless module capable of connecting to nearby networks. Once connected, the Netburner Module is capable of capturing and processing all of the traffic on that network. By itself, the Embedded Netburner Module does not do much, but a variety of very powerful upgrades can be installed that allow you to fully control the traffic on a network.",hacking_mult:1.08});K.addToFactions(["BitRunners","The Black Hand","NiteSec","ECorp","MegaCorp","Fulcrum Secret Technologies","NWO","Blade Industries"]),S(i.a.ENM)&&delete r.a[i.a.ENM],E(K);const $=new n.a({name:i.a.ENMCore,repCost:175e3,moneyCost:25e8,info:"The Core library is an implant that upgrades the firmware of the Embedded Netburner Module. This upgrade allows the Embedded Netburner Module to generate its own data on a network.",prereqs:[i.a.ENM],hacking_speed_mult:1.03,hacking_money_mult:1.1,hacking_chance_mult:1.03,hacking_exp_mult:1.07,hacking_mult:1.07});$.addToFactions(["BitRunners","The Black Hand","ECorp","MegaCorp","Fulcrum Secret Technologies","NWO","Blade Industries"]),S(i.a.ENMCore)&&delete r.a[i.a.ENMCore],E($);const z=new n.a({name:i.a.ENMCoreV2,repCost:1e6,moneyCost:45e8,info:"The Core V2 library is an implant that upgrades the firmware of the Embedded Netburner Module. This upgraded firmware allows the Embedded Netburner Module to control information on a network by re-routing traffic, spoofing IP addresses, and altering the data inside network packets.",prereqs:[i.a.ENMCore],hacking_speed_mult:1.05,hacking_money_mult:1.3,hacking_chance_mult:1.05,hacking_exp_mult:1.15,hacking_mult:1.08});z.addToFactions(["BitRunners","ECorp","MegaCorp","Fulcrum Secret Technologies","NWO","Blade Industries","OmniTek Incorporated","KuaiGong International"]),S(i.a.ENMCoreV2)&&delete r.a[i.a.ENMCoreV2],E(z);const V=new n.a({name:i.a.ENMCoreV3,repCost:175e4,moneyCost:75e8,info:"The Core V3 library is an implant that upgrades the firmware of the Embedded Netburner Module. This upgraded firmware allows the Embedded Netburner Module to seamlessly inject code into any device on a network.",prereqs:[i.a.ENMCoreV2],hacking_speed_mult:1.05,hacking_money_mult:1.4,hacking_chance_mult:1.1,hacking_exp_mult:1.25,hacking_mult:1.1});V.addToFactions(["ECorp","MegaCorp","Fulcrum Secret Technologies","NWO","Daedalus","The Covenant","Illuminati"]),S(i.a.ENMCoreV3)&&delete r.a[i.a.ENMCoreV3],E(V);const Y=new n.a({name:i.a.ENMAnalyzeEngine,repCost:625e3,moneyCost:6e9,info:"Installs the Analyze Engine for the Embedded Netburner Module, which is a CPU cluster that vastly outperforms the Netburner Module's native single-core processor.",prereqs:[i.a.ENM],hacking_speed_mult:1.1});Y.addToFactions(["ECorp","MegaCorp","Fulcrum Secret Technologies","NWO","Daedalus","The Covenant","Illuminati"]),S(i.a.ENMAnalyzeEngine)&&delete r.a[i.a.ENMAnalyzeEngine],E(Y);const J=new n.a({name:i.a.ENMDMA,repCost:1e6,moneyCost:7e9,info:"This implant installs a Direct Memory Access (DMA) controller into the Embedded Netburner Module. This allows the Module to send and receive data directly to and from the main memory of devices on a network.",prereqs:[i.a.ENM],hacking_money_mult:1.4,hacking_chance_mult:1.2});J.addToFactions(["ECorp","MegaCorp","Fulcrum Secret Technologies","NWO","Daedalus","The Covenant","Illuminati"]),S(i.a.ENMDMA)&&delete r.a[i.a.ENMDMA],E(J);const X=new n.a({name:i.a.Neuralstimulator,repCost:5e4,moneyCost:3e9,info:"A cranial implant that intelligently stimulates certain areas of the brain in order to improve cognitive functions.",hacking_speed_mult:1.02,hacking_chance_mult:1.1,hacking_exp_mult:1.12});X.addToFactions(["The Black Hand","Chongqing","Sector-12","New Tokyo","Aevum","Ishima","Volhaven","Bachman & Associates","Clarke Incorporated","Four Sigma"]),S(i.a.Neuralstimulator)&&delete r.a[i.a.Neuralstimulator],E(X);const Q=new n.a({name:i.a.NeuralAccelerator,repCost:2e5,moneyCost:175e7,info:"A microprocessor that accelerates the processing speed of biological neural networks. This is a cranial implant that is embedded inside the brain.",hacking_mult:1.1,hacking_exp_mult:1.15,hacking_money_mult:1.2});Q.addToFactions(["BitRunners"]),S(i.a.NeuralAccelerator)&&delete r.a[i.a.NeuralAccelerator],E(Q);const Z=new n.a({name:i.a.CranialSignalProcessorsG1,repCost:1e4,moneyCost:7e7,info:"The first generation of Cranial Signal Processors. Cranial Signal Processors are a set of specialized microprocessors that are attached to neurons in the brain. These chips process neural signals to quickly and automatically perform specific computations so that the brain doesn't have to.",hacking_speed_mult:1.01,hacking_mult:1.05});Z.addToFactions(["CyberSec"]),S(i.a.CranialSignalProcessorsG1)&&delete r.a[i.a.CranialSignalProcessorsG1],E(Z);const ee=new n.a({name:i.a.CranialSignalProcessorsG2,repCost:18750,moneyCost:125e6,info:"The second generation of Cranial Signal Processors. Cranial Signal Processors are a set of specialized microprocessors that are attached to neurons in the brain. These chips process neural signals to quickly and automatically perform specific computations so that the brain doesn't have to.",prereqs:[i.a.CranialSignalProcessorsG1],hacking_speed_mult:1.02,hacking_chance_mult:1.05,hacking_mult:1.07});ee.addToFactions(["CyberSec","NiteSec"]),S(i.a.CranialSignalProcessorsG2)&&delete r.a[i.a.CranialSignalProcessorsG2],E(ee);const te=new n.a({name:i.a.CranialSignalProcessorsG3,repCost:5e4,moneyCost:55e7,info:"The third generation of Cranial Signal Processors. Cranial Signal Processors are a set of specialized microprocessors that are attached to neurons in the brain. These chips process neural signals to quickly and automatically perform specific computations so that the brain doesn't have to.",prereqs:[i.a.CranialSignalProcessorsG2],hacking_speed_mult:1.02,hacking_money_mult:1.15,hacking_mult:1.09});te.addToFactions(["NiteSec","The Black Hand","BitRunners"]),S(i.a.CranialSignalProcessorsG3)&&delete r.a[i.a.CranialSignalProcessorsG3],E(te);const ae=new n.a({name:i.a.CranialSignalProcessorsG4,repCost:125e3,moneyCost:11e8,info:"The fourth generation of Cranial Signal Processors. Cranial Signal Processors are a set of specialized microprocessors that are attached to neurons in the brain. These chips process neural signals to quickly and automatically perform specific computations so that the brain doesn't have to.",prereqs:[i.a.CranialSignalProcessorsG3],hacking_speed_mult:1.02,hacking_money_mult:1.2,hacking_grow_mult:1.25});ae.addToFactions(["The Black Hand","BitRunners"]),S(i.a.CranialSignalProcessorsG4)&&delete r.a[i.a.CranialSignalProcessorsG4],E(ae);const ne=new n.a({name:i.a.CranialSignalProcessorsG5,repCost:25e4,moneyCost:225e7,info:"The fifth generation of Cranial Signal Processors. Cranial Signal Processors are a set of specialized microprocessors that are attached to neurons in the brain. These chips process neural signals to quickly and automatically perform specific computations so that the brain doesn't have to.",prereqs:[i.a.CranialSignalProcessorsG4],hacking_mult:1.3,hacking_money_mult:1.25,hacking_grow_mult:1.75});ne.addToFactions(["BitRunners"]),S(i.a.CranialSignalProcessorsG5)&&delete r.a[i.a.CranialSignalProcessorsG5],E(ne);const re=new n.a({name:i.a.NeuronalDensification,repCost:187500,moneyCost:1375e6,info:"The brain is surgically re-engineered to have increased neuronal density by decreasing the neuron gap junction. Then, the body is genetically modified to enhance the production and capabilities of its neural stem cells.",hacking_mult:1.15,hacking_exp_mult:1.1,hacking_speed_mult:1.03});re.addToFactions(["Clarke Incorporated"]),S(i.a.NeuronalDensification)&&delete r.a[i.a.NeuronalDensification],E(re);const oe=new n.a({name:i.a.NuoptimalInjectorImplant,repCost:5e3,moneyCost:2e7,info:"This torso implant automatically injects nootropic supplements into the bloodstream to improve memory, increase focus, and provide other cognitive enhancements.",company_rep_mult:1.2});oe.addToFactions(["Tian Di Hui","Volhaven","New Tokyo","Chongqing","Clarke Incorporated","Four Sigma","Bachman & Associates"]),S(i.a.NuoptimalInjectorImplant)&&delete r.a[i.a.NuoptimalInjectorImplant],E(oe);const ie=new n.a({name:i.a.SpeechEnhancement,repCost:2500,moneyCost:125e5,info:"An advanced neural implant that improves your speaking abilities, making you more convincing and likable in conversations and overall improving your social interactions.",company_rep_mult:1.1,charisma_mult:1.1});ie.addToFactions(["Tian Di Hui","Speakers for the Dead","Four Sigma","KuaiGong International","Clarke Incorporated","Bachman & Associates"]),S(i.a.SpeechEnhancement)&&delete r.a[i.a.SpeechEnhancement],E(ie);const se=new n.a({name:i.a.FocusWire,repCost:75e3,moneyCost:9e8,info:"A cranial implant that stops procrastination by blocking specific neural pathways in the brain.",hacking_exp_mult:1.05,strength_exp_mult:1.05,defense_exp_mult:1.05,dexterity_exp_mult:1.05,agility_exp_mult:1.05,charisma_exp_mult:1.05,company_rep_mult:1.1,work_money_mult:1.2});se.addToFactions(["Bachman & Associates","Clarke Incorporated","Four Sigma","KuaiGong International"]),S(i.a.FocusWire)&&delete r.a[i.a.FocusWire],E(se);const le=new n.a({name:i.a.PCDNI,repCost:375e3,moneyCost:375e7,info:"Installs a Direct-Neural Interface jack into your arm that is compatible with most computers. Connecting to a computer through this jack allows you to interface with it using the brain's electrochemical signals.",company_rep_mult:1.3,hacking_mult:1.08});le.addToFactions(["Four Sigma","OmniTek Incorporated","ECorp","Blade Industries"]),S(i.a.PCDNI)&&delete r.a[i.a.PCDNI],E(le);const ce=new n.a({name:i.a.PCDNIOptimizer,repCost:5e5,moneyCost:45e8,info:"This is a submodule upgrade to the PC Direct-Neural Interface augmentation. It improves the performance of the interface and gives the user more control options to a connected computer.",prereqs:[i.a.PCDNI],company_rep_mult:1.75,hacking_mult:1.1});ce.addToFactions(["Fulcrum Secret Technologies","ECorp","Blade Industries"]),S(i.a.PCDNIOptimizer)&&delete r.a[i.a.PCDNIOptimizer],E(ce);const ue=new n.a({name:i.a.PCDNINeuralNetwork,repCost:15e5,moneyCost:75e8,info:"This is an additional installation that upgrades the functionality of the PC Direct-Neural Interface augmentation. When connected to a computer, The Neural Network upgrade allows the user to use their own brain's processing power to aid the computer in computational tasks.",prereqs:[i.a.PCDNI],company_rep_mult:2,hacking_mult:1.1,hacking_speed_mult:1.05});ue.addToFactions(["Fulcrum Secret Technologies"]),S(i.a.PCDNINeuralNetwork)&&delete r.a[i.a.PCDNINeuralNetwork],E(ue);const me=new n.a({name:i.a.ADRPheromone1,repCost:3750,moneyCost:175e5,info:"The body is genetically re-engineered so that it produces the ADR-V1 pheromone, an artificial pheromone discovered by scientists. The ADR-V1 pheromone, when excreted, triggers feelings of admiration and approval in other people.",company_rep_mult:1.1,faction_rep_mult:1.1});me.addToFactions(["Tian Di Hui","The Syndicate","NWO","MegaCorp","Four Sigma"]),S(i.a.ADRPheromone1)&&delete r.a[i.a.ADRPheromone1],E(me);const he=new n.a({name:i.a.ADRPheromone2,repCost:62500,moneyCost:55e7,info:"The body is genetically re-engineered so that it produces the ADR-V2 pheromone, which is similar to but more potent than ADR-V1. This pheromone, when excreted, triggers feelings of admiration, approval, and respect in others.",company_rep_mult:1.2,faction_rep_mult:1.2});he.addToFactions(["Silhouette","Four Sigma","Bachman & Associates","Clarke Incorporated"]),S(i.a.ADRPheromone2)&&delete r.a[i.a.ADRPheromone2],E(he);const de=new n.a({name:i.a.ShadowsSimulacrum,repCost:37500,moneyCost:4e8,info:"A crude but functional matter phase-shifter module that is embedded in the brainstem and cerebellum. This augmentation was developed by criminal organizations and allows the user to project and control holographic simulacrums within a large radius. These simulacrums are commonly used for espionage and surveillance work.",company_rep_mult:1.15,faction_rep_mult:1.15});de.addToFactions(["The Syndicate","The Dark Army","Speakers for the Dead"]),S(i.a.ShadowsSimulacrum)&&delete r.a[i.a.ShadowsSimulacrum],E(de);const pe=new n.a({name:i.a.HacknetNodeCPUUpload,repCost:3750,moneyCost:11e6,info:"Uploads the architecture and design details of a Hacknet Node's CPU into the brain. This allows the user to engineer custom hardware and software for the Hacknet Node that provides better performance.",hacknet_node_money_mult:1.15,hacknet_node_purchase_cost_mult:.85});pe.addToFactions(["Netburners"]),S(i.a.HacknetNodeCPUUpload)&&delete r.a[i.a.HacknetNodeCPUUpload],E(pe);const fe=new n.a({name:i.a.HacknetNodeCacheUpload,repCost:2500,moneyCost:55e5,info:"Uploads the architecture and design details of a Hacknet Node's main-memory cache into the brain. This allows the user to engineer custom cache hardware for the Hacknet Node that offers better performance.",hacknet_node_money_mult:1.1,hacknet_node_level_cost_mult:.85});fe.addToFactions(["Netburners"]),S(i.a.HacknetNodeCacheUpload)&&delete r.a[i.a.HacknetNodeCacheUpload],E(fe);const ge=new n.a({name:i.a.HacknetNodeNICUpload,repCost:1875,moneyCost:45e5,info:"Uploads the architecture and design details of a Hacknet Node's Network Interface Card (NIC) into the brain. This allows the user to engineer a custom NIC for the Hacknet Node that offers better performance.",hacknet_node_money_mult:1.1,hacknet_node_purchase_cost_mult:.9});ge.addToFactions(["Netburners"]),S(i.a.HacknetNodeNICUpload)&&delete r.a[i.a.HacknetNodeNICUpload],E(ge);const ye=new n.a({name:i.a.HacknetNodeKernelDNI,repCost:7500,moneyCost:4e7,info:"Installs a Direct-Neural Interface jack into the arm that is capable of connecting to a Hacknet Node. This lets the user access and manipulate the Node's kernel using electrochemical signals.",hacknet_node_money_mult:1.25});ye.addToFactions(["Netburners"]),S(i.a.HacknetNodeKernelDNI)&&delete r.a[i.a.HacknetNodeKernelDNI],E(ye);const be=new n.a({name:i.a.HacknetNodeCoreDNI,repCost:12500,moneyCost:6e7,info:"Installs a Direct-Neural Interface jack into the arm that is capable of connecting to a Hacknet Node. This lets the user access and manipulate the Node's processing logic using electrochemical signals.",hacknet_node_money_mult:1.45});be.addToFactions(["Netburners"]),S(i.a.HacknetNodeCoreDNI)&&delete r.a[i.a.HacknetNodeCoreDNI],E(be);const Ee=new n.a({name:i.a.NeuroFluxGovernor,repCost:1250,moneyCost:375e4,info:"A device that is embedded in the back of the neck. The NeuroFlux Governor monitors and regulates nervous impulses coming to and from the spinal column, essentially 'governing' the body. By doing so, it improves the functionality of the body's nervous system.",stats:b.a.createElement(b.a.Fragment,null,"This special augmentation can be leveled up infinitely. Each level of this augmentation increases MOST multipliers by 1%, stacking multiplicatively."),hacking_chance_mult:1.01,hacking_speed_mult:1.01,hacking_money_mult:1.01,hacking_grow_mult:1.01,hacking_mult:1.01,strength_mult:1.01,defense_mult:1.01,dexterity_mult:1.01,agility_mult:1.01,charisma_mult:1.01,hacking_exp_mult:1.01,strength_exp_mult:1.01,defense_exp_mult:1.01,dexterity_exp_mult:1.01,agility_exp_mult:1.01,charisma_exp_mult:1.01,company_rep_mult:1.01,faction_rep_mult:1.01,crime_money_mult:1.01,crime_success_mult:1.01,hacknet_node_money_mult:1.01,hacknet_node_purchase_cost_mult:.99,hacknet_node_ram_cost_mult:.99,hacknet_node_core_cost_mult:.99,hacknet_node_level_cost_mult:.99,work_money_mult:1.01});let ke=0;for(let e=0;e=0;e--)if(u.a.queuedAugmentations[e].name===i.a.NeuroFluxGovernor){t=e;break}for(let a=0;a"}return u.a.queuedAugmentations=[],Object(p.a)("You slowly drift to sleep as scientists put you under in order to install the following Augmentations:
"+e+"
You wake up in your home...you feel different..."),Object(m.a)(),!0}function S(e){return r.a.hasOwnProperty(e)}function C(e){return(e instanceof n.a?e.name:e)===i.a.NeuroFluxGovernor}},function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(0),r=a.n(n),o=a(41),i=a(145),s=a(200),l=a(52),c=a(1);function u({rows:e,title:t,wide:a}){const n=a?s.a:o.a;return r.a.createElement(r.a.Fragment,null,t&&r.a.createElement(c.a,null,t),r.a.createElement(n,{size:"small",padding:"none"},r.a.createElement(i.a,null,e.map((e,t)=>r.a.createElement(l.a,{key:t},e.map((e,t)=>r.a.createElement(o.b,{key:t,align:0!==t?"right":"left"},r.a.createElement(c.a,{noWrap:!0},e))))))))}},function(e,t,a){"use strict";a.d(t,"a",(function(){return r})),a.d(t,"b",(function(){return o})),a.d(t,"c",(function(){return i})),a.d(t,"d",(function(){return s})),a.d(t,"f",(function(){return l})),a.d(t,"e",(function(){return c})),a.d(t,"g",(function(){return h})),a.d(t,"h",(function(){return d}));var n=a(85);let r={},o={};function i(e){r=""===e?{}:JSON.parse(e)}function s(e){o=""===e?{}:JSON.parse(e)}function l(){for(const e of Object.keys(r))r.hasOwnProperty(e)&&n.a.print("alias "+e+"="+r[e]);for(const e of Object.keys(o))o.hasOwnProperty(e)&&n.a.print("global alias "+e+"="+o[e])}function c(e,t=!1){const a=e.match(/^([\w|!|%|,|@|-]+)=(("(.+)")|('(.+)'))$/);return null!=a&&7==a.length&&(t?function(e,t){e in r&&delete r[e];o[e]=t.trim()}(a[1],a[4]||a[6]):function(e,t){e in o&&delete o[e];r[e]=t.trim()}(a[1],a[4]||a[6]),!0)}function u(e){return r.hasOwnProperty(e)?r[e]:null}function m(e){return o.hasOwnProperty(e)?o[e]:null}function h(e){return r.hasOwnProperty(e)?(delete r[e],!0):!!o.hasOwnProperty(e)&&(delete o[e],!0)}function d(e){const t=e.split(" ");if(t.length>0){if("unalias"===t[0]||"alias"===t[0])return t.join(" ");let e=!0,r=0;for(;e&&r<10;){var a;r++,e=!1;const o=null===(a=u(t[0]))||void 0===a?void 0:a.split(" ");null!=o&&(e=!0,t.splice(0,1,...o));for(let a=0;ar.a.createElement(i.a,{injectFirst:!0},r.a.createElement(s.a,{theme:m},e))},,,,,function(e,t,a){"use strict";a.d(t,"a",(function(){return s}));var n=a(0),r=a.n(n),o=a(1),i=a(20);function s(e){const[t,a]=Object(n.useState)(!1);return r.a.createElement(i.a,{open:t,title:r.a.createElement(o.a,null,"Copied!")},r.a.createElement(o.a,{variant:e.variant,color:e.color,onClick:function(){const t=document.createElement("textarea");t.value=e.value,document.body.appendChild(t),t.select(),t.setSelectionRange(0,1e10),document.execCommand("copy"),document.body.removeChild(t),a(!0),setTimeout(()=>a(!1),1e3)}},e.value))}},function(e,t,a){"use strict";a.d(t,"c",(function(){return h})),a.d(t,"b",(function(){return d})),a.d(t,"a",(function(){return p}));var n=a(0),r=a.n(n),o=a(674),i=a(113),s=a(124),l=a(1427),c=a(69),u=a(170);const m=Object(i.a)(()=>({snackbar:{zIndex:u.d+1e3+" !important","& .MuiAlert-icon":{alignSelf:"center"}}}));function h(e){const t=m();return r.a.createElement(o.a,{dense:!0,maxSnack:9,anchorOrigin:{horizontal:"right",vertical:"bottom"},autoHideDuration:2e3,classes:{containerRoot:t.snackbar}},e.children)}const d=new s.a;function p(){const{enqueueSnackbar:e,closeSnackbar:t}=Object(o.b)();return Object(n.useEffect)(()=>d.subscribe((a,n,o)=>{const i=e(r.a.createElement(l.a,{severity:n},a),{content:(e,t)=>r.a.createElement(c.a,{key:e},t),variant:n,autoHideDuration:o,onClick:()=>t(i)})})),r.a.createElement(r.a.Fragment,null)}},function(e,t,a){"use strict";a.d(t,"c",(function(){return R})),a.d(t,"b",(function(){return x})),a.d(t,"a",(function(){return T}));var n=a(144),r=a(62),o=a(8),i=a(28),s=a(73),l=a(254),c=a(2),u=a(24),m=a(9),h=a(78),d=a(94),p=a(112),f=a(164),g=a(325),y=a(15),b=a(22),E=a(296),k=a(897),v=a(7),_=a(295),w=a(11);function S(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class C{constructor(){S(this,"PlayerSave",""),S(this,"AllServersSave",""),S(this,"CompaniesSave",""),S(this,"FactionsSave",""),S(this,"AliasesSave",""),S(this,"GlobalAliasesSave",""),S(this,"MessagesSave",""),S(this,"StockMarketSave",""),S(this,"SettingsSave",""),S(this,"VersionSave",""),S(this,"AllGangsSave",""),S(this,"LastExportBonus",""),S(this,"StaneksGiftSave",""),S(this,"SaveTimestamp","")}getSaveString(e=!1){this.PlayerSave=JSON.stringify(c.a),this.AllServersSave=Object(u.j)(e),this.CompaniesSave=JSON.stringify(r.a),this.FactionsSave=JSON.stringify(i.a),this.AliasesSave=JSON.stringify(n.a),this.GlobalAliasesSave=JSON.stringify(n.b),this.MessagesSave=JSON.stringify(l.a),this.StockMarketSave=JSON.stringify(d.a),this.SettingsSave=JSON.stringify(m.a),this.VersionSave=JSON.stringify(o.a.VersionNumber),this.LastExportBonus=JSON.stringify(g.a),this.StaneksGiftSave=JSON.stringify(p.b),this.SaveTimestamp=(new Date).getTime().toString(),c.a.inGang()&&(this.AllGangsSave=JSON.stringify(s.a));return btoa(unescape(encodeURIComponent(JSON.stringify(this))))}saveGame(e=!0){const t=this.getSaveString(m.a.ExcludeRunningScriptsFromSave);Object(E.c)(t).then(()=>{e&&f.b.emit("Game Saved!","info",2e3)}).catch(e=>console.error(e))}exportGame(){const e=this.getSaveString(m.a.ExcludeRunningScriptsFromSave),t=Math.round(Date.now()/1e3),a=c.a.bitNodeN;T(`bitburnerSave_${t}_BN${a}x${h.a[a]}.json`,e)}toJSON(){return Object(b.b)("BitburnerSaveObject",this)}static fromJSON(e){return Object(b.a)(C,e.data)}}function x(e){if(-1!==navigator.userAgent.indexOf("wv")&&-1!==navigator.userAgent.indexOf("Chrome/")&&setInterval(()=>{Object(y.a)("SCAM ALERT. This app is not official and you should uninstall it.")},1e3),!e)return!1;e=decodeURIComponent(escape(atob(e)));const t=JSON.parse(e,b.c);if(Object(c.b)(t.PlayerSave),Object(u.h)(t.AllServersSave),Object(r.c)(t.CompaniesSave),Object(i.d)(t.FactionsSave),t.hasOwnProperty("StaneksGiftSave")?Object(p.a)(t.StaneksGiftSave):(console.warn("Could not load Staneks Gift from save"),Object(p.a)("")),t.hasOwnProperty("AliasesSave"))try{Object(n.c)(t.AliasesSave)}catch(e){console.warn("Could not load Aliases from save"),Object(n.c)("")}else console.warn("Save file did not contain an Aliases property"),Object(n.c)("");if(t.hasOwnProperty("GlobalAliasesSave"))try{Object(n.d)(t.GlobalAliasesSave)}catch(e){console.warn("Could not load GlobalAliases from save"),Object(n.d)("")}else console.warn("Save file did not contain a GlobalAliases property"),Object(n.d)("");if(t.hasOwnProperty("MessagesSave"))try{Object(l.d)(t.MessagesSave)}catch(e){console.warn("Could not load Messages from save"),Object(l.c)()}else console.warn("Save file did not contain a Messages property"),Object(l.c)();if(t.hasOwnProperty("StockMarketSave"))try{Object(d.i)(t.StockMarketSave)}catch(e){Object(d.i)("")}else Object(d.i)("");if(t.hasOwnProperty("SettingsSave"))try{m.a.load(t.SettingsSave)}catch(e){console.error("ERROR: Failed to parse Settings. Re-initing default values"),m.a.init()}else m.a.init();if(t.hasOwnProperty("LastExportBonus"))try{g.d(JSON.parse(t.LastExportBonus))}catch(e){g.d((new Date).getTime()),console.error("ERROR: Failed to parse last export bonus Settings "+e)}if(c.a.inGang()&&t.hasOwnProperty("AllGangsSave"))try{Object(s.b)(t.AllGangsSave)}catch(e){console.error("ERROR: Failed to parse AllGangsSave: "+e)}if(t.hasOwnProperty("VersionSave"))try{const e=JSON.parse(t.VersionSave,b.c);!function(e){const t=c.a;if("string"==typeof e){if(e<="0.41.2"){null!=t.companyPosition&&"string"!=typeof t.companyPosition&&(t.companyPosition=t.companyPosition.data.positionName,null==t.companyPosition&&(t.companyPosition=""));for(const e of Object.keys(r.a)){const t=r.a[e];if(0==t.name&&null!=t.companyName&&(t.name=t.companyName),t.companyPositions instanceof Array){const e={};for(let a=0;ae.name===v.a.NeuroFluxGovernor);if(e)e.level+=10;else{const e=new _.a(v.a.NeuroFluxGovernor);e.level=10,c.a.augmentations.push(e)}c.a.reapplyAllAugmentations(!0),c.a.reapplyAllSourceFiles()}if(e<3&&(t.money=parseFloat(t.money),t.corporation)){t.corporation.funds=parseFloat(t.corporation.funds),t.corporation.revenue=parseFloat(t.corporation.revenue),t.corporation.expenses=parseFloat(t.corporation.expenses);for(let e=0;e0)for(const e of t.sleeves)if(e.augmentations&&0!==e.augmentations.length)for(const t of e.augmentations)"Graphene BranchiBlades Upgrade"===t.name&&(t.name="Graphene BrachiBlades Upgrade")}}(e),window.location.href.toLowerCase().includes("bitburner-beta")?Object(y.a)("You are playing on the beta environment! This branch of the game features the latest developments in the game. This version may be unstable.
Please report any bugs/issues through the github repository (https://github.com/danielyxie/bitburner/issues) or the Bitburner subreddit (reddit.com/r/bitburner).

"+o.a.LatestUpdate,O):e!==o.a.VersionNumber&&M()}catch(e){M()}else M();return!0}const O={"& h1, & h2, & h3, & h4, & p, & a, & ul":{margin:0,color:m.a.theme.primary,whiteSpace:"initial"},"& ul":{paddingLeft:"1.5em",lineHeight:1.5}};function M(){setTimeout(()=>Object(y.a)("New update!
Please report any bugs/issues through the github repository or the Bitburner subreddit (reddit.com/r/bitburner).

"+o.a.LatestUpdate,O),1e3)}function T(e,t){const a=new Blob([t],{type:"text/plain"}),n=window.navigator;if(n.msSaveOrOpenBlob)n.msSaveOrOpenBlob(a,e);else{const t=document.createElement("a"),n=URL.createObjectURL(a);t.href=n,t.download=e,document.body.appendChild(t),t.click(),setTimeout((function(){document.body.removeChild(t),window.URL.revokeObjectURL(n)}),0)}}b.c.constructors.BitburnerSaveObject=C;const R=new C},function(e,t,a){"use strict";function n(e,t=1){return Math.max(Math.floor(t*(32*Math.log(e+534.5)-200)),1)}function r(e,t=1){return Math.exp((e/t+200)/32)-534.6}function o(e,t=1){const a=n(e,t),o=a+1;let i=r(a,t);i<0&&(i=0);let s=r(o,t);s<0&&(s=0);let l=s-i!=0?100*(e-i)/(s-i):99.99;l<0&&(l=0),l>100&&(l=100);let c=e-i,u=s-e;return c<0&&(c=0),u<0&&(u=0),{currentSkill:a,nextSkill:o,baseExperience:i,experience:e,nextExperience:s,currentExperience:c,remainingExperience:u,progress:l}}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r})),a.d(t,"c",(function(){return o}))},,function(e,t,a){"use strict";let n;a.d(t,"a",(function(){return n})),a.d(t,"b",(function(){return r})),function(e){e.Weapon="w",e.Armor="a",e.Vehicle="v",e.Rootkit="r",e.Augmentation="g"}(n||(n={}));const r=[{cost:1e6,mults:{str:1.04,def:1.04},name:"Baseball Bat",upgType:n.Weapon},{cost:12e6,mults:{str:1.08,def:1.08,dex:1.08},name:"Katana",upgType:n.Weapon},{cost:25e6,mults:{str:1.1,def:1.1,dex:1.1,agi:1.1},name:"Glock 18C",upgType:n.Weapon},{cost:5e7,mults:{str:1.12,def:1.1,agi:1.1},name:"P90C",upgType:n.Weapon},{cost:6e7,mults:{str:1.2,def:1.15},name:"Steyr AUG",upgType:n.Weapon},{cost:1e8,mults:{str:1.25,def:1.2},name:"AK-47",upgType:n.Weapon},{cost:15e7,mults:{str:1.3,def:1.25},name:"M15A10 Assault Rifle",upgType:n.Weapon},{cost:225e6,mults:{str:1.3,dex:1.25,agi:1.3},name:"AWM Sniper Rifle",upgType:n.Weapon},{cost:2e6,mults:{def:1.04},name:"Bulletproof Vest",upgType:n.Armor},{cost:5e6,mults:{def:1.08},name:"Full Body Armor",upgType:n.Armor},{cost:25e6,mults:{def:1.15,agi:1.15},name:"Liquid Body Armor",upgType:n.Armor},{cost:4e7,mults:{def:1.2},name:"Graphene Plating Armor",upgType:n.Armor},{cost:3e6,mults:{agi:1.04,cha:1.04},name:"Ford Flex V20",upgType:n.Vehicle},{cost:9e6,mults:{agi:1.08,cha:1.08},name:"ATX1070 Superbike",upgType:n.Vehicle},{cost:18e6,mults:{agi:1.12,cha:1.12},name:"Mercedes-Benz S9001",upgType:n.Vehicle},{cost:3e7,mults:{agi:1.16,cha:1.16},name:"White Ferrari",upgType:n.Vehicle},{cost:5e6,mults:{hack:1.05},name:"NUKE Rootkit",upgType:n.Rootkit},{cost:25e6,mults:{hack:1.1},name:"Soulstealer Rootkit",upgType:n.Rootkit},{cost:75e6,mults:{hack:1.15},name:"Demon Rootkit",upgType:n.Rootkit},{cost:4e7,mults:{hack:1.12},name:"Hmap Node",upgType:n.Rootkit},{cost:75e6,mults:{hack:1.15},name:"Jack the Ripper",upgType:n.Rootkit},{cost:1e10,mults:{str:1.3,dex:1.3},name:"Bionic Arms",upgType:n.Augmentation},{cost:1e10,mults:{agi:1.6},name:"Bionic Legs",upgType:n.Augmentation},{cost:15e9,mults:{str:1.15,def:1.15,dex:1.15,agi:1.15},name:"Bionic Spine",upgType:n.Augmentation},{cost:2e10,mults:{str:1.4,def:1.4},name:"BrachiBlades",upgType:n.Augmentation},{cost:12e9,mults:{str:1.2,def:1.2},name:"Nanofiber Weave",upgType:n.Augmentation},{cost:25e9,mults:{str:1.5,agi:1.5},name:"Synthetic Heart",upgType:n.Augmentation},{cost:15e9,mults:{str:1.3,def:1.3},name:"Synfibril Muscle",upgType:n.Augmentation},{cost:5e9,mults:{hack:1.05},name:"BitWire",upgType:n.Augmentation},{cost:1e10,mults:{hack:1.15},name:"Neuralstimulator",upgType:n.Augmentation},{cost:75e8,mults:{hack:1.1},name:"DataJack",upgType:n.Augmentation},{cost:5e10,mults:{str:1.7,def:1.7},name:"Graphene Bone Lacings",upgType:n.Augmentation}]},,function(e,t,a){"use strict";a.d(t,"b",(function(){return C})),a.d(t,"a",(function(){return x})),a.d(t,"c",(function(){return M})),a.d(t,"d",(function(){return R}));var n=a(0),r=a.n(n),o=a(124),i=a(134),s=a(1),l=a(23),c=a(10),u=a(69),m=a(414),h=a.n(m),d=a(870),p=a(113),f=a(135),g=a(541),y=a.n(g),b=a(171),E=a(182),k=a(24),v=a(223),_=a(2),w=a(208);let S=0;const C=new o.a,x=new o.a;let O=[];function M(){const e=Object(n.useState)(!0)[1];function t(){e(e=>!e)}return Object(n.useEffect)(()=>C.subscribe(e=>{const a=e.server+"-"+e.filename+e.args.map(e=>""+e).join("-");O.find(e=>e.id===a)||(O.push({id:a,script:e}),t())}),[]),Object(n.useEffect)(()=>x.subscribe(()=>{O=[],t()})),r.a.createElement(r.a.Fragment,null,O.map(e=>r.a.createElement(A,{key:e.id,script:e.script,id:e.id,onClose:()=>{return a=e.id,O=O.filter(e=>e.id!==a),void t();var a}})))}const T=Object(p.a)(e=>Object(f.a)({title:{"&.is-minimized + *":{border:"none",margin:0,"max-height":0,padding:0,"pointer-events":"none",visibility:"hidden"}},logs:{overflowY:"scroll",overflowX:"hidden",scrollbarWidth:"auto",display:"flex",flexDirection:"column-reverse"},success:{color:e.colors.success},error:{color:e.palette.error.main},primary:{color:e.palette.primary.main},info:{color:e.palette.info.main},warning:{color:e.palette.warning.main}})),R=1500;function A(e){const t=Object(n.useRef)(null),a=Object(n.useRef)(null),[o,m]=Object(n.useState)(e.script),p=T(),f=Object(n.useRef)(null),g=Object(n.useState)(!1)[1],[C,x]=Object(n.useState)(!1);function O(){g(e=>!e)}function M(){const e=f.current;null!==e&&(e.style.zIndex=R+S+"",S++,O())}function A(e=!1){const t=`${o.filename} ${o.args.map(e=>""+e).join(" ")}`;return e||t.length<=30?t:t.slice(0,27)+"..."}Object(n.useEffect)(()=>{M();const e=setInterval(O,1e3);return()=>clearInterval(e)},[]),Object(n.useEffect)(()=>(window.addEventListener("resize",N),()=>{window.removeEventListener("resize",N)}),[]);const N=Object(w.debounce)(()=>{const e=null==t?void 0:t.current;e&&(P(e)||I())},100),P=e=>{const t=e.getBoundingClientRect();return!(t.right<0||t.bottom<0||t.left>innerWidth||t.top>outerWidth)},I=()=>{const e=null==a?void 0:a.current;if(!e)return;const t=e.state;t.x=0,t.y=0,e.setState(t)};return r.a.createElement(h.a,{handle:".drag",onDrag:e=>{if(e.clientX<0||e.clientY<0||e.clientX>innerWidth||e.clientY>innerHeight)return!1},ref:a},r.a.createElement(u.a,{style:{display:"flex",flexFlow:"column",position:"fixed",left:"40%",top:"30%",zIndex:1400},ref:f},r.a.createElement("div",{onMouseDown:M},r.a.createElement(u.a,{className:p.title+" "+(C?"is-minimized":""),style:{cursor:"grab"}},r.a.createElement(l.a,{className:"drag",display:"flex",alignItems:"center",ref:t},r.a.createElement(s.a,{color:"primary",variant:"h6",title:A(!0)},A()),r.a.createElement(l.a,{position:"absolute",right:0},!b.a.has(o.pid)&&r.a.createElement(c.a,{onClick:function(){const e=Object(k.d)(o.server);if(null===e)return;const t=Object(v.a)(o.filename,o.args,e);null===t?Object(E.e)(_.a,o,e):m(t)}},"Run"),b.a.has(o.pid)&&r.a.createElement(c.a,{onClick:function(){Object(i.a)(o,o.server,!0)}},"Kill"),r.a.createElement(c.a,{onClick:function(){x(!C)}},C?"🗖":"🗕"),r.a.createElement(c.a,{onClick:e.onClose},"Close")))),r.a.createElement(u.a,{sx:{overflow:"scroll",overflowWrap:"break-word",whiteSpace:"pre-wrap"}},r.a.createElement(d.ResizableBox,{className:p.logs,height:500,width:500,handle:r.a.createElement("span",{style:{position:"absolute",right:"-10px",bottom:"-13px",cursor:"nw-resize"}},r.a.createElement(y.a,{color:"primary",style:{transform:"rotate(45deg)"}}))},r.a.createElement(l.a,null,o.logs.map((e,t)=>{return r.a.createElement(s.a,{key:t,className:(a=e,a.match(/(^\[[^\]]+\] )?ERROR/)||a.match(/(^\[[^\]]+\] )?FAIL/)?p.error:a.match(/(^\[[^\]]+\] )?SUCCESS/)?p.success:a.match(/(^\[[^\]]+\] )?WARN/)?p.warning:a.match(/(^\[[^\]]+\] )?INFO/)?p.info:p.primary)},e,r.a.createElement("br",null));var a})))))))}},function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));const n=new Map},function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));const n={Water:.05,Energy:.01,Food:.03,Plants:.05,Metal:.1,Hardware:.06,Chemicals:.05,Drugs:.02,Robots:.5,AICores:.1,RealEstate:.005,"Real Estate":.005,"AI Cores":.1}},function(e,t,a){"use strict";a.d(t,"c",(function(){return o})),a.d(t,"d",(function(){return i})),a.d(t,"e",(function(){return s})),a.d(t,"b",(function(){return l})),a.d(t,"a",(function(){return c})),a.d(t,"f",(function(){return u}));var n=a(5),r=a(37);function o(e,t,a,o,i){return r.b.HashesPerLevel*e*Math.pow(1.07,Math.log2(a))*(1+(o-1)/5)*(1-t/a)*i*n.a.HacknetNodeMoney}function i(e,t=1,a=1){const n=Math.round(t);if(isNaN(n)||n<1)return 0;if(e>=r.b.MaxLevel)return 1/0;const o=r.b.UpgradeLevelMult;let i=0,s=e;for(let e=0;e=r.b.MaxRam)return 1/0;let o=0,i=Math.round(Math.log2(e)),s=e;for(let e=0;e=r.b.MaxCores)return 1/0;const o=r.b.UpgradeCoreMult;let i=0,s=e;for(let e=0;e=r.b.MaxCache)return 1/0;const n=r.b.UpgradeCacheMult;let o=0,i=e;for(let e=0;e=r.b.MaxServers?1/0:r.b.BaseCost*Math.pow(r.b.PurchaseMult,e-1)*t}},function(e,t,a){"use strict";let n;a.d(t,"a",(function(){return n})),function(e){e[e.Field=0]="Field",e[e.Hacking=1]="Hacking",e[e.None=2]="None",e[e.Security=3]="Security"}(n||(n={}))},,,function(e,t,a){"use strict";function n(e){const t=Object.assign({},{progress:0,totalTicks:20},e);t.progress=Math.max(Math.min(t.progress,1),0);const a=Math.max(Math.floor(t.progress/(1/t.totalTicks)),1),n=Math.max(t.totalTicks-a,0);return`[${"|".repeat(a)}${"-".repeat(n)}]`}a.d(t,"a",(function(){return n}))},,,,,function(e,t,a){"use strict";a.d(t,"a",(function(){return R})),a.d(t,"c",(function(){return A})),a.d(t,"e",(function(){return P})),a.d(t,"f",(function(){return F})),a.d(t,"b",(function(){return D})),a.d(t,"d",(function(){return j}));var n=a(134),r=a(255),o=a(171),i=a(278),s=a(476),l=a(8),c=a(539),u=a(101),m=a(477),h=a(584),d=a(1232),p=a(341),f=a(589),g=a(223),y=a(24),b=a(9),E=a(621),k=a(15),v=a(243),_=a(473),w=a(127),S=a(389),C=a(242),x=a(284),O=a(79),M=a(2),T=a(85);const R=[];for(let e=0;e{o=!0;let t=e.source.value;t.startsWith("./")&&(t=t.slice(2));const a=function(e){for(let t=0;t{a.push(e.id.name),n.push(e)}}),r+="var "+t+";\n(function (namespace) {\n",n.forEach(e=>{r+=Object(E.generate)(e),r+="\n"}),a.forEach(e=>{r+="namespace."+e+" = "+e,r+="\n"}),r+="})("+t+" || ("+t+" = {}));\n"}else{const t=[];e.specifiers.forEach(e=>{t.push(e.local.name)});const a=[];Object(x.b)(i,{FunctionDeclaration:e=>{t.includes(e.id.name)&&a.push(e)}}),a.forEach(e=>{r+=Object(E.generate)(e),r+="\n"})}}}),!o)return{code:e,lineOffset:0};let i=0;if("Program"!==a.type||null==a.body)throw new Error("Code could not be properly parsed");for(let e=a.body.length-1;e>=0;--e)"ImportDeclaration"===a.body[e].type&&(a.body.splice(e,1),++i);const s=(r.match(/\n/g)||[]).length-i;e=Object(E.generate)(a);return{code:e=r+e,lineOffset:s}}(t,e);a=n.code,o=n.lineOffset}catch(t){return Object(k.a)("Error processing Imports in "+e.name+":
"+t),e.env.stopFlag=!0,e.running=!1,Object(n.a)(e),Promise.resolve(e)}const i=function(t,a){const n=Object(m.a)(e);for(const e of Object.keys(n)){const o=n[e];if("function"==typeof o)if(["hack","grow","weaken","sleep","prompt","manualHack","scp","write","share"].includes(e)){const n=function(...e){const a=[];for(let n=0;n"+t),e.env.stopFlag=!0,e.running=!1,Object(n.a)(e),Promise.resolve(e)}return new Promise((function(t,a){try{!function n(){try{if(e.env.stopFlag)return a(e);let r=!0,o=0;for(;o<3&&r;)r=r&&s.step(),o++;r?setTimeout(n,b.a.CodeInstructionRunTime):t(e)}catch(t){return t=t.toString(),Object(u.a)(t)||(t=Object(u.b)(e,t)),e.errorMessage=t,a(e)}}()}catch(t){return Object(w.a)(t)?(e.errorMessage=t,a(e)):t instanceof r.a?a(t):a(e)}}))}function P(e,t,a,n){return I(e,t,a,n)?(a.runScript(t),t.pid):0}function I(e,t,a,l){let c=1;t.threads&&!isNaN(t.threads)?c=t.threads:t.threads=1;const d=Object(f.a)(t),p=Object(_.a)(d*c);if(p>a.maxRam-a.ramUsed)return Object(k.a)(`Not enough RAM to run script ${t.filename} with args `+Object(v.a)(t.args)+". This likely occurred because you re-loaded the game and the script's RAM usage increased (either because of an update to the game or your changes to the script.)"),!1;a.updateRamUsed(Object(_.a)(a.ramUsed+p),M.a);const g=Object(s.a)();if(-1===g)throw new Error("Failed to start script because could not find available PID. This is most because you have too many scripts running.");const y=new r.a(t,g,m.a);y.ramUsage=d,o.a.set(g,y),i.a.emit();let b=null;if(y.name.endsWith(".js")||y.name.endsWith(".ns"))b=function(e,t){t.running=!0;let a=null;function n(e,n){return function(...r){if(t.env.stopFlag)throw t;if("asleep"===e)return n(...r);if(a)throw t.errorMessage=Object(u.b)(t,Object(S.sprintf)("Concurrent calls to Netscript functions are not allowed! Did you forget to await hack(), grow(), or some other promise-returning function? (Currently running: %s tried to run: %s)",a,e)),t;let o;a=e;try{o=n(...r)}catch(e){throw a=null,e}return o&&void 0!==o.finally?o.finally((function(){a=null})):(a=null,o)}}for(const e of Object.keys(t.env.vars))"function"==typeof t.env.vars[e]&&(t.env.vars[e]=n(e,t.env.vars[e]));return t.env.vars.stanek.charge=n("stanek.charge",t.env.vars.stanek.charge),new Promise((a,n)=>{Object(h.b)(e,t.getServer().scripts,t).then(()=>{a(t)}).catch(e=>n(e))}).catch(e=>{if(e instanceof Error)throw e instanceof SyntaxError?t.errorMessage=Object(u.b)(t,e.message+" (sorry we can't be more helpful)"):t.errorMessage=Object(u.b)(t,e.message+(e.stack&&"\nstack:\n"+e.stack.toString()||"")),t;if(Object(u.a)(e))throw t.errorMessage=e,t;if(e instanceof r.a)throw e;throw t.errorMessage=Object(u.b)(t,e),t})}(e,y);else if(b=N(y),!(b instanceof Promise))return!1;return b.then((function(e){e.running=!1,e.env.stopFlag=!0,void 0!==l&&l.running&&(l.scriptRef.onlineExpGained+=t.onlineExpGained,l.scriptRef.onlineMoneyMade+=t.onlineMoneyMade),Object(n.a)(y),e.log("",()=>"Script finished running")})).catch((function(e){if(e instanceof Error)return Object(k.a)("Script runtime unknown error. This is a bug please contact game developer"),void console.error("Evaluating workerscript returns an Error. THIS SHOULDN'T HAPPEN: "+e.toString());if(e instanceof r.a){if(!Object(u.a)(e.errorMessage))return void e.log("",()=>"Script killed");{const t=e.errorMessage.split("|DELIMITER|");if(4!=t.length)return console.error("ERROR: Something wrong with Error text in evaluator..."),void console.error("Error text: "+e.errorMessage);const a=t[1],n=t[2],r=t[3];let o=`RUNTIME ERROR
${n}@${a}
`;e.args.length>0&&(o+=`Args: ${Object(v.a)(e.args)}
`),o+="
",o+=r,Object(k.a)(o),e.log("",()=>"Script crashed with runtime error")}}else{if(Object(u.a)(e))return Object(k.a)("Script runtime unknown error. This is a bug please contact game developer"),void console.error("ERROR: Evaluating workerscript returns only error message rather than WorkerScript object. THIS SHOULDN'T HAPPEN: "+e.toString());Object(k.a)("An unknown script died for an unknown reason. This is a bug please contact game dev"),console.error(e)}Object(n.a)(y)})),!0}function F(e=1){const t=e*l.a._idleSpeed/1e3;for(const e of o.a.values())e.scriptRef.onlineRunningTime+=t}function D(e){const t=-1!==window.location.href.toLowerCase().indexOf("?noscripts");t&&(T.a.warn("Skipped loading player scripts during startup"),console.info("Skipping the load of any scripts during startup"));for(const a of Object(y.c)()){a.ramUsed=0;for(let e=0;e`Invalid arguments: scriptname='${n} args='${o}'`),console.error("runScriptFromScript() failed due to invalid arguments"),0;o.forEach((e,t)=>{if("string"!=typeof e&&"number"!=typeof e&&"boolean"!=typeof e)throw new Error(`Only strings, numbers, and booleans can be passed as arguments to other scripts.\n${n} argument index ${t} is of type ${typeof e} and value ${JSON.stringify(e)}`)});if(null!=a.getRunningScript(n,o))return i.log(t,()=>`'${n}' is already running on '${a.hostname}'`),0;for(let e=0;e"Cannot execute a script with null/undefined as an argument"),0;for(let r=0;r`You do not have root access on '${a.hostname}'`),0;if(c>u)return i.log(t,()=>`Cannot run script '${n}' (t=${s}) on '${a.hostname}' because there is not enough available RAM!`),0;{i.log(t,()=>`'${n}' on '${a.hostname}' with ${s} threads and args: ${Object(v.a)(o)}.`);const r=new p.a(l,o);return r.threads=s,r.server=a.hostname,P(e,r,a,i)}}return i.log(t,()=>`Could not find script '${n}' on '${a.hostname}'`),0}},function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(22);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class o{constructor(e={}){r(this,"name","InitName"),r(this,"qty",0),r(this,"qlt",0),r(this,"dmd",0),r(this,"dmdR",[0,0]),r(this,"cmp",0),r(this,"cmpR",[0,0]),r(this,"mv",0),r(this,"mku",0),r(this,"buy",0),r(this,"sll",0),r(this,"prd",0),r(this,"imp",0),r(this,"exp",[]),r(this,"totalExp",0),r(this,"bCost",0),r(this,"sCost",0),r(this,"prdman",[!1,0]),r(this,"sllman",[!1,0]),r(this,"marketTa1",!1),r(this,"marketTa2",!1),r(this,"marketTa2Price",0),e.name&&(this.name=e.name),this.init()}getMarkupLimit(){return this.qlt/this.mku}init(){switch(this.name){case"Water":this.dmd=75,this.dmdR=[65,85],this.cmp=50,this.cmpR=[40,60],this.bCost=1500,this.mv=.2,this.mku=6;break;case"Energy":this.dmd=90,this.dmdR=[80,99],this.cmp=80,this.cmpR=[65,95],this.bCost=2e3,this.mv=.2,this.mku=6;break;case"Food":this.dmd=80,this.dmdR=[70,90],this.cmp=60,this.cmpR=[35,85],this.bCost=5e3,this.mv=1,this.mku=3;break;case"Plants":this.dmd=70,this.dmdR=[20,90],this.cmp=50,this.cmpR=[30,70],this.bCost=3e3,this.mv=.6,this.mku=3.75;break;case"Metal":this.dmd=80,this.dmdR=[75,85],this.cmp=70,this.cmpR=[60,80],this.bCost=2650,this.mv=1,this.mku=6;break;case"Hardware":this.dmd=85,this.dmdR=[80,90],this.cmp=80,this.cmpR=[65,95],this.bCost=8e3,this.mv=.5,this.mku=1;break;case"Chemicals":this.dmd=55,this.dmdR=[40,70],this.cmp=60,this.cmpR=[40,80],this.bCost=9e3,this.mv=1.2,this.mku=2;break;case"Real Estate":this.dmd=50,this.dmdR=[5,99],this.cmp=50,this.cmpR=[25,75],this.bCost=8e4,this.mv=1.5,this.mku=1.5;break;case"Drugs":this.dmd=60,this.dmdR=[45,75],this.cmp=70,this.cmpR=[40,99],this.bCost=4e4,this.mv=1.6,this.mku=1;break;case"Robots":this.dmd=90,this.dmdR=[80,9],this.cmp=90,this.cmpR=[80,9],this.bCost=75e3,this.mv=.5,this.mku=1;break;case"AI Cores":this.dmd=90,this.dmdR=[80,99],this.cmp=90,this.cmpR=[80,9],this.bCost=15e3,this.mv=.8,this.mku=.5;break;case"Scientific Research":case"InitName":break;default:console.error("Invalid material type in init(): "+this.name)}}processMarket(){const e=1+Math.random()*this.mv/300,t=1+Math.random()*this.mv/100;Math.random()<.5?(this.cmp*=t,this.cmp>this.cmpR[1]&&(this.cmp=this.cmpR[1]),this.bCost*=1/e):(this.cmp*=1/t,this.cmpthis.dmdR[1]&&(this.dmd=this.dmdR[1]),this.bCost*=e):(this.dmd*=1/a,this.dmdt(u),[u]),l.a.createElement(n.a,{control:l.a.createElement(r.a,{checked:u,onChange:function(e){m(e.target.checked)}}),label:l.a.createElement(o.a,{title:l.a.createElement(i.a,null,c)},l.a.createElement(i.a,null,a))})}},,,,,,,,function(e,t,a){"use strict";a.d(t,"a",(function(){return s}));var n=a(533),r=a(439),o=a(22);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class s{constructor(e=""){i(this,"alreadyInvited",!1),i(this,"augmentations",[]),i(this,"favor",0),i(this,"isBanned",!1),i(this,"isMember",!1),i(this,"name",""),i(this,"playerReputation",0),this.name=e}getInfo(){const e=n.a[this.name];if(null==e)throw new Error(`Missing faction from FactionInfos: ${this.name} this probably means the faction got corrupted somehow`);return e}gainFavor(){null==this.favor&&(this.favor=0),this.favor+=this.getFavorGain()}getFavorGain(){null==this.favor&&(this.favor=0);const e=Math.max(0,Object(r.a)(this.favor))+this.playerReputation;return Object(r.b)(e)-this.favor}toJSON(){return Object(o.b)("Faction",this)}static fromJSON(e){return Object(o.a)(s,e.data)}}o.c.constructors.Faction=s},function(e,t,a){"use strict";let n,r;a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r})),function(e){e[e.Cost=0]="Cost",e[e.Default=1]="Default",e[e.Reputation=2]="Reputation",e[e.Purchasable=3]="Purchasable"}(n||(n={})),function(e){e[e.Alphabetically=0]="Alphabetically",e[e.AcquirementTime=1]="AcquirementTime"}(r||(r={}))},function(e,t,a){"use strict";a.d(t,"c",(function(){return o})),a.d(t,"b",(function(){return i})),a.d(t,"e",(function(){return s})),a.d(t,"a",(function(){return l})),a.d(t,"d",(function(){return c}));var n=a(5),r=a(37);function o(e,t,a,o){return e*r.a.MoneyGainPerLevel*Math.pow(1.035,t-1)*((a+5)/6)*o*n.a.HacknetNodeMoney}function i(e,t=1,a=1){const n=Math.round(t);if(isNaN(n)||n<1)return 0;if(e>=r.a.MaxLevel)return 1/0;const o=r.a.UpgradeLevelMult;let i=0,s=e;for(let e=0;e=r.a.MaxRam)return 1/0;let o=0,i=Math.round(Math.log2(e)),s=e;for(let e=0;e=r.a.MaxCores)return 1/0;const o=r.a.CoreBaseCost,i=r.a.UpgradeCoreMult;let s=0,l=e;for(let e=0;e1e10;return t&&Object(r.a)(n.createElement(n.Fragment,null,"Alright cheater get out of here. You're not allowed here anymore.")),t}class s extends n.Component{win(e,t){e.gainMoney(t,"casino")}reachedLimit(e){const t=e.getCasinoWinnings()>1e10;return t&&Object(r.a)(n.createElement(n.Fragment,null,"Alright cheater get out of here. You're not allowed here anymore.")),t}}},,function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));const n=!1,r=!0,o={O:[[r,r],[r,r]],I:[[r,r,r,r]],L:[[n,n,r],[r,r,r]],J:[[r,n,n],[r,r,r]],S:[[n,r,r],[r,r,n]],Z:[[r,r,n],[n,r,r]],T:[[r,r,r],[n,r,n]]}},,,,,,,function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),r=a.n(n);function o(e){return Object(n.useEffect)(()=>{function t(t){if(!t.isTrusted)return;e.onKeyDown.bind(this)(t)}return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)}),r.a.createElement(r.a.Fragment,null)}},function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(1300),r=a(0),o=a.n(r),i=a(1433),s=a(54);const l=Object(i.a)(e=>({root:{backgroundColor:e.palette.background.paper},bar:{transition:"none",backgroundColor:e.palette.primary.main}}))(n.a);function c(e){const[t,a]=Object(r.useState)(100);return Object(r.useEffect)(()=>{const t=setInterval(()=>{a(t=>(t<=0&&e.onExpire(),t-200/e.millis*100))},200);return()=>{clearInterval(t)}},[]),o.a.createElement(s.a,{item:!0,xs:12},o.a.createElement(l,{variant:"determinate",value:t,color:"primary"}))}},function(e,t,a){"use strict";function n(e,t,a){function n(e,t,n){function r(e,t,a){return(1-a)*e+a*t}for(const o of Object.keys(e))a[o]=r(e[o],t[o],n);return e}return t<0?n(e.Trivial,e.Trivial,0):t>=0&&t<1?n(e.Trivial,e.Normal,t):t>=1&&t<2?n(e.Normal,e.Hard,t-1):t>=2&&t<3?n(e.Hard,e.Impossible,t-2):n(e.Impossible,e.Impossible,0)}a.d(t,"a",(function(){return n}))},,,function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(8),r=a(195),o=a(37),i=a(15),s=a(22),l=a(357);function c(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class u{constructor(e="",t=1){c(this,"cores",1),c(this,"level",1),c(this,"moneyGainRatePerSecond",0),c(this,"onlineTimeSeconds",0),c(this,"ram",1),c(this,"totalMoneyGenerated",0),this.name=e,this.updateMoneyGainRate(t)}calculateCoreUpgradeCost(e=1,t){return Object(r.a)(this.cores,e,t)}calculateLevelUpgradeCost(e=1,t){return Object(r.b)(this.level,e,t)}calculateRamUpgradeCost(e=1,t){return Object(r.e)(this.ram,e,t)}process(e=1){const t=e*n.a.MilliPerCycle/1e3;let a=this.moneyGainRatePerSecond*t;return isNaN(a)&&(console.error(`Hacknet Node ${this.name} calculated earnings of NaN`),a=0),this.totalMoneyGenerated+=a,this.onlineTimeSeconds+=t,a}upgradeCore(e=1,t){this.cores=Math.min(o.a.MaxCores,Math.round(this.cores+e)),this.updateMoneyGainRate(t)}upgradeLevel(e=1,t){this.level=Math.min(o.a.MaxLevel,Math.round(this.level+e)),this.updateMoneyGainRate(t)}upgradeRam(e=1,t){for(let t=0;tm())return 1/0;const a=Math.max(0,Math.log(t)/Math.log(2)-6);return Math.round(t*i.a.BaseCostFor1GBOfRamServer*o.a.PurchasedServerCost*Math.pow(o.a.PurchasedServerSoftcap,a))}function u(){return Math.round(i.a.PurchasedServerLimit*o.a.PurchasedServerLimit)}function m(){const e=Math.round(i.a.PurchasedServerMaxRam*o.a.PurchasedServerMaxRam);return 1<<31-Math.clz32(e)}function h(e,t,a,o){if(!o.canAfford(a))return void Object(s.a)("You don't have enough money to purchase this server!");if(o.purchasedServers.length>=u())return void Object(s.a)("You have reached the maximum limit of "+u()+" servers. You cannot purchase any more. You can delete some of your purchased servers using the deleteServer() Netscript function in a script");if(""==e)return void Object(s.a)("You must enter a hostname for your new server!");const i=Object(r.f)({adminRights:!0,hostname:e,ip:Object(n.e)(),isConnectedTo:!1,maxRam:t,organizationName:"",purchasedByPlayer:!0});Object(n.a)(i),o.purchasedServers.push(i.hostname);const l=o.getHomeComputer();l.serversOnNetwork.push(i.hostname),i.serversOnNetwork.push(l.hostname),o.loseMoney(a,"servers"),Object(s.a)("Server successfully purchased with hostname "+i.hostname)}function d(e){const t=e.getUpgradeHomeRamCost();if(!e.canAfford(t))return void Object(s.a)("You do not have enough money to purchase additional RAM for your home computer");const a=e.getHomeComputer();a.maxRam>=i.a.HomeComputerMaxRam?Object(s.a)("You cannot upgrade your home computer RAM because it is at its maximum possible value"):(a.maxRam*=2,e.loseMoney(t,"servers"))}},function(e,t,a){"use strict";a.d(t,"a",(function(){return i})),a.d(t,"c",(function(){return s})),a.d(t,"b",(function(){return l}));var n=a(15),r=a(22),o=a(79);class i{get filename(){return this.fn}set filename(e){this.fn=e}constructor(e="",t=""){this.fn=(e.endsWith(".txt")?e:e+".txt").replace(/\s+/g,""),this.text=t}append(e){this.text+=e}download(){const e=this.fn,t=new Blob([this.text],{type:"text/plain"}),a=window.navigator;if(a.msSaveOrOpenBlob)a.msSaveOrOpenBlob(t,e);else{const e=document.createElement("a"),a=URL.createObjectURL(t);e.href=a,e.download=this.fn,document.body.appendChild(e),e.click(),setTimeout(()=>{document.body.removeChild(e),window.URL.revokeObjectURL(a)},0)}}read(){return this.text}show(){Object(n.a)(`${this.fn}

${this.text}`)}toJSON(){return Object(r.b)("TextFile",this)}write(e){this.text=e}static fromJSON(e){return Object(r.a)(i,e.data)}}function s(e,t){let a=e.endsWith(".txt")?e:e+".txt";Object(o.h)(a)&&(a=Object(o.k)(a));for(const e of t.textFiles)if(e.fn===a)return e;return null}function l(e,t,a){if(null!==s(e,a))return void console.error(`A file named "${e}" already exists on server ${a.hostname}.`);const n=new i(e,t);return a.textFiles.push(n),n}r.c.constructors.TextFile=i},function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(237),r=a(126);const o={};o[r.a.BladesIntuition]=new n.a({name:r.a.BladesIntuition,desc:"Each level of this skill increases your success chance for all Contracts, Operations, and BlackOps by 3%",baseCost:3,costInc:2.1,successChanceAll:3}),o[r.a.Cloak]=new n.a({name:r.a.Cloak,desc:"Each level of this skill increases your success chance in stealth-related Contracts, Operations, and BlackOps by 5.5%",baseCost:2,costInc:1.1,successChanceStealth:5.5}),o[r.a.ShortCircuit]=new n.a({name:r.a.ShortCircuit,desc:"Each level of this skill increases your success chance in Contracts, Operations, and BlackOps that involve retirement by 5.5%",baseCost:2,costInc:2.1,successChanceKill:5.5}),o[r.a.DigitalObserver]=new n.a({name:r.a.DigitalObserver,desc:"Each level of this skill increases your success chance in all Operations and BlackOps by 4%",baseCost:2,costInc:2.1,successChanceOperation:4}),o[r.a.Tracer]=new n.a({name:r.a.Tracer,desc:"Each level of this skill increases your success chance in all Contracts by 4%",baseCost:2,costInc:2.1,successChanceContract:4}),o[r.a.Overclock]=new n.a({name:r.a.Overclock,desc:"Each level of this skill decreases the time it takes to attempt a Contract, Operation, and BlackOp by 1% (Max Level: 90)",baseCost:3,costInc:1.4,maxLvl:90,actionTime:1}),o[r.a.Reaper]=new n.a({name:r.a.Reaper,desc:"Each level of this skill increases your effective combat stats for Bladeburner actions by 2%",baseCost:2,costInc:2.1,effStr:2,effDef:2,effDex:2,effAgi:2}),o[r.a.EvasiveSystem]=new n.a({name:r.a.EvasiveSystem,desc:"Each level of this skill increases your effective dexterity and agility for Bladeburner actions by 4%",baseCost:2,costInc:2.1,effDex:4,effAgi:4}),o[r.a.Datamancer]=new n.a({name:r.a.Datamancer,desc:"Each level of this skill increases your effectiveness in synthoid population analysis and investigation by 5%. This affects all actions that can potentially increase the accuracy of your synthoid population/community estimates.",baseCost:3,costInc:1,successChanceEstimate:5}),o[r.a.CybersEdge]=new n.a({name:r.a.CybersEdge,desc:"Each level of this skill increases your max stamina by 2%",baseCost:1,costInc:3,stamina:2}),o[r.a.HandsOfMidas]=new n.a({name:r.a.HandsOfMidas,desc:"Each level of this skill increases the amount of money you receive from Contracts by 10%",baseCost:2,costInc:2.5,money:10}),o[r.a.Hyperdrive]=new n.a({name:r.a.Hyperdrive,desc:"Each level of this skill increases the experience earned from Contracts, Operations, and BlackOps by 10%",baseCost:1,costInc:2.5,expGain:10})},function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(168),r=a(860);const o={};n.b.forEach(e=>{o[e.name]=new r.a(e.name,e.cost,e.upgType,e.mults)})},function(e,t,a){"use strict";a.d(t,"b",(function(){return i})),a.d(t,"c",(function(){return s})),a.d(t,"d",(function(){return l})),a.d(t,"a",(function(){return c}));var n=a(138),r=a(74),o=a(8);function i(e,t,a){if(isNaN(t)||t<=0||!(e instanceof n.a))return null;t=Math.min(t,e.maxShares);return a===r.a.Long?t*e.getAskPrice()+o.a.StockMarketCommission:t*e.getBidPrice()+o.a.StockMarketCommission}function s(e,t,a){if(isNaN(t)||t<=0||!(e instanceof n.a))return null;t=Math.min(t,e.maxShares);if(a===r.a.Long)return t*e.getBidPrice()-o.a.StockMarketCommission;return t*e.playerAvgShortPx+((e.playerAvgShortPx-e.getAskPrice())*t-o.a.StockMarketCommission)}function l(e,t){if(isNaN(t)||t<=0||!(e instanceof n.a))return;t=Math.min(t,e.maxShares);const a=e.shareTxUntilMovement;if(t<=a)return e.shareTxUntilMovement-=t,void(e.shareTxUntilMovement<=0&&(e.shareTxUntilMovement=e.shareTxForMovement,e.influenceForecast(.006),e.influenceForecastForecast(e.mv/100*.006)));const r=t-a;let o=1+Math.ceil(r/e.shareTxForMovement);e.shareTxUntilMovement=e.shareTxForMovement-(t-e.shareTxUntilMovement)%e.shareTxForMovement,(e.shareTxUntilMovement===e.shareTxForMovement||e.shareTxUntilMovement<=0)&&(++o,e.shareTxUntilMovement=e.shareTxForMovement);const i=.006*(o-1),s=i*(e.mv/100);e.influenceForecast(i),e.influenceForecastForecast(s)}function c(e,t,a){if(!(e instanceof n.a))return 0;const i=t===r.a.Long,s=a-o.a.StockMarketCommission,l=i?e.getAskPrice():e.getBidPrice();return Math.floor(s/l)}},function(e,t,a){"use strict";a.d(t,"b",(function(){return c})),a.d(t,"a",(function(){return u}));var n=a(5),r=a(25),o=a(8),i=a(166),s=a(265);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function c(){return{hack:0,str:0,def:0,dex:0,agi:0,cha:0,money:0}}class u{constructor(){l(this,"hacking",1),l(this,"strength",1),l(this,"defense",1),l(this,"dexterity",1),l(this,"agility",1),l(this,"charisma",1),l(this,"intelligence",1),l(this,"hp",10),l(this,"max_hp",10),l(this,"hacking_exp",0),l(this,"strength_exp",0),l(this,"defense_exp",0),l(this,"dexterity_exp",0),l(this,"agility_exp",0),l(this,"charisma_exp",0),l(this,"intelligence_exp",0),l(this,"hacking_mult",1),l(this,"strength_mult",1),l(this,"defense_mult",1),l(this,"dexterity_mult",1),l(this,"agility_mult",1),l(this,"charisma_mult",1),l(this,"hacking_exp_mult",1),l(this,"strength_exp_mult",1),l(this,"defense_exp_mult",1),l(this,"dexterity_exp_mult",1),l(this,"agility_exp_mult",1),l(this,"charisma_exp_mult",1),l(this,"hacking_chance_mult",1),l(this,"hacking_speed_mult",1),l(this,"hacking_money_mult",1),l(this,"hacking_grow_mult",1),l(this,"company_rep_mult",1),l(this,"faction_rep_mult",1),l(this,"crime_money_mult",1),l(this,"crime_success_mult",1),l(this,"work_money_mult",1),l(this,"hacknet_node_money_mult",1),l(this,"hacknet_node_purchase_cost_mult",1),l(this,"hacknet_node_ram_cost_mult",1),l(this,"hacknet_node_core_cost_mult",1),l(this,"hacknet_node_level_cost_mult",1),l(this,"bladeburner_max_stamina_mult",1),l(this,"bladeburner_stamina_gain_mult",1),l(this,"bladeburner_analysis_mult",1),l(this,"bladeburner_success_chance_mult",1),l(this,"augmentations",[]),l(this,"queuedAugmentations",[]),l(this,"city",r.a.Sector12)}applyAugmentation(e){for(const t of Object.keys(e.mults))null==this[t]?console.warn("Augmentation has unrecognized multiplier property: "+t):this[t]*=e.mults[t]}calculateStat(e,t=1){return Object(i.b)(e,t)}getFactionFieldWorkRepGain(){return.9*(this.hacking/o.a.MaxSkillLevel+this.strength/o.a.MaxSkillLevel+this.defense/o.a.MaxSkillLevel+this.dexterity/o.a.MaxSkillLevel+this.agility/o.a.MaxSkillLevel+this.charisma/o.a.MaxSkillLevel)/5.5*this.faction_rep_mult}getFactionHackingWorkRepGain(){return this.hacking/o.a.MaxSkillLevel*this.faction_rep_mult}getFactionSecurityWorkRepGain(){return.9*(this.hacking/o.a.MaxSkillLevel+this.strength/o.a.MaxSkillLevel+this.defense/o.a.MaxSkillLevel+this.dexterity/o.a.MaxSkillLevel+this.agility/o.a.MaxSkillLevel)/4.5*this.faction_rep_mult}resetMultipliers(){this.hacking_mult=1,this.strength_mult=1,this.defense_mult=1,this.dexterity_mult=1,this.agility_mult=1,this.charisma_mult=1,this.hacking_exp_mult=1,this.strength_exp_mult=1,this.defense_exp_mult=1,this.dexterity_exp_mult=1,this.agility_exp_mult=1,this.charisma_exp_mult=1,this.company_rep_mult=1,this.faction_rep_mult=1,this.crime_money_mult=1,this.crime_success_mult=1,this.work_money_mult=1}updateStatLevels(){this.hacking=Math.max(1,Math.floor(this.calculateStat(this.hacking_exp,this.hacking_mult*n.a.HackingLevelMultiplier))),this.strength=Math.max(1,Math.floor(this.calculateStat(this.strength_exp,this.strength_mult*n.a.StrengthLevelMultiplier))),this.defense=Math.max(1,Math.floor(this.calculateStat(this.defense_exp,this.defense_mult*n.a.DefenseLevelMultiplier))),this.dexterity=Math.max(1,Math.floor(this.calculateStat(this.dexterity_exp,this.dexterity_mult*n.a.DexterityLevelMultiplier))),this.agility=Math.max(1,Math.floor(this.calculateStat(this.agility_exp,this.agility_mult*n.a.AgilityLevelMultiplier))),this.charisma=Math.max(1,Math.floor(this.calculateStat(this.charisma_exp,this.charisma_mult*n.a.CharismaLevelMultiplier)));const e=this.hp/this.max_hp;this.max_hp=Math.floor(10+this.defense/10),this.hp=Math.round(this.max_hp*e)}getIntelligenceBonus(e){return Object(s.a)(this.intelligence,e)}}},,,,,,function(e,t,a){"use strict";a.d(t,"a",(function(){return s})),a.d(t,"b",(function(){return l}));var n=a(0),r=a.n(n),o=a(5);class i{constructor(e,t,a,n="",o=r.a.createElement(r.a.Fragment,null)){this.number=e,this.difficulty=t,this.name=a,this.desc=n,this.info=o}}const s={};function l(e){null==e.bitNodeN&&(e.bitNodeN=1);for(const e of Object.keys(o.a))o.a.hasOwnProperty(e)&&(o.a[e]=1);switch(o.a.StaneksGiftExtraSize=0,e.bitNodeN){case 1:break;case 2:o.a.HackingLevelMultiplier=.8,o.a.ServerGrowthRate=.8,o.a.ServerMaxMoney=.2,o.a.ServerStartingMoney=.4,o.a.CrimeMoney=3,o.a.InfiltrationMoney=3,o.a.FactionWorkRepGain=.5,o.a.FactionPassiveRepGain=0,o.a.StaneksGiftPowerMultiplier=2,o.a.StaneksGiftExtraSize=-6,o.a.PurchasedServerSoftcap=1.3,o.a.CorporationSoftCap=.9,o.a.WorldDaemonDifficulty=5;break;case 3:o.a.HackingLevelMultiplier=.8,o.a.RepToDonateToFaction=.5,o.a.AugmentationRepCost=3,o.a.AugmentationMoneyCost=3,o.a.ServerMaxMoney=.2,o.a.ServerStartingMoney=.2,o.a.ServerGrowthRate=.2,o.a.ScriptHackMoney=.2,o.a.CompanyWorkMoney=.25,o.a.CrimeMoney=.25,o.a.HacknetNodeMoney=.25,o.a.HomeComputerRamCost=1.5,o.a.PurchasedServerCost=2,o.a.StaneksGiftPowerMultiplier=.75,o.a.StaneksGiftExtraSize=-2,o.a.PurchasedServerSoftcap=1.3,o.a.GangSoftcap=.9,o.a.WorldDaemonDifficulty=2;break;case 4:o.a.ServerMaxMoney=.15,o.a.ServerStartingMoney=.75,o.a.ScriptHackMoney=.2,o.a.CompanyWorkMoney=.1,o.a.CrimeMoney=.2,o.a.HacknetNodeMoney=.05,o.a.CompanyWorkExpGain=.5,o.a.ClassGymExpGain=.5,o.a.FactionWorkExpGain=.5,o.a.HackExpGain=.4,o.a.CrimeExpGain=.5,o.a.FactionWorkRepGain=.75,o.a.StaneksGiftPowerMultiplier=1.5,o.a.StaneksGiftExtraSize=0,o.a.PurchasedServerSoftcap=1.2,o.a.WorldDaemonDifficulty=3;break;case 5:o.a.ServerMaxMoney=2,o.a.ServerStartingSecurity=2,o.a.ServerStartingMoney=.5,o.a.ScriptHackMoney=.15,o.a.HacknetNodeMoney=.2,o.a.CrimeMoney=.5,o.a.InfiltrationRep=1.5,o.a.InfiltrationMoney=1.5,o.a.AugmentationMoneyCost=2,o.a.HackExpGain=.5,o.a.CorporationValuation=.5,o.a.StaneksGiftPowerMultiplier=1.3,o.a.StaneksGiftExtraSize=0,o.a.PurchasedServerSoftcap=1.2,o.a.WorldDaemonDifficulty=1.5;break;case 6:o.a.HackingLevelMultiplier=.35,o.a.ServerMaxMoney=.4,o.a.ServerStartingMoney=.5,o.a.ServerStartingSecurity=1.5,o.a.ScriptHackMoney=.75,o.a.CompanyWorkMoney=.5,o.a.CrimeMoney=.75,o.a.InfiltrationMoney=.75,o.a.CorporationValuation=.2,o.a.HacknetNodeMoney=.2,o.a.FactionPassiveRepGain=0,o.a.HackExpGain=.25,o.a.DaedalusAugsRequirement=1.166,o.a.PurchasedServerSoftcap=2,o.a.StaneksGiftPowerMultiplier=.5,o.a.StaneksGiftExtraSize=2,o.a.GangSoftcap=.7,o.a.CorporationSoftCap=.9,o.a.WorldDaemonDifficulty=2;break;case 7:o.a.BladeburnerRank=.6,o.a.BladeburnerSkillCost=2,o.a.AugmentationMoneyCost=3,o.a.HackingLevelMultiplier=.35,o.a.ServerMaxMoney=.4,o.a.ServerStartingMoney=.5,o.a.ServerStartingSecurity=1.5,o.a.ScriptHackMoney=.5,o.a.CompanyWorkMoney=.5,o.a.CrimeMoney=.75,o.a.InfiltrationMoney=.75,o.a.CorporationValuation=.2,o.a.HacknetNodeMoney=.2,o.a.FactionPassiveRepGain=0,o.a.HackExpGain=.25,o.a.FourSigmaMarketDataCost=2,o.a.FourSigmaMarketDataApiCost=2,o.a.DaedalusAugsRequirement=1.166,o.a.PurchasedServerSoftcap=2,o.a.StaneksGiftPowerMultiplier=.9,o.a.StaneksGiftExtraSize=-1,o.a.GangSoftcap=.7,o.a.CorporationSoftCap=.9,o.a.WorldDaemonDifficulty=2;break;case 8:o.a.ScriptHackMoney=.3,o.a.ScriptHackMoneyGain=0,o.a.ManualHackMoney=0,o.a.CompanyWorkMoney=0,o.a.CrimeMoney=0,o.a.HacknetNodeMoney=0,o.a.InfiltrationMoney=0,o.a.RepToDonateToFaction=0,o.a.CorporationValuation=0,o.a.CodingContractMoney=0,o.a.StaneksGiftExtraSize=-7,o.a.PurchasedServerSoftcap=4,o.a.GangSoftcap=0,o.a.CorporationSoftCap=0;break;case 9:o.a.HackingLevelMultiplier=.5,o.a.StrengthLevelMultiplier=.45,o.a.DefenseLevelMultiplier=.45,o.a.DexterityLevelMultiplier=.45,o.a.AgilityLevelMultiplier=.45,o.a.CharismaLevelMultiplier=.45,o.a.PurchasedServerLimit=0,o.a.HomeComputerRamCost=5,o.a.CrimeMoney=.5,o.a.ScriptHackMoney=.1,o.a.HackExpGain=.05,o.a.ServerStartingMoney=.1,o.a.ServerMaxMoney=.1,o.a.ServerStartingSecurity=2.5,o.a.CorporationValuation=.5,o.a.FourSigmaMarketDataCost=5,o.a.FourSigmaMarketDataApiCost=4,o.a.BladeburnerRank=.9,o.a.BladeburnerSkillCost=1.2,o.a.StaneksGiftPowerMultiplier=.5,o.a.StaneksGiftExtraSize=2,o.a.GangSoftcap=.8,o.a.CorporationSoftCap=.7,o.a.WorldDaemonDifficulty=2;break;case 10:o.a.HackingLevelMultiplier=.35,o.a.StrengthLevelMultiplier=.4,o.a.DefenseLevelMultiplier=.4,o.a.DexterityLevelMultiplier=.4,o.a.AgilityLevelMultiplier=.4,o.a.CharismaLevelMultiplier=.4,o.a.CompanyWorkMoney=.5,o.a.CrimeMoney=.5,o.a.HacknetNodeMoney=.5,o.a.ManualHackMoney=.5,o.a.ScriptHackMoney=.5,o.a.CodingContractMoney=.5,o.a.InfiltrationMoney=.5,o.a.CorporationValuation=.5,o.a.AugmentationMoneyCost=5,o.a.AugmentationRepCost=2,o.a.HomeComputerRamCost=1.5,o.a.PurchasedServerCost=5,o.a.PurchasedServerLimit=.6,o.a.PurchasedServerMaxRam=.5,o.a.BladeburnerRank=.8,o.a.StaneksGiftPowerMultiplier=.75,o.a.StaneksGiftExtraSize=-3,o.a.PurchasedServerSoftcap=1.1,o.a.GangSoftcap=.9,o.a.CorporationSoftCap=.9,o.a.WorldDaemonDifficulty=2;break;case 11:o.a.HackingLevelMultiplier=.6,o.a.HackExpGain=.5,o.a.ServerMaxMoney=.1,o.a.ServerStartingMoney=.1,o.a.ServerGrowthRate=.2,o.a.ServerWeakenRate=2,o.a.CrimeMoney=3,o.a.CompanyWorkMoney=.5,o.a.HacknetNodeMoney=.1,o.a.AugmentationMoneyCost=2,o.a.InfiltrationMoney=2.5,o.a.InfiltrationRep=2.5,o.a.CorporationValuation=.1,o.a.CodingContractMoney=.25,o.a.FourSigmaMarketDataCost=4,o.a.FourSigmaMarketDataApiCost=4,o.a.PurchasedServerSoftcap=2,o.a.CorporationSoftCap=.9,o.a.WorldDaemonDifficulty=1.5;break;case 12:{let t=0;for(let a=0;a

C`JNT#k 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