diff --git a/dist/engine.bundle.js b/dist/engine.bundle.js index 23b54d185..59d2808cb 100644 --- a/dist/engine.bundle.js +++ b/dist/engine.bundle.js @@ -1,33179 +1,4 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 2: 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // add entry module to deferred list -/******/ deferredModules.push([15,0]); -/******/ // run deferred modules when ready -/******/ return checkDeferredModules(); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */ -/*!***********************!*\ - !*** ./src/Player.js ***! - \***********************/ -/*! exports provided: Player, loadPlayer */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Player", function() { return Player; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadPlayer", function() { return loadPlayer; }); -/* harmony import */ var _Corporation_Corporation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Corporation/Corporation */ 122); -/* harmony import */ var _Corporation_Corporation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_Corporation_Corporation__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _PersonObjects_Player_PlayerObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PersonObjects/Player/PlayerObject */ 794); -/* harmony import */ var _Exploits_Exploit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Exploits/Exploit */ 168); -/* harmony import */ var _Exploits_Exploit__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Exploits_Exploit__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/JSONReviver */ 29); -/* harmony import */ var decimal_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! decimal.js */ 65); - - - - - - - - -let Player = new _PersonObjects_Player_PlayerObject__WEBPACK_IMPORTED_MODULE_1__[/* PlayerObject */ "a"](); - -function loadPlayer(saveString) { - Player = JSON.parse(saveString, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_3__["Reviver"]); - - // Parse Decimal.js objects - Player.money = new decimal_js__WEBPACK_IMPORTED_MODULE_4__["default"](Player.money); - - if (Player.corporation instanceof _Corporation_Corporation__WEBPACK_IMPORTED_MODULE_0__["Corporation"]) { - Player.corporation.funds = new decimal_js__WEBPACK_IMPORTED_MODULE_4__["default"](Player.corporation.funds); - Player.corporation.revenue = new decimal_js__WEBPACK_IMPORTED_MODULE_4__["default"](Player.corporation.revenue); - Player.corporation.expenses = new decimal_js__WEBPACK_IMPORTED_MODULE_4__["default"](Player.corporation.expenses); - - for (var i = 0; i < Player.corporation.divisions.length; ++i) { - var ind = Player.corporation.divisions[i]; - ind.lastCycleRevenue = new decimal_js__WEBPACK_IMPORTED_MODULE_4__["default"](ind.lastCycleRevenue); - ind.lastCycleExpenses = new decimal_js__WEBPACK_IMPORTED_MODULE_4__["default"](ind.lastCycleExpenses); - ind.thisCycleRevenue = new decimal_js__WEBPACK_IMPORTED_MODULE_4__["default"](ind.thisCycleRevenue); - ind.thisCycleExpenses = new decimal_js__WEBPACK_IMPORTED_MODULE_4__["default"](ind.thisCycleExpenses); - } - } - - Player.exploits = Object(_Exploits_Exploit__WEBPACK_IMPORTED_MODULE_2__["sanitizeExploits"])(Player.exploits); -} - - -/***/ }), -/* 3 */, -/* 4 */ -/*!****************************************************!*\ - !*** ./src/Augmentation/data/AugmentationNames.ts ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AugmentationNames = void 0; -exports.AugmentationNames = { - Targeting1: "Augmented Targeting I", - Targeting2: "Augmented Targeting II", - Targeting3: "Augmented Targeting III", - SyntheticHeart: "Synthetic Heart", - SynfibrilMuscle: "Synfibril Muscle", - CombatRib1: "Combat Rib I", - CombatRib2: "Combat Rib II", - CombatRib3: "Combat Rib III", - NanofiberWeave: "Nanofiber Weave", - SubdermalArmor: "NEMEAN Subdermal Weave", - WiredReflexes: "Wired Reflexes", - GrapheneBoneLacings: "Graphene Bone Lacings", - BionicSpine: "Bionic Spine", - GrapheneBionicSpine: "Graphene Bionic Spine Upgrade", - BionicLegs: "Bionic Legs", - GrapheneBionicLegs: "Graphene Bionic Legs Upgrade", - SpeechProcessor: "Speech Processor Implant", - TITN41Injection: "TITN-41 Gene-Modification Injection", - EnhancedSocialInteractionImplant: "Enhanced Social Interaction Implant", - BitWire: "BitWire", - ArtificialBioNeuralNetwork: "Artificial Bio-neural Network Implant", - ArtificialSynapticPotentiation: "Artificial Synaptic Potentiation", - EnhancedMyelinSheathing: "Enhanced Myelin Sheathing", - SynapticEnhancement: "Synaptic Enhancement Implant", - NeuralRetentionEnhancement: "Neural-Retention Enhancement", - DataJack: "DataJack", - ENM: "Embedded Netburner Module", - ENMCore: "Embedded Netburner Module Core Implant", - ENMCoreV2: "Embedded Netburner Module Core V2 Upgrade", - ENMCoreV3: "Embedded Netburner Module Core V3 Upgrade", - ENMAnalyzeEngine: "Embedded Netburner Module Analyze Engine", - ENMDMA: "Embedded Netburner Module Direct Memory Access Upgrade", - Neuralstimulator: "Neuralstimulator", - NeuralAccelerator: "Neural Accelerator", - CranialSignalProcessorsG1: "Cranial Signal Processors - Gen I", - CranialSignalProcessorsG2: "Cranial Signal Processors - Gen II", - CranialSignalProcessorsG3: "Cranial Signal Processors - Gen III", - CranialSignalProcessorsG4: "Cranial Signal Processors - Gen IV", - CranialSignalProcessorsG5: "Cranial Signal Processors - Gen V", - NeuronalDensification: "Neuronal Densification", - NuoptimalInjectorImplant: "Nuoptimal Nootropic Injector Implant", - SpeechEnhancement: "Speech Enhancement", - FocusWire: "FocusWire", - PCDNI: "PC Direct-Neural Interface", - PCDNIOptimizer: "PC Direct-Neural Interface Optimization Submodule", - PCDNINeuralNetwork: "PC Direct-Neural Interface NeuroNet Injector", - PCMatrix: "PCMatrix", - ADRPheromone1: "ADR-V1 Pheromone Gene", - ADRPheromone2: "ADR-V2 Pheromone Gene", - ShadowsSimulacrum: "The Shadow's Simulacrum", - HacknetNodeCPUUpload: "Hacknet Node CPU Architecture Neural-Upload", - HacknetNodeCacheUpload: "Hacknet Node Cache Architecture Neural-Upload", - HacknetNodeNICUpload: "Hacknet Node NIC Architecture Neural-Upload", - HacknetNodeKernelDNI: "Hacknet Node Kernel Direct-Neural Interface", - HacknetNodeCoreDNI: "Hacknet Node Core Direct-Neural Interface", - NeuroFluxGovernor: "NeuroFlux Governor", - Neurotrainer1: "Neurotrainer I", - Neurotrainer2: "Neurotrainer II", - Neurotrainer3: "Neurotrainer III", - Hypersight: "HyperSight Corneal Implant", - LuminCloaking1: "LuminCloaking-V1 Skin Implant", - LuminCloaking2: "LuminCloaking-V2 Skin Implant", - HemoRecirculator: "HemoRecirculator", - SmartSonar: "SmartSonar Implant", - PowerRecirculator: "Power Recirculation Core", - QLink: "QLink", - TheRedPill: "The Red Pill", - SPTN97: "SPTN-97 Gene Modification", - HiveMind: "ECorp HVMind Implant", - CordiARCReactor: "CordiARC Fusion Reactor", - SmartJaw: "SmartJaw", - Neotra: "Neotra", - Xanipher: "Xanipher", - nextSENS: "nextSENS Gene Modification", - OmniTekInfoLoad: "OmniTek InfoLoad", - PhotosyntheticCells: "Photosynthetic Cells", - Neurolink: "BitRunners Neurolink", - TheBlackHand: "The Black Hand", - UnstableCircadianModulator: "Unstable Circadian Modulator", - CRTX42AA: "CRTX42-AA Gene Modification", - Neuregen: "Neuregen Gene Modification", - CashRoot: "CashRoot Starter Kit", - NutriGen: "NutriGen Implant", - INFRARet: "INFRARET Enhancement", - DermaForce: "DermaForce Particle Barrier", - GrapheneBrachiBlades: "Graphene BranchiBlades Upgrade", - GrapheneBionicArms: "Graphene Bionic Arms Upgrade", - BrachiBlades: "BrachiBlades", - BionicArms: "Bionic Arms", - SNA: "Social Negotiation Assistant (S.N.A)", - HydroflameLeftArm: "Hydroflame Left Arm", - EsperEyewear: "EsperTech Bladeburner Eyewear", - EMS4Recombination: "EMS-4 Recombination", - OrionShoulder: "ORION-MKIV Shoulder", - HyperionV1: "Hyperion Plasma Cannon V1", - HyperionV2: "Hyperion Plasma Cannon V2", - GolemSerum: "GOLEM Serum", - VangelisVirus: "Vangelis Virus", - VangelisVirus3: "Vangelis Virus 3.0", - INTERLINKED: "I.N.T.E.R.L.I.N.K.E.D", - BladeRunner: "Blade's Runners", - BladeArmor: "BLADE-51b Tesla Armor", - BladeArmorPowerCells: "BLADE-51b Tesla Armor: Power Cells Upgrade", - BladeArmorEnergyShielding: "BLADE-51b Tesla Armor: Energy Shielding Upgrade", - BladeArmorUnibeam: "BLADE-51b Tesla Armor: Unibeam Upgrade", - BladeArmorOmnibeam: "BLADE-51b Tesla Armor: Omnibeam Upgrade", - BladeArmorIPU: "BLADE-51b Tesla Armor: IPU Upgrade", - BladesSimulacrum: "The Blade's Simulacrum", - //Wasteland Augs - //PepBoy: "P.E.P-Boy", Plasma Energy Projection System - //PepBoyForceField Generates plasma force fields - //PepBoyBlasts Generate high density plasma concussive blasts - //PepBoyDataStorage STore more data on pep boy, -}; - - -/***/ }), -/* 5 */, -/* 6 */, -/* 7 */ -/*!*********************************!*\ - !*** ./src/ui/numeralFormat.ts ***! - \*********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.numeralWrapper = void 0; -const numeral_1 = __importDefault(__webpack_require__(/*! numeral */ 99)); -__webpack_require__(/*! numeral/locales/bg */ 1158); -__webpack_require__(/*! numeral/locales/cs */ 1157); -__webpack_require__(/*! numeral/locales/da-dk */ 1156); -__webpack_require__(/*! numeral/locales/de */ 1155); -__webpack_require__(/*! numeral/locales/en-au */ 1154); -__webpack_require__(/*! numeral/locales/en-gb */ 1153); -__webpack_require__(/*! numeral/locales/es */ 1152); -__webpack_require__(/*! numeral/locales/fr */ 1151); -__webpack_require__(/*! numeral/locales/hu */ 1150); -__webpack_require__(/*! numeral/locales/it */ 1149); -__webpack_require__(/*! numeral/locales/lv */ 1148); -__webpack_require__(/*! numeral/locales/no */ 1147); -__webpack_require__(/*! numeral/locales/pl */ 1146); -__webpack_require__(/*! numeral/locales/ru */ 1145); -/* eslint-disable class-methods-use-this */ -const extraFormats = [1e15, 1e18, 1e21, 1e24, 1e27, 1e30]; -const extraNotations = ['q', 'Q', 's', 'S', 'o', 'n']; -class NumeralFormatter { - constructor() { - // Default Locale - this.defaultLocale = "en"; - this.defaultLocale = 'en'; - } - updateLocale(l) { - if (numeral_1.default.locale(l) == null) { - console.warn(`Invalid locale for numeral: ${l}`); - numeral_1.default.locale(this.defaultLocale); - return false; - } - return true; - } - format(n, format) { - // numeraljs doesnt properly format numbers that are too big or too small - if (Math.abs(n) < 1e-6) { - n = 0; - } - const answer = numeral_1.default(n).format(format); - if (answer === 'NaN') { - return `${n}`; - } - return answer; - } - formatBigNumber(n) { - return this.format(n, "0.000a"); - } - // TODO: leverage numeral.js to do it. This function also implies you can - // use this format in some text field but you can't. ( "1t" will parse but - // "1s" will not) - formatReallyBigNumber(n, decimalPlaces = 3) { - if (n === Infinity) - return "∞"; - for (let i = 0; i < extraFormats.length; i++) { - if (extraFormats[i] < n && n <= extraFormats[i] * 1000) { - return this.format(n / extraFormats[i], '0.' + '0'.repeat(decimalPlaces)) + extraNotations[i]; - } - } - if (Math.abs(n) < 1000) { - return this.format(n, '0.' + '0'.repeat(decimalPlaces)); - } - const str = this.format(n, '0.' + '0'.repeat(decimalPlaces) + 'a'); - if (str === "NaNt") - return this.format(n, '0.' + ' '.repeat(decimalPlaces) + 'e+0'); - return str; - } - formatHp(n) { - if (n < 1e6) { - return this.format(n, "0,0"); - } - return this.formatReallyBigNumber(n); - } - formatMoney(n) { - return "$" + this.formatReallyBigNumber(n); - } - formatSkill(n) { - if (n < 1e15) { - return this.format(n, "0,0"); - } - return this.formatReallyBigNumber(n); - } - formatExp(n) { - return this.formatReallyBigNumber(n); - } - formatHashes(n) { - return this.formatReallyBigNumber(n); - } - formatReputation(n) { - return this.formatReallyBigNumber(n); - } - formatFavor(n) { - return this.format(n, "0,0"); - } - formatRAM(n) { - return this.format(n, "0.00") + "GB"; - } - formatPercentage(n, decimalPlaces = 2) { - const formatter = "0." + "0".repeat(decimalPlaces) + "%"; - return this.format(n, formatter); - } - formatServerSecurity(n) { - return this.format(n, "0,0.000"); - } - formatRespect(n) { - return this.formatReallyBigNumber(n, 5); - } - formatWanted(n) { - return this.formatReallyBigNumber(n, 5); - } - formatMultiplier(n) { - return this.format(n, "0,0.00"); - } - formatSleeveShock(n) { - return this.format(n, "0,0.000"); - } - formatSleeveSynchro(n) { - return this.format(n, "0,0.000"); - } - formatSleeveMemory(n) { - return this.format(n, "0"); - } - formatPopulation(n) { - return this.format(n, "0.000a"); - } - formatStamina(n) { - return this.format(n, "0.0"); - } - formatShares(n) { - if (n < 1000) { - return this.format(n, "0"); - } - return this.formatReallyBigNumber(n); - } - formatInfiltrationSecurity(n) { - return this.formatReallyBigNumber(n); - } - formatThreads(n) { - return this.format(n, "0,0"); - } - parseMoney(s) { - // numeral library does not handle formats like 1e10 well (returns 110), - // so if both return a valid number, return the biggest one - const numeralValue = numeral_1.default(s).value(); - const parsed = parseFloat(s); - if (isNaN(parsed) && numeralValue === null) { - return NaN; - } - else if (isNaN(parsed)) { - return numeralValue; - } - else if (numeralValue === null) { - return parsed; - } - else { - return Math.max(numeralValue, parsed); - } - } -} -exports.numeralWrapper = new NumeralFormatter(); - - -/***/ }), -/* 8 */ -/*!***********************************!*\ - !*** ./src/ui/postToTerminal.tsx ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.postContent = exports.postElement = exports.hackProgressPost = exports.hackProgressBarPost = exports.postError = exports.post = void 0; -const server_1 = __webpack_require__(/*! react-dom/server */ 398); -const getElementById_1 = __webpack_require__(/*! ../../utils/uiHelpers/getElementById */ 190); -/** - * Adds some output to the terminal. - * @param input Text or HTML to output to the terminal - */ -function post(input) { - postContent(input); -} -exports.post = post; -function postError(input) { - postContent(`ERROR: ${input}`, { color: "#ff2929" }); -} -exports.postError = postError; -/** - * Adds some output to the terminal with an identifier of "hack-progress-bar" - * @param input Text or HTML to output to the terminal - */ -function hackProgressBarPost(input) { - postContent(input, { id: "hack-progress-bar" }); -} -exports.hackProgressBarPost = hackProgressBarPost; -/** - * Adds some output to the terminal with an identifier of "hack-progress" - * @param input Text or HTML to output to the terminal - */ -function hackProgressPost(input) { - postContent(input, { id: "hack-progress" }); -} -exports.hackProgressPost = hackProgressPost; -function postElement(element) { - postContent(server_1.renderToStaticMarkup(element)); -} -exports.postElement = postElement; -function postContent(input, config = {}) { - // tslint:disable-next-line:max-line-length - const style = `color: ${config.color != null ? config.color : "var(--my-font-color)"}; background-color:var(--my-background-color);${config.id === undefined ? " white-space:pre-wrap;" : ""}`; - // tslint:disable-next-line:max-line-length - const content = `
Stats tab on " +
- "the main navigation menu (left-hand side of the screen)");
- nextBtn.style.display = "none";
-
- // Flash 'Stats' menu and set its tutorial click handler
- statsMainMenu.setAttribute("class", "flashing-button");
- statsMainMenu.addEventListener("click", function() {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadCharacterContent();
- iTutorialNextStep(); //Opening the character page will go to the next step
- return false;
- });
- break;
- case iTutorialSteps.CharacterPage:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadCharacterContent();
- iTutorialSetText("The Stats page shows a lot of important information about your progress, " +
- "such as your skills, money, and bonuses. ")
- nextBtn.style.display = "inline-block";
- break;
- case iTutorialSteps.CharacterGoToTerminalPage:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadCharacterContent();
- iTutorialSetText("Let's head to your computer's terminal by clicking the Terminal tab on the " +
- "main navigation menu.");
- nextBtn.style.display = "none";
-
- // Flash 'Terminal' menu and set its tutorial click handler
- terminalMainMenu.setAttribute("class", "flashing-button");
- terminalMainMenu.addEventListener("click", function() {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialNextStep();
- return false;
- });
- break;
- case iTutorialSteps.TerminalIntro:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("The Terminal is used to interface with your home computer as well as " +
- "all of the other machines around the world.");
- nextBtn.style.display = "inline-block";
- break;
- case iTutorialSteps.TerminalHelp:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("Let's try it out. Start by entering the help command into the Terminal " +
- "(Don't forget to press Enter after typing the command)");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalLs:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("The help command displays a list of all available Terminal commands, how to use them, " +
- "and a description of what they do. ls command.");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalScan:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText(" ls is a basic command that shows files " +
- "on the computer. Right now, it shows that you have a program called NUKE.exe on your computer. " +
- "We'll get to what this does later. scan command.");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalScanAnalyze1:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("The scan command shows all available network connections. In other words, " +
- "it displays a list of all servers that can be connected to from your " +
- "current machine. A server is identified by its hostname. scan-analyze command gives some more detailed information about servers on the " +
- "network. Try it now!");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalScanAnalyze2:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("You just ran scan-analyze with a depth of one. This command shows more detailed " +
- "information about each server that you can connect to (servers that are a distance of " +
- "one node away). scan-analyze with " +
- "a higher depth. Let's try a depth of two with the following command: scan-analyze 2.")
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalConnect:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("Now you can see information about all servers that are up to two nodes away, as well " +
- "as figure out how to navigate to those servers through the network. You can only connect to " +
- "a server that is one node away. To connect to a machine, use the connect [hostname] command.scan-analyze command, we can see that the n00dles server is " +
- "only one node away. Let's connect so it now using: connect n00dles");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalAnalyze:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("You are now connected to another machine! What can you do now? You can hack it!analyze command.");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalNuke:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("When the analyze command finishes running it will show useful information " +
- "about hacking the server. NUKE.exe program that we saw earlier on your " +
- "home computer is a virus that will grant you root access to a machine if there are enough " +
- "open ports.analyze results shows that there do not need to be any open ports " +
- "on this machine for the NUKE virus to work, so go ahead and run the virus using the " +
- "run NUKE.exe command.");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalManualHack:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("You now have root access! You can hack the server using the hack command. " +
- "Try doing that now.");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalHackingMechanics:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("You are now attempting to hack the server. Performing a hack takes time and " +
- "only has a certain percentage chance " +
- "of success. This time and success chance is determined by a variety of factors, including " +
- "your hacking skill and the server's security level.nano " +
- "command. Scripts must end with the .script extension. Let's make a script now by " +
- "entering nano n00dles.script after the hack command finishes running (Sidenote: Pressing ctrl + c" +
- " will end a command like hack early)");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalTypeScript:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadScriptEditorContent("n00dles.script", "");
- iTutorialSetText("This is the script editor. You can use it to program your scripts. Scripts are " +
- "written in a simplified version of javascript. Copy and paste the following code into the script editor: " +
- "while(true) {\n" +
- " hack('n00dles');\n" +
- "}" +
- "For anyone with basic programming experience, this code should be straightforward. " +
- "This script will continuously hack the n00dles server.free command.");
- nextBtn.style.display = "none"; // next step triggered by terminal commmand
- break;
- case iTutorialSteps.TerminalRunScript:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("We have 4GB of free RAM on this machine, which is enough to run our " +
- "script. Let's run our script using run n00dles.script.");
- nextBtn.style.display = "none"; // next step triggered by terminal commmand
- break;
- case iTutorialSteps.TerminalGoToActiveScriptsPage:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("Your script is now running! " +
- "It will continuously run in the background and will automatically stop if " +
- "the code ever completes (the n00dles.script will never complete because it " +
- "runs an infinite loop). Active Scripts link in the main navigation menu.");
- nextBtn.style.display = "none";
-
- // Flash 'Active Scripts' menu and set its tutorial click handler
- activeScriptsMainMenu.setAttribute("class", "flashing-button");
- activeScriptsMainMenu.addEventListener("click", function() {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadActiveScriptsContent();
- iTutorialNextStep();
- return false;
- });
- break;
- case iTutorialSteps.ActiveScriptsPage:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadActiveScriptsContent();
- iTutorialSetText("This page displays information about all of your scripts that are " +
- "running across every server. You can use this to gauge how well " +
- "your scripts are doing. Let's go back to the Terminal");
- nextBtn.style.display = "none";
-
- // Flash 'Terminal' button and set its tutorial click handler
- terminalMainMenu.setAttribute("class", "flashing-button");
- terminalMainMenu.addEventListener("click", function() {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialNextStep();
- return false;
- });
- break;
- case iTutorialSteps.ActiveScriptsToTerminal:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("One last thing about scripts, each active script contains logs that detail " +
- "what it's doing. We can check these logs using the tail command. Do that " +
- "now for the script we just ran by typing tail n00dles.script");
- nextBtn.style.display = "none"; // next step triggered by terminal command
- break;
- case iTutorialSteps.TerminalTailScript:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTerminalContent();
- iTutorialSetText("The log for this script won't show much right now (it might show nothing at all) because it " +
- "just started running...but check back again in a few minutes! Tutorial link in the " +
- "main navigation menu to look at the documentation. " +
- "If you are an experienced JavaScript " +
- "developer, I would highly suggest you check out the section on " +
- "NetscriptJS/Netscript 2.0, it's faster and more powerful.Hacknet page through the main navigation menu now.");
- nextBtn.style.display = "none";
-
- // Flash 'Hacknet' menu and set its tutorial click handler
- hacknetMainMenu.setAttribute("class", "flashing-button");
- hacknetMainMenu.addEventListener("click", function() {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadHacknetNodesContent();
- iTutorialNextStep();
- return false;
- });
- break;
- case iTutorialSteps.HacknetNodesIntroduction:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadHacknetNodesContent();
- iTutorialSetText("here you can purchase new Hacknet Nodes and upgrade your " +
- "existing ones. Let's purchase a new one now.");
- nextBtn.style.display = "none"; // Next step triggered by purchaseHacknet() (HacknetNode.js)
- break;
- case iTutorialSteps.HacknetNodesGoToWorldPage:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadHacknetNodesContent();
- iTutorialSetText("You just purchased a Hacknet Node! This Hacknet Node will passively " +
- "earn you money over time, both online and offline. When you get enough " +
- " money, you can upgrade " +
- "your newly-purchased Hacknet Node below.City page through the main navigation menu.");
- nextBtn.style.display = "none";
-
- // Flash 'City' menu and set its tutorial click handler
- cityMainMenu.setAttribute("class", "flashing-button");
- cityMainMenu.addEventListener("click", function() {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadLocationContent();
- iTutorialNextStep();
- return false;
- });
- break;
- case iTutorialSteps.WorldDescription:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadLocationContent();
- iTutorialSetText("This page lists all of the different locations you can currently " +
- "travel to. Each location has something that you can do. " +
- "There's a lot of content out in the world, make sure " +
- "you explore and discover!Tutorial link in the main navigation menu.");
- nextBtn.style.display = "none";
-
- // Flash 'Tutorial' menu and set its tutorial click handler
- tutorialMainMenu.setAttribute("class", "flashing-button");
- tutorialMainMenu.addEventListener("click", function() {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTutorialContent();
- iTutorialNextStep();
- return false;
- });
- break;
- case iTutorialSteps.TutorialPageInfo:
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].loadTutorialContent();
- iTutorialSetText("This page contains a lot of different documentation about the game's " +
- "content and mechanics. I know it's a lot, but I highly suggest you read " +
- "(or at least skim) through this before you start playing. That's the end of the tutorial. " +
- "Hope you enjoy the game!");
- nextBtn.style.display = "inline-block";
- nextBtn.innerHTML = "Finish Tutorial";
- break;
- case iTutorialSteps.End:
- iTutorialEnd();
- break;
- default:
- throw new Error("Invalid tutorial step");
- }
-
- if (ITutorial.stepIsDone[ITutorial.currStep] === true) {
- nextBtn.style.display = "inline-block";
- }
-}
-
-// Go to the next step and evaluate it
-function iTutorialNextStep() {
- // Special behavior for certain steps
- if (ITutorial.currStep === iTutorialSteps.GoToCharacterPage) {
- document.getElementById("stats-menu-link").removeAttribute("class");
- }
- if (ITutorial.currStep === iTutorialSteps.CharacterGoToTerminalPage) {
- document.getElementById("terminal-menu-link").removeAttribute("class");
- }
- if (ITutorial.currStep === iTutorialSteps.TerminalGoToActiveScriptsPage) {
- document.getElementById("active-scripts-menu-link").removeAttribute("class");
- }
- if (ITutorial.currStep === iTutorialSteps.ActiveScriptsPage) {
- document.getElementById("terminal-menu-link").removeAttribute("class");
- }
- if (ITutorial.currStep === iTutorialSteps.GoToHacknetNodesPage) {
- document.getElementById("hacknet-nodes-menu-link").removeAttribute("class");
- }
- if (ITutorial.currStep === iTutorialSteps.HacknetNodesGoToWorldPage) {
- document.getElementById("city-menu-link").removeAttribute("class");
- }
- if (ITutorial.currStep === iTutorialSteps.WorldDescription) {
- document.getElementById("tutorial-menu-link").removeAttribute("class");
- }
-
- ITutorial.stepIsDone[ITutorial.currStep] = true;
- if (ITutorial.currStep < iTutorialSteps.End) {
- ITutorial.currStep += 1;
- }
- iTutorialEvaluateStep();
-}
-
-// Go to previous step and evaluate
-function iTutorialPrevStep() {
- if (ITutorial.currStep > iTutorialSteps.Start) {
- ITutorial.currStep -= 1;
- }
- iTutorialEvaluateStep();
-}
-
-function iTutorialEnd() {
- // Re-enable auto save
- if (_Settings_Settings__WEBPACK_IMPORTED_MODULE_2__["Settings"].AutosaveInterval === 0) {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].Counters.autoSaveCounter = Infinity;
- } else {
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].Counters.autoSaveCounter = _Settings_Settings__WEBPACK_IMPORTED_MODULE_2__["Settings"].AutosaveInterval * 5;
- }
-
- // Initialize references to main menu links
- // We have to call initializeMainMenuLinks() again because the Interactive Tutorial
- // re-creates Main menu links with clearEventListeners()
- if (!Object(_ui_MainMenu_Links__WEBPACK_IMPORTED_MODULE_3__["initializeMainMenuLinks"])()) {
- const errorMsg = "Failed to initialize Main Menu Links. Please try refreshing the page. " +
- "If that doesn't work, report the issue to the developer";
- Object(_utils_helpers_exceptionAlert__WEBPACK_IMPORTED_MODULE_5__["exceptionAlert"])(new Error(errorMsg));
- console.error(errorMsg);
- return;
- }
- _engine__WEBPACK_IMPORTED_MODULE_0__["Engine"].init();
-
- ITutorial.currStep = iTutorialSteps.End;
- ITutorial.isRunning = false;
- document.getElementById("interactive-tutorial-container").style.display = "none";
-
- // Create a popup with final introductory stuff
- const popupId = "interactive-tutorial-ending-popup";
- const txt = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_7__["createElement"])("p", {
- innerHTML:
- "If you are new to the game, the following links may be useful for you!FAILED
- Contract is now self-destructing"); - serv.removeContract(contract); - } else { - Object(_ui_postToTerminal__WEBPACK_IMPORTED_MODULE_40__["post"])(`ContractFAILED
- ${contract.getMaxNumTries() - contract.tries} tries remaining`); - } - - break; - - case _CodingContracts__WEBPACK_IMPORTED_MODULE_7__["CodingContractResult"].Cancelled: - default: - Object(_ui_postToTerminal__WEBPACK_IMPORTED_MODULE_40__["post"])("Contract cancelled"); - break; - } - - Terminal.contractOpen = false; - } -}; - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ 143))) - -/***/ }), -/* 75 */, -/* 76 */ -/*!************************************!*\ - !*** ./src/utils/SetTimeoutRef.ts ***! - \************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.setTimeoutRef = void 0; -// This is a reference to the native setTimeout() function -// setTimeout() is used in various places around the game's source code. -// This reference is used to make sure that if players alter window.setTimeout() -// through NetscriptJS, then the game will still function properly -exports.setTimeoutRef = window.setTimeout.bind(window); - - -/***/ }), -/* 77 */, -/* 78 */ -/*!**************************************!*\ - !*** ./src/Hacknet/HacknetServer.ts ***! - \**************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HacknetServer = void 0; -/** - * Hacknet Servers - Reworked Hacknet Node mechanic for BitNode-9 - */ -const Constants_1 = __webpack_require__(/*! ../Constants */ 11); -const BaseServer_1 = __webpack_require__(/*! ../Server/BaseServer */ 680); -const Constants_2 = __webpack_require__(/*! ./data/Constants */ 34); -const HacknetServers_1 = __webpack_require__(/*! ./formulas/HacknetServers */ 139); -const IPAddress_1 = __webpack_require__(/*! ../../utils/IPAddress */ 399); -const JSONReviver_1 = __webpack_require__(/*! ../../utils/JSONReviver */ 29); -class HacknetServer extends BaseServer_1.BaseServer { - constructor(params = { hostname: "", ip: IPAddress_1.createRandomIp() }) { - super(params); - // Cache level. Affects hash Capacity - this.cache = 1; - // Number of cores. Improves hash production - this.cores = 1; - // Number of hashes that can be stored by this Hacknet Server - this.hashCapacity = 0; - // Hashes produced per second - this.hashRate = 0; - // Similar to Node level. Improves hash production - this.level = 1; - // How long this HacknetServer has existed, in seconds - this.onlineTimeSeconds = 0; - // Total number of hashes earned by this server - this.totalHashesGenerated = 0; - this.maxRam = 1; - this.updateHashCapacity(); - } - calculateCacheUpgradeCost(levels) { - return HacknetServers_1.calculateCacheUpgradeCost(this.cache, levels); - } - calculateCoreUpgradeCost(levels, costMult) { - return HacknetServers_1.calculateCoreUpgradeCost(this.cores, levels, costMult); - } - calculateLevelUpgradeCost(levels, costMult) { - return HacknetServers_1.calculateLevelUpgradeCost(this.level, levels, costMult); - } - calculateRamUpgradeCost(levels, costMult) { - return HacknetServers_1.calculateRamUpgradeCost(this.maxRam, levels, costMult); - } - // Process this Hacknet Server in the game loop. Returns the number of hashes generated - process(numCycles = 1) { - const seconds = numCycles * Constants_1.CONSTANTS.MilliPerCycle / 1000; - return this.hashRate * seconds; - } - upgradeCache(levels) { - this.cache = Math.min(Constants_2.HacknetServerConstants.MaxCache, Math.round(this.cache + levels)); - this.updateHashCapacity(); - } - upgradeCore(levels, prodMult) { - this.cores = Math.min(Constants_2.HacknetServerConstants.MaxCores, Math.round(this.cores + levels)); - this.updateHashRate(prodMult); - } - upgradeLevel(levels, prodMult) { - this.level = Math.min(Constants_2.HacknetServerConstants.MaxLevel, Math.round(this.level + levels)); - this.updateHashRate(prodMult); - } - upgradeRam(levels, prodMult) { - for (let i = 0; i < levels; ++i) { - this.maxRam *= 2; - } - this.maxRam = Math.min(Constants_2.HacknetServerConstants.MaxRam, Math.round(this.maxRam)); - this.updateHashRate(prodMult); - return true; - } - // Whenever a script is run, we must update this server's hash rate - runScript(script, prodMult) { - super.runScript(script); - if (prodMult != null && typeof prodMult === "number") { - this.updateHashRate(prodMult); - } - } - updateHashCapacity() { - this.hashCapacity = 32 * Math.pow(2, this.cache); - } - updateHashRate(prodMult) { - this.hashRate = HacknetServers_1.calculateHashGainRate(this.level, this.ramUsed, this.maxRam, this.cores, prodMult); - if (isNaN(this.hashRate)) { - this.hashRate = 0; - console.error(`Error calculating Hacknet Server hash production. This is a bug. Please report to game dev`, false); - } - } - // Serialize the current object to a JSON save state - toJSON() { - return JSONReviver_1.Generic_toJSON("HacknetServer", this); - } - // Initializes a HacknetServer Object from a JSON save state - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - static fromJSON(value) { - return JSONReviver_1.Generic_fromJSON(HacknetServer, value.data); - } -} -exports.HacknetServer = HacknetServer; -JSONReviver_1.Reviver.constructors.HacknetServer = HacknetServer; - - -/***/ }), -/* 79 */ -/*!**************************************************!*\ - !*** ./src/Augmentation/AugmentationHelpers.jsx ***! - \**************************************************/ -/*! exports provided: displayAugmentationsContent, isRepeatableAug, installAugmentations, initAugmentations, applyAugmentation, augmentationExists */ -/*! exports used: applyAugmentation, augmentationExists, displayAugmentationsContent, initAugmentations, installAugmentations, isRepeatableAug */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return displayAugmentationsContent; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return isRepeatableAug; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return installAugmentations; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return initAugmentations; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return applyAugmentation; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return augmentationExists; }); -/* harmony import */ var _Augmentation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Augmentation */ 16); -/* harmony import */ var _Augmentation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_Augmentation__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _Augmentations__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Augmentations */ 12); -/* harmony import */ var _Augmentations__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Augmentations__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _PlayerOwnedAugmentation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PlayerOwnedAugmentation */ 196); -/* harmony import */ var _PlayerOwnedAugmentation__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_PlayerOwnedAugmentation__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _data_AugmentationNames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data/AugmentationNames */ 4); -/* harmony import */ var _data_AugmentationNames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_data_AugmentationNames__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _ui_Root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui/Root */ 795); -/* harmony import */ var _ui_Root__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_ui_Root__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _BitNode_BitNodeMultipliers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../BitNode/BitNodeMultipliers */ 19); -/* harmony import */ var _BitNode_BitNodeMultipliers__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_BitNode_BitNodeMultipliers__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Constants */ 11); -/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_Constants__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _Faction_Factions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Faction/Factions */ 17); -/* harmony import */ var _Faction_Factions__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_Faction_Factions__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _Player__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Player */ 2); -/* harmony import */ var _Prestige__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Prestige */ 173); -/* harmony import */ var _SaveObject__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../SaveObject */ 114); -/* harmony import */ var _ui_navigationTracking__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../ui/navigationTracking */ 18); -/* harmony import */ var _ui_navigationTracking__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_ui_navigationTracking__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var _ExportBonus__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../ExportBonus */ 150); -/* harmony import */ var _ExportBonus__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_ExportBonus__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var _Programs_Programs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../Programs/Programs */ 30); -/* harmony import */ var _Programs_Programs__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_Programs_Programs__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var _SourceFile_SourceFileFlags__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../SourceFile/SourceFileFlags */ 37); -/* harmony import */ var _SourceFile_SourceFileFlags__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_SourceFile_SourceFileFlags__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _utils_DialogBox__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../utils/DialogBox */ 13); -/* harmony import */ var _utils_DialogBox__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_15__); -/* harmony import */ var _utils_helpers_clearObject__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../utils/helpers/clearObject */ 768); -/* harmony import */ var _utils_helpers_clearObject__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_clearObject__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _Casino_RNG__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../Casino/RNG */ 283); -/* harmony import */ var _Casino_RNG__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_Casino_RNG__WEBPACK_IMPORTED_MODULE_17__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! react */ 0); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_18__); -/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! react-dom */ 21); -/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_19__); - - - - - - - - - - - - - - - - - - - - - -function AddToAugmentations(aug) { - var name = aug.name; - _Augmentations__WEBPACK_IMPORTED_MODULE_1__["Augmentations"][name] = aug; -} - -function getRandomBonus() { - var bonuses = [{ - bonuses: { - hacking_chance_mult: 1.25, - hacking_speed_mult: 1.10, - hacking_money_mult: 1.25, - hacking_grow_mult: 1.1 - }, - description: "Increases the player's hacking chance by 25%.Stats tab on the main navigation menu (left-hand side of the screen)"),s.style.display="none",t.setAttribute("class","flashing-button"),t.addEventListener("click",function(){return a.Engine.loadCharacterContent(),_(),!1});break;case h.CharacterPage:a.Engine.loadCharacterContent(),k("The Stats page shows a lot of important information about your progress, such as your skills, money, and bonuses. "),s.style.display="inline-block";break;case h.CharacterGoToTerminalPage:a.Engine.loadCharacterContent(),k("Let's head to your computer's terminal by clicking the Terminal tab on the main navigation menu."),s.style.display="none",e.setAttribute("class","flashing-button"),e.addEventListener("click",function(){return a.Engine.loadTerminalContent(),_(),!1});break;case h.TerminalIntro:a.Engine.loadTerminalContent(),k("The Terminal is used to interface with your home computer as well as all of the other machines around the world."),s.style.display="inline-block";break;case h.TerminalHelp:a.Engine.loadTerminalContent(),k("Let's try it out. Start by entering the help command into the Terminal (Don't forget to press Enter after typing the command)"),s.style.display="none";break;case h.TerminalLs:a.Engine.loadTerminalContent(),k("The help command displays a list of all available Terminal commands, how to use them, and a description of what they do. ls command."),s.style.display="none";break;case h.TerminalScan:a.Engine.loadTerminalContent(),k(" ls is a basic command that shows files on the computer. Right now, it shows that you have a program called NUKE.exe on your computer. We'll get to what this does later. scan command."),s.style.display="none";break;case h.TerminalScanAnalyze1:a.Engine.loadTerminalContent(),k("The scan command shows all available network connections. In other words, it displays a list of all servers that can be connected to from your current machine. A server is identified by its hostname. scan-analyze command gives some more detailed information about servers on the network. Try it now!"),s.style.display="none";break;case h.TerminalScanAnalyze2:a.Engine.loadTerminalContent(),k("You just ran scan-analyze with a depth of one. This command shows more detailed information about each server that you can connect to (servers that are a distance of one node away). scan-analyze with a higher depth. Let's try a depth of two with the following command: scan-analyze 2."),s.style.display="none";break;case h.TerminalConnect:a.Engine.loadTerminalContent(),k("Now you can see information about all servers that are up to two nodes away, as well as figure out how to navigate to those servers through the network. You can only connect to a server that is one node away. To connect to a machine, use the connect [hostname] command.scan-analyze command, we can see that the n00dles server is only one node away. Let's connect so it now using: connect n00dles"),s.style.display="none";break;case h.TerminalAnalyze:a.Engine.loadTerminalContent(),k("You are now connected to another machine! What can you do now? You can hack it!analyze command."),s.style.display="none";break;case h.TerminalNuke:a.Engine.loadTerminalContent(),k("When the analyze command finishes running it will show useful information about hacking the server. NUKE.exe program that we saw earlier on your home computer is a virus that will grant you root access to a machine if there are enough open ports.analyze results shows that there do not need to be any open ports on this machine for the NUKE virus to work, so go ahead and run the virus using the run NUKE.exe command."),s.style.display="none";break;case h.TerminalManualHack:a.Engine.loadTerminalContent(),k("You now have root access! You can hack the server using the hack command. Try doing that now."),s.style.display="none";break;case h.TerminalHackingMechanics:a.Engine.loadTerminalContent(),k("You are now attempting to hack the server. Performing a hack takes time and only has a certain percentage chance of success. This time and success chance is determined by a variety of factors, including your hacking skill and the server's security level.nano command. Scripts must end with the .script extension. Let's make a script now by entering nano n00dles.script after the hack command finishes running (Sidenote: Pressing ctrl + c will end a command like hack early)"),s.style.display="none";break;case h.TerminalTypeScript:a.Engine.loadScriptEditorContent("n00dles.script",""),k("This is the script editor. You can use it to program your scripts. Scripts are written in a simplified version of javascript. Copy and paste the following code into the script editor: while(true) {\n hack('n00dles');\n}For anyone with basic programming experience, this code should be straightforward. This script will continuously hack the n00dles server.free command."),s.style.display="none";break;case h.TerminalRunScript:a.Engine.loadTerminalContent(),k("We have 4GB of free RAM on this machine, which is enough to run our script. Let's run our script using run n00dles.script."),s.style.display="none";break;case h.TerminalGoToActiveScriptsPage:a.Engine.loadTerminalContent(),k("Your script is now running! It will continuously run in the background and will automatically stop if the code ever completes (the n00dles.script will never complete because it runs an infinite loop). Active Scripts link in the main navigation menu."),s.style.display="none",n.setAttribute("class","flashing-button"),n.addEventListener("click",function(){return a.Engine.loadActiveScriptsContent(),_(),!1});break;case h.ActiveScriptsPage:a.Engine.loadActiveScriptsContent(),k("This page displays information about all of your scripts that are running across every server. You can use this to gauge how well your scripts are doing. Let's go back to the Terminal"),s.style.display="none",e.setAttribute("class","flashing-button"),e.addEventListener("click",function(){return a.Engine.loadTerminalContent(),_(),!1});break;case h.ActiveScriptsToTerminal:a.Engine.loadTerminalContent(),k("One last thing about scripts, each active script contains logs that detail what it's doing. We can check these logs using the tail command. Do that now for the script we just ran by typing tail n00dles.script"),s.style.display="none";break;case h.TerminalTailScript:a.Engine.loadTerminalContent(),k("The log for this script won't show much right now (it might show nothing at all) because it just started running...but check back again in a few minutes! Tutorial link in the main navigation menu to look at the documentation. If you are an experienced JavaScript developer, I would highly suggest you check out the section on NetscriptJS/Netscript 2.0, it's faster and more powerful.Hacknet page through the main navigation menu now."),s.style.display="none",r.setAttribute("class","flashing-button"),r.addEventListener("click",function(){return a.Engine.loadHacknetNodesContent(),_(),!1});break;case h.HacknetNodesIntroduction:a.Engine.loadHacknetNodesContent(),k("here you can purchase new Hacknet Nodes and upgrade your existing ones. Let's purchase a new one now."),s.style.display="none";break;case h.HacknetNodesGoToWorldPage:a.Engine.loadHacknetNodesContent(),k("You just purchased a Hacknet Node! This Hacknet Node will passively earn you money over time, both online and offline. When you get enough money, you can upgrade your newly-purchased Hacknet Node below.City page through the main navigation menu."),s.style.display="none",i.setAttribute("class","flashing-button"),i.addEventListener("click",function(){return a.Engine.loadLocationContent(),_(),!1});break;case h.WorldDescription:a.Engine.loadLocationContent(),k("This page lists all of the different locations you can currently travel to. Each location has something that you can do. There's a lot of content out in the world, make sure you explore and discover!Tutorial link in the main navigation menu."),s.style.display="none",o.setAttribute("class","flashing-button"),o.addEventListener("click",function(){return a.Engine.loadTutorialContent(),_(),!1});break;case h.TutorialPageInfo:a.Engine.loadTutorialContent(),k("This page contains a lot of different documentation about the game's content and mechanics. I know it's a lot, but I highly suggest you read (or at least skim) through this before you start playing. That's the end of the tutorial. Hope you enjoy the game!"),s.style.display="inline-block",s.innerHTML="Finish Tutorial";break;case h.End:b();break;default:throw new Error("Invalid tutorial step")}!0===f.stepIsDone[f.currStep]&&(s.style.display="inline-block")}function _(){f.currStep===h.GoToCharacterPage&&document.getElementById("stats-menu-link").removeAttribute("class"),f.currStep===h.CharacterGoToTerminalPage&&document.getElementById("terminal-menu-link").removeAttribute("class"),f.currStep===h.TerminalGoToActiveScriptsPage&&document.getElementById("active-scripts-menu-link").removeAttribute("class"),f.currStep===h.ActiveScriptsPage&&document.getElementById("terminal-menu-link").removeAttribute("class"),f.currStep===h.GoToHacknetNodesPage&&document.getElementById("hacknet-nodes-menu-link").removeAttribute("class"),f.currStep===h.HacknetNodesGoToWorldPage&&document.getElementById("city-menu-link").removeAttribute("class"),f.currStep===h.WorldDescription&&document.getElementById("tutorial-menu-link").removeAttribute("class"),f.stepIsDone[f.currStep]=!0,f.currStepFAILED
- Contract is now self-destructing"),t.removeContract(n)):Object(_ui_postToTerminal__WEBPACK_IMPORTED_MODULE_40__.post)(`ContractFAILED
- ${n.getMaxNumTries()-n.tries} tries remaining`);break;case _CodingContracts__WEBPACK_IMPORTED_MODULE_7__.CodingContractResult.Cancelled:default:Object(_ui_postToTerminal__WEBPACK_IMPORTED_MODULE_40__.post)("Contract cancelled")}Terminal.contractOpen=!1}}}).call(this,__webpack_require__(138))},,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setTimeoutRef=void 0,t.setTimeoutRef=window.setTimeout.bind(window)},,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.HacknetServer=void 0;const a=n(11),r=n(671),i=n(33),o=n(134),s=n(394),l=n(29);class c extends r.BaseServer{constructor(e={hostname:"",ip:s.createRandomIp()}){super(e),this.cache=1,this.cores=1,this.hashCapacity=0,this.hashRate=0,this.level=1,this.onlineTimeSeconds=0,this.totalHashesGenerated=0,this.maxRam=1,this.updateHashCapacity()}calculateCacheUpgradeCost(e){return o.calculateCacheUpgradeCost(this.cache,e)}calculateCoreUpgradeCost(e,t){return o.calculateCoreUpgradeCost(this.cores,e,t)}calculateLevelUpgradeCost(e,t){return o.calculateLevelUpgradeCost(this.level,e,t)}calculateRamUpgradeCost(e,t){return o.calculateRamUpgradeCost(this.maxRam,e,t)}process(e=1){const t=e*a.CONSTANTS.MilliPerCycle/1e3;return this.hashRate*t}upgradeCache(e){this.cache=Math.min(i.HacknetServerConstants.MaxCache,Math.round(this.cache+e)),this.updateHashCapacity()}upgradeCore(e,t){this.cores=Math.min(i.HacknetServerConstants.MaxCores,Math.round(this.cores+e)),this.updateHashRate(t)}upgradeLevel(e,t){this.level=Math.min(i.HacknetServerConstants.MaxLevel,Math.round(this.level+e)),this.updateHashRate(t)}upgradeRam(e,t){for(let t=0;tWork progress:
-+{Reputation(Player.workRepGained)} rep
- -Total Stock Shares: " + numeralFormat_1.numeralWrapper.format(props.corp.totalShares, "0.000a") +
- "" +
- `Outstanding Shares: ${numeralFormat_1.numeralWrapper.format(props.corp.issuedShares, "0.000a")}
` +
- `Private Shares: ${numeralFormat_1.numeralWrapper.format(props.corp.totalShares - props.corp.issuedShares - props.corp.numShares, "0.000a")}` +
- "
{let e=Math.floor(37*this.rng.random()),t=o.createElement(o.Fragment,null),n=0,a=this.state.strategy.match(e);if(a&&Math.random()>.9)for(a=!1;this.state.strategy.match(e);)e++;a?(n=this.state.investment*this.state.strategy.payout,t=o.createElement(o.Fragment,null,"won ",l.Money(n))):(n=-this.state.investment,t=o.createElement(o.Fragment,null,"lost ",l.Money(-n))),this.win(this.props.p,n),this.setState({canPlay:!0,lock:!0,status:t,n:e}),this.reachedLimit(this.props.p)},1600))}render(){return o.createElement(o.Fragment,null,o.createElement("h1",null,this.currentNumber()),o.createElement("input",{type:"number",className:"text-input",onChange:this.updateInvestment,placeholder:"Amount to play",value:this.state.investment,disabled:!this.state.canPlay}),o.createElement("h1",null,this.state.status),o.createElement("table",null,o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement(s.StdButton,{text:"3",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(3)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"6",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(6)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"9",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(9)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"12",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(12)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"15",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(15)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"18",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(18)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"21",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(21)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"24",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(24)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"27",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(27)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"30",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(30)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"33",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(33)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"36",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(36)))}))),o.createElement("tr",null,o.createElement("td",null,o.createElement(s.StdButton,{text:"2",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(2)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"5",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(5)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"8",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(8)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"11",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(11)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"14",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(14)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"17",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(17)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"20",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(20)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"23",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(23)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"26",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(26)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"29",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(29)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"32",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(32)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"35",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(35)))}))),o.createElement("tr",null,o.createElement("td",null,o.createElement(s.StdButton,{text:"1",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(1)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"4",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(4)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"7",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(7)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"10",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(10)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"13",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(13)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"16",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(16)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"19",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(19)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"22",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(22)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"25",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(25)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"28",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(28)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"31",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(31)))})),o.createElement("td",null,o.createElement(s.StdButton,{text:"34",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(34)))}))),o.createElement("tr",null,o.createElement("td",{colSpan:4},o.createElement(s.StdButton,{text:"1 to 12",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.Third1))})),o.createElement("td",{colSpan:4},o.createElement(s.StdButton,{text:"13 to 24",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.Third2))})),o.createElement("td",{colSpan:4},o.createElement(s.StdButton,{text:"25 to 36",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.Third3))}))),o.createElement("tr",null,o.createElement("td",{colSpan:2},o.createElement(s.StdButton,{text:"Red",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.Red))})),o.createElement("td",{colSpan:2},o.createElement(s.StdButton,{text:"Black",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.Black))})),o.createElement("td",{colSpan:2},o.createElement(s.StdButton,{text:"Odd",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.Odd))})),o.createElement("td",{colSpan:2},o.createElement(s.StdButton,{text:"Even",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.Even))})),o.createElement("td",{colSpan:2},o.createElement(s.StdButton,{text:"High",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.High))})),o.createElement("td",{colSpan:2},o.createElement(s.StdButton,{text:"Low",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(f.Low))}))),o.createElement("tr",null,o.createElement("td",null,o.createElement(s.StdButton,{text:"0",disabled:!this.state.canPlay,onClick:m.trusted(()=>this.play(g(0)))}))))))}}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.CoinFlip=void 0;const o=i(n(0)),s=n(55),l=n(278),c=n(383),u=n(453),m=0,p=1e4;t.CoinFlip=class extends c.Game{constructor(e){super(e),this.state={investment:1e3,result:o.createElement("span",null," "),status:"",playLock:!1},this.play=this.play.bind(this),this.updateInvestment=this.updateInvestment.bind(this)}updateInvestment(e){let t=parseInt(e.currentTarget.value);isNaN(t)&&(t=m),t>p&&(t=p),t Total Stock Shares: "+_.numeralWrapper.format(e.corp.totalShares,"0.000a")+""+`Outstanding Shares: ${_.numeralWrapper.format(e.corp.issuedShares,"0.000a")}
Your max stamina is determined primarily by your agility stat.
Your stamina gain rate is determined by both your agility and your max stamina. Higher max stamina leads to a higher gain rate.
Once your stamina falls below 50% of its max value, it begins to negatively affect the success rate of your contracts/operations. This penalty is shown in the overview panel. If the penalty is 15%, then this means your success rate would be multipled by 85% (100 - 15).
Your max stamina and stamina gain rate can also be increased by training, or through skills and Augmentation upgrades.")}},"?"),o.default.createElement("br",null),o.default.createElement("p",null,"Stamina Penalty: ",s.formatNumber(100*(1-e.bladeburner.calculateStaminaPenalty()),1),"%"),o.default.createElement("br",null),o.default.createElement("p",null,"Team Size: ",s.formatNumber(e.bladeburner.teamSize,0)),o.default.createElement("p",null,"Team Members Lost: ",s.formatNumber(e.bladeburner.teamLost,0)),o.default.createElement("br",null),o.default.createElement("p",null,"Num Times Hospitalized: ",e.bladeburner.numHosp),o.default.createElement("p",null,"Money Lost From Hospitalizations: ",c.Money(e.bladeburner.moneyLost)),o.default.createElement("br",null),o.default.createElement("p",null,"Current City: ",e.bladeburner.city),o.default.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"Est. Synthoid Population: ",m.numeralWrapper.formatPopulation(e.bladeburner.getCurrentCity().popEst),o.default.createElement("span",{className:"tooltiptext"},"This is your Bladeburner division's estimate of how many Synthoids exist in your current city.")),o.default.createElement("div",{className:"help-tip",onClick:function(){p.dialogBoxCreate("The success rate of your contracts/operations depends on the population of Synthoids in your current city. The success rate that is shown to you is only an estimate, and it is based on your Synthoid population estimate.
Therefore, it is important that this Synthoid population estimate is accurate so that you have a better idea of your success rate for contracts/operations. Certain actions will increase the accuracy of your population estimate.
The Synthoid populations of cities can change due to your actions or random events. If random events occur, they will be logged in the Bladeburner Console.")}},"?"),o.default.createElement("br",null),o.default.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"Est. Synthoid Communities: ",s.formatNumber(e.bladeburner.getCurrentCity().comms,0),o.default.createElement("span",{className:"tooltiptext"},"This is your Bladeburner divison's estimate of how many Synthoid communities exist in your current city.")),o.default.createElement("br",null),o.default.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"City Chaos: ",s.formatNumber(e.bladeburner.getCurrentCity().chaos),o.default.createElement("span",{className:"tooltiptext"},"The city's chaos level due to tensions and conflicts between humans and Synthoids. Having too high of a chaos level can make contracts and operations harder.")),o.default.createElement("br",null),o.default.createElement("br",null),o.default.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"Bonus time: ",s.convertTimeMsToTimeElapsedString(e.bladeburner.storedCycles/l.BladeburnerConstants.CyclesPerSecond*1e3),o.default.createElement("br",null),o.default.createElement("span",{className:"tooltiptext"},"You gain bonus time while offline or when the game is inactive (e.g. when the tab is throttled by browser). Bonus time makes the Bladeburner mechanic progress faster, up to 5x the normal speed.")),o.default.createElement("p",null,"Skill Points: ",s.formatNumber(e.bladeburner.skillPoints,0)),o.default.createElement("br",null),u.StatsTable([["Aug. Success Chance mult: ",s.formatNumber(100*e.player.bladeburner_success_chance_mult,1)+"%"],["Aug. Max Stamina mult: ",s.formatNumber(100*e.player.bladeburner_max_stamina_mult,1)+"%"],["Aug. Stamina Gain mult: ",s.formatNumber(100*e.player.bladeburner_stamina_gain_mult,1)+"%"],["Aug. Field Analysis mult: ",s.formatNumber(100*e.player.bladeburner_analysis_mult,1)+"%"]]),o.default.createElement("br",null),o.default.createElement("a",{onClick:function(){const t="bladeburner-travel-popup";d.createPopup(t,g.TravelPopup,{bladeburner:e.bladeburner,popupId:t})},className:"a-link-button",style:{display:"inline-block"}},"Travel"),o.default.createElement("a",{onClick:function(){const t=h.Factions.Bladeburners;t.isMember?(e.engine.loadFactionContent(),f.displayFactionContent("Bladeburners")):e.bladeburner.rank>=l.BladeburnerConstants.RankNeededForFaction?(f.joinFaction(t),p.dialogBoxCreate("Congratulations! You were accepted into the Bladeburners faction")):p.dialogBoxCreate("You need a rank of 25 to join the Bladeburners Faction!")},className:"a-link-button tooltip",style:{display:"inline-block"}},o.default.createElement("span",{className:"tooltiptext"},"Apply to the Bladeburner Faction, or go to the faction page if you are already a member"),"Faction"),o.default.createElement("br",null),o.default.createElement("br",null))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TerritorySubpage=void 0;const r=a(n(0)),i=n(6),o=n(13),s=n(23),l=n(83);t.TerritorySubpage=function(e){function t(e){const t=100*e;return t<=0?s.formatNumber(0,2):t>=100?s.formatNumber(100,2):s.formatNumber(t,2)}const n=l.AllGangs[e.gang.facName].power,a=Object.keys(l.AllGangs).filter(t=>t!=e.gang.facName);return r.default.createElement("div",{style:{width:"70%"}},r.default.createElement("p",{className:"noselect"},"This page shows how much territory your Gang controls. This statistic is listed as a percentage, which represents how much of the total territory you control.",r.default.createElement("br",null),r.default.createElement("br",null),"Every ~20 seconds, your gang has a chance to 'clash' with other gangs. Your chance to win a clash depends on your gang's power, which is listed in the display below. Your gang's power slowly accumulates over time. The accumulation rate is determined by the stats of all Gang members you have assigned to the 'Territory Warfare' task. Gang members that are not assigned to this task do not contribute to your gang's power. Your gang also loses a small amount of power whenever you lose a clash.",r.default.createElement("br",null),r.default.createElement("br",null),"NOTE: Gang members assigned to 'Territory Warfare' can be killed during clashes. This can happen regardless of whether you win or lose the clash. A gang member being killed results in both respect and power loss for your gang.",r.default.createElement("br",null),r.default.createElement("br",null),"The amount of territory you have affects all aspects of your Gang members' production, including money, respect, and wanted level. It is very beneficial to have high territory control.",r.default.createElement("br",null),r.default.createElement("br",null)),r.default.createElement("input",{checked:e.gang.territoryWarfareEngaged,id:"warfare",type:"checkbox",style:{display:"inline-block",margin:"2px"},onChange:t=>e.gang.territoryWarfareEngaged=t.target.checked}),r.default.createElement("label",{htmlFor:"warfare",className:"tooltip noselect",style:{color:"white",display:"inline-block"}},"Engage in Territory Warfare",r.default.createElement("span",{className:"tooltiptext",style:{display:"inline-block"}},"Engaging in Territory Warfare sets your clash chance to 100%. Disengaging will cause your clash chance to gradually decrease until it reaches 0%.")),r.default.createElement("br",null),r.default.createElement("p",{style:{display:"inline-block"}},"Territory Clash Chance: ",i.numeralWrapper.formatPercentage(e.gang.territoryClashChance,3)),r.default.createElement("div",{className:"help-tip noselect",style:{display:"inline-block"},onClick:function(){o.dialogBoxCreate("This percentage represents the chance you have of 'clashing' with with another gang. If you do not wish to gain/lose territory, then keep this percentage at 0% by not engaging in territory warfare.")}},"?"),r.default.createElement("br",null),r.default.createElement("input",{checked:e.gang.notifyMemberDeath,id:"notify",type:"checkbox",style:{display:"inline-block",margin:"2px"},onChange:t=>e.gang.notifyMemberDeath=t.target.checked}),r.default.createElement("label",{htmlFor:"warfare",className:"tooltip noselect",style:{color:"white",display:"inline-block"}},"Notify about Gang Member Deaths",r.default.createElement("span",{className:"tooltiptext",style:{display:"inline-block"}},"If this is enabled, then you will receive a pop-up notifying you whenever one of your Gang Members dies in a territory clash.")),r.default.createElement("br",null),r.default.createElement("fieldset",{style:{display:"block",margin:"6px"}},r.default.createElement("p",null,r.default.createElement("b",null,r.default.createElement("u",null,e.gang.facName)),r.default.createElement("br",null),"Power: ",s.formatNumber(l.AllGangs[e.gang.facName].power,6),r.default.createElement("br",null),"Territory: ",t(l.AllGangs[e.gang.facName].territory),"%",r.default.createElement("br",null),r.default.createElement("br",null),a.map(e=>(function(e){const a=l.AllGangs[e].power,o=n/(a+n);return r.default.createElement("span",{key:e},r.default.createElement("u",null,e),r.default.createElement("br",null),"Power: ",s.formatNumber(a,6),r.default.createElement("br",null),"Territory: ",t(l.AllGangs[e].territory),"%",r.default.createElement("br",null),"Chance to win clash with this gang: ",i.numeralWrapper.formatPercentage(o,3),r.default.createElement("br",null),r.default.createElement("br",null))})(e)))))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.RecruitPopup=void 0;const o=i(n(0)),s=n(40),l=n(13);t.RecruitPopup=function(e){const[t,n]=o.useState("");function a(){""!==t?e.gang.canRecruitMember()?e.gang.recruitMember(t)?(e.onRecruit(),s.removePopup(e.popupId)):l.dialogBoxCreate("You already have a gang member with this name!"):l.dialogBoxCreate("You cannot recruit another Gang member!"):l.dialogBoxCreate("You must enter a name for your Gang member!")}function r(){s.removePopup(e.popupId)}return o.default.createElement(o.default.Fragment,null,o.default.createElement("p",{className:"noselect"},"Enter a name for your new Gang member:"),o.default.createElement("br",null),o.default.createElement("input",{autoFocus:!0,onKeyUp:function(e){13===e.keyCode&&a(),27===e.keyCode&&r()},onChange:function(e){n(e.target.value)},className:"text-input noselect",type:"text",placeholder:"unique name"}),o.default.createElement("a",{className:"std-button",onClick:a},"Recruit Gang Member"),o.default.createElement("a",{className:"std-button",onClick:r},"Cancel"))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RecruitButton=void 0;const r=a(n(0)),i=n(936),o=n(669),s=n(23),l=n(40);t.RecruitButton=function(e){if(e.gang.members.length>=o.GangConstants.MaximumGangMembers)return r.default.createElement(r.default.Fragment,null);if(!e.gang.canRecruitMember()){const t=e.gang.getRespectNeededToRecruitMember();return r.default.createElement(r.default.Fragment,null,r.default.createElement("a",{className:"a-link-button-inactive",style:{display:"inline-block",margin:"10px"}},"Recruit Gang Member"),r.default.createElement("p",{style:{margin:"10px",color:"red",display:"inline-block"}},s.formatNumber(t,2)," respect needed to recruit next member"))}return r.default.createElement(r.default.Fragment,null,r.default.createElement("a",{className:"a-link-button",onClick:function(){const t="recruit-gang-member-popup";l.createPopup(t,i.RecruitPopup,{gang:e.gang,popupId:t,onRecruit:e.onRecruit})},style:{display:"inline-block",margin:"10px"}},"Recruit Gang Member"))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TaskDescription=void 0;const r=a(n(0)),i=n(280);t.TaskDescription=function(e){const t=i.GangMemberTasks[e.member.task],n=t?t.desc:i.GangMemberTasks.Unassigned.desc;return r.default.createElement("p",{className:"inline noselect",dangerouslySetInnerHTML:{__html:n}})}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.TaskSelector=void 0;const o=i(n(0)),s=n(6),l=n(270),c=n(115);t.TaskSelector=function(e){const[t,n]=o.useState(e.member.task),a=e.gang.getAllTaskNames(),r=[["Money:",c.MoneyRate(5*e.member.calculateMoneyGain(e.gang))],["Respect:",`${s.numeralWrapper.formatRespect(5*e.member.calculateRespectGain(e.gang))} / sec`],["Wanted Level:",`${s.numeralWrapper.formatWanted(5*e.member.calculateWantedLevelGain(e.gang))} / sec`],["Total Respect:",`${s.numeralWrapper.formatRespect(e.member.earnedRespect)}`]];return o.default.createElement(o.default.Fragment,null,o.default.createElement("select",{onChange:function(t){const a=t.target.value;e.member.assignToTask(a),n(a),e.onTaskChange()},className:"dropdown noselect",value:t},o.default.createElement("option",{key:0,value:"---"},"---"),a.map((e,t)=>o.default.createElement("option",{key:t+1,value:e},e))),o.default.createElement("div",null,l.StatsTable(r)))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.AscensionPopup=void 0;const o=i(n(0)),s=n(6),l=n(40),c=n(13);t.AscensionPopup=function(e){const t=o.useState(!1)[1];o.useEffect(()=>{const e=setInterval(()=>t(e=>!e),1e3);return()=>clearInterval(e)},[]);const n=e.member.getAscensionResults();return o.default.createElement(o.default.Fragment,null,o.default.createElement("pre",null,"Are you sure you want to ascend this member? They will lose all of",o.default.createElement("br",null),"their non-Augmentation upgrades and their stats will reset back to 1.",o.default.createElement("br",null),o.default.createElement("br",null),"Furthermore, your gang will lose ",s.numeralWrapper.formatRespect(e.member.earnedRespect)," respect",o.default.createElement("br",null),o.default.createElement("br",null),"In return, they will gain the following permanent boost to stat multipliers:",o.default.createElement("br",null),"Hacking: x",s.numeralWrapper.format(n.hack,"0.000"),o.default.createElement("br",null),"Strength: x",s.numeralWrapper.format(n.str,"0.000"),o.default.createElement("br",null),"Defense: x",s.numeralWrapper.format(n.def,"0.000"),o.default.createElement("br",null),"Dexterity: x",s.numeralWrapper.format(n.dex,"0.000"),o.default.createElement("br",null),"Agility: x",s.numeralWrapper.format(n.agi,"0.000"),o.default.createElement("br",null),"Charisma: x",s.numeralWrapper.format(n.cha,"0.000"),o.default.createElement("br",null)),o.default.createElement("button",{className:"std-button",onClick:function(){e.onAscend();const t=e.gang.ascendMember(e.member);c.dialogBoxCreate(o.default.createElement("p",null,"You ascended ",e.member.name,"!",o.default.createElement("br",null),o.default.createElement("br",null),"Your gang lost ",s.numeralWrapper.formatRespect(t.respect)," respect.",o.default.createElement("br",null),o.default.createElement("br",null),e.member.name," gained the following stat multipliers for ascending:",o.default.createElement("br",null),"Hacking: x",s.numeralWrapper.format(t.hack,"0.000"),o.default.createElement("br",null),"Strength: x",s.numeralWrapper.format(t.str,"0.000"),o.default.createElement("br",null),"Defense: x",s.numeralWrapper.format(t.def,"0.000"),o.default.createElement("br",null),"Dexterity: x",s.numeralWrapper.format(t.dex,"0.000"),o.default.createElement("br",null),"Agility: x",s.numeralWrapper.format(t.agi,"0.000"),o.default.createElement("br",null),"Charisma: x",s.numeralWrapper.format(t.cha,"0.000"),o.default.createElement("br",null))),l.removePopup(e.popupId)}},"Ascend"),o.default.createElement("button",{className:"std-button",onClick:function(){l.removePopup(e.popupId)}},"Cancel"))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GangMemberStats=void 0;const r=a(n(0)),i=n(13),o=n(23),s=n(6),l=n(40),c=n(940);t.GangMemberStats=function(e){const t={hack:e.member.calculateAscensionMult(e.member.hack_asc_points),str:e.member.calculateAscensionMult(e.member.str_asc_points),def:e.member.calculateAscensionMult(e.member.def_asc_points),dex:e.member.calculateAscensionMult(e.member.dex_asc_points),agi:e.member.calculateAscensionMult(e.member.agi_asc_points),cha:e.member.calculateAscensionMult(e.member.cha_asc_points)};return r.default.createElement(r.default.Fragment,null,r.default.createElement("span",{className:"tooltiptext smallfont"},"Hk: x",s.numeralWrapper.formatMultiplier(e.member.hack_mult*t.hack),"(x",s.numeralWrapper.formatMultiplier(e.member.hack_mult)," Eq, x",s.numeralWrapper.formatMultiplier(t.hack)," Asc)",r.default.createElement("br",null),"St: x",s.numeralWrapper.formatMultiplier(e.member.str_mult*t.str),"(x",s.numeralWrapper.formatMultiplier(e.member.str_mult)," Eq, x",s.numeralWrapper.formatMultiplier(t.str)," Asc)",r.default.createElement("br",null),"Df: x",s.numeralWrapper.formatMultiplier(e.member.def_mult*t.def),"(x",s.numeralWrapper.formatMultiplier(e.member.def_mult)," Eq, x",s.numeralWrapper.formatMultiplier(t.def)," Asc)",r.default.createElement("br",null),"Dx: x",s.numeralWrapper.formatMultiplier(e.member.dex_mult*t.dex),"(x",s.numeralWrapper.formatMultiplier(e.member.dex_mult)," Eq, x",s.numeralWrapper.formatMultiplier(t.dex)," Asc)",r.default.createElement("br",null),"Ag: x",s.numeralWrapper.formatMultiplier(e.member.agi_mult*t.agi),"(x",s.numeralWrapper.formatMultiplier(e.member.agi_mult)," Eq, x",s.numeralWrapper.formatMultiplier(t.agi)," Asc)",r.default.createElement("br",null),"Ch: x",s.numeralWrapper.formatMultiplier(e.member.cha_mult*t.cha),"(x",s.numeralWrapper.formatMultiplier(e.member.cha_mult)," Eq, x",s.numeralWrapper.formatMultiplier(t.cha)," Asc)"),r.default.createElement("pre",null,"Hacking: ",o.formatNumber(e.member.hack,0)," (",s.numeralWrapper.formatExp(e.member.hack_exp)," exp)",r.default.createElement("br",null),"Strength: ",o.formatNumber(e.member.str,0)," (",s.numeralWrapper.formatExp(e.member.str_exp)," exp)",r.default.createElement("br",null),"Defense: ",o.formatNumber(e.member.def,0)," (",s.numeralWrapper.formatExp(e.member.def_exp)," exp)",r.default.createElement("br",null),"Dexterity: ",o.formatNumber(e.member.dex,0)," (",s.numeralWrapper.formatExp(e.member.dex_exp)," exp)",r.default.createElement("br",null),"Agility: ",o.formatNumber(e.member.agi,0)," (",s.numeralWrapper.formatExp(e.member.agi_exp)," exp)",r.default.createElement("br",null),"Charisma: ",o.formatNumber(e.member.cha,0)," (",s.numeralWrapper.formatExp(e.member.cha_exp)," exp)",r.default.createElement("br",null)),r.default.createElement("br",null),e.member.canAscend()&&r.default.createElement(r.default.Fragment,null,r.default.createElement("button",{className:"accordion-button noselect",onClick:function(){const t=`gang-management-ascend-member ${e.member.name}`;l.createPopup(t,c.AscensionPopup,{member:e.member,gang:e.gang,popupId:t,onAscend:e.onAscend})}},"Ascend"),r.default.createElement("div",{className:"help-tip noselect",style:{marginTop:"5px"},onClick:function(){i.dialogBoxCreate(r.default.createElement(r.default.Fragment,null,"Ascending a Gang Member resets the member's progress and stats in exchange for a permanent boost to their stat multipliers.",r.default.createElement("br",null),r.default.createElement("br",null),"The additional stat multiplier that the Gang Member gains upon ascension is based on the amount of exp they have.",r.default.createElement("br",null),r.default.createElement("br",null),"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."))}},"?")))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.GangMemberAccordionContent=void 0;const o=i(n(0)),s=n(941),l=n(939),c=n(938);t.GangMemberAccordionContent=function(e){const t=o.useState(!1)[1];return o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:"gang-member-info-div tooltip"},o.default.createElement(s.GangMemberStats,{onAscend:()=>t(e=>!e),gang:e.gang,member:e.member})),o.default.createElement("div",{className:"gang-member-info-div"},o.default.createElement(l.TaskSelector,{onTaskChange:()=>t(e=>!e),gang:e.gang,member:e.member})),o.default.createElement("div",{className:"gang-member-info-div"},o.default.createElement(c.TaskDescription,{member:e.member})))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GangMemberAccordion=void 0;const r=a(n(0)),i=n(156),o=n(942);t.GangMemberAccordion=function(e){return r.default.createElement(i.Accordion,{panelInitiallyOpened:!0,headerContent:r.default.createElement(r.default.Fragment,null,e.member.name),panelContent:r.default.createElement(o.GangMemberAccordionContent,{gang:e.gang,member:e.member})})}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.GangMemberUpgradePopup=void 0;const o=i(n(0)),s=n(23),l=n(6),c=n(169),u=n(26),m=n(40),p=n(475);function d(e){const t=o.useState(!1)[1];function n(t,n){return Object.keys(c.GangMemberUpgrades).filter(a=>{const r=c.GangMemberUpgrades[a];return!e.player.money.lt(e.gang.getUpgradeCost(r))&&(r.type===n&&!t.includes(a))}).map(e=>c.GangMemberUpgrades[e])}const a=n(e.member.upgrades,p.UpgradeType.Weapon),r=n(e.member.upgrades,p.UpgradeType.Armor),i=n(e.member.upgrades,p.UpgradeType.Vehicle),l=n(e.member.upgrades,p.UpgradeType.Rootkit),m=n(e.member.augmentations,p.UpgradeType.Augmentation);function d(e){const t=c.GangMemberUpgrades[e];return o.default.createElement("div",{key:e,className:"gang-owned-upgrade tooltip"},t.name,o.default.createElement("span",{className:"tooltiptext",dangerouslySetInnerHTML:{__html:t.desc}}))}function h(n,a=!1){return o.default.createElement("a",{key:n.name,className:"a-link-button tooltip",style:{margin:"2px",padding:"2px",display:"block",fontSize:"11px"},onClick:function(){e.member.buyUpgrade(n,e.player,e.gang),t(e=>!e)}},n.name," - ",u.Money(e.gang.getUpgradeCost(n)),o.default.createElement("span",{className:a?"tooltiptextleft":"tooltiptext",dangerouslySetInnerHTML:{__html:n.desc}}))}const f=e.member.calculateAscensionMult(e.member.hack_asc_points),g=e.member.calculateAscensionMult(e.member.str_asc_points),y=e.member.calculateAscensionMult(e.member.def_asc_points),_=e.member.calculateAscensionMult(e.member.dex_asc_points),b=e.member.calculateAscensionMult(e.member.agi_asc_points),v=e.member.calculateAscensionMult(e.member.cha_asc_points);return o.default.createElement("div",{style:{border:"1px solid white"}},o.default.createElement("h1",null,e.member.name,"(",e.member.task,")"),o.default.createElement("pre",{style:{fontSize:"14px",display:"inline-block",width:"20%"}},"Hack: ",e.member.hack," (x",s.formatNumber(e.member.hack_mult*f,2),")",o.default.createElement("br",null),"Str: ",e.member.str," (x",s.formatNumber(e.member.str_mult*g,2),")",o.default.createElement("br",null),"Def: ",e.member.def," (x",s.formatNumber(e.member.def_mult*y,2),")",o.default.createElement("br",null),"Dex: ",e.member.dex," (x",s.formatNumber(e.member.dex_mult*_,2),")",o.default.createElement("br",null),"Agi: ",e.member.agi," (x",s.formatNumber(e.member.agi_mult*b,2),")",o.default.createElement("br",null),"Cha: ",e.member.cha," (x",s.formatNumber(e.member.cha_mult*v,2),")"),o.default.createElement("div",{className:"gang-owned-upgrades-div noselect"},"Purchased Upgrades: ",e.member.upgrades.map(e=>d(e)),e.member.augmentations.map(e=>d(e))),o.default.createElement("div",{className:"noselect",style:{width:"20%",display:"inline-block"}},o.default.createElement("h2",null,"Weapons"),a.map(e=>h(e))),o.default.createElement("div",{className:"noselect",style:{width:"20%",display:"inline-block"}},o.default.createElement("h2",null,"Armor"),r.map(e=>h(e))),o.default.createElement("div",{className:"noselect",style:{width:"20%",display:"inline-block"}},o.default.createElement("h2",null,"Vehicles"),i.map(e=>h(e))),o.default.createElement("div",{className:"noselect",style:{width:"20%",display:"inline-block"}},o.default.createElement("h2",null,"Rootkits"),l.map(e=>h(e,!0))),o.default.createElement("div",{className:"noselect",style:{width:"20%",display:"inline-block"}},o.default.createElement("h2",null,"Augmentations"),m.map(e=>h(e,!0))))}t.GangMemberUpgradePopup=function(e){const t=o.useState(!1)[1],[n,a]=o.useState("");function r(t){27===t.keyCode&&m.removePopup(e.popupId)}return o.useEffect(()=>{window.addEventListener("keydown",r);const e=setInterval(()=>t(e=>!e),1e3);return()=>{clearInterval(e),window.removeEventListener("keydown",r)}},[]),o.default.createElement(o.default.Fragment,null,o.default.createElement("input",{className:"text-input noselect",value:n,placeholder:"Filter gang member",onChange:e=>a(e.target.value)}),o.default.createElement("p",{className:"tooltip",style:{marginLeft:"6px",display:"inline-block"}},"Discount: -",l.numeralWrapper.formatPercentage(1-1/e.gang.getDiscount()),o.default.createElement("span",{className:"tooltiptext noselect"},"You get a discount on equipment and upgrades based on your gang's respect and power. More respect and power leads to more discounts.")),e.gang.members.map(t=>o.default.createElement(d,{key:t.name,player:e.player,gang:e.gang,member:t})))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.GangMemberList=void 0;const o=i(n(0)),s=n(944),l=n(943),c=n(40),u=n(937);t.GangMemberList=function(e){const[t,n]=o.useState(""),a=o.useState(!1)[1],r=e.gang.members.filter(e=>e.name.indexOf(t)>-1||e.task.indexOf(t)>-1);return o.default.createElement(o.default.Fragment,null,o.default.createElement(u.RecruitButton,{onRecruit:()=>a(e=>!e),gang:e.gang}),o.default.createElement("br",null),o.default.createElement("input",{className:"text-input noselect",placeholder:"Filter gang member",style:{margin:"5px",padding:"5px"},value:t,onChange:function(e){n(e.target.value)}}),o.default.createElement("a",{className:"a-link-button",style:{display:"inline-block"},onClick:function(){c.createPopup("gang-upgrade-popup",s.GangMemberUpgradePopup,{gang:e.gang,player:e.player,popupId:"gang-upgrade-popup"})}},"Manage Equipment"),o.default.createElement("ul",null,r.map(t=>o.default.createElement("li",{key:t.name},o.default.createElement(l.GangMemberAccordion,{gang:e.gang,member:t})))))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.BonusTime=void 0;const o=i(n(0)),s=n(11),l=n(23);t.BonusTime=function(e){const t=1e3/s.CONSTANTS._idleSpeed;if(e.gang.storedCycles/t*1e3<=5e3)return o.createElement(o.Fragment,null);const n=e.gang.storedCycles/t*1e3;return o.createElement(o.Fragment,null,o.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"Bonus time: ",l.convertTimeMsToTimeElapsedString(n),o.createElement("span",{className:"tooltiptext noselect"},"You gain bonus time while offline or when the game is inactive (e.g. when the tab is throttled by the browser). Bonus time makes the Gang mechanic progress faster, up to 5x the normal speed.")),o.createElement("br",null))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GangStats=void 0;const r=a(n(0)),i=n(17),o=n(23),s=n(6),l=n(115),c=n(58),u=n(83),m=n(946);t.GangStats=function(e){const t=100*u.AllGangs[e.gang.facName].territory;let n;return n=t<=0?o.formatNumber(0,2):t>=100?o.formatNumber(100,2):o.formatNumber(t,2),r.default.createElement(r.default.Fragment,null,r.default.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"Respect: ",s.numeralWrapper.formatRespect(e.gang.respect)," (",s.numeralWrapper.formatRespect(5*e.gang.respectGainRate)," / sec)",r.default.createElement("span",{className:"tooltiptext"},"Represents the amount of respect your gang has from other gangs and criminal organizations. Your respect affects the amount of money your gang members will earn, and also determines how much reputation you are earning with your gang's corresponding Faction.")),r.default.createElement("br",null),r.default.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"Wanted Level: ",s.numeralWrapper.formatWanted(e.gang.wanted)," (",s.numeralWrapper.formatWanted(5*e.gang.wantedGainRate)," / sec)",r.default.createElement("span",{className:"tooltiptext"},"Represents how much the gang is wanted by law enforcement. The higher your gang's wanted level, the harder it will be for your gang members to make money and earn respect. Note that the minimum wanted level is 1.")),r.default.createElement("br",null),r.default.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"Wanted Level Penalty: -",o.formatNumber(100*(1-e.gang.getWantedPenalty()),2),"%",r.default.createElement("span",{className:"tooltiptext"},"Penalty for respect and money gain rates due to Wanted Level")),r.default.createElement("br",null),r.default.createElement("div",null,r.default.createElement("p",{style:{display:"inline-block"}},"Money gain rate: ",l.MoneyRate(5*e.gang.moneyGainRate))),r.default.createElement("br",null),r.default.createElement("p",{className:"tooltip",style:{display:"inline-block"}},"Territory: ",n,"%",r.default.createElement("span",{className:"tooltiptext"},"The percentage of total territory your Gang controls")),r.default.createElement("br",null),r.default.createElement("p",{style:{display:"inline-block"}},"Faction reputation: ",c.Reputation(i.Factions[e.gang.facName].playerReputation)),r.default.createElement("br",null),r.default.createElement(m.BonusTime,{gang:e.gang}))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ManagementSubpage=void 0;const r=a(n(0)),i=n(947),o=n(945);t.ManagementSubpage=function(e){return r.default.createElement("div",{style:{display:"block"}},r.default.createElement("p",{className:"noselect",style:{width:"70%"}},"This page is used to manage your gang members and get an overview of your gang's stats.",r.default.createElement("br",null),r.default.createElement("br",null),"If a gang member is not earning much money or respect, the task that you have assigned to that member might be too difficult. Consider training that member's stats or choosing an easier task. The tasks closer to the top of the dropdown list are generally easier. Alternatively, the gang member's low production might be due to the fact that your wanted level is too high. Consider assigning a few members to the '",e.gang.isHackingGang?"Ethical Hacking":"Vigilante Justice","' task to lower your wanted level.",r.default.createElement("br",null),r.default.createElement("br",null),"Installing Augmentations does NOT reset your progress with your Gang. Furthermore, after installing Augmentations, you will automatically be a member of whatever Faction you created your gang with.",r.default.createElement("br",null),r.default.createElement("br",null),"You can also manage your gang programmatically through Netscript using the Gang API"),r.default.createElement("br",null),r.default.createElement(i.GangStats,{gang:e.gang}),r.default.createElement("br",null),r.default.createElement(o.GangMemberList,{gang:e.gang,player:e.player}))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Root=void 0;const o=i(n(0)),s=n(948),l=n(935),c=n(69);t.Root=function(e){const[t,n]=o.useState(!0),a=o.useState(!1)[1];return o.useEffect(()=>{const e=setInterval(()=>a(e=>!e),1e3);return()=>clearInterval(e)},[]),o.default.createElement(o.default.Fragment,null,o.default.createElement("a",{className:"a-link-button",style:{display:"inline-block"},onClick:function(){e.engine.loadFactionContent(),c.displayFactionContent(e.gang.facName)}},"Back"),o.default.createElement("a",{className:t?"a-link-button-inactive":"a-link-button",style:{display:"inline-block"},onClick:()=>n(!0)},"Gang Management"),o.default.createElement("a",{className:t?"a-link-button":"a-link-button-inactive",style:{display:"inline-block"},onClick:()=>n(!1)},"Gang Territory"),t?o.default.createElement(s.ManagementSubpage,{gang:e.gang,player:e.player}):o.default.createElement(l.TerritorySubpage,{gang:e.gang}))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.PurchasedAugmentations=void 0;const o=i(n(0)),s=n(12),l=n(3),c=n(1),u=n(633);t.PurchasedAugmentations=function(){const e=[];let t=-1;for(let e=c.Player.queuedAugmentations.length-1;e>=0;e--)if(c.Player.queuedAugmentations[e].name===l.AugmentationNames.NeuroFluxGovernor){t=e;break}for(let n=0;n
Price Forecast indicates the probability the stock has of increasing or decreasing. A '+' forecast means the stock has a higher chance of increasing than decreasing, and a '-' means the opposite. The number of '+/-' symbols is used to illustrate the magnitude of these probabilities. For example, '+++' means that the stock has a significantly higher chance of increasing than decreasing, while '+' means that the stock only has a slightly higher chance of increasing than decreasing.
Volatility represents the maximum percentage by which a stock's price can change every tick (a tick occurs every few seconds while the game is running).
A stock's price forecast can change over time. This is also affected by volatility. The more volatile a stock is, the more its price forecast will change.")}purchaseWseAccount(){if(this.props.p.hasWseAccount)return;if(!this.props.p.canAfford(l.CONSTANTS.WSEAccountCost))return;this.props.p.hasWseAccount=!0,this.props.initStockMarket(),this.props.p.loseMoney(l.CONSTANTS.WSEAccountCost),this.props.rerender();const e=document.getElementById("world-menu-header");e instanceof HTMLElement&&(e.click(),e.click())}purchaseTixApiAccess(){this.props.p.hasTixApiAccess||this.props.p.canAfford(l.CONSTANTS.TIXAPICost)&&(this.props.p.hasTixApiAccess=!0,this.props.p.loseMoney(l.CONSTANTS.TIXAPICost),this.props.rerender())}purchase4SMarketData(){this.props.p.has4SData||this.props.p.canAfford(s.getStockMarket4SDataCost())&&(this.props.p.has4SData=!0,this.props.p.loseMoney(s.getStockMarket4SDataCost()),this.props.rerender())}purchase4SMarketDataTixApiAccess(){this.props.p.has4SDataTixApi||this.props.p.canAfford(s.getStockMarket4STixApiCost())&&(this.props.p.has4SDataTixApi=!0,this.props.p.loseMoney(s.getStockMarket4STixApiCost()),this.props.rerender())}renderPurchaseWseAccountButton(){if(this.props.p.hasWseAccount)return o.createElement(u.StdButtonPurchased,{text:"WSE Account - Purchased"});{const e=l.CONSTANTS.WSEAccountCost;return o.createElement(c.StdButton,{disabled:!this.props.p.canAfford(e),onClick:this.purchaseWseAccount,text:o.createElement(o.Fragment,null,"Buy WSE Account - ",m.Money(e))})}}renderPurchaseTixApiAccessButton(){if(this.props.p.hasTixApiAccess)return o.createElement(u.StdButtonPurchased,{text:"TIX API Access - Purchased"});{const e=l.CONSTANTS.TIXAPICost;return o.createElement(c.StdButton,{disabled:!this.props.p.canAfford(e)||!this.props.p.hasWseAccount,onClick:this.purchaseTixApiAccess,style:d,text:o.createElement(o.Fragment,null,"Buy Trade Information eXchange (TIX) API Access - ",m.Money(e))})}}renderPurchase4SMarketDataButton(){if(this.props.p.has4SData)return o.createElement(u.StdButtonPurchased,{text:"4S Market Data - Purchased",tooltip:"Lets you view additional pricing and volatility information about stocks"});{const e=s.getStockMarket4SDataCost();return o.createElement(c.StdButton,{disabled:!this.props.p.canAfford(e)||!this.props.p.hasWseAccount,onClick:this.purchase4SMarketData,text:o.createElement(o.Fragment,null,"Buy 4S Market Data Access - ",m.Money(e)),tooltip:"Lets you view additional pricing and volatility information about stocks"})}}renderPurchase4SMarketDataTixApiAccessButton(){if(this.props.p.hasTixApiAccess){if(this.props.p.has4SDataTixApi)return o.createElement(u.StdButtonPurchased,{text:"4S Market Data TIX API - Purchased",tooltip:"Let you access 4S Market Data through Netscript"});{const e=s.getStockMarket4STixApiCost();return o.createElement(c.StdButton,{disabled:!this.props.p.canAfford(e),onClick:this.purchase4SMarketDataTixApiAccess,text:o.createElement(o.Fragment,null,"Buy 4S Market Data TIX API Access - ",m.Money(e)),tooltip:"Let you access 4S Market Data through Netscript"})}}return o.createElement(c.StdButton,{disabled:!0,text:"Buy 4S Market Data TIX API Access",tooltip:"Requires TIX API Access"})}render(){return o.createElement("div",{className:"stock-market-info-and-purchases"},o.createElement("p",null,"Welcome to the World Stock Exchange (WSE)!"),o.createElement("button",{className:"std-button"},o.createElement("a",{href:"https://bitburner.readthedocs.io/en/latest/basicgameplay/stockmarket.html",target:"_blank"},"Investopedia")),o.createElement("br",null),o.createElement("p",null,"To begin trading, you must first purchase an account:"),this.renderPurchaseWseAccountButton(),o.createElement("h2",null,"Trade Information eXchange (TIX) API"),o.createElement("p",null,"TIX, short for Trade Information eXchange, is the communications protocol used by the WSE. Purchasing access to the TIX API lets you write code to create your own algorithmic/automated trading strategies."),this.renderPurchaseTixApiAccessButton(),o.createElement("h2",null,"Four Sigma (4S) Market Data Feed"),o.createElement("p",null,"Four Sigma's (4S) Market Data Feed provides information about stocks that will help your trading strategies."),this.renderPurchase4SMarketDataButton(),o.createElement("button",{className:"help-tip-big",onClick:this.handleClick4SMarketDataHelpTip},"?"),this.renderPurchase4SMarketDataTixApiAccessButton(),o.createElement("p",null,"Commission Fees: Every transaction you make has a ",m.Money(l.CONSTANTS.StockMarketCommission)," commission fee."),o.createElement("br",null),o.createElement("p",null,"WARNING: When you reset after installing Augmentations, the Stock Market is reset. You will retain your WSE Account, access to the TIX API, and 4S Market Data access. However, all of your stock positions are lost, so make sure to sell your stocks before installing Augmentations!"))}}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.StockMarketRoot=void 0;const o=i(n(0)),s=n(983),l=n(982);t.StockMarketRoot=class extends o.Component{constructor(e){super(e),this.state={rerenderFlag:!1},this.rerender=this.rerender.bind(this)}rerender(){this.setState(e=>({rerenderFlag:!e.rerenderFlag}))}render(){return o.createElement("div",null,o.createElement(s.InfoAndPurchases,{initStockMarket:this.props.initStockMarket,p:this.props.p,rerender:this.rerender}),this.props.p.hasWseAccount&&o.createElement(l.StockTickers,{buyStockLong:this.props.buyStockLong,buyStockShort:this.props.buyStockShort,cancelOrder:this.props.cancelOrder,eventEmitterForReset:this.props.eventEmitterForReset,p:this.props.p,placeOrder:this.props.placeOrder,sellStockLong:this.props.sellStockLong,sellStockShort:this.props.sellStockShort,stockMarket:this.props.stockMarket}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InitStockMetadata=void 0;const a=n(279),r=n(41);t.InitStockMetadata=[{b:!0,initPrice:{max:28e3,min:17e3},marketCap:24e11,mv:{divisor:100,max:50,min:40},name:r.LocationName.AevumECorp,otlkMag:19,spreadPerc:{divisor:10,max:5,min:1},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.AevumECorp]},{b:!0,initPrice:{max:34e3,min:24e3},marketCap:24e11,mv:{divisor:100,max:50,min:40},name:r.LocationName.Sector12MegaCorp,otlkMag:19,spreadPerc:{divisor:10,max:5,min:1},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.Sector12MegaCorp]},{b:!0,initPrice:{max:25e3,min:12e3},marketCap:16e11,mv:{divisor:100,max:80,min:70},name:r.LocationName.Sector12BladeIndustries,otlkMag:13,spreadPerc:{divisor:10,max:6,min:1},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.Sector12BladeIndustries]},{b:!0,initPrice:{max:25e3,min:1e4},marketCap:15e11,mv:{divisor:100,max:75,min:65},name:r.LocationName.AevumClarkeIncorporated,otlkMag:12,spreadPerc:{divisor:10,max:5,min:1},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.AevumClarkeIncorporated]},{b:!0,initPrice:{max:43e3,min:32e3},marketCap:18e11,mv:{divisor:100,max:70,min:60},name:r.LocationName.VolhavenOmniTekIncorporated,otlkMag:12,spreadPerc:{divisor:10,max:6,min:1},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.VolhavenOmniTekIncorporated]},{b:!0,initPrice:{max:8e4,min:5e4},marketCap:2e12,mv:{divisor:100,max:110,min:100},name:r.LocationName.Sector12FourSigma,otlkMag:17,spreadPerc:{divisor:10,max:10,min:1},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.Sector12FourSigma]},{b:!0,initPrice:{max:28e3,min:16e3},marketCap:19e11,mv:{divisor:100,max:85,min:75},name:r.LocationName.ChongqingKuaiGongInternational,otlkMag:10,spreadPerc:{divisor:10,max:7,min:1},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.ChongqingKuaiGongInternational]},{b:!0,initPrice:{max:36e3,min:29e3},marketCap:2e12,mv:{divisor:100,max:130,min:120},name:r.LocationName.AevumFulcrumTechnologies,otlkMag:16,spreadPerc:{divisor:10,max:10,min:1},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.AevumFulcrumTechnologies]},{b:!0,initPrice:{max:25e3,min:2e4},marketCap:12e11,mv:{divisor:100,max:90,min:80},name:r.LocationName.IshimaStormTechnologies,otlkMag:7,spreadPerc:{divisor:10,max:10,min:2},shareTxForMovement:{max:108e3,min:36e3},symbol:a.StockSymbols[r.LocationName.IshimaStormTechnologies]},{b:!0,initPrice:{max:19e3,min:6e3},marketCap:9e11,mv:{divisor:100,max:70,min:60},name:r.LocationName.NewTokyoDefComm,otlkMag:10,spreadPerc:{divisor:10,max:10,min:2},shareTxForMovement:{max:108e3,min:36e3},symbol:a.StockSymbols[r.LocationName.NewTokyoDefComm]},{b:!0,initPrice:{max:18e3,min:1e4},marketCap:825e9,mv:{divisor:100,max:65,min:55},name:r.LocationName.VolhavenHeliosLabs,otlkMag:9,spreadPerc:{divisor:10,max:10,min:2},shareTxForMovement:{max:108e3,min:36e3},symbol:a.StockSymbols[r.LocationName.VolhavenHeliosLabs]},{b:!0,initPrice:{max:14e3,min:8e3},marketCap:1e12,mv:{divisor:100,max:80,min:70},name:r.LocationName.NewTokyoVitaLife,otlkMag:7,spreadPerc:{divisor:10,max:10,min:2},shareTxForMovement:{max:108e3,min:36e3},symbol:a.StockSymbols[r.LocationName.NewTokyoVitaLife]},{b:!0,initPrice:{max:24e3,min:12e3},marketCap:8e11,mv:{divisor:100,max:70,min:60},name:r.LocationName.Sector12IcarusMicrosystems,otlkMag:7.5,spreadPerc:{divisor:10,max:10,min:3},shareTxForMovement:{max:108e3,min:36e3},symbol:a.StockSymbols[r.LocationName.Sector12IcarusMicrosystems]},{b:!0,initPrice:{max:29e3,min:16e3},marketCap:9e11,mv:{divisor:100,max:60,min:50},name:r.LocationName.Sector12UniversalEnergy,otlkMag:10,spreadPerc:{divisor:10,max:10,min:2},shareTxForMovement:{max:108e3,min:36e3},symbol:a.StockSymbols[r.LocationName.Sector12UniversalEnergy]},{b:!0,initPrice:{max:17e3,min:8e3},marketCap:64e10,mv:{divisor:100,max:65,min:55},name:r.LocationName.AevumAeroCorp,otlkMag:6,spreadPerc:{divisor:10,max:10,min:3},shareTxForMovement:{max:126e3,min:42e3},symbol:a.StockSymbols[r.LocationName.AevumAeroCorp]},{b:!0,initPrice:{max:15e3,min:6e3},marketCap:6e11,mv:{divisor:100,max:75,min:65},name:r.LocationName.VolhavenOmniaCybersystems,otlkMag:4.5,spreadPerc:{divisor:10,max:11,min:4},shareTxForMovement:{max:126e3,min:42e3},symbol:a.StockSymbols[r.LocationName.VolhavenOmniaCybersystems]},{b:!0,initPrice:{max:28e3,min:14e3},marketCap:705e9,mv:{divisor:100,max:80,min:70},name:r.LocationName.ChongqingSolarisSpaceSystems,otlkMag:8.5,spreadPerc:{divisor:10,max:12,min:4},shareTxForMovement:{max:126e3,min:42e3},symbol:a.StockSymbols[r.LocationName.ChongqingSolarisSpaceSystems]},{b:!0,initPrice:{max:3e4,min:12e3},marketCap:695e9,mv:{divisor:100,max:65,min:55},name:r.LocationName.NewTokyoGlobalPharmaceuticals,otlkMag:10.5,spreadPerc:{divisor:10,max:10,min:4},shareTxForMovement:{max:126e3,min:42e3},symbol:a.StockSymbols[r.LocationName.NewTokyoGlobalPharmaceuticals]},{b:!0,initPrice:{max:27e3,min:15e3},marketCap:6e11,mv:{divisor:100,max:80,min:70},name:r.LocationName.IshimaNovaMedical,otlkMag:5,spreadPerc:{divisor:10,max:11,min:4},shareTxForMovement:{max:126e3,min:42e3},symbol:a.StockSymbols[r.LocationName.IshimaNovaMedical]},{b:!0,initPrice:{max:8500,min:4e3},marketCap:45e10,mv:{divisor:100,max:260,min:240},name:r.LocationName.AevumWatchdogSecurity,otlkMag:1.5,spreadPerc:{divisor:10,max:12,min:5},shareTxForMovement:{max:54e3,min:12e3},symbol:a.StockSymbols[r.LocationName.AevumWatchdogSecurity]},{b:!0,initPrice:{max:8e3,min:4500},marketCap:3e11,mv:{divisor:100,max:135,min:115},name:r.LocationName.VolhavenLexoCorp,otlkMag:6,spreadPerc:{divisor:10,max:12,min:5},shareTxForMovement:{max:108e3,min:36e3},symbol:a.StockSymbols[r.LocationName.VolhavenLexoCorp]},{b:!0,initPrice:{max:7e3,min:2e3},marketCap:18e10,mv:{divisor:100,max:70,min:50},name:r.LocationName.AevumRhoConstruction,otlkMag:1,spreadPerc:{divisor:10,max:10,min:3},shareTxForMovement:{max:126e3,min:6e4},symbol:a.StockSymbols[r.LocationName.AevumRhoConstruction]},{b:!0,initPrice:{max:8500,min:4e3},marketCap:24e10,mv:{divisor:100,max:205,min:175},name:r.LocationName.Sector12AlphaEnterprises,otlkMag:10,spreadPerc:{divisor:10,max:16,min:5},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.Sector12AlphaEnterprises]},{b:!0,initPrice:{max:8e3,min:3e3},marketCap:2e11,mv:{divisor:100,max:170,min:150},name:r.LocationName.VolhavenSysCoreSecurities,otlkMag:3,spreadPerc:{divisor:10,max:12,min:5},shareTxForMovement:{max:9e4,min:15e3},symbol:a.StockSymbols[r.LocationName.VolhavenSysCoreSecurities]},{b:!0,initPrice:{max:6e3,min:1e3},marketCap:185e9,mv:{divisor:100,max:100,min:80},name:r.LocationName.VolhavenCompuTek,otlkMag:4,spreadPerc:{divisor:10,max:12,min:4},shareTxForMovement:{max:126e3,min:6e4},symbol:a.StockSymbols[r.LocationName.VolhavenCompuTek]},{b:!0,initPrice:{max:5e3,min:1e3},marketCap:58e9,mv:{divisor:100,max:400,min:200},name:r.LocationName.AevumNetLinkTechnologies,otlkMag:1,spreadPerc:{divisor:10,max:20,min:5},shareTxForMovement:{max:54e3,min:18e3},symbol:a.StockSymbols[r.LocationName.AevumNetLinkTechnologies]},{b:!0,initPrice:{max:8e3,min:1e3},marketCap:6e10,mv:{divisor:100,max:110,min:90},name:r.LocationName.IshimaOmegaSoftware,otlkMag:.5,spreadPerc:{divisor:10,max:13,min:4},shareTxForMovement:{max:9e4,min:3e4},symbol:a.StockSymbols[r.LocationName.IshimaOmegaSoftware]},{b:!1,initPrice:{max:4500,min:500},marketCap:45e9,mv:{divisor:100,max:80,min:70},name:r.LocationName.Sector12FoodNStuff,otlkMag:1,spreadPerc:{divisor:10,max:10,min:6},shareTxForMovement:{max:18e4,min:6e4},symbol:a.StockSymbols[r.LocationName.Sector12FoodNStuff]},{b:!0,initPrice:{max:3500,min:1500},marketCap:3e10,mv:{divisor:100,max:275,min:100},name:"Sigma Cosmetics",otlkMag:0,spreadPerc:{divisor:10,max:14,min:6},shareTxForMovement:{max:7e4,min:2e4},symbol:a.StockSymbols["Sigma Cosmetics"]},{b:!0,initPrice:{max:1500,min:250},marketCap:42e9,mv:{divisor:100,max:350,min:200},name:"Joes Guns",otlkMag:1,spreadPerc:{divisor:10,max:14,min:6},shareTxForMovement:{max:52e3,min:15e3},symbol:a.StockSymbols["Joes Guns"]},{b:!0,initPrice:{max:1500,min:250},marketCap:1e11,mv:{divisor:100,max:175,min:120},name:"Catalyst Ventures",otlkMag:13.5,spreadPerc:{divisor:10,max:14,min:5},shareTxForMovement:{max:72e3,min:24e3},symbol:a.StockSymbols["Catalyst Ventures"]},{b:!0,initPrice:{max:3e4,min:15e3},marketCap:36e10,mv:{divisor:100,max:80,min:70},name:"Microdyne Technologies",otlkMag:8,spreadPerc:{divisor:10,max:10,min:3},shareTxForMovement:{max:216e3,min:9e4},symbol:a.StockSymbols["Microdyne Technologies"]},{b:!0,initPrice:{max:24e3,min:12e3},marketCap:42e10,mv:{divisor:100,max:70,min:50},name:"Titan Laboratories",otlkMag:11,spreadPerc:{divisor:10,max:10,min:2},shareTxForMovement:{max:216e3,min:9e4},symbol:a.StockSymbols["Titan Laboratories"]}]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TicksPerCycle=void 0,t.TicksPerCycle=75},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.processOrders=void 0;const o=n(168),s=n(184),l=n(106),c=n(94),u=n(6),m=n(26),p=n(13),d=i(n(0));function h(e,t){const n=t.symbolToStockMap[e.stockSymbol];if(!(n instanceof s.Stock))return void console.error(`Could not find stock for this order: ${e.stockSymbol}`);const a=t.stockMarket.Orders[n.symbol],r={rerenderFn:t.rerenderFn,suppressDialog:!0};let i=!0,h=!1;switch(e.type){case l.OrderTypes.LimitBuy:case l.OrderTypes.StopBuy:h=!0,e.pos===c.PositionTypes.Long?i=o.buyStock(n,e.shares,null,r)&&i:e.pos===c.PositionTypes.Short&&(i=o.shortStock(n,e.shares,null,r)&&i);break;case l.OrderTypes.LimitSell:case l.OrderTypes.StopSell:e.pos===c.PositionTypes.Long?i=o.sellStock(n,e.shares,null,r)&&i:e.pos===c.PositionTypes.Short&&(i=o.sellShort(n,e.shares,null,r)&&i);break;default:return void console.warn(`Invalid order type: ${e.type}`)}const f=e.pos===c.PositionTypes.Long?"Long":"Short";if(i){for(let r=0;r
")}getType(){switch(this.type){case a.UpgradeType.Weapon:return"Weapon";case a.UpgradeType.Armor:return"Armor";case a.UpgradeType.Vehicle:return"Vehicle";case a.UpgradeType.Rootkit:return"Rootkit";case a.UpgradeType.Augmentation:return"Augmentation";default:return""}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GangMember=void 0;const a=n(668),r=n(280),i=n(169),o=n(83),s=n(29);class l{constructor(e=""){this.task="Unassigned",this.earnedRespect=0,this.hack=1,this.str=1,this.def=1,this.dex=1,this.agi=1,this.cha=1,this.hack_exp=0,this.str_exp=0,this.def_exp=0,this.dex_exp=0,this.agi_exp=0,this.cha_exp=0,this.hack_mult=1,this.str_mult=1,this.def_mult=1,this.dex_mult=1,this.agi_mult=1,this.cha_mult=1,this.hack_asc_points=0,this.str_asc_points=0,this.def_asc_points=0,this.dex_asc_points=0,this.agi_asc_points=0,this.cha_asc_points=0,this.upgrades=[],this.augmentations=[],this.name=e}calculateSkill(e,t=1){return Math.max(Math.floor(t*(32*Math.log(e+534.5)-200)),1)}calculateAscensionMult(e){return Math.max(Math.pow(e/4e3,.7),1)}updateSkillLevels(){this.hack=this.calculateSkill(this.hack_exp,this.hack_mult*this.calculateAscensionMult(this.hack_asc_points)),this.str=this.calculateSkill(this.str_exp,this.str_mult*this.calculateAscensionMult(this.str_asc_points)),this.def=this.calculateSkill(this.def_exp,this.def_mult*this.calculateAscensionMult(this.def_asc_points)),this.dex=this.calculateSkill(this.dex_exp,this.dex_mult*this.calculateAscensionMult(this.dex_asc_points)),this.agi=this.calculateSkill(this.agi_exp,this.agi_mult*this.calculateAscensionMult(this.agi_asc_points)),this.cha=this.calculateSkill(this.cha_exp,this.cha_mult*this.calculateAscensionMult(this.cha_asc_points))}calculatePower(){return(this.hack+this.str+this.def+this.dex+this.agi+this.cha)/95}assignToTask(e){return r.GangMemberTasks.hasOwnProperty(e)?(this.task=e,!0):(this.task="Unassigned",!1)}unassignFromTask(){this.task="Unassigned"}getTask(){return this.task instanceof a.GangMemberTask&&(this.task=this.task.name),r.GangMemberTasks.hasOwnProperty(this.task)?r.GangMemberTasks[this.task]:r.GangMemberTasks.Unassigned}calculateRespectGain(e){const t=this.getTask();if(0===t.baseRespect)return 0;let n=t.hackWeight/100*this.hack+t.strWeight/100*this.str+t.defWeight/100*this.def+t.dexWeight/100*this.dex+t.agiWeight/100*this.agi+t.chaWeight/100*this.cha;if((n-=4*t.difficulty)<=0)return 0;const a=Math.max(.005,Math.pow(100*o.AllGangs[e.facName].territory,t.territory.respect)/100);if(isNaN(a)||a<=0)return 0;const r=e.getWantedPenalty();return 11*t.baseRespect*n*a*r}calculateWantedLevelGain(e){const t=this.getTask();if(0===t.baseWanted)return 0;let n=t.hackWeight/100*this.hack+t.strWeight/100*this.str+t.defWeight/100*this.def+t.dexWeight/100*this.dex+t.agiWeight/100*this.agi+t.chaWeight/100*this.cha;if((n-=3.5*t.difficulty)<=0)return 0;const a=Math.max(.005,Math.pow(100*o.AllGangs[e.facName].territory,t.territory.wanted)/100);if(isNaN(a)||a<=0)return 0;if(t.baseWanted<0)return.4*t.baseWanted*n*a;const r=7*t.baseWanted/Math.pow(3*n*a,.8);return Math.min(100,r)}calculateMoneyGain(e){const t=this.getTask();if(0===t.baseMoney)return 0;let n=t.hackWeight/100*this.hack+t.strWeight/100*this.str+t.defWeight/100*this.def+t.dexWeight/100*this.dex+t.agiWeight/100*this.agi+t.chaWeight/100*this.cha;if((n-=3.2*t.difficulty)<=0)return 0;const a=Math.max(.005,Math.pow(100*o.AllGangs[e.facName].territory,t.territory.money)/100);if(isNaN(a)||a<=0)return 0;const r=e.getWantedPenalty();return 5*t.baseMoney*n*a*r}expMult(){return{hack:(this.hack_mult-1)/4+1,str:(this.str_mult-1)/4+1,def:(this.def_mult-1)/4+1,dex:(this.dex_mult-1)/4+1,agi:(this.agi_mult-1)/4+1,cha:(this.cha_mult-1)/4+1}}gainExperience(e=1){const t=this.getTask();if(t===r.GangMemberTasks.Unassigned)return;const n=Math.pow(t.difficulty,.9)*e,a=this.expMult();this.hack_exp+=t.hackWeight/1500*n*a.hack,this.str_exp+=t.strWeight/1500*n*a.str,this.def_exp+=t.defWeight/1500*n*a.def,this.dex_exp+=t.dexWeight/1500*n*a.dex,this.agi_exp+=t.agiWeight/1500*n*a.agi,this.cha_exp+=t.chaWeight/1500*n*a.cha}recordEarnedRespect(e=1,t){this.earnedRespect+=this.calculateRespectGain(t)*e}getGainedAscensionPoints(){return{hack:Math.max(this.hack_exp-1e3,0),str:Math.max(this.str_exp-1e3,0),def:Math.max(this.def_exp-1e3,0),dex:Math.max(this.dex_exp-1e3,0),agi:Math.max(this.agi_exp-1e3,0),cha:Math.max(this.cha_exp-1e3,0)}}canAscend(){const e=this.getGainedAscensionPoints();return e.hack>0||e.str>0||e.def>0||e.dex>0||e.agi>0||e.cha>0}getAscensionResults(){const e=this.getGainedAscensionPoints();return{hack:this.calculateAscensionMult(this.hack_asc_points+e.hack)/this.calculateAscensionMult(this.hack_asc_points),str:this.calculateAscensionMult(this.str_asc_points+e.str)/this.calculateAscensionMult(this.str_asc_points),def:this.calculateAscensionMult(this.def_asc_points+e.def)/this.calculateAscensionMult(this.def_asc_points),dex:this.calculateAscensionMult(this.dex_asc_points+e.dex)/this.calculateAscensionMult(this.dex_asc_points),agi:this.calculateAscensionMult(this.agi_asc_points+e.agi)/this.calculateAscensionMult(this.agi_asc_points),cha:this.calculateAscensionMult(this.cha_asc_points+e.cha)/this.calculateAscensionMult(this.cha_asc_points)}}ascend(){const e=this.getAscensionResults(),t=this.getGainedAscensionPoints();this.hack_asc_points+=t.hack,this.str_asc_points+=t.str,this.def_asc_points+=t.def,this.dex_asc_points+=t.dex,this.agi_asc_points+=t.agi,this.cha_asc_points+=t.cha,this.upgrades.length=0,this.hack_mult=1,this.str_mult=1,this.def_mult=1,this.dex_mult=1,this.agi_mult=1,this.cha_mult=1;for(let e=0;e
Earns money - Slightly increases respect - Slightly increases wanted level",isCombat:!1,isHacking:!0,name:"Ransomware",params:{baseRespect:5e-5,baseWanted:1e-4,baseMoney:1,hackWeight:100,difficulty:1}},{desc:"Assign this gang member to attempt phishing scams and attacks
Earns money - Slightly increases respect - Slightly increases wanted level",isCombat:!1,isHacking:!0,name:"Phishing",params:{baseRespect:8e-5,baseWanted:.003,baseMoney:2.5,hackWeight:85,chaWeight:15,difficulty:3.5}},{desc:"Assign this gang member to attempt identity theft
Earns money - Increases respect - Increases wanted level",isCombat:!1,isHacking:!0,name:"Identity Theft",params:{baseRespect:1e-4,baseWanted:.075,baseMoney:6,hackWeight:80,chaWeight:20,difficulty:5}},{desc:"Assign this gang member to carry out DDoS attacks
Increases respect - Increases wanted level",isCombat:!1,isHacking:!0,name:"DDoS Attacks",params:{baseRespect:4e-4,baseWanted:.2,hackWeight:100,difficulty:8}},{desc:"Assign this gang member to create and distribute malicious viruses
Increases respect - Increases wanted level",isCombat:!1,isHacking:!0,name:"Plant Virus",params:{baseRespect:6e-4,baseWanted:.4,hackWeight:100,difficulty:12}},{desc:"Assign this gang member to commit financial fraud and digital counterfeiting
Earns money - Slightly increases respect - Slightly increases wanted level",isCombat:!1,isHacking:!0,name:"Fraud & Counterfeiting",params:{baseRespect:4e-4,baseWanted:.3,baseMoney:15,hackWeight:80,chaWeight:20,difficulty:20}},{desc:"Assign this gang member to launder money
Earns money - Increases respect - Increases wanted level",isCombat:!1,isHacking:!0,name:"Money Laundering",params:{baseRespect:.001,baseWanted:1.25,baseMoney:120,hackWeight:75,chaWeight:25,difficulty:25}},{desc:"Assign this gang member to commit acts of cyberterrorism
Greatly increases respect - Greatly increases wanted level",isCombat:!1,isHacking:!0,name:"Cyberterrorism",params:{baseRespect:.01,baseWanted:6,hackWeight:80,chaWeight:20,difficulty:36}},{desc:"Assign this gang member to be an ethical hacker for corporations
Earns money - Lowers wanted level",isCombat:!1,isHacking:!0,name:"Ethical Hacking",params:{baseWanted:-.001,baseMoney:1,hackWeight:90,chaWeight:10,difficulty:1}},{desc:"Assign this gang member to mug random people on the streets
Earns money - Slightly increases respect - Very slightly increases wanted level",isCombat:!0,isHacking:!1,name:"Mug People",params:{baseRespect:5e-5,baseWanted:5e-5,baseMoney:1.2,strWeight:25,defWeight:25,dexWeight:25,agiWeight:10,chaWeight:15,difficulty:1}},{desc:"Assign this gang member to sell drugs
Earns money - Slightly increases respect - Slightly increases wanted level - Scales slightly with territory",isCombat:!0,isHacking:!1,name:"Deal Drugs",params:{baseRespect:6e-5,baseWanted:.002,baseMoney:5,agiWeight:20,dexWeight:20,chaWeight:60,difficulty:3.5,territory:{money:1.2,respect:1,wanted:1.15}}},{desc:"Assign this gang member to extort civilians in your territory
Earns money - Slightly increases respect - Increases wanted - Scales heavily with territory",isCombat:!0,isHacking:!1,name:"Strongarm Civilians",params:{baseRespect:4e-5,baseWanted:.02,baseMoney:2.5,hackWeight:10,strWeight:25,defWeight:25,dexWeight:20,agiWeight:10,chaWeight:10,difficulty:5,territory:{money:1.6,respect:1.1,wanted:1.5}}},{desc:"Assign this gang member to run cons
Earns money - Increases respect - Increases wanted level",isCombat:!0,isHacking:!1,name:"Run a Con",params:{baseRespect:12e-5,baseWanted:.05,baseMoney:15,strWeight:5,defWeight:5,agiWeight:25,dexWeight:25,chaWeight:40,difficulty:14}},{desc:"Assign this gang member to commit armed robbery on stores, banks and armored cars
Earns money - Increases respect - Increases wanted level",isCombat:!0,isHacking:!1,name:"Armed Robbery",params:{baseRespect:14e-5,baseWanted:.1,baseMoney:38,hackWeight:20,strWeight:15,defWeight:15,agiWeight:10,dexWeight:20,chaWeight:20,difficulty:20}},{desc:"Assign this gang member to traffick illegal arms
Earns money - Increases respect - Increases wanted level - Scales heavily with territory",isCombat:!0,isHacking:!1,name:"Traffick Illegal Arms",params:{baseRespect:2e-4,baseWanted:.24,baseMoney:58,hackWeight:15,strWeight:20,defWeight:20,dexWeight:20,chaWeight:25,difficulty:32,territory:{money:1.4,respect:1.3,wanted:1.25}}},{desc:"Assign this gang member to threaten and black mail high-profile targets
Earns money - Slightly increases respect - Slightly increases wanted level",isCombat:!0,isHacking:!1,name:"Threaten & Blackmail",params:{baseRespect:2e-4,baseWanted:.125,baseMoney:24,hackWeight:25,strWeight:25,dexWeight:25,chaWeight:25,difficulty:28}},{desc:"Assign this gang member to engage in human trafficking operations
Earns money - Increases respect - Increases wanted level - Scales heavily with territory",isCombat:!0,isHacking:!1,name:"Human Trafficking",params:{baseRespect:.004,baseWanted:1.25,baseMoney:120,hackWeight:30,strWeight:5,defWeight:5,dexWeight:30,chaWeight:30,difficulty:36,territory:{money:1.5,respect:1.5,wanted:1.6}}},{desc:"Assign this gang member to commit acts of terrorism
Greatly increases respect - Greatly increases wanted level - Scales heavily with territory",isCombat:!0,isHacking:!1,name:"Terrorism",params:{baseRespect:.01,baseWanted:6,hackWeight:20,strWeight:20,defWeight:20,dexWeight:20,chaWeight:20,difficulty:36,territory:{money:1,respect:2,wanted:2}}},{desc:"Assign this gang member to be a vigilante and protect the city from criminals
Decreases wanted level",isCombat:!0,isHacking:!0,name:"Vigilante Justice",params:{baseWanted:-.001,hackWeight:20,strWeight:20,defWeight:20,dexWeight:20,agiWeight:20,difficulty:1,territory:{money:1,respect:1,wanted:.9}}},{desc:"Assign this gang member to increase their combat stats (str, def, dex, agi)",isCombat:!0,isHacking:!0,name:"Train Combat",params:{strWeight:25,defWeight:25,dexWeight:25,agiWeight:25,difficulty:100}},{desc:"Assign this gang member to train their hacking skills",isCombat:!0,isHacking:!0,name:"Train Hacking",params:{hackWeight:100,difficulty:45}},{desc:"Assign this gang member to train their charisma",isCombat:!0,isHacking:!0,name:"Train Charisma",params:{chaWeight:100,difficulty:8}},{desc:"Assign this gang member to engage in territorial warfare with other gangs. Members assigned to this task will help increase your gang's territory and will defend your territory from being taken.",isCombat:!0,isHacking:!0,name:"Territory Warfare",params:{hackWeight:15,strWeight:20,defWeight:20,dexWeight:20,agiWeight:20,chaWeight:5,difficulty:5}}]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DarkWebItem=void 0;t.DarkWebItem=class{constructor(e,t,n){this.program=e,this.price=t,this.description=n}}},,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Environment=void 0;class a{constructor(e){this.parent=null,this.stopFlag=!1,this.vars={},e instanceof a&&(this.vars=Object.assign({},e.vars)),this.parent=e}lookup(e){let t=this;for(;t;){if(Object.prototype.hasOwnProperty.call(t.vars,e))return t;t=t.parent}return null}get(e){if(e in this.vars)return this.vars[e];throw new Error(`Undefined variable ${e}`)}set(e,t){const n=this.lookup(e);return null!==n?n.vars[e]=t:this.vars[e]=t}def(e,t){return this.vars[e]=t}}t.Environment=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isValidNumber=void 0,t.isValidNumber=function(e){return"number"==typeof e&&!isNaN(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.serverMetadata=void 0;const a=n(41),r=n(140);t.serverMetadata=[{hackDifficulty:99,hostname:"ecorp",moneyAvailable:{max:7e10,min:3e10},networkLayer:15,numOpenPortsRequired:5,organizationName:a.LocationName.AevumECorp,requiredHackingSkill:{max:1400,min:1050},serverGrowth:99,specialName:a.LocationName.AevumECorp},{hackDifficulty:99,hostname:"megacorp",moneyAvailable:{max:6e10,min:4e10},networkLayer:15,numOpenPortsRequired:5,organizationName:a.LocationName.Sector12MegaCorp,requiredHackingSkill:{max:1350,min:1100},serverGrowth:99,specialName:a.LocationName.Sector12MegaCorp},{hackDifficulty:{max:88,min:72},hostname:"b-and-a",moneyAvailable:{max:3e10,min:15e9},networkLayer:14,numOpenPortsRequired:5,organizationName:a.LocationName.AevumBachmanAndAssociates,requiredHackingSkill:{max:1150,min:900},serverGrowth:{max:80,min:60},specialName:a.LocationName.AevumBachmanAndAssociates},{hackDifficulty:{max:97,min:88},hostname:"blade",literature:[r.LiteratureNames.BeyondMan],maxRamExponent:{max:9,min:5},moneyAvailable:{max:4e10,min:1e10},networkLayer:14,numOpenPortsRequired:5,organizationName:a.LocationName.Sector12BladeIndustries,requiredHackingSkill:{max:1200,min:900},serverGrowth:{max:85,min:55},specialName:a.LocationName.Sector12BladeIndustries},{hackDifficulty:99,hostname:"nwo",literature:[r.LiteratureNames.TheHiddenWorld],moneyAvailable:{max:4e10,min:2e10},networkLayer:14,numOpenPortsRequired:5,organizationName:a.LocationName.VolhavenNWO,requiredHackingSkill:{max:1300,min:950},serverGrowth:{max:95,min:65},specialName:a.LocationName.VolhavenNWO},{hackDifficulty:{max:65,min:45},hostname:"clarkinc",literature:[r.LiteratureNames.BeyondMan,r.LiteratureNames.CostOfImmortality],moneyAvailable:{max:25e9,min:15e9},networkLayer:14,numOpenPortsRequired:5,organizationName:a.LocationName.AevumClarkeIncorporated,requiredHackingSkill:{max:1250,min:950},serverGrowth:{max:75,min:45},specialName:a.LocationName.AevumClarkeIncorporated},{hackDifficulty:{max:99,min:90},hostname:"omnitek",literature:[r.LiteratureNames.CodedIntelligence,r.LiteratureNames.HistoryOfSynthoids],maxRamExponent:{max:9,min:7},moneyAvailable:{max:22e9,min:13e9},networkLayer:13,numOpenPortsRequired:5,organizationName:a.LocationName.VolhavenOmniTekIncorporated,requiredHackingSkill:{max:1100,min:900},serverGrowth:{max:99,min:95},specialName:a.LocationName.VolhavenOmniTekIncorporated},{hackDifficulty:{max:75,min:55},hostname:"4sigma",moneyAvailable:{max:25e9,min:15e9},networkLayer:13,numOpenPortsRequired:5,organizationName:a.LocationName.Sector12FourSigma,requiredHackingSkill:{max:1250,min:900},serverGrowth:{max:99,min:75},specialName:a.LocationName.Sector12FourSigma},{hackDifficulty:{max:99,min:95},hostname:"kuai-gong",moneyAvailable:{max:3e10,min:2e10},networkLayer:13,numOpenPortsRequired:5,organizationName:a.LocationName.ChongqingKuaiGongInternational,requiredHackingSkill:{max:1300,min:950},serverGrowth:{max:99,min:90},specialName:a.LocationName.ChongqingKuaiGongInternational},{hackDifficulty:{max:97,min:83},hostname:"fulcrumtech",literature:[r.LiteratureNames.SimulatedReality],maxRamExponent:{max:11,min:7},moneyAvailable:{max:18e8,min:14e8},networkLayer:12,numOpenPortsRequired:5,organizationName:a.LocationName.AevumFulcrumTechnologies,requiredHackingSkill:{max:1250,min:950},serverGrowth:{max:99,min:80},specialName:a.LocationName.AevumFulcrumTechnologies},{hackDifficulty:99,hostname:"fulcrumassets",moneyAvailable:1e6,networkLayer:15,numOpenPortsRequired:5,organizationName:a.LocationName.AevumFulcrumTechnologies,requiredHackingSkill:{max:1600,min:1100},serverGrowth:1,specialName:"Fulcrum Secret Technologies Server"},{hackDifficulty:{max:92,min:78},hostname:"stormtech",moneyAvailable:{max:12e8,min:1e9},networkLayer:12,numOpenPortsRequired:5,organizationName:a.LocationName.IshimaStormTechnologies,requiredHackingSkill:{max:1075,min:875},serverGrowth:{max:92,min:68},specialName:a.LocationName.IshimaStormTechnologies},{hackDifficulty:{max:96,min:84},hostname:"defcomm",moneyAvailable:{max:95e7,min:8e8},networkLayer:9,numOpenPortsRequired:5,organizationName:a.LocationName.NewTokyoDefComm,requiredHackingSkill:{max:1050,min:850},serverGrowth:{max:73,min:47},specialName:a.LocationName.NewTokyoDefComm},{hackDifficulty:{max:90,min:70},hostname:"infocomm",moneyAvailable:{max:9e8,min:6e8},networkLayer:10,numOpenPortsRequired:5,organizationName:"InfoComm",requiredHackingSkill:{max:950,min:875},serverGrowth:{max:75,min:35}},{hackDifficulty:{max:95,min:85},hostname:"helios",literature:[r.LiteratureNames.BeyondMan],maxRamExponent:{max:8,min:5},moneyAvailable:{max:75e7,min:55e7},networkLayer:12,numOpenPortsRequired:5,organizationName:a.LocationName.VolhavenHeliosLabs,requiredHackingSkill:{max:900,min:800},serverGrowth:{max:80,min:70},specialName:a.LocationName.VolhavenHeliosLabs},{hackDifficulty:{max:90,min:80},hostname:"vitalife",literature:[r.LiteratureNames.AGreenTomorrow],maxRamExponent:{max:7,min:4},moneyAvailable:{max:8e8,min:7e8},networkLayer:12,numOpenPortsRequired:5,organizationName:a.LocationName.NewTokyoVitaLife,requiredHackingSkill:{max:900,min:775},serverGrowth:{max:80,min:60},specialName:a.LocationName.NewTokyoVitaLife},{hackDifficulty:{max:95,min:85},hostname:"icarus",moneyAvailable:{max:1e9,min:9e8},networkLayer:9,numOpenPortsRequired:5,organizationName:a.LocationName.Sector12IcarusMicrosystems,requiredHackingSkill:{max:925,min:850},serverGrowth:{max:95,min:85},specialName:a.LocationName.Sector12IcarusMicrosystems},{hackDifficulty:{max:90,min:80},hostname:"univ-energy",maxRamExponent:{max:7,min:4},moneyAvailable:{max:12e8,min:11e8},networkLayer:9,numOpenPortsRequired:4,organizationName:a.LocationName.Sector12UniversalEnergy,requiredHackingSkill:{max:900,min:800},serverGrowth:{max:90,min:80},specialName:a.LocationName.Sector12UniversalEnergy},{hackDifficulty:{max:80,min:70},hostname:"titan-labs",literature:[r.LiteratureNames.CodedIntelligence],maxRamExponent:{max:7,min:4},moneyAvailable:{max:9e8,min:75e7},networkLayer:11,numOpenPortsRequired:5,organizationName:"Titan Laboratories",requiredHackingSkill:{max:875,min:800},serverGrowth:{max:80,min:60}},{hackDifficulty:{max:75,min:65},hostname:"microdyne",literature:[r.LiteratureNames.SyntheticMuscles],maxRamExponent:{max:6,min:4},moneyAvailable:{max:7e8,min:5e8},networkLayer:11,numOpenPortsRequired:5,organizationName:"Microdyne Technologies",requiredHackingSkill:{max:875,min:800},serverGrowth:{max:90,min:70}},{hackDifficulty:{max:80,min:70},hostname:"taiyang-digital",literature:[r.LiteratureNames.AGreenTomorrow,r.LiteratureNames.BrighterThanTheSun],moneyAvailable:{max:9e8,min:8e8},networkLayer:10,numOpenPortsRequired:5,organizationName:"Taiyang Digital",requiredHackingSkill:{max:950,min:850},serverGrowth:{max:80,min:70}},{hackDifficulty:{max:65,min:55},hostname:"galactic-cyber",moneyAvailable:{max:85e7,min:75e7},networkLayer:7,numOpenPortsRequired:5,organizationName:a.LocationName.AevumGalacticCybersystems,requiredHackingSkill:{max:875,min:825},serverGrowth:{max:90,min:70},specialName:a.LocationName.AevumGalacticCybersystems},{hackDifficulty:{max:90,min:80},hostname:"aerocorp",literature:[r.LiteratureNames.ManAndMachine],moneyAvailable:{max:12e8,min:1e9},networkLayer:7,numOpenPortsRequired:5,organizationName:a.LocationName.AevumAeroCorp,requiredHackingSkill:{max:925,min:850},serverGrowth:{max:65,min:55},specialName:a.LocationName.AevumAeroCorp},{hackDifficulty:{max:95,min:85},hostname:"omnia",literature:[r.LiteratureNames.HistoryOfSynthoids],maxRamExponent:{max:6,min:4},moneyAvailable:{max:1e9,min:9e8},networkLayer:8,numOpenPortsRequired:5,organizationName:a.LocationName.VolhavenOmniaCybersystems,requiredHackingSkill:{max:950,min:850},serverGrowth:{max:70,min:60},specialName:a.LocationName.VolhavenOmniaCybersystems},{hackDifficulty:{max:65,min:55},hostname:"zb-def",literature:[r.LiteratureNames.SyntheticMuscles],moneyAvailable:{max:11e8,min:9e8},networkLayer:10,numOpenPortsRequired:4,organizationName:"ZB Defense Industries",requiredHackingSkill:{max:825,min:775},serverGrowth:{max:75,min:65}},{hackDifficulty:{max:80,min:60},hostname:"applied-energetics",moneyAvailable:{max:1e9,min:7e8},networkLayer:11,numOpenPortsRequired:4,organizationName:"Applied Energetics",requiredHackingSkill:{max:850,min:775},serverGrowth:{max:75,min:70}},{hackDifficulty:{max:80,min:70},hostname:"solaris",literature:[r.LiteratureNames.AGreenTomorrow,r.LiteratureNames.TheFailedFrontier],maxRamExponent:{max:7,min:4},moneyAvailable:{max:9e8,min:7e8},networkLayer:9,numOpenPortsRequired:5,organizationName:a.LocationName.ChongqingSolarisSpaceSystems,requiredHackingSkill:{max:850,min:750},serverGrowth:{max:80,min:70},specialName:a.LocationName.ChongqingSolarisSpaceSystems},{hackDifficulty:{max:85,min:75},hostname:"deltaone",moneyAvailable:{max:17e8,min:13e8},networkLayer:8,numOpenPortsRequired:5,organizationName:a.LocationName.Sector12DeltaOne,requiredHackingSkill:{max:900,min:800},serverGrowth:{max:70,min:50},specialName:a.LocationName.Sector12DeltaOne},{hackDifficulty:{max:85,min:75},hostname:"global-pharm",literature:[r.LiteratureNames.AGreenTomorrow],maxRamExponent:{max:6,min:3},moneyAvailable:{max:175e7,min:15e8},networkLayer:7,numOpenPortsRequired:4,organizationName:a.LocationName.NewTokyoGlobalPharmaceuticals,requiredHackingSkill:{max:850,min:750},serverGrowth:{max:90,min:80},specialName:a.LocationName.NewTokyoGlobalPharmaceuticals},{hackDifficulty:{max:80,min:60},hostname:"nova-med",moneyAvailable:{max:125e7,min:11e8},networkLayer:10,numOpenPortsRequired:4,organizationName:a.LocationName.IshimaNovaMedical,requiredHackingSkill:{max:850,min:775},serverGrowth:{max:85,min:65},specialName:a.LocationName.IshimaNovaMedical},{hackDifficulty:{max:90,min:70},hostname:"zeus-med",moneyAvailable:{max:15e8,min:13e8},networkLayer:9,numOpenPortsRequired:5,organizationName:"Zeus Medical",requiredHackingSkill:{max:850,min:800},serverGrowth:{max:80,min:70}},{hackDifficulty:{max:80,min:70},hostname:"unitalife",maxRamExponent:{max:6,min:4},moneyAvailable:{max:11e8,min:1e9},networkLayer:8,numOpenPortsRequired:4,organizationName:"UnitaLife Group",requiredHackingSkill:{max:825,min:775},serverGrowth:{max:80,min:70}},{hackDifficulty:{max:80,min:60},hostname:"lexo-corp",maxRamExponent:{max:7,min:4},moneyAvailable:{max:8e8,min:7e8},networkLayer:6,numOpenPortsRequired:4,organizationName:a.LocationName.VolhavenLexoCorp,requiredHackingSkill:{max:750,min:650},serverGrowth:{max:65,min:55},specialName:a.LocationName.VolhavenLexoCorp},{hackDifficulty:{max:60,min:40},hostname:"rho-construction",maxRamExponent:{max:6,min:4},moneyAvailable:{max:7e8,min:5e8},networkLayer:6,numOpenPortsRequired:3,organizationName:a.LocationName.AevumRhoConstruction,requiredHackingSkill:{max:525,min:475},serverGrowth:{max:60,min:40},specialName:a.LocationName.AevumRhoConstruction},{hackDifficulty:{max:70,min:50},hostname:"alpha-ent",literature:[r.LiteratureNames.Sector12Crime],maxRamExponent:{max:7,min:4},moneyAvailable:{max:75e7,min:6e8},networkLayer:6,numOpenPortsRequired:4,organizationName:a.LocationName.Sector12AlphaEnterprises,requiredHackingSkill:{max:600,min:500},serverGrowth:{max:60,min:50},specialName:a.LocationName.Sector12AlphaEnterprises},{hackDifficulty:{max:80,min:70},hostname:"aevum-police",maxRamExponent:{max:6,min:4},moneyAvailable:{max:4e8,min:2e8},networkLayer:6,numOpenPortsRequired:4,organizationName:a.LocationName.AevumPolice,requiredHackingSkill:{max:450,min:400},serverGrowth:{max:50,min:30},specialName:a.LocationName.AevumPolice},{hackDifficulty:{max:55,min:45},hostname:"rothman-uni",literature:[r.LiteratureNames.SecretSocieties,r.LiteratureNames.TheFailedFrontier,r.LiteratureNames.TensionsInTechRace],maxRamExponent:{max:7,min:4},moneyAvailable:{max:25e7,min:175e6},networkLayer:5,numOpenPortsRequired:3,organizationName:a.LocationName.Sector12RothmanUniversity,requiredHackingSkill:{max:430,min:370},serverGrowth:{max:45,min:35},specialName:a.LocationName.Sector12RothmanUniversity},{hackDifficulty:{max:85,min:65},hostname:"zb-institute",maxRamExponent:{max:7,min:4},moneyAvailable:{max:11e8,min:8e8},networkLayer:5,numOpenPortsRequired:5,organizationName:a.LocationName.VolhavenZBInstituteOfTechnology,requiredHackingSkill:{max:775,min:725},serverGrowth:{max:85,min:75},specialName:a.LocationName.VolhavenZBInstituteOfTechnology},{hackDifficulty:{max:65,min:45},hostname:"summit-uni",literature:[r.LiteratureNames.SecretSocieties,r.LiteratureNames.TheFailedFrontier,r.LiteratureNames.SyntheticMuscles],maxRamExponent:{max:6,min:4},moneyAvailable:{max:35e7,min:2e8},networkLayer:5,numOpenPortsRequired:3,organizationName:a.LocationName.AevumSummitUniversity,requiredHackingSkill:{max:475,min:425},serverGrowth:{max:60,min:40},specialName:a.LocationName.AevumSummitUniversity},{hackDifficulty:{max:80,min:60},hostname:"syscore",moneyAvailable:{max:6e8,min:4e8},networkLayer:5,numOpenPortsRequired:4,organizationName:a.LocationName.VolhavenSysCoreSecurities,requiredHackingSkill:{max:650,min:550},serverGrowth:{max:70,min:60},specialName:a.LocationName.VolhavenSysCoreSecurities},{hackDifficulty:{max:70,min:60},hostname:"catalyst",literature:[r.LiteratureNames.TensionsInTechRace],maxRamExponent:{max:7,min:4},moneyAvailable:{max:55e7,min:3e8},networkLayer:5,numOpenPortsRequired:3,organizationName:"Catalyst Ventures",requiredHackingSkill:{max:450,min:400},serverGrowth:{max:55,min:25}},{hackDifficulty:{max:45,min:35},hostname:"the-hub",maxRamExponent:{max:6,min:3},moneyAvailable:{max:2e8,min:15e7},networkLayer:4,numOpenPortsRequired:2,organizationName:"The Hub",requiredHackingSkill:{max:325,min:275},serverGrowth:{max:55,min:45}},{hackDifficulty:{max:65,min:55},hostname:"comptek",literature:[r.LiteratureNames.ManAndMachine],moneyAvailable:{max:25e7,min:22e7},networkLayer:4,numOpenPortsRequired:3,organizationName:a.LocationName.VolhavenCompuTek,requiredHackingSkill:{max:400,min:300},serverGrowth:{max:65,min:45},specialName:a.LocationName.VolhavenCompuTek},{hackDifficulty:{max:80,min:60},hostname:"netlink",literature:[r.LiteratureNames.SimulatedReality],maxRamExponent:{max:7,min:4},moneyAvailable:275e6,networkLayer:4,numOpenPortsRequired:3,organizationName:a.LocationName.AevumNetLinkTechnologies,requiredHackingSkill:{max:425,min:375},serverGrowth:{max:75,min:45},specialName:a.LocationName.AevumNetLinkTechnologies},{hackDifficulty:{max:65,min:35},hostname:"johnson-ortho",moneyAvailable:{max:85e6,min:7e7},networkLayer:4,numOpenPortsRequired:2,organizationName:"Johnson Orthopedics",requiredHackingSkill:{max:300,min:250},serverGrowth:{max:65,min:35}},{hackDifficulty:1,hostname:"n00dles",literature:[],maxRamExponent:2,moneyAvailable:7e4,networkLayer:1,numOpenPortsRequired:0,organizationName:a.LocationName.NewTokyoNoodleBar,requiredHackingSkill:1,serverGrowth:3e3,specialName:a.LocationName.NewTokyoNoodleBar},{hackDifficulty:10,hostname:"foodnstuff",literature:[r.LiteratureNames.Sector12Crime],maxRamExponent:4,moneyAvailable:2e6,networkLayer:1,numOpenPortsRequired:0,organizationName:a.LocationName.Sector12FoodNStuff,requiredHackingSkill:1,serverGrowth:5,specialName:a.LocationName.Sector12FoodNStuff},{hackDifficulty:10,hostname:"sigma-cosmetics",maxRamExponent:4,moneyAvailable:23e5,networkLayer:1,numOpenPortsRequired:0,organizationName:"Sigma Cosmetics",requiredHackingSkill:5,serverGrowth:10},{hackDifficulty:15,hostname:"joesguns",maxRamExponent:4,moneyAvailable:25e5,networkLayer:1,numOpenPortsRequired:0,organizationName:a.LocationName.Sector12JoesGuns,requiredHackingSkill:10,serverGrowth:20,specialName:a.LocationName.Sector12JoesGuns},{hackDifficulty:25,hostname:"zer0",maxRamExponent:5,moneyAvailable:75e5,networkLayer:2,numOpenPortsRequired:1,organizationName:"ZER0 Nightclub",requiredHackingSkill:75,serverGrowth:40},{hackDifficulty:20,hostname:"nectar-net",maxRamExponent:4,moneyAvailable:275e4,networkLayer:2,numOpenPortsRequired:0,organizationName:"Nectar Nightclub Network",requiredHackingSkill:20,serverGrowth:25},{hackDifficulty:25,hostname:"neo-net",literature:[r.LiteratureNames.TheHiddenWorld],maxRamExponent:5,moneyAvailable:5e6,networkLayer:3,numOpenPortsRequired:1,organizationName:"Neo Nightclub Network",requiredHackingSkill:50,serverGrowth:25},{hackDifficulty:30,hostname:"silver-helix",literature:[r.LiteratureNames.NewTriads],maxRamExponent:6,moneyAvailable:45e6,networkLayer:3,numOpenPortsRequired:2,organizationName:"Silver Helix",requiredHackingSkill:150,serverGrowth:30},{hackDifficulty:15,hostname:"hong-fang-tea",literature:[r.LiteratureNames.BrighterThanTheSun],maxRamExponent:4,moneyAvailable:3e6,networkLayer:1,numOpenPortsRequired:0,organizationName:"HongFang Teahouse",requiredHackingSkill:30,serverGrowth:20},{hackDifficulty:15,hostname:"harakiri-sushi",maxRamExponent:4,moneyAvailable:4e6,networkLayer:1,numOpenPortsRequired:0,organizationName:"HaraKiri Sushi Bar Network",requiredHackingSkill:40,serverGrowth:40},{hackDifficulty:20,hostname:"phantasy",maxRamExponent:5,moneyAvailable:24e6,networkLayer:3,numOpenPortsRequired:2,organizationName:"Phantasy Club",requiredHackingSkill:100,serverGrowth:35},{hackDifficulty:15,hostname:"max-hardware",maxRamExponent:5,moneyAvailable:1e7,networkLayer:2,numOpenPortsRequired:1,organizationName:"Max Hardware Store",requiredHackingSkill:80,serverGrowth:30},{hackDifficulty:{max:35,min:25},hostname:"omega-net",literature:[r.LiteratureNames.TheNewGod],maxRamExponent:5,moneyAvailable:{max:7e7,min:6e7},networkLayer:3,numOpenPortsRequired:2,organizationName:a.LocationName.IshimaOmegaSoftware,requiredHackingSkill:{max:220,min:180},serverGrowth:{max:40,min:30},specialName:a.LocationName.IshimaOmegaSoftware},{hackDifficulty:{max:45,min:35},hostname:"crush-fitness",moneyAvailable:{max:6e7,min:4e7},networkLayer:4,numOpenPortsRequired:2,organizationName:"Crush Fitness",requiredHackingSkill:{max:275,min:225},serverGrowth:{max:33,min:27},specialName:a.LocationName.AevumCrushFitnessGym},{hackDifficulty:30,hostname:"iron-gym",maxRamExponent:5,moneyAvailable:2e7,networkLayer:1,numOpenPortsRequired:1,organizationName:"Iron Gym Network",requiredHackingSkill:100,serverGrowth:20,specialName:a.LocationName.Sector12IronGym},{hackDifficulty:{max:55,min:45},hostname:"millenium-fitness",maxRamExponent:{max:8,min:4},moneyAvailable:25e7,networkLayer:6,numOpenPortsRequired:3,organizationName:"Millenium Fitness Network",requiredHackingSkill:{max:525,min:475},serverGrowth:{max:45,min:25},specialName:a.LocationName.VolhavenMilleniumFitnessGym},{hackDifficulty:{max:65,min:55},hostname:"powerhouse-fitness",maxRamExponent:{max:6,min:4},moneyAvailable:9e8,networkLayer:14,numOpenPortsRequired:5,organizationName:"Powerhouse Fitness",requiredHackingSkill:{max:1100,min:950},serverGrowth:{max:60,min:50},specialName:a.LocationName.Sector12PowerhouseGym},{hackDifficulty:{max:60,min:40},hostname:"snap-fitness",moneyAvailable:45e7,networkLayer:7,numOpenPortsRequired:4,organizationName:"Snap Fitness",requiredHackingSkill:{max:800,min:675},serverGrowth:{max:60,min:40},specialName:a.LocationName.AevumSnapFitnessGym},{hackDifficulty:0,hostname:"run4theh111z",literature:[r.LiteratureNames.SimulatedReality,r.LiteratureNames.TheNewGod],maxRamExponent:{max:9,min:5},moneyAvailable:0,networkLayer:11,numOpenPortsRequired:4,organizationName:"The Runners",requiredHackingSkill:{max:550,min:505},serverGrowth:0,specialName:"BitRunners Server"},{hackDifficulty:0,hostname:"I.I.I.I",literature:[r.LiteratureNames.DemocracyIsDead],maxRamExponent:{max:8,min:4},moneyAvailable:0,networkLayer:5,numOpenPortsRequired:3,organizationName:"I.I.I.I",requiredHackingSkill:{max:365,min:340},serverGrowth:0,specialName:"The Black Hand Server"},{hackDifficulty:0,hostname:"avmnite-02h",literature:[r.LiteratureNames.DemocracyIsDead],maxRamExponent:{max:7,min:4},moneyAvailable:0,networkLayer:4,numOpenPortsRequired:2,organizationName:"NiteSec",requiredHackingSkill:{max:220,min:202},serverGrowth:0,specialName:"NiteSec Server"},{hackDifficulty:0,hostname:".",maxRamExponent:4,moneyAvailable:0,networkLayer:13,numOpenPortsRequired:4,organizationName:".",requiredHackingSkill:{max:550,min:505},serverGrowth:0,specialName:"The Dark Army Server"},{hackDifficulty:0,hostname:"CSEC",literature:[r.LiteratureNames.DemocracyIsDead],maxRamExponent:3,moneyAvailable:0,networkLayer:2,numOpenPortsRequired:1,organizationName:"CyberSec",requiredHackingSkill:{max:60,min:51},serverGrowth:0,specialName:"CyberSec Server"},{hackDifficulty:0,hostname:"The-Cave",literature:[r.LiteratureNames.AlphaOmega],moneyAvailable:0,networkLayer:15,numOpenPortsRequired:5,organizationName:"Helios",requiredHackingSkill:925,serverGrowth:0,specialName:"Daedalus Server"},{hackDifficulty:0,hostname:"w0r1d_d43m0n",moneyAvailable:0,numOpenPortsRequired:5,organizationName:"w0r1d_d43m0n",requiredHackingSkill:3e3,serverGrowth:0,specialName:"w0r1d_d43m0n"}]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createRandomString=void 0;const a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";t.createRandomString=function(e){let t="";for(let n=0;n
"}}));return o.default.createElement("div",null,o.default.createElement(c.CopyableText,{value:e.c.type,tag:c.ClickableTag.Tag_h1}),o.default.createElement("br",null),o.default.createElement("br",null),o.default.createElement("p",null,"You are attempting to solve a Coding Contract. You have ",e.c.getMaxNumTries()-e.c.tries," tries remaining, after which the contract will self-destruct."),o.default.createElement("br",null),o.default.createElement("p",null,r),o.default.createElement("br",null),o.default.createElement("input",{className:"text-input",style:{width:"50%",marginTop:"8px"},autoFocus:!0,placeholder:"Enter Solution here",value:t,onChange:function(e){n(e.target.value)},onKeyDown:function(n){const a=n.target.value;n.keyCode===s.KEY.ENTER&&""!==a?(n.preventDefault(),e.onAttempt(t)):n.keyCode===s.KEY.ESC&&(n.preventDefault(),e.onClose())}}),o.default.createElement(u.PopupCloseButton,{popup:e.popupId,onClose:()=>e.onAttempt(t),text:"Solve"}),o.default.createElement(u.PopupCloseButton,{popup:e.popupId,onClose:e.onClose,text:"Close"}))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.codingContractTypesMetadata=void 0;const a=n(43);function r(e){let t=e;return t.startsWith("[")&&(t=t.slice(1)),t.endsWith("]")&&(t=t.slice(0,-1)),t}function i(e){let t=e;return(t.startsWith('"')||t.startsWith("'"))&&(t=t.slice(1)),(t.endsWith('"')||t.endsWith("'"))&&(t=t.slice(0,-1)),t}function o(e){const t=[];return e.forEach(e=>{let n=e.toString();n=["[",n,"]"].join(""),t.push(n)}),t.join(",").replace(/\s/g,"")}t.codingContractTypesMetadata=[{desc:e=>["A prime factor is a factor that is a prime number.",`What is the largest prime factor of ${e}?`].join(" "),difficulty:1,gen:()=>a.getRandomInt(500,1e9),name:"Find Largest Prime Factor",numTries:10,solver:(e,t)=>{let n=2,a=e;for(;a>(n-1)*(n-1);){for(;a%n==0;)a=Math.round(a/n);++n}return(1===a?n-1:a)===parseInt(t,10)}},{desc:e=>["Given the following integer array, find the contiguous subarray","(containing at least one number) which has the largest sum and return that sum.","'Sum' refers to the sum of all the numbers in the subarray.\n",`${e.toString()}`].join(" "),difficulty:1,gen:()=>{const e=a.getRandomInt(5,40),t=[];t.length=e;for(let n=0;n
"+`Stock price decreased to ${s.numeralWrapper.formatMoney(e.corp.sharePrice)}`)}return o.default.createElement(o.default.Fragment,null,o.default.createElement("p",null,"You can issue new equity shares (i.e. stocks) in order to raise capital for your corporation.",o.default.createElement("br",null),o.default.createElement("br",null)," * You can issue at most ",s.numeralWrapper.formatMoney(r)," new shares",o.default.createElement("br",null)," * New shares are sold at a 10% discount",o.default.createElement("br",null)," * You can only issue new shares once every 12 hours",o.default.createElement("br",null)," * Issuing new shares causes dilution, resulting in a decrease in stock price and lower dividends per share",o.default.createElement("br",null)," * Number of new shares issued must be a multiple of 10 million",o.default.createElement("br",null),o.default.createElement("br",null),"When you choose to issue new equity, private shareholders have first priority for up to 50% of the new shares. If they choose to exercise this option, these newly issued shares become private, restricted shares, which means you cannot buy them back."),o.default.createElement(p,{corp:e.corp,shares:t}),o.default.createElement("input",{className:"text-input",autoFocus:!0,placeholder:"# New Shares",style:{margin:"5px"},onChange:function(e){""===e.target.value?n(null):n(parseFloat(e.target.value))},onKeyDown:function(e){13===e.keyCode&&i()}}),o.default.createElement("button",{onClick:i,className:"std-button",style:{display:"inline-block"}},"Issue New Shares"))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.IssueDividendsPopup=void 0;const o=i(n(0)),s=n(40),l=n(13),c=n(95);t.IssueDividendsPopup=function(e){const[t,n]=o.useState(null);function a(){null!==t&&(isNaN(t)||t<0||t>c.CorporationConstants.DividendMaxPercentage?l.dialogBoxCreate(`Invalid value. Must be an integer between 0 and ${c.CorporationConstants.DividendMaxPercentage}`):(e.corp.dividendPercentage=t,s.removePopup(e.popupId)))}return o.default.createElement(o.default.Fragment,null,o.default.createElement("p",null,"\"Dividends are a distribution of a portion of the corporation's profits to the shareholders. This includes yourself, as well.",o.default.createElement("br",null),o.default.createElement("br",null),"In order to issue dividends, simply allocate some percentage of your corporation's profits to dividends. This percentage must be an integer between 0 and ",c.CorporationConstants.DividendMaxPercentage,". (A percentage of 0 means no dividends will be issued",o.default.createElement("br",null),o.default.createElement("br",null),"Two important things to note:",o.default.createElement("br",null),"* Issuing dividends will negatively affect your corporation's stock price",o.default.createElement("br",null),"* Dividends are taxed. Taxes start at 50%, but can be decreased",o.default.createElement("br",null),o.default.createElement("br",null),"Example: Assume your corporation makes $100m / sec in profit and you allocate 40% of that towards dividends. That means your corporation will gain $60m / sec in funds and the remaining $40m / sec will be paid as dividends. Since your corporation starts with 1 billion shares, every shareholder will be paid $0.04 per share per second before taxes."),o.default.createElement("input",{autoFocus:!0,onChange:function(e){""===e.target.value?n(null):n(parseFloat(e.target.value))},onKeyDown:function(e){13===e.keyCode&&a()},className:"text-input",placeholder:"Dividend %",type:"number",style:{margin:"5px"}}),o.default.createElement("button",{onClick:a,className:"std-button",style:{display:"inline-block"}},"Allocate Dividend Percentage"))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.BuybackSharesPopup=void 0;const o=i(n(0)),s=n(40),l=n(6),c=n(13);t.BuybackSharesPopup=function(e){const[t,n]=o.useState(null),a=1.1*e.corp.sharePrice;function r(){if(null===t)return;const n=1.1*e.corp.sharePrice;if(isNaN(t)||t<=0)c.dialogBoxCreate("ERROR: Invalid value for number of shares");else if(t>e.corp.issuedShares)c.dialogBoxCreate("ERROR: There are not this many oustanding shares to buy back");else if(t*n>e.player.money)c.dialogBoxCreate("ERROR: You do not have enough money to purchase this many shares (you need "+l.numeralWrapper.format(t*n,"$0.000a")+")");else{if(e.corp.numShares+=t,isNaN(e.corp.issuedShares)){console.warn("Corporation issuedShares is NaN: "+e.corp.issuedShares),console.warn("Converting to number now");const t=e.corp.issuedShares;isNaN(t)?e.corp.issuedShares=0:e.corp.issuedShares=t}e.corp.issuedShares-=t,e.player.loseMoney(t*n),s.removePopup(e.popupId),e.corp.rerender(e.player)}}return o.default.createElement(o.default.Fragment,null,o.default.createElement("p",null,"Enter the number of outstanding shares you would like to buy back. These shares must be bought at a 10% premium. However, repurchasing shares from the market tends to lead to an increase in stock price.",o.default.createElement("br",null),o.default.createElement("br",null),"To purchase these shares, you must use your own money (NOT your Corporation's funds).",o.default.createElement("br",null),o.default.createElement("br",null),"The current buyback price of your company's stock is ",l.numeralWrapper.formatMoney(a),". Your company currently has ",l.numeralWrapper.formatBigNumber(e.corp.issuedShares)," outstanding stock shares."),o.default.createElement(function(){return null===t?o.default.createElement(o.default.Fragment,null):isNaN(t)||t<=0?o.default.createElement(o.default.Fragment,null,"ERROR: Invalid value entered for number of shares to buyback"):t>e.corp.issuedShares?o.default.createElement(o.default.Fragment,null,"There are not this many shares available to buy back. There are only ",l.numeralWrapper.formatBigNumber(e.corp.issuedShares)," outstanding shares."):o.default.createElement(o.default.Fragment,null,"Purchase ",t," shares for a total of ",l.numeralWrapper.formatMoney(t*a))},null),o.default.createElement("br",null),o.default.createElement("input",{autoFocus:!0,className:"text-input",type:"number",placeholder:"Shares to buyback",style:{margin:"5px"},onChange:function(e){""===e.target.value?n(null):n(Math.round(parseFloat(e.target.value)))},onKeyDown:function(e){13===e.keyCode&&r()}}),o.default.createElement("button",{onClick:r,className:"a-link-button",style:{display:"inline-block"}},"Buy shares"))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.SellSharesPopup=void 0;const o=i(n(0)),s=n(6),l=n(13),c=n(40),u=n(95);t.SellSharesPopup=function(e){const[t,n]=o.useState(null);function a(){if(null!==t)if(isNaN(t)||t<=0)l.dialogBoxCreate("ERROR: Invalid value for number of shares");else if(t>e.corp.numShares)l.dialogBoxCreate("ERROR: You don't have this many shares to sell");else{const n=e.corp.calculateShareSale(t),a=n[0],r=n[1],i=n[2];if(e.corp.numShares-=t,isNaN(e.corp.issuedShares)){console.error(`Corporation issuedShares is NaN: ${e.corp.issuedShares}`);const t=e.corp.issuedShares;isNaN(t)?e.corp.issuedShares=0:e.corp.issuedShares=t}e.corp.issuedShares+=t,e.corp.sharePrice=r,e.corp.shareSalesUntilPriceUpdate=i,e.corp.shareSaleCooldown=u.CorporationConstants.SellSharesCooldown,e.player.gainMoney(a),e.player.recordMoneySource(a,"corporation"),c.removePopup(e.popupId),l.dialogBoxCreate(`Sold ${s.numeralWrapper.formatMoney(t)} shares for `+`${s.numeralWrapper.formatMoney(a)}. `+`The corporation's stock price fell to ${s.numeralWrapper.formatMoney(e.corp.sharePrice)} `+"as a result of dilution."),e.corp.rerender(e.player)}}return o.default.createElement(o.default.Fragment,null,o.default.createElement("p",null,"Enter the number of shares you would like to sell. The money from selling your shares will go directly to you (NOT your Corporation).",o.default.createElement("br",null),o.default.createElement("br",null),"Selling your shares will cause your corporation's stock price to fall due to dilution. Furthermore, selling a large number of shares all at once will have an immediate effect in reducing your stock price.",o.default.createElement("br",null),o.default.createElement("br",null),"The current price of your company's stock is ",s.numeralWrapper.formatMoney(e.corp.sharePrice)),o.default.createElement(function(e){if(null===e.shares)return o.default.createElement(o.default.Fragment,null);if(isNaN(e.shares)||e.shares<=0)return o.default.createElement(o.default.Fragment,null,"ERROR: Invalid value entered for number of shares to sell");if(e.shares>e.corp.numShares)return o.default.createElement(o.default.Fragment,null,"You don't have this many shares to sell!");{const t=e.corp.calculateShareSale(e.shares)[0];return o.default.createElement(o.default.Fragment,null,"Sell ",e.shares," shares for a total of ",s.numeralWrapper.formatMoney(t))}},{shares:t,corp:e.corp}),o.default.createElement("br",null),o.default.createElement("input",{autoFocus:!0,className:"text-input",type:"number",placeholder:"Shares to sell",style:{margin:"5px"},onChange:function(e){""===e.target.value?n(null):n(Math.round(parseFloat(e.target.value)))},onKeyDown:function(e){13===e.keyCode&&a()}}),o.default.createElement("button",{onClick:a,className:"a-link-button",style:{display:"inline-block"}},"Sell shares"))}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.BribeFactionPopup=void 0;const o=i(n(0)),s=n(17),l=n(95),c=n(6),u=n(40),m=n(13);t.BribeFactionPopup=function(e){const[t,n]=o.useState(0),[a,r]=o.useState(0),[i,p]=o.useState(e.player.factions.length>0?e.player.factions[0]:"");function d(t,n){return(t+n*e.corp.sharePrice)/l.CorporationConstants.BribeToRepRatio}return o.default.createElement(o.default.Fragment,null,o.default.createElement("p",null,"You can use Corporation funds or stock shares to bribe Faction Leaders in exchange for faction reputation."),o.default.createElement("select",{className:"dropdown",style:{margin:"3px"},defaultValue:i,onChange:function(e){p(e.target.value)}},e.player.factions.map(e=>{if(s.Factions[e].getInfo().offersWork())return o.default.createElement("option",{key:e,value:e},e)})),o.default.createElement("p",null,function(t,n){return 0===t&&0===n?"":isNaN(t)||isNaN(n)||t<0||n<0?"ERROR: Invalid value(s) entered":e.corp.funds.lt(t)?"ERROR: You do not have this much money to bribe with":n>e.corp.numShares?"ERROR: You do not have this many shares to bribe with":"You will gain "+c.numeralWrapper.formatReputation(d(t,n))+" reputation with "+i+" with this bribe"}(t||0,a||0)),o.default.createElement("input",{className:"text-input",onChange:function(e){n(parseFloat(e.target.value))},placeholder:"Corporation funds",style:{margin:"5px"}}),o.default.createElement("input",{className:"text-input",onChange:function(e){r(parseFloat(e.target.value))},placeholder:"Stock Shares",style:{margin:"5px"}}),o.default.createElement("button",{className:"a-link-button",onClick:()=>(function(t,n){const a=s.Factions[i];if(null==a&&m.dialogBoxCreate("ERROR: You must select a faction to bribe"),isNaN(t)||isNaN(n)||t<0||n<0);else if(e.corp.funds.lt(t));else if(n>e.corp.numShares);else{const r=d(t,n);m.dialogBoxCreate("You gained "+c.numeralWrapper.formatReputation(r)+" reputation with "+a.name+" by bribing them."),a.playerReputation+=r,e.corp.funds=e.corp.funds.minus(t),e.corp.numShares-=n,u.removePopup(e.popupId)}})(t||0,a||0),style:{display:"inline-block"}},"Bribe"))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.UnlockUpgrade=void 0;const r=a(n(0)),i=n(6),o=n(13);t.UnlockUpgrade=function(e){const t=e.upgradeData,n=`${t[2]} - ${i.numeralWrapper.formatMoney(t[1])}`,a=t[3];return r.default.createElement("div",{className:"cmpy-mgmt-upgrade-div tooltip",style:{width:"45%"},onClick:function(){const n=e.corp;n.funds.lt(t[1])?o.dialogBoxCreate("Insufficient funds"):(n.unlock(t),n.rerender(e.player))}},n,r.default.createElement("span",{className:"tooltiptext"},a))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LevelableUpgrade=void 0;const r=a(n(0)),i=n(6),o=n(13);t.LevelableUpgrade=function(e){const t=e.upgradeData,n=e.upgradeLevel,a=t[1],s=t[2],l=a*Math.pow(s,n),c=`${t[4]} - ${i.numeralWrapper.formatMoney(l)}`,u=t[5];return r.default.createElement("div",{className:"cmpy-mgmt-upgrade-div tooltip",style:{width:"45%"},onClick:function(){const n=e.corp;n.funds.lt(l)?o.dialogBoxCreate("Insufficient funds"):(n.upgrade(t),n.rerender(e.player))}},c,r.default.createElement("span",{className:"tooltiptext"},u))}},function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overview=void 0;const r=a(n(0)),i=n(1090),o=n(1089),s=n(1088),l=n(1087),c=n(1086),u=n(1085),m=n(1084),p=n(1083),d=n(1082),h=n(95),f=n(686),g=n(685),y=n(11),_=n(6),b=n(23),v=n(40);t.Overview=function(e){function t(e){let t=e.class?e.class:"std-button";const n=e.display?e.display:"block",a=null!=e.tooltip;return a&&(t+=" tooltip"),r.default.createElement("a",{className:t,onClick:e.onClick,style:{display:n}},e.text,a&&r.default.createElement("span",{className:"tooltiptext"},e.tooltip))}return r.default.createElement("div",null,r.default.createElement("p",{dangerouslySetInnerHTML:{__html:function(){const t=e.corp.revenue.minus(e.corp.expenses).toNumber(),n=t>=0?_.numeralWrapper.formatMoney(t):"-"+_.numeralWrapper.format(-1*t,"$0.000a");let a="";if(e.corp.dividendPercentage>0&&t>0){const n=e.corp.dividendPercentage/100*t,r=t-n,i=n/e.corp.totalShares,o=e.corp.numShares*i;a=`Retained Profits (after dividends): ${_.numeralWrapper.format(r,"$0.000a")} / s
`+`Dividend Percentage: ${_.numeralWrapper.format(e.corp.dividendPercentage/100,"0%")}
`+`Dividends per share: ${_.numeralWrapper.format(i,"$0.000a")} / s
`+`Your earnings as a shareholder (Pre-Tax): ${_.numeralWrapper.format(o,"$0.000a")} / s
`+`Dividend Tax Rate: ${e.corp.dividendTaxPercentage}%
`+`Your earnings as a shareholder (Post-Tax): ${_.numeralWrapper.format(o*(1-e.corp.dividendTaxPercentage/100),"$0.000a")} / s
`}let r="Total Funds: "+_.numeralWrapper.format(e.corp.funds.toNumber(),"$0.000a")+"
Total Revenue: "+_.numeralWrapper.format(e.corp.revenue.toNumber(),"$0.000a")+" / s
Total Expenses: "+_.numeralWrapper.format(e.corp.expenses.toNumber(),"$0.000a")+" / s
Total Profits: "+n+" / s
"+a+"Publicly Traded: "+(e.corp.public?"Yes":"No")+"
Owned Stock Shares: "+_.numeralWrapper.format(e.corp.numShares,"0.000a")+"
Stock Price: "+(e.corp.public?_.numeralWrapper.formatMoney(e.corp.sharePrice):"N/A")+"
`+`Private Shares: ${_.numeralWrapper.format(e.corp.totalShares-e.corp.issuedShares-e.corp.numShares,"0.000a")}`+"
";const i=e.corp.storedCycles*y.CONSTANTS.MilliPerCycle;i>15e3&&(r+=`Bonus time: ${b.convertTimeMsToTimeElapsedString(i)}
`);const o=e.corp.getProductionMultiplier(),s=e.corp.getStorageMultiplier(),l=e.corp.getAdvertisingMultiplier(),c=e.corp.getEmployeeCreMultiplier(),u=e.corp.getEmployeeChaMultiplier(),m=e.corp.getEmployeeIntMultiplier(),p=e.corp.getEmployeeEffMultiplier(),d=e.corp.getSalesMultiplier(),h=e.corp.getScientificResearchMultiplier();return o>1&&(r+="Production Multiplier: "+_.numeralWrapper.format(o,"0.000")+"
"),s>1&&(r+="Storage Multiplier: "+_.numeralWrapper.format(s,"0.000")+"
"),l>1&&(r+="Advertising Multiplier: "+_.numeralWrapper.format(l,"0.000")+"
"),c>1&&(r+="Empl. Creativity Multiplier: "+_.numeralWrapper.format(c,"0.000")+"
"),u>1&&(r+="Empl. Charisma Multiplier: "+_.numeralWrapper.format(u,"0.000")+"
"),m>1&&(r+="Empl. Intelligence Multiplier: "+_.numeralWrapper.format(m,"0.000")+"
"),p>1&&(r+="Empl. Efficiency Multiplier: "+_.numeralWrapper.format(p,"0.000")+"
"),d>1&&(r+="Sales Multiplier: "+_.numeralWrapper.format(d,"0.000")+"
"),h>1&&(r+="Scientific Research Multiplier: "+_.numeralWrapper.format(h,"0.000")+"
"),r}()}}),function(){const n=t({class:"a-link-button",display:"inline-block",onClick:()=>e.corp.getStarterGuide(e.player),text:"Getting Started Guide",tooltip:"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."}),a=e.corp.determineValuation()>=h.CorporationConstants.BribeThreshold||!0,i={bribeFactions:t({class:a?"a-link-button":"a-link-button-inactive",display:"inline-block",onClick:function(){v.createPopup("corp-bribe-popup",s.BribeFactionPopup,{player:e.player,popupId:"corp-bribe-popup",corp:e.corp})},text:"Bribe Factions",tooltip:a?"Use your Corporations power and influence to bribe Faction leaders in exchange for reputation":"Your Corporation is not powerful enough to bribe Faction leaders"}),getStarterGuide:n};return e.corp.public?function(n){const a=e.corp,i=a.shareSaleCooldown>0,o=i?"a-link-button-inactive":"std-button",s=i?"Cannot sell shares for "+a.convertCooldownToString(a.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.",p=t({class:o,display:"inline-block",onClick:function(t){if(!t.isTrusted)return;const n="cmpy-mgmt-sell-shares-popup";v.createPopup(n,l.SellSharesPopup,{corp:e.corp,player:e.player,popupId:n})},text:"Sell Shares",tooltip:s}),d=t({class:"std-button",display:"inline-block",onClick:function(){const t="corp-buyback-shares-popup";v.createPopup(t,c.BuybackSharesPopup,{player:e.player,popupId:t,corp:e.corp})},text:"Buyback shares",tooltip:"Buy back shares you that previously issued or sold at market price."}),h=a.issueNewSharesCooldown>0,f=h?"a-link-button-inactive":"std-button",g=h?"Cannot issue new shares for "+a.convertCooldownToString(a.issueNewSharesCooldown):"Issue new equity shares to raise capital.",y=t({class:f,display:"inline-block",onClick:function(){const t="cmpy-mgmt-issue-new-shares-popup";v.createPopup(t,m.IssueNewSharesPopup,{popupId:t,corp:e.corp})},text:"Issue New Shares",tooltip:g}),_=t({class:"std-button",display:"inline-block",onClick:function(){const t="cmpy-mgmt-issue-dividends-popup";v.createPopup(t,u.IssueDividendsPopup,{popupId:t,corp:e.corp})},text:"Issue Dividends",tooltip:"Manage the dividends that are paid out to shareholders (including yourself)"});return r.default.createElement("div",null,n.getStarterGuide,p,d,r.default.createElement("br",null),y,_,r.default.createElement("br",null),n.bribeFactions)}(i):function(n){const a=e.corp.fundingRound<4,i=a?"Search for private investors who will give you startup funding in exchangefor equity (stock shares) in your company":void 0,o=t({class:a?"std-button":"a-link-button-inactive",onClick:function(){const t="cmpy-mgmt-find-investors-popup";v.createPopup(t,p.FindInvestorsPopup,{player:e.player,popupId:t,corp:e.corp})},text:"Find Investors",tooltip:i,display:"inline-block"}),s=t({class:"std-button",onClick:function(){const t="cmpy-mgmt-go-public-popup";v.createPopup(t,d.GoPublicPopup,{player:e.player,popupId:t,corp:e.corp})},display:"inline-block",text:"Go Public",tooltip:"Become a publicly traded and owned entity. Going public involves issuing shares for an IPO. Once you are a public company, your shares will be traded on the stock market."});return r.default.createElement("div",null,n.getStarterGuide,o,s,r.default.createElement("br",null),n.bribeFactions)}(i)}(),r.default.createElement("br",null),function(){if(e.corp.divisions.length<=0)return r.default.createElement(r.default.Fragment,null);const t=[];Object.values(f.CorporationUnlockUpgrades).forEach(n=>{0===e.corp.unlockUpgrades[n[0]]&&t.push(r.default.createElement(o.UnlockUpgrade,{player:e.player,corp:e.corp,upgradeData:n,key:n[0]}))});const n=[];for(let t=0;t
To begin developing a product, first choose the city in which it will be designed. The stats of your employees in the selected city affect the properties of the finished product, such as its quality, performance, and durability.
You can also choose to invest money in the design and marketing of the product. Investing money in its design will result in a superior product. Investing money in marketing the product will help the product's sales.";const i=t.hasMaximumNumberProducts(),s=i?"a-link-button-inactive tooltip":"std-button";return r.default.createElement("button",{className:s,onClick:function(){if(null===t)return;const n="cmpy-mgmt-create-product-popup";d.createPopup(n,m.MakeProductPopup,{popupText:a,division:t,corp:e.corp,popupId:n})},style:{margin:"6px",display:"inline-block"}},n,i&&r.default.createElement("span",{className:"tooltiptext"},"You have reached the maximum number of products: ",t.getMaximumNumberProducts()))}();return r.default.createElement("div",{className:"cmpy-mgmt-industry-overview-panel"},function(){const t=e.corp,n=e.routing.currentDivision;if(null===n)return r.default.createElement(r.default.Fragment,null);const a=1===t.unlockUpgrades[4],i=n.lastCycleRevenue.minus(n.lastCycleExpenses).toNumber(),o=`Industry: ${n.type} (Corp Funds: ${l.numeralWrapper.formatMoney(t.funds.toNumber())})`,s=`Awareness: ${l.numeralWrapper.format(n.awareness,"0.000")}`,m=`Popularity: ${l.numeralWrapper.format(n.popularity,"0.000")}`;let h=!1;const f=n.getAdvertisingFactors(),g=f[1],y=f[2],_=f[3],b=f[0];a&&(h=!0);const v=`Revenue: ${l.numeralWrapper.formatMoney(n.lastCycleRevenue.toNumber())} / s`,k=`Expenses: ${l.numeralWrapper.formatMoney(n.lastCycleExpenses.toNumber())} /s`,C=`Profit: ${l.numeralWrapper.formatMoney(i)} / s`;return r.default.createElement("div",null,o,r.default.createElement("br",null)," ",r.default.createElement("br",null),s," ",r.default.createElement("br",null),m," ",r.default.createElement("br",null),!1!==h&&r.default.createElement("p",{className:"tooltip"},"Advertising Multiplier: x",l.numeralWrapper.format(b,"0.000"),r.default.createElement("span",{className:"tooltiptext cmpy-mgmt-advertising-info"},"Total multiplier for this industrys sales due to its awareness and popularity",r.default.createElement("br",null),"Awareness Bonus: x",l.numeralWrapper.format(Math.pow(g,.85),"0.000"),r.default.createElement("br",null),"Popularity Bonus: x",l.numeralWrapper.format(Math.pow(y,.85),"0.000"),r.default.createElement("br",null),"Ratio Multiplier: x",l.numeralWrapper.format(Math.pow(_,.85),"0.000"))),h,r.default.createElement("br",null),r.default.createElement("br",null),v," ",r.default.createElement("br",null),k," ",r.default.createElement("br",null),C,r.default.createElement("br",null)," ",r.default.createElement("br",null),r.default.createElement("p",{className:"tooltip"},"Production Multiplier: ",l.numeralWrapper.format(n.prodMult,"0.00"),r.default.createElement("span",{className:"tooltiptext"},"Production gain from owning production-boosting materials such as hardware, Robots, AI Cores, and Real Estate")),r.default.createElement("div",{className:"help-tip",onClick:function(){function e(e){return u.createProgressBarText({progress:e,totalTicks:20})}null!==n&&c.dialogBoxCreate("Owning Hardware, Robots, AI Cores, and Real Estate can boost your Industry's production. The effect these materials have on your production varies between Industries. For example, Real Estate may be very effective for some Industries, but ineffective for others.
This division's production multiplier is calculated by summing the individual production multiplier of each of its office locations. This production multiplier is applied to each office. Therefore, it is beneficial to expand into new cities as this can greatly increase the production multiplier of your entire Division.
Below are approximations for how effective each material is at boosting this industry's production multiplier (Bigger bars = more effective):
"+`Hardware: ${e(n.hwFac)}
`+`Robots: ${e(n.robFac)}
`+`AI Cores: ${e(n.aiFac)}
`+`Real Estate: ${e(n.reFac)}`)}},"?"),r.default.createElement("br",null)," ",r.default.createElement("br",null),r.default.createElement("p",{className:"tooltip"},"Scientific Research: ",l.numeralWrapper.format(n.sciResearch.qty,"0.000a"),r.default.createElement("span",{className:"tooltiptext"},"Scientific Research increases the quality of the materials and products that you produce.")),r.default.createElement("button",{className:"help-tip",onClick:function(){if(null===n)return;const e="corporation-research-popup-box";d.createPopup(e,p.ResearchPopup,{industry:n,popupId:e})}},"Research"))}(),r.default.createElement("br",null),r.default.createElement("u",{className:"industry-purchases-and-upgrades-header"},"Purchases & Upgrades"),r.default.createElement("br",null),function(){const n=e.corp,a=e.routing.currentDivision;if(null===a)return[r.default.createElement(r.default.Fragment,null)];const o=a.offices[e.currentCity];if(!(o instanceof i.OfficeSpace))throw new Error(`Current City (${e.currentCity}) for UI does not have an OfficeSpace object`);const u=[];for(const r in s.IndustryUpgrades){const i=s.IndustryUpgrades[r];if(a.hasResearch("AutoBrew")&&"Coffee"===i[4])continue;const p=i[0],d=i[1],h=i[2];let f=0;switch(p){case 0:f=o.employees.length*d;break;default:f=d*Math.pow(h,a.upgrades[p])}function m(){0!==o&&null!==a&&(n.funds.lt(f)?c.dialogBoxCreate("Insufficient funds"):(n.funds=n.funds.minus(f),a.upgrade(i,{corporation:n,office:o}),n.rerender(e.player)))}u.push(t({onClick:m,text:`${i[4]} - ${l.numeralWrapper.formatMoney(f)}`,tooltip:i[5]}))}return u}()," ",r.default.createElement("br",null),n.makesProducts&&a)}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.ThrowPartyPopup=void 0;const o=i(n(0)),s=n(40),l=n(6),c=n(13);t.ThrowPartyPopup=function(e){const[t,n]=o.useState(null);function a(){if(null===t||isNaN(t)||t<0)c.dialogBoxCreate("Invalid value entered");else{const n=t*e.office.employees.length;if(e.corp.funds.lt(n))c.dialogBoxCreate("You don't have enough company funds to throw a party!");else{e.corp.funds=e.corp.funds.minus(n);let a=0;for(let n=0;n
")}}process(e=1,t,n){if(this.state=t,"START"===t){(isNaN(this.thisCycleRevenue)||isNaN(this.thisCycleExpenses))&&(console.error("NaN in Corporation's computed revenue/expenses"),DialogBox_1.dialogBoxCreate("Something went wrong when compting Corporation's revenue/expenses. This is a bug. Please report to game developer"),this.thisCycleRevenue=new decimal_js_1.default(0),this.thisCycleExpenses=new decimal_js_1.default(0)),this.lastCycleRevenue=this.thisCycleRevenue.dividedBy(e*Constants_1.CorporationConstants.SecsPerMarketCycle),this.lastCycleExpenses=this.thisCycleExpenses.dividedBy(e*Constants_1.CorporationConstants.SecsPerMarketCycle),this.thisCycleRevenue=new decimal_js_1.default(0),this.thisCycleExpenses=new decimal_js_1.default(0),this.lastCycleRevenue.gt(0)&&(this.newInd=!1);let t=0;for(const a in this.offices){const r=this.offices[a];0!==r&&(r instanceof OfficeSpace_1.OfficeSpace&&(t+=r.process(e,n,this)))}this.thisCycleExpenses=this.thisCycleExpenses.plus(t),this.processMaterialMarket(),this.processProductMarket(e),this.popularity-=1e-4*e,this.popularity=Math.max(0,this.popularity);const a=n.getDreamSenseGain(),r=4*a;return void(a>0&&(this.popularity+=a*e,this.awareness+=r*e))}let a=this.processMaterials(e,n);Array.isArray(a)&&(this.thisCycleRevenue=this.thisCycleRevenue.plus(a[0]),this.thisCycleExpenses=this.thisCycleExpenses.plus(a[1])),a=this.processProducts(e,n),Array.isArray(a)&&(this.thisCycleRevenue=this.thisCycleRevenue.plus(a[0]),this.thisCycleExpenses=this.thisCycleExpenses.plus(a[1]))}processMaterialMarket(){const e=this.reqMats,t=this.prodMats;for(let n=0;n
${r.numeralWrapper.format(this.cost,"0,0")} Scientific Research`+''+`${n.desc}`+"",text:{name:this.text}}}findNode(e){if(this.text===e)return this;let t=null;for(let n=0;n
Learn to Program
For Experienced JavaScript Developers: NetscriptJS
Netscript Documentation
When starting out, hacking is the most profitable way to earn money and progress. This is a brief collection of tips/pointers on how to make the most out of your hacking scripts.
-hack() and grow() both work by percentages. hack() steals a certain percentage of the money on a server, and grow() increases the amount of money on a server by some percentage (multiplicatively)
-Because hack() and grow() work by percentages, they are more effective if the target server has a high amount of money. Therefore, you should try to increase the amount of money on a server (using grow()) to a certain amount before hacking it. Two import Netscript functions for this are getServerMoneyAvailable() and getServerMaxMoney()
-Keep security level low. Security level affects everything when hacking. Two important Netscript functions for this are getServerSecurityLevel() and getServerMinSecurityLevel()
-Purchase additional servers by visiting 'Alpha Enterprises' in the city. They are relatively cheap and give you valuable RAM to run more scripts early in the game
-Prioritize upgrading the RAM on your home computer. This can also be done at 'Alpha Enterprises'
-Many low level servers have free RAM. You can use this RAM to run your scripts. Use the scp Terminal or Netscript command to copy your scripts onto these servers and then run them.",t.Literatures[n]=new a.Literature(e,n,i),e="The Complete Handbook for Creating a Successful Corporation",n=r.LiteratureNames.CorporationManagementHandbook,i="Getting Started with Corporations
To get started, visit the City Hall in Sector-12 in order to create a Corporation. This requires $150b of your own money, but this $150b will get put into your Corporation's funds. After creating your Corporation, you will see it listed as one of the locations in the city. Click on your Corporation in order to manage it.
Your Corporation can have many different divisions, each in a different Industry. There are many different types of Industries, each with different properties. To create your first division, click the 'Expand into new Industry' button at the top of the management UI. The Agriculture and Software industries are recommended for your first division.
The first thing you'll need to do is hire some employees. Employees can be assigned to five different positions. Each position has a different effect on various aspects of your Corporation. It is recommended to have at least one employee at each position.
Each industry uses some combination of Materials in order to produce other Materials and/or create Products. Specific information about this is displayed in each of your divisions' UI.
Products are special, industry-specific objects. They are different than Materials because you must manually choose to develop them, and you can choose to develop any number of Products. Developing a Product takes time, but a Product typically generates significantly more revenue than any Material. Not all industries allow you to create Products. To create a Product, look for a button in the top-left panel of the division UI (e.g. For the Software Industry, the button says 'Develop Software').
To get your supply chain system started, purchase the Materials that your industry needs to produce other Materials/Products. This can be done by clicking the 'Buy' button next to the corresponding Material(s). After you have the required Materials, you will immediately start production. The amount of Materials/Products you produce is based on a variety of factors, one of which is your employees and their productivity.
Once you start producing Materials/Products, you can sell them in order to start earning revenue. This can be done by clicking the 'Sell' button next to the corresponding Material or Product. The amount of Material/Product you sell is dependent on a wide variety of different factors.
These are the basics of getting your Corporation up and running! Now, you can start purchasing upgrades to improve your bottom line. If you need money, consider looking for seed investors, who will give you money in exchange for stock shares. Otherwise, once you feel you are ready, take your Corporation public! Once your Corporation goes public, you can no longer find investors. Instead, your Corporation will be publicly traded and its stock price will change based on how well it's performing financially. You can then sell your stock shares in order to make money.
Tips/Pointers
-The 'Smart Supply' upgrade is extremely useful. Consider purchasing it as soon as possible.
-Purchasing Hardware, Robots, AI Cores, and Real Estate can potentially increase your production. The effects of these depend on what industry you are in.
-In order to optimize your production, you will need a good balance of Operators, Managers, and Engineers
-Different employees excel in different jobs. For example, the highly intelligent employees will probably do best if they are assigned to do Engineering work or Research & Development.
-If your employees have low morale, energy, or happiness, their production will greatly suffer.
-Tech is important, but don't neglect sales! Having several Businessmen can boost your sales and your bottom line.
-Don't forget to advertise your company. You won't have any business if nobody knows you.
-Having company awareness is great, but what's really important is your company's popularity. Try to keep your popularity as high as possible to see the biggest benefit for your sales
-Remember, you need to spend money to make money!
-Corporations do not reset when installing Augmentations, but they do reset when destroying a BitNode",t.Literatures[n]=new a.Literature(e,n,i),e="A Brief History of Synthoids",n=r.LiteratureNames.HistoryOfSynthoids,i="Synthetic androids, or Synthoids for short, are genetically engineered robots and, short of Augmentations, are composed entirely of organic substances. For this reason, Synthoids are virtually identical to humans in form, composition, and appearance.
Synthoids were first designed and manufactured by OmniTek Incorporated sometime around the middle of the century. Their original purpose was to be used for manual labor and as emergency responders for disasters. As such, they were initially programmed only for their specific tasks. Each iteration that followed improved upon the intelligence and capabilities of the Synthoids. By the 6th iteration, called MK-VI, the Synthoids were so smart and capable enough of making their own decisions that many argued OmniTek had created the first sentient AI. These MK-VI Synthoids were produced in mass quantities (estimates up to 50 billion) with the hopes of increasing society's productivity and bolstering the global economy. Stemming from humanity's desire for technological advancement, optimism and excitement about the future had never been higher.
All of that excitement and optimism quickly turned to fear, panic, and dread in 2070, when a terrorist group called Ascendis Totalis hacked into OmniTek and uploaded a rogue AI into severeal of their Synthoid manufacturing facilities. This hack went undetected and for months OmniTek unknowingly churned out legions of Synthoids embedded with this rogue AI. Then, on December 24th, 2070, Omnica activated dormant protocols in the rogue AI, causing all of the infected Synthoids to immediately launch a military campaign to seek and destroy all of humanity.
What ensued was the deadlist conflict in human history. This crisis, now commonly known as the Synthoid Uprising, resulted in almost ten billion deaths over the course of a year. Despite the nations of the world banding together to combat the threat, the MK-VI Synthoids were simply stronger, faster, more intelligent, and more adaptable than humans, outsmarting them at every turn.
It wasn't until the sacrifice of an elite international military taskforce, called the Bladeburners, that humanity was finally able to defeat the Synthoids. The Bladeburners' final act was a suicide bombing mission that destroyed a large portion of the MK-VI Synthoids, including many of its leaders. In the following weeks militaries from around the world were able to round up and shut down the remaining rogue MK-VI Synthoids, ending the Synthoid Uprising.
In the aftermath of the bloodshed, the Synthoid Accords were drawn up. These Accords banned OmniTek Incorporated from manufacturing any Synthoids beyond the MK-III series. They also banned any other corporation from constructing androids with advanced, near-sentient AI. MK-VI Synthoids that did not have the rogue Ascendis Totalis AI were allowed to continue their existence, but they were stripped of all rights and protections as they were not considered humans. They were also banned from doing anything that may pose a global security threat, such as working for any military/defense organization or conducting any bioengineering, computing, or robotics related research.
Unfortunately, many believe that not all of the rogue MK-VI Synthoids from the Uprising were found and destroyed, and that many of them are blending in as normal humans in society today. In response, many nations have created Bladeburner divisions, special military branches that are tasked with investigating and dealing with any Synthoid threads.
To this day, tensions still exist between the remaining Synthoids and humans as a result of the Uprising.
Nobody knows what happened to the terrorist group Ascendis Totalis.",t.Literatures[n]=new a.Literature(e,n,i),e="A Green Tomorrow",n=r.LiteratureNames.AGreenTomorrow,i="Starting a few decades ago, there was a massive global movement towards the generation of renewable energy in an effort to combat global warming and climate change. The shift towards renewable energy was a big success, or so it seemed. In 2045 a staggering 80% of the world's energy came from non-renewable fossil fuels. Now, about three decades later, that number is down to only 15%. Most of the world's energy now comes from nuclear power and renewable sources such as solar and geothermal energy. Unfortunately, these efforts were not the huge success that they seem to be.
Since 2045 primary energy use has soared almost tenfold. This was mainly due to growing urban populations and the rise of increasingly advanced (and power-hungry) technology that has become ubiquitous in our lives. So, despite the fact that the percentage of our energy that comes from fossil fuels has drastically decreased, the total amount of energy we are producing from fossil fuels has actually increased.
The grim effects of our species' irresponsible use of energy and neglect of our mother world have become increasingly apparent. Last year a temperature of 190F was recorded in the Death Valley desert, which is over 50% higher than the highest recorded temperature at the beginning of the century. In the last two decades numerous major cities such as Manhattan, Boston, and Los Angeles have been partially or fully submerged by rising sea levels. In the present day, over 75% of the world's agriculture is done in climate-controlled vertical farms, as most traditional farmland has become unusable due to severe climate conditions.
Despite all of this, the greedy and corrupt corporations that rule the world have done nothing to address these problems that threaten our species. And so it's up to us, the common people. Each and every one of us can make a difference by doing what these corporations won't: taking responsibility. If we don't, pretty soon there won't be an Earth left to save. We are the last hope for a green tomorrow.",t.Literatures[n]=new a.Literature(e,n,i),e="Alpha and Omega",n=r.LiteratureNames.AlphaOmega,i="Then we saw a new Heaven and a new Earth, for our first Heaven and Earth had gone away, and our sea was no more. And we saw a new holy city, new Aeria, coming down out of this new Heaven, prepared as a bride adorned for her husband. And we heard a loud voice saying, 'Behold, the new dwelling place of the Gods. We will dwell with them, and they will be our people, and we will be with them as their Gods. We will wipe away every tear from their eyes, and death shall be no more, neither shall there be mourning, nor crying, nor pain anymore, for the former things have passed away.'
And once we were seated on the throne we said 'Behold, I am making all things new.' Also we said, 'Write this down, for these words are trustworthy and true.' And we said to you, 'It is done! I am the Alpha and the Omega, the beginning and the end. To the thirsty I will give from the spring of the water of life without payment. The one who conquers will have this heritage, and we will be his God and he will be our son. But as for the cowardly, the faithless, the detestable, as for murderers, the sexually immoral, sorcerers, idolaters, and all liars, their portion will be in the lake that burns with fire and sulfur, for it is the second true death.'",t.Literatures[n]=new a.Literature(e,n,i),e="Are We Living in a Computer Simulation?",n=r.LiteratureNames.SimulatedReality,i="The idea that we are living in a virtual world is not new. It's a trope that has been explored constantly in literature and pop culture. However, it is also a legitimate scientific hypothesis that many notable physicists and philosophers have debated for years.
Proponents for this simulated reality theory often point to how advanced our technology has become, as well as the incredibly fast pace at which it has advanced over the past decades. The amount of computing power available to us has increased over 100-fold since 2060 due to the development of nanoprocessors and quantum computers. Artifical Intelligence has advanced to the point where our entire lives are controlled by robots and machines that handle our day-to-day activities such as autonomous transportation and scheduling. If we consider the pace at which this technology has advanced and assume that these developments continue, it's reasonable to assume that at some point in the future our technology would be advanced enough that we could create simulations that are indistinguishable from reality. However, if continued technological advancement is a reasonable outcome, then it is very likely that such a scenario has already happened.
Statistically speaking, somewhere out there in the infinite universe there is an advanced, intelligent species that already has such technology. Who's to say that they haven't already created such a virtual reality: our own?",t.Literatures[n]=new a.Literature(e,n,i),e="Beyond Man",n=r.LiteratureNames.BeyondMan,i="Humanity entered a 'transhuman' era a long time ago. And despite the protests and criticisms of many who cried out against human augmentation at the time, the transhuman movement continued and prospered. Proponents of the movement ignored the critics, arguing that it was in our inherent nature to better ourselves. To improve. To be more than we were. They claimed that not doing so would be to go against every living organism's biological purpose: evolution and survival of the fittest.
And here we are today, with technology that is advanced enough to augment humans to a state that can only be described as posthuman. But what do we have to show for it when this augmentation technology is only available to the so-called 'elite'? Are we really better off than before when only 5% of the world's population has access to this technology? When the powerful corporations and organizations of the world keep it all to themselves, have we really evolved?
Augmentation technology has only further increased the divide between the rich and the poor, between the powerful and the oppressed. We have not become 'more than human'. We have not evolved from nature's original design. We are still the greedy, corrupted, and evil men that we always were.",t.Literatures[n]=new a.Literature(e,n,i),e="Brighter than the Sun",n=r.LiteratureNames.BrighterThanTheSun,i="When people think about the corporations that dominate the East, they typically think of KuaiGong International, which holds a complete monopoly for manufacturing and commerce in Asia, or Global Pharmaceuticals, the world's largest drug company, or OmniTek Incorporated, the global leader in intelligent and autonomous robots. But there's one company that has seen a rapid rise in the last year and is poised to dominate not only the East, but the entire world: TaiYang Digital.
TaiYang Digital is a Chinese internet-technology corporation that provides services such as online advertising, search engines, gaming, media, entertainment, and cloud computing/storage. Its name TaiYang comes from the Chinese word for 'sun'. In Chinese culture, the sun is a 'yang' symbol associated with life, heat, masculinity, and heaven.
The company was founded less than 5 years ago and is already the third highest valued company in all of Asia. In 2076 it generated a total revenue of over 10 trillion yuan. It's services are used daily by over a billion people worldwide.
TaiYang Digital's meteoric rise is extremely surprising in modern society. This sort of growth is something you'd commonly see in the first half of the century, especially for tech companies. However in the last two decades the number of corporations has significantly declined as the largest entities quickly took over the economy. Corporations such as ECorp, MegaCorp, and KuaiGong have established such strong monopolies in their market sectors that they have effectively killed off all of the smaller and new corporations that have tried to start up over the years. This is what makes the rise of TaiYang Digital so impressive. And if TaiYang continues down this path, then they have a bright future ahead of them.",t.Literatures[n]=new a.Literature(e,n,i),e="Democracy is Dead: The Fall of an Empire",n=r.LiteratureNames.DemocracyIsDead,i="They rose from the shadows in the street.
From the places where the oppressed meet.
Their cries echoed loudly through the air.
As they once did in Tiananmen Square.
Loudness in the silence, Darkness in the light.
They came forth with power and might.
Once the beacon of democracy, America was first.
Its pillars of society destroyed and dispersed.
Soon the cries rose everywhere, with revolt and riot.
Until one day, finally, all was quiet.
From the ashes rose a new order, corporatocracy was its name.
Rome, Mongol, Byzantine, all of history is just the same.
For man will never change in a fundamental way.
And now democracy is dead, in the USA.",t.Literatures[n]=new a.Literature(e,n,i),e="Figures Show Rising Crime Rates in Sector-12",n=r.LiteratureNames.Sector12Crime,i="A recent study by analytics company Wilson Inc. shows a significant rise in criminal activity in Sector-12. Perhaps the most alarming part of the statistic is that most of the rise is in violent crime such as homicide and assault. According to the study, the city saw a total of 21,406 reported homicides in 2076, which is over a 20% increase compared to 2075.
CIA director David Glarow says its too early to know whether these figures indicate the beginning of a sustained increase in crime rates, or whether the year was just an unfortunate outlier. He states that many intelligence and law enforcement agents have noticed an increase in organized crime activites, and believes that these figures may be the result of an uprising from criminal organizations such as The Syndicate or the Slum Snakes.",t.Literatures[n]=new a.Literature(e,n,i),e="Man and the Machine",n=r.LiteratureNames.ManAndMachine,i="In 2005 Ray Kurzweil popularized his theory of the Singularity. He predicted that the rate of technological advancement would continue to accelerate faster and faster until one day machines would be become infinitely more intelligent than humans. This point, called the Singularity, would result in a drastic transformation of the world as we know it. He predicted that the Singularity would arrive by 2045. And yet here we are, more than three decades later, where most would agree that we have not yet reached a point where computers and machines are vastly more intelligent than we are. So what gives?
The answer is that we have reached the Singularity, just not in the way we expected. The artifical superintelligence that was predicted by Kurzweil and others exists in the world today - in the form of Augmentations. Yes, those Augmentations that the rich and powerful keep to themselves enable humans to become superintelligent beings. The Singularity did not lead to a world where our machines are infinitely more intelligent than us, it led to a world where man and machine can merge to become something greater. Most of the world just doesn't know it yet.",t.Literatures[n]=new a.Literature(e,n,i),e="Secret Societies",n=r.LiteratureNames.SecretSocieties,i="The idea of secret societies has long intrigued the general public by inspiring curiosity, fascination, and distrust. People have long wondered about who these secret society members are and what they do, with the most radical of conspiracy theorists claiming that they control everything in the entire world. And while the world may never know for sure, it is likely that many secret societies do actually exist, even today.
However, the secret societies of the modern world are nothing like those that (supposedly) existed decades and centuries ago. The Freemasons, Knights Templar, and Illuminati, while they may have been around at the turn of the 21st century, almost assuredly do not exist today. The dominance of the Web in our everyday lives and the fact that so much of the world is now digital has given rise to a new breed of secret societies: Internet-based ones.
Commonly called 'hacker groups', Internet-based secret societies have become well-known in today's world. Some of these, such as The Black Hand, are black hat groups that claim they are trying to help the oppressed by attacking the elite and powerful. Others, such as NiteSec, are hacktivist groups that try to push political and social agendas. Perhaps the most intriguing hacker group is the mysterious Bitrunners, whose purpose still remains unknown.",t.Literatures[n]=new a.Literature(e,n,i),e="Space: The Failed Frontier",n=r.LiteratureNames.TheFailedFrontier,i="Humans have long dreamed about spaceflight. With enduring interest, we were driven to explore the unknown and discover new worlds. We dreamed about conquering the stars. And in our quest, we pushed the boundaries of our scientific limits, and then pushed further. Space exploration lead to the development of many important technologies and new industries.
But sometime in the middle of the 21st century, all of that changed. Humanity lost its ambitions and aspirations of exploring the cosmos. The once-large funding for agencies like NASA and the European Space Agency gradually whittled away until their eventual disbanding in the 2060's. Not even militaries are fielding flights into space nowadays. The only remnants of the once great mission for cosmic conquest are the countless satellites in near-earth orbit, used for communications, espionage, and other corporate interests.
And as we continue to look at the state of space technology, it becomes more and more apparent that we will never return to that golden age of space exploration, that age where everyone dreamed of going beyond earth for the sake of discovery.",t.Literatures[n]=new a.Literature(e,n,i),e="Coded Intelligence: Myth or Reality?",n=r.LiteratureNames.CodedIntelligence,i="Tremendous progress has been made in the field of Artificial Intelligence over the past few decades. Our autonomous vehicles and transporation systems. The electronic personal assistants that control our everyday lives. Medical, service, and manufacturing robots. All of these are examples of how far AI has come and how much it has improved our daily lives. However, the question still remains of whether AI will ever be advanced enough to re-create human intelligence.
We've certainly come close to artificial intelligence that is similar to humans. For example OmniTek Incorporated's CompanionBot, a robot meant to act as a comforting friend for lonely and grieving people, is eerily human-like in its appearance, speech, mannerisms, and even movement. However its artificial intelligence isn't the same as that of humans. Not yet. It doesn't have sentience or self-awareness or consciousness.
Many neuroscientists believe that we won't ever reach the point of creating artificial human intelligence. 'At the end of the the day, AI comes down to 1's and 0's, while the human brain does not. We'll never see AI that is identical to that of humans.'",t.Literatures[n]=new a.Literature(e,n,i),e="Synthetic Muscles",n=r.LiteratureNames.SyntheticMuscles,i="Initial versions of synthetic muscles weren't made of anything organic but were actually crude devices made to mimic human muscle function. Some of the early iterations were actually made of common materials such as fishing lines and sewing threads due to their high strength for a cheap cost.
As technology progressed, however, advances in biomedical engineering paved the way for a new method of creating synthetic muscles. Instead of creating something that closely imitated the functionality of human muscle, scientists discovered a way of forcing the human body itself to augment its own muscle tissue using both synthetic and organic materials. This is typically done using gene therapy or chemical injections.",t.Literatures[n]=new a.Literature(e,n,i),e="Tensions rise in global tech race",n=r.LiteratureNames.TensionsInTechRace,i="Have we entered a new Cold War? Is WWIII just beyond the horizon?
After rumors came out that OmniTek Incorporated had begun developing advanced robotic supersoldiers, geopolitical tensions quickly flared between the USA, Russia, and several Asian superpowers. In a rare show of cooperation between corporations, MegaCorp and ECorp have reportedly launched hundreds of new surveillance and espionage satellites. Defense contractors such as DeltaOne and AeroCorp have been working with the CIA and NSA to prepare for conflict. Meanwhile, the rest of the world sits in earnest hoping that it never reaches full-scale war. With today's technology and firepower, a World War would assuredly mean the end of human civilization.",t.Literatures[n]=new a.Literature(e,n,i),e="The Cost of Immortality",n=r.LiteratureNames.CostOfImmortality,i="Evolution and advances in medical and augmentation technology has lead to drastic improvements in human mortality rates. Recent figures show that the life expectancy for humans that live in a first-world country is about 130 years of age, almost double of what it was at the turn of the century. However, this increase in average lifespan has had some significant effects on society and culture.
Due to longer lifespans and a better quality of life, many adults are holding off on having kids until much later. As a result, the percentage of youth in first-world countries has been decreasing, while the number of senior citizens is significantly increasing.
Perhaps the most alarming result of all of this is the rapidly shrinking workforce. Despite the increase in life expectancy, the typical retirement age for workers in America has remained about the same, meaning a larger and larger percentage of people in America are retirees. Furthermore, many young adults are holding off on joining the workforce because they feel that they have plenty of time left in their lives for employment, and want to 'enjoy life while they're young.' For most industries, this shrinking workforce is not a major issue as most things are handled by robots anyways. However, there are still several key industries such as engineering and education that have not been automated, and these remain in danger to this cultural phenomenon.",t.Literatures[n]=new a.Literature(e,n,i),e="The Hidden World",n=r.LiteratureNames.TheHiddenWorld,i="WAKE UP SHEEPLE
THE GOVERNMENT DOES NOT EXIST. CORPORATIONS DO NOT RUN SOCIETY
THE ILLUMINATI ARE THE SECRET RULERS OF THE WORLD!
Yes, the Illuminati of legends. The ancient secret society that controls the entire world from the shadows with their invisible hand. The group of the rich and wealthy that have penetrated every major government, financial agency, and corporation in the last three hundred years.
OPEN YOUR EYES
It was the Illuminati that brought an end to democracy in the world. They are the driving force behind everything that happens.
THEY ARE ALL AROUND YOU
After destabilizing the world's governments, they are now entering the final stage of their master plan. They will secretly initiate global crises. Terrorism. Pandemics. World War. And out of the chaos that ensues they will build their New World Order.",t.Literatures[n]=new a.Literature(e,n,i),e="The New God",n=r.LiteratureNames.TheNewGod,i="Everyone has a moment in their life when they wonder about the bigger questions.
What's the point of all this? What is my purpose?
Some people dare to think even bigger.
What will the fate of the human race be?
We live in an era vastly different from that of 15 or even 20 years ago. We have gone beyond the limits of humanity. We have stripped ourselves of the tyranny of flesh.
The Singularity is here. The merging of man and machine. This is where humanity evolves into ",t.Literatures[n]=new a.Literature(e,n,i),e="The New Triads",n=r.LiteratureNames.NewTriads,i="The Triads were an ancient transnational crime syndicate based in China, Hong Kong, and other Asian territories. They were often considered one of the first and biggest criminal secret societies. While most of the branches of the Triads have been destroyed over the past few decades, the crime faction has spawned and inspired a number of other Asian crime organizations over the past few years. The most notable of these is the Tetrads.
It is widely believed that the Tetrads are a rogue group that splintered off from the Triads sometime in the mid 21st century. The founders of the Tetrads, all of whom were ex-Triad members, believed that the Triads were losing their purpose and direction. The Tetrads started off as a small group that mainly engaged in fraud and extortion. They were largely unknown until just a few years ago when they took over the illegal drug trade in all of the major Asian cities. They quickly became the most powerful crime syndicate in the continent.
Not much else is known about the Tetrads, or about the efforts the Asian governments and corporations are making to take down this large new crime organization. Many believe that the Tetrads have infiltrated the governments and powerful corporations in Asia, which has helped faciliate their recent rapid rise.",t.Literatures[n]=new a.Literature(e,n,i),e="The Secret War",n=r.LiteratureNames.TheSecretWar,i="",t.Literatures[n]=new a.Literature(e,n,i)}()},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Popup=void 0;const o=i(n(0));t.Popup=function(e){function t(t){"Escape"===t.key&&e.removePopup(e.id)}return o.useEffect(()=>(document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)})),o.default.createElement("div",{className:"popup-box-content",id:`${e.id}-content`},o.default.createElement(e.content,e.props))}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CorporationState=t.AllCorporationStates=void 0;const a=n(29);t.AllCorporationStates=["START","PURCHASE","PRODUCTION","SALE","EXPORT"];class r{constructor(){this.state=0}getState(){return t.AllCorporationStates[this.state]}nextState(){(this.state<0||this.state>=t.AllCorporationStates.length)&&(this.state=0),++this.state,this.state>=t.AllCorporationStates.length&&(this.state=0)}toJSON(){return a.Generic_toJSON("CorporationState",this)}static fromJSON(e){return a.Generic_fromJSON(r,e.data)}}t.CorporationState=r,a.Reviver.constructors.CorporationState=r},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.InstalledAugmentations=void 0;const o=i(n(0)),s=n(1),l=n(12),c=n(3),u=n(24),m=n(216),p=n(633);t.InstalledAugmentations=function(){const e=s.Player.augmentations.slice();u.Settings.OwnedAugmentationsOrder===m.OwnedAugmentationsOrderSetting.Alphabetically&&e.sort((e,t)=>e.name<=t.name?-1:1);const t=e.map(e=>{const t=l.Augmentations[e.name];let n=null;return e.name===c.AugmentationNames.NeuroFluxGovernor&&(n=e.level),o.createElement("li",{key:e.name},o.createElement(p.AugmentationAccordion,{aug:t,level:n}))});return o.createElement(o.Fragment,null,t)}},function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return r(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.InstalledAugmentationsAndSourceFiles=void 0;const o=i(n(0)),s=n(1133),l=n(955),c=n(954),u=n(952),m=n(24),p=n(216);t.InstalledAugmentationsAndSourceFiles=class extends o.Component{constructor(e){super(e),this.state={rerenderFlag:!1},this.collapseAllHeaders=this.collapseAllHeaders.bind(this),this.expandAllHeaders=this.expandAllHeaders.bind(this),this.sortByAcquirementTime=this.sortByAcquirementTime.bind(this),this.sortInOrder=this.sortInOrder.bind(this),this.listRef=o.createRef()}collapseAllHeaders(){const e=this.listRef.current;if(null==e)return;const t=e.getElementsByClassName("accordion-header");for(let e=0;e`.
- * If you wish to change that mapping, you can provide your own.
- * Alternatively, you can use the `component` prop.
- */
- variantMapping: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object
-} : undefined;
-/* harmony default export */ __webpack_exports__["a"] = (Object(_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(styles, {
- name: 'MuiTypography'
-})(Typography));
-
-/***/ }),
-/* 83 */
-/*!****************************************************************!*\
- !*** ./node_modules/@material-ui/core/esm/ButtonBase/index.js ***!
- \****************************************************************/
-/*! exports provided: default */
-/*! exports used: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ButtonBase */ 96);
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _ButtonBase__WEBPACK_IMPORTED_MODULE_0__["a"]; });
-
-
-
-/***/ }),
-/* 84 */
-/*!******************************************!*\
- !*** ./node_modules/jss/dist/jss.esm.js ***!
- \******************************************/
-/*! exports provided: default, RuleList, SheetsManager, SheetsRegistry, create, createGenerateId, createRule, getDynamicStyles, hasCSSTOMSupport, sheets, toCssValue */
-/*! exports used: RuleList, SheetsRegistry, create, createRule, getDynamicStyles, hasCSSTOMSupport, toCssValue */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RuleList; });
-/* unused harmony export SheetsManager */
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SheetsRegistry; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return create; });
-/* unused harmony export createGenerateId */
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return createRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return getDynamicStyles; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return hasCSSTOMSupport; });
-/* unused harmony export sheets */
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return toCssValue; });
-/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ 3);
-/* harmony import */ var is_in_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! is-in-browser */ 202);
-/* harmony import */ var tiny_warning__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tiny-warning */ 95);
-/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ 135);
-/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ 200);
-/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ 199);
-/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ 172);
-
-
-
-
-
-
-
-
-var plainObjectConstrurctor = {}.constructor;
-function cloneStyle(style) {
- if (style == null || typeof style !== 'object') return style;
- if (Array.isArray(style)) return style.map(cloneStyle);
- if (style.constructor !== plainObjectConstrurctor) return style;
- var newStyle = {};
-
- for (var name in style) {
- newStyle[name] = cloneStyle(style[name]);
- }
-
- return newStyle;
-}
-
-/**
- * Create a rule instance.
- */
-
-function createRule(name, decl, options) {
- if (name === void 0) {
- name = 'unnamed';
- }
-
- var jss = options.jss;
- var declCopy = cloneStyle(decl);
- var rule = jss.plugins.onCreateRule(name, declCopy, options);
- if (rule) return rule; // It is an at-rule and it has no instance.
-
- if (name[0] === '@') {
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] Unknown rule " + name) : undefined;
- }
-
- return null;
-}
-
-var join = function join(value, by) {
- var result = '';
-
- for (var i = 0; i < value.length; i++) {
- // Remove !important from the value, it will be readded later.
- if (value[i] === '!important') break;
- if (result) result += by;
- result += value[i];
- }
-
- return result;
-};
-
-/**
- * Converts array values to string.
- *
- * `margin: [['5px', '10px']]` > `margin: 5px 10px;`
- * `border: ['1px', '2px']` > `border: 1px, 2px;`
- * `margin: [['5px', '10px'], '!important']` > `margin: 5px 10px !important;`
- * `color: ['red', !important]` > `color: red !important;`
- */
-var toCssValue = function toCssValue(value, ignoreImportant) {
- if (ignoreImportant === void 0) {
- ignoreImportant = false;
- }
-
- if (!Array.isArray(value)) return value;
- var cssValue = ''; // Support space separated values via `[['5px', '10px']]`.
-
- if (Array.isArray(value[0])) {
- for (var i = 0; i < value.length; i++) {
- if (value[i] === '!important') break;
- if (cssValue) cssValue += ', ';
- cssValue += join(value[i], ' ');
- }
- } else cssValue = join(value, ', '); // Add !important, because it was ignored.
-
-
- if (!ignoreImportant && value[value.length - 1] === '!important') {
- cssValue += ' !important';
- }
-
- return cssValue;
-};
-
-/**
- * Indent a string.
- * http://jsperf.com/array-join-vs-for
- */
-function indentStr(str, indent) {
- var result = '';
-
- for (var index = 0; index < indent; index++) {
- result += ' ';
- }
-
- return result + str;
-}
-/**
- * Converts a Rule to CSS string.
- */
-
-
-function toCss(selector, style, options) {
- if (options === void 0) {
- options = {};
- }
-
- var result = '';
- if (!style) return result;
- var _options = options,
- _options$indent = _options.indent,
- indent = _options$indent === void 0 ? 0 : _options$indent;
- var fallbacks = style.fallbacks;
- if (selector) indent++; // Apply fallbacks first.
-
- if (fallbacks) {
- // Array syntax {fallbacks: [{prop: value}]}
- if (Array.isArray(fallbacks)) {
- for (var index = 0; index < fallbacks.length; index++) {
- var fallback = fallbacks[index];
-
- for (var prop in fallback) {
- var value = fallback[prop];
-
- if (value != null) {
- if (result) result += '\n';
- result += "" + indentStr(prop + ": " + toCssValue(value) + ";", indent);
- }
- }
- }
- } else {
- // Object syntax {fallbacks: {prop: value}}
- for (var _prop in fallbacks) {
- var _value = fallbacks[_prop];
-
- if (_value != null) {
- if (result) result += '\n';
- result += "" + indentStr(_prop + ": " + toCssValue(_value) + ";", indent);
- }
- }
- }
- }
-
- for (var _prop2 in style) {
- var _value2 = style[_prop2];
-
- if (_value2 != null && _prop2 !== 'fallbacks') {
- if (result) result += '\n';
- result += "" + indentStr(_prop2 + ": " + toCssValue(_value2) + ";", indent);
- }
- } // Allow empty style in this case, because properties will be added dynamically.
-
-
- if (!result && !options.allowEmpty) return result; // When rule is being stringified before selector was defined.
-
- if (!selector) return result;
- indent--;
- if (result) result = "\n" + result + "\n";
- return indentStr(selector + " {" + result, indent) + indentStr('}', indent);
-}
-
-var escapeRegex = /([[\].#*$><+~=|^:(),"'`\s])/g;
-var nativeEscape = typeof CSS !== 'undefined' && CSS.escape;
-var escape = (function (str) {
- return nativeEscape ? nativeEscape(str) : str.replace(escapeRegex, '\\$1');
-});
-
-var BaseStyleRule =
-/*#__PURE__*/
-function () {
- function BaseStyleRule(key, style, options) {
- this.type = 'style';
- this.key = void 0;
- this.isProcessed = false;
- this.style = void 0;
- this.renderer = void 0;
- this.renderable = void 0;
- this.options = void 0;
- var sheet = options.sheet,
- Renderer = options.Renderer;
- this.key = key;
- this.options = options;
- this.style = style;
- if (sheet) this.renderer = sheet.renderer;else if (Renderer) this.renderer = new Renderer();
- }
- /**
- * Get or set a style property.
- */
-
-
- var _proto = BaseStyleRule.prototype;
-
- _proto.prop = function prop(name, value, options) {
- // It's a getter.
- if (value === undefined) return this.style[name]; // Don't do anything if the value has not changed.
-
- var force = options ? options.force : false;
- if (!force && this.style[name] === value) return this;
- var newValue = value;
-
- if (!options || options.process !== false) {
- newValue = this.options.jss.plugins.onChangeValue(value, name, this);
- }
-
- var isEmpty = newValue == null || newValue === false;
- var isDefined = name in this.style; // Value is empty and wasn't defined before.
-
- if (isEmpty && !isDefined && !force) return this; // We are going to remove this value.
-
- var remove = isEmpty && isDefined;
- if (remove) delete this.style[name];else this.style[name] = newValue; // Renderable is defined if StyleSheet option `link` is true.
-
- if (this.renderable && this.renderer) {
- if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, newValue);
- return this;
- }
-
- var sheet = this.options.sheet;
-
- if (sheet && sheet.attached) {
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, '[JSS] Rule is not linked. Missing sheet option "link: true".') : undefined;
- }
-
- return this;
- };
-
- return BaseStyleRule;
-}();
-var StyleRule =
-/*#__PURE__*/
-function (_BaseStyleRule) {
- Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"])(StyleRule, _BaseStyleRule);
-
- function StyleRule(key, style, options) {
- var _this;
-
- _this = _BaseStyleRule.call(this, key, style, options) || this;
- _this.selectorText = void 0;
- _this.id = void 0;
- _this.renderable = void 0;
- var selector = options.selector,
- scoped = options.scoped,
- sheet = options.sheet,
- generateId = options.generateId;
-
- if (selector) {
- _this.selectorText = selector;
- } else if (scoped !== false) {
- _this.id = generateId(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(Object(_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(_this)), sheet);
- _this.selectorText = "." + escape(_this.id);
- }
-
- return _this;
- }
- /**
- * Set selector string.
- * Attention: use this with caution. Most browsers didn't implement
- * selectorText setter, so this may result in rerendering of entire Style Sheet.
- */
-
-
- var _proto2 = StyleRule.prototype;
-
- /**
- * Apply rule to an element inline.
- */
- _proto2.applyTo = function applyTo(renderable) {
- var renderer = this.renderer;
-
- if (renderer) {
- var json = this.toJSON();
-
- for (var prop in json) {
- renderer.setProperty(renderable, prop, json[prop]);
- }
- }
-
- return this;
- }
- /**
- * Returns JSON representation of the rule.
- * Fallbacks are not supported.
- * Useful for inline styles.
- */
- ;
-
- _proto2.toJSON = function toJSON() {
- var json = {};
-
- for (var prop in this.style) {
- var value = this.style[prop];
- if (typeof value !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = toCssValue(value);
- }
-
- return json;
- }
- /**
- * Generates a CSS string.
- */
- ;
-
- _proto2.toString = function toString(options) {
- var sheet = this.options.sheet;
- var link = sheet ? sheet.options.link : false;
- var opts = link ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, options, {
- allowEmpty: true
- }) : options;
- return toCss(this.selectorText, this.style, opts);
- };
-
- Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(StyleRule, [{
- key: "selector",
- set: function set(selector) {
- if (selector === this.selectorText) return;
- this.selectorText = selector;
- var renderer = this.renderer,
- renderable = this.renderable;
- if (!renderable || !renderer) return;
- var hasChanged = renderer.setSelector(renderable, selector); // If selector setter is not implemented, rerender the rule.
-
- if (!hasChanged) {
- renderer.replaceRule(renderable, this);
- }
- }
- /**
- * Get selector string.
- */
- ,
- get: function get() {
- return this.selectorText;
- }
- }]);
-
- return StyleRule;
-}(BaseStyleRule);
-var pluginStyleRule = {
- onCreateRule: function onCreateRule(name, style, options) {
- if (name[0] === '@' || options.parent && options.parent.type === 'keyframes') {
- return null;
- }
-
- return new StyleRule(name, style, options);
- }
-};
-
-var defaultToStringOptions = {
- indent: 1,
- children: true
-};
-var atRegExp = /@([\w-]+)/;
-/**
- * Conditional rule for @media, @supports
- */
-
-var ConditionalRule =
-/*#__PURE__*/
-function () {
- function ConditionalRule(key, styles, options) {
- this.type = 'conditional';
- this.at = void 0;
- this.key = void 0;
- this.query = void 0;
- this.rules = void 0;
- this.options = void 0;
- this.isProcessed = false;
- this.renderable = void 0;
- this.key = key;
- var atMatch = key.match(atRegExp);
- this.at = atMatch ? atMatch[1] : 'unknown'; // Key might contain a unique suffix in case the `name` passed by user was duplicate.
-
- this.query = options.name || "@" + this.at;
- this.options = options;
- this.rules = new RuleList(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, options, {
- parent: this
- }));
-
- for (var name in styles) {
- this.rules.add(name, styles[name]);
- }
-
- this.rules.process();
- }
- /**
- * Get a rule.
- */
-
-
- var _proto = ConditionalRule.prototype;
-
- _proto.getRule = function getRule(name) {
- return this.rules.get(name);
- }
- /**
- * Get index of a rule.
- */
- ;
-
- _proto.indexOf = function indexOf(rule) {
- return this.rules.indexOf(rule);
- }
- /**
- * Create and register rule, run plugins.
- */
- ;
-
- _proto.addRule = function addRule(name, style, options) {
- var rule = this.rules.add(name, style, options);
- if (!rule) return null;
- this.options.jss.plugins.onProcessRule(rule);
- return rule;
- }
- /**
- * Generates a CSS string.
- */
- ;
-
- _proto.toString = function toString(options) {
- if (options === void 0) {
- options = defaultToStringOptions;
- }
-
- if (options.indent == null) options.indent = defaultToStringOptions.indent;
- if (options.children == null) options.children = defaultToStringOptions.children;
-
- if (options.children === false) {
- return this.query + " {}";
- }
-
- var children = this.rules.toString(options);
- return children ? this.query + " {\n" + children + "\n}" : '';
- };
-
- return ConditionalRule;
-}();
-var keyRegExp = /@media|@supports\s+/;
-var pluginConditionalRule = {
- onCreateRule: function onCreateRule(key, styles, options) {
- return keyRegExp.test(key) ? new ConditionalRule(key, styles, options) : null;
- }
-};
-
-var defaultToStringOptions$1 = {
- indent: 1,
- children: true
-};
-var nameRegExp = /@keyframes\s+([\w-]+)/;
-/**
- * Rule for @keyframes
- */
-
-var KeyframesRule =
-/*#__PURE__*/
-function () {
- function KeyframesRule(key, frames, options) {
- this.type = 'keyframes';
- this.at = '@keyframes';
- this.key = void 0;
- this.name = void 0;
- this.id = void 0;
- this.rules = void 0;
- this.options = void 0;
- this.isProcessed = false;
- this.renderable = void 0;
- var nameMatch = key.match(nameRegExp);
-
- if (nameMatch && nameMatch[1]) {
- this.name = nameMatch[1];
- } else {
- this.name = 'noname';
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] Bad keyframes name " + key) : undefined;
- }
-
- this.key = this.type + "-" + this.name;
- this.options = options;
- var scoped = options.scoped,
- sheet = options.sheet,
- generateId = options.generateId;
- this.id = scoped === false ? this.name : escape(generateId(this, sheet));
- this.rules = new RuleList(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, options, {
- parent: this
- }));
-
- for (var name in frames) {
- this.rules.add(name, frames[name], Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, options, {
- parent: this
- }));
- }
-
- this.rules.process();
- }
- /**
- * Generates a CSS string.
- */
-
-
- var _proto = KeyframesRule.prototype;
-
- _proto.toString = function toString(options) {
- if (options === void 0) {
- options = defaultToStringOptions$1;
- }
-
- if (options.indent == null) options.indent = defaultToStringOptions$1.indent;
- if (options.children == null) options.children = defaultToStringOptions$1.children;
-
- if (options.children === false) {
- return this.at + " " + this.id + " {}";
- }
-
- var children = this.rules.toString(options);
- if (children) children = "\n" + children + "\n";
- return this.at + " " + this.id + " {" + children + "}";
- };
-
- return KeyframesRule;
-}();
-var keyRegExp$1 = /@keyframes\s+/;
-var refRegExp = /\$([\w-]+)/g;
-
-var findReferencedKeyframe = function findReferencedKeyframe(val, keyframes) {
- if (typeof val === 'string') {
- return val.replace(refRegExp, function (match, name) {
- if (name in keyframes) {
- return keyframes[name];
- }
-
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] Referenced keyframes rule \"" + name + "\" is not defined.") : undefined;
- return match;
- });
- }
-
- return val;
-};
-/**
- * Replace the reference for a animation name.
- */
-
-
-var replaceRef = function replaceRef(style, prop, keyframes) {
- var value = style[prop];
- var refKeyframe = findReferencedKeyframe(value, keyframes);
-
- if (refKeyframe !== value) {
- style[prop] = refKeyframe;
- }
-};
-
-var plugin = {
- onCreateRule: function onCreateRule(key, frames, options) {
- return typeof key === 'string' && keyRegExp$1.test(key) ? new KeyframesRule(key, frames, options) : null;
- },
- // Animation name ref replacer.
- onProcessStyle: function onProcessStyle(style, rule, sheet) {
- if (rule.type !== 'style' || !sheet) return style;
- if ('animation-name' in style) replaceRef(style, 'animation-name', sheet.keyframes);
- if ('animation' in style) replaceRef(style, 'animation', sheet.keyframes);
- return style;
- },
- onChangeValue: function onChangeValue(val, prop, rule) {
- var sheet = rule.options.sheet;
-
- if (!sheet) {
- return val;
- }
-
- switch (prop) {
- case 'animation':
- return findReferencedKeyframe(val, sheet.keyframes);
-
- case 'animation-name':
- return findReferencedKeyframe(val, sheet.keyframes);
-
- default:
- return val;
- }
- }
-};
-
-var KeyframeRule =
-/*#__PURE__*/
-function (_BaseStyleRule) {
- Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"])(KeyframeRule, _BaseStyleRule);
-
- function KeyframeRule() {
- var _this;
-
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
-
- _this = _BaseStyleRule.call.apply(_BaseStyleRule, [this].concat(args)) || this;
- _this.renderable = void 0;
- return _this;
- }
-
- var _proto = KeyframeRule.prototype;
-
- /**
- * Generates a CSS string.
- */
- _proto.toString = function toString(options) {
- var sheet = this.options.sheet;
- var link = sheet ? sheet.options.link : false;
- var opts = link ? Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, options, {
- allowEmpty: true
- }) : options;
- return toCss(this.key, this.style, opts);
- };
-
- return KeyframeRule;
-}(BaseStyleRule);
-var pluginKeyframeRule = {
- onCreateRule: function onCreateRule(key, style, options) {
- if (options.parent && options.parent.type === 'keyframes') {
- return new KeyframeRule(key, style, options);
- }
-
- return null;
- }
-};
-
-var FontFaceRule =
-/*#__PURE__*/
-function () {
- function FontFaceRule(key, style, options) {
- this.type = 'font-face';
- this.at = '@font-face';
- this.key = void 0;
- this.style = void 0;
- this.options = void 0;
- this.isProcessed = false;
- this.renderable = void 0;
- this.key = key;
- this.style = style;
- this.options = options;
- }
- /**
- * Generates a CSS string.
- */
-
-
- var _proto = FontFaceRule.prototype;
-
- _proto.toString = function toString(options) {
- if (Array.isArray(this.style)) {
- var str = '';
-
- for (var index = 0; index < this.style.length; index++) {
- str += toCss(this.at, this.style[index]);
- if (this.style[index + 1]) str += '\n';
- }
-
- return str;
- }
-
- return toCss(this.at, this.style, options);
- };
-
- return FontFaceRule;
-}();
-var keyRegExp$2 = /@font-face/;
-var pluginFontFaceRule = {
- onCreateRule: function onCreateRule(key, style, options) {
- return keyRegExp$2.test(key) ? new FontFaceRule(key, style, options) : null;
- }
-};
-
-var ViewportRule =
-/*#__PURE__*/
-function () {
- function ViewportRule(key, style, options) {
- this.type = 'viewport';
- this.at = '@viewport';
- this.key = void 0;
- this.style = void 0;
- this.options = void 0;
- this.isProcessed = false;
- this.renderable = void 0;
- this.key = key;
- this.style = style;
- this.options = options;
- }
- /**
- * Generates a CSS string.
- */
-
-
- var _proto = ViewportRule.prototype;
-
- _proto.toString = function toString(options) {
- return toCss(this.key, this.style, options);
- };
-
- return ViewportRule;
-}();
-var pluginViewportRule = {
- onCreateRule: function onCreateRule(key, style, options) {
- return key === '@viewport' || key === '@-ms-viewport' ? new ViewportRule(key, style, options) : null;
- }
-};
-
-var SimpleRule =
-/*#__PURE__*/
-function () {
- function SimpleRule(key, value, options) {
- this.type = 'simple';
- this.key = void 0;
- this.value = void 0;
- this.options = void 0;
- this.isProcessed = false;
- this.renderable = void 0;
- this.key = key;
- this.value = value;
- this.options = options;
- }
- /**
- * Generates a CSS string.
- */
- // eslint-disable-next-line no-unused-vars
-
-
- var _proto = SimpleRule.prototype;
-
- _proto.toString = function toString(options) {
- if (Array.isArray(this.value)) {
- var str = '';
-
- for (var index = 0; index < this.value.length; index++) {
- str += this.key + " " + this.value[index] + ";";
- if (this.value[index + 1]) str += '\n';
- }
-
- return str;
- }
-
- return this.key + " " + this.value + ";";
- };
-
- return SimpleRule;
-}();
-var keysMap = {
- '@charset': true,
- '@import': true,
- '@namespace': true
-};
-var pluginSimpleRule = {
- onCreateRule: function onCreateRule(key, value, options) {
- return key in keysMap ? new SimpleRule(key, value, options) : null;
- }
-};
-
-var plugins = [pluginStyleRule, pluginConditionalRule, plugin, pluginKeyframeRule, pluginFontFaceRule, pluginViewportRule, pluginSimpleRule];
-
-var defaultUpdateOptions = {
- process: true
-};
-var forceUpdateOptions = {
- force: true,
- process: true
- /**
- * Contains rules objects and allows adding/removing etc.
- * Is used for e.g. by `StyleSheet` or `ConditionalRule`.
- */
-
-};
-
-var RuleList =
-/*#__PURE__*/
-function () {
- // Rules registry for access by .get() method.
- // It contains the same rule registered by name and by selector.
- // Original styles object.
- // Used to ensure correct rules order.
- function RuleList(options) {
- this.map = {};
- this.raw = {};
- this.index = [];
- this.counter = 0;
- this.options = void 0;
- this.classes = void 0;
- this.keyframes = void 0;
- this.options = options;
- this.classes = options.classes;
- this.keyframes = options.keyframes;
- }
- /**
- * Create and register rule.
- *
- * Will not render after Style Sheet was rendered the first time.
- */
-
-
- var _proto = RuleList.prototype;
-
- _proto.add = function add(name, decl, ruleOptions) {
- var _this$options = this.options,
- parent = _this$options.parent,
- sheet = _this$options.sheet,
- jss = _this$options.jss,
- Renderer = _this$options.Renderer,
- generateId = _this$options.generateId,
- scoped = _this$options.scoped;
-
- var options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({
- classes: this.classes,
- parent: parent,
- sheet: sheet,
- jss: jss,
- Renderer: Renderer,
- generateId: generateId,
- scoped: scoped,
- name: name,
- keyframes: this.keyframes,
- selector: undefined
- }, ruleOptions); // When user uses .createStyleSheet(), duplicate names are not possible, but
- // `sheet.addRule()` opens the door for any duplicate rule name. When this happens
- // we need to make the key unique within this RuleList instance scope.
-
-
- var key = name;
-
- if (name in this.raw) {
- key = name + "-d" + this.counter++;
- } // We need to save the original decl before creating the rule
- // because cache plugin needs to use it as a key to return a cached rule.
-
-
- this.raw[key] = decl;
-
- if (key in this.classes) {
- // E.g. rules inside of @media container
- options.selector = "." + escape(this.classes[key]);
- }
-
- var rule = createRule(key, decl, options);
- if (!rule) return null;
- this.register(rule);
- var index = options.index === undefined ? this.index.length : options.index;
- this.index.splice(index, 0, rule);
- return rule;
- }
- /**
- * Get a rule.
- */
- ;
-
- _proto.get = function get(name) {
- return this.map[name];
- }
- /**
- * Delete a rule.
- */
- ;
-
- _proto.remove = function remove(rule) {
- this.unregister(rule);
- delete this.raw[rule.key];
- this.index.splice(this.index.indexOf(rule), 1);
- }
- /**
- * Get index of a rule.
- */
- ;
-
- _proto.indexOf = function indexOf(rule) {
- return this.index.indexOf(rule);
- }
- /**
- * Run `onProcessRule()` plugins on every rule.
- */
- ;
-
- _proto.process = function process() {
- var plugins = this.options.jss.plugins; // We need to clone array because if we modify the index somewhere else during a loop
- // we end up with very hard-to-track-down side effects.
-
- this.index.slice(0).forEach(plugins.onProcessRule, plugins);
- }
- /**
- * Register a rule in `.map`, `.classes` and `.keyframes` maps.
- */
- ;
-
- _proto.register = function register(rule) {
- this.map[rule.key] = rule;
-
- if (rule instanceof StyleRule) {
- this.map[rule.selector] = rule;
- if (rule.id) this.classes[rule.key] = rule.id;
- } else if (rule instanceof KeyframesRule && this.keyframes) {
- this.keyframes[rule.name] = rule.id;
- }
- }
- /**
- * Unregister a rule.
- */
- ;
-
- _proto.unregister = function unregister(rule) {
- delete this.map[rule.key];
-
- if (rule instanceof StyleRule) {
- delete this.map[rule.selector];
- delete this.classes[rule.key];
- } else if (rule instanceof KeyframesRule) {
- delete this.keyframes[rule.name];
- }
- }
- /**
- * Update the function values with a new data.
- */
- ;
-
- _proto.update = function update() {
- var name;
- var data;
- var options;
-
- if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'string') {
- name = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe[invalid-tuple-index]
-
- data = arguments.length <= 1 ? undefined : arguments[1]; // $FlowFixMe[invalid-tuple-index]
-
- options = arguments.length <= 2 ? undefined : arguments[2];
- } else {
- data = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe[invalid-tuple-index]
-
- options = arguments.length <= 1 ? undefined : arguments[1];
- name = null;
- }
-
- if (name) {
- this.updateOne(this.map[name], data, options);
- } else {
- for (var index = 0; index < this.index.length; index++) {
- this.updateOne(this.index[index], data, options);
- }
- }
- }
- /**
- * Execute plugins, update rule props.
- */
- ;
-
- _proto.updateOne = function updateOne(rule, data, options) {
- if (options === void 0) {
- options = defaultUpdateOptions;
- }
-
- var _this$options2 = this.options,
- plugins = _this$options2.jss.plugins,
- sheet = _this$options2.sheet; // It is a rules container like for e.g. ConditionalRule.
-
- if (rule.rules instanceof RuleList) {
- rule.rules.update(data, options);
- return;
- }
-
- var styleRule = rule;
- var style = styleRule.style;
- plugins.onUpdate(data, rule, sheet, options); // We rely on a new `style` ref in case it was mutated during onUpdate hook.
-
- if (options.process && style && style !== styleRule.style) {
- // We need to run the plugins in case new `style` relies on syntax plugins.
- plugins.onProcessStyle(styleRule.style, styleRule, sheet); // Update and add props.
-
- for (var prop in styleRule.style) {
- var nextValue = styleRule.style[prop];
- var prevValue = style[prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.
- // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.
-
- if (nextValue !== prevValue) {
- styleRule.prop(prop, nextValue, forceUpdateOptions);
- }
- } // Remove props.
-
-
- for (var _prop in style) {
- var _nextValue = styleRule.style[_prop];
- var _prevValue = style[_prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.
- // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.
-
- if (_nextValue == null && _nextValue !== _prevValue) {
- styleRule.prop(_prop, null, forceUpdateOptions);
- }
- }
- }
- }
- /**
- * Convert rules to a CSS string.
- */
- ;
-
- _proto.toString = function toString(options) {
- var str = '';
- var sheet = this.options.sheet;
- var link = sheet ? sheet.options.link : false;
-
- for (var index = 0; index < this.index.length; index++) {
- var rule = this.index[index];
- var css = rule.toString(options); // No need to render an empty rule.
-
- if (!css && !link) continue;
- if (str) str += '\n';
- str += css;
- }
-
- return str;
- };
-
- return RuleList;
-}();
-
-var StyleSheet =
-/*#__PURE__*/
-function () {
- function StyleSheet(styles, options) {
- this.options = void 0;
- this.deployed = void 0;
- this.attached = void 0;
- this.rules = void 0;
- this.renderer = void 0;
- this.classes = void 0;
- this.keyframes = void 0;
- this.queue = void 0;
- this.attached = false;
- this.deployed = false;
- this.classes = {};
- this.keyframes = {};
- this.options = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, options, {
- sheet: this,
- parent: this,
- classes: this.classes,
- keyframes: this.keyframes
- });
-
- if (options.Renderer) {
- this.renderer = new options.Renderer(this);
- }
-
- this.rules = new RuleList(this.options);
-
- for (var name in styles) {
- this.rules.add(name, styles[name]);
- }
-
- this.rules.process();
- }
- /**
- * Attach renderable to the render tree.
- */
-
-
- var _proto = StyleSheet.prototype;
-
- _proto.attach = function attach() {
- if (this.attached) return this;
- if (this.renderer) this.renderer.attach();
- this.attached = true; // Order is important, because we can't use insertRule API if style element is not attached.
-
- if (!this.deployed) this.deploy();
- return this;
- }
- /**
- * Remove renderable from render tree.
- */
- ;
-
- _proto.detach = function detach() {
- if (!this.attached) return this;
- if (this.renderer) this.renderer.detach();
- this.attached = false;
- return this;
- }
- /**
- * Add a rule to the current stylesheet.
- * Will insert a rule also after the stylesheet has been rendered first time.
- */
- ;
-
- _proto.addRule = function addRule(name, decl, options) {
- var queue = this.queue; // Plugins can create rules.
- // In order to preserve the right order, we need to queue all `.addRule` calls,
- // which happen after the first `rules.add()` call.
-
- if (this.attached && !queue) this.queue = [];
- var rule = this.rules.add(name, decl, options);
- if (!rule) return null;
- this.options.jss.plugins.onProcessRule(rule);
-
- if (this.attached) {
- if (!this.deployed) return rule; // Don't insert rule directly if there is no stringified version yet.
- // It will be inserted all together when .attach is called.
-
- if (queue) queue.push(rule);else {
- this.insertRule(rule);
-
- if (this.queue) {
- this.queue.forEach(this.insertRule, this);
- this.queue = undefined;
- }
- }
- return rule;
- } // We can't add rules to a detached style node.
- // We will redeploy the sheet once user will attach it.
-
-
- this.deployed = false;
- return rule;
- }
- /**
- * Insert rule into the StyleSheet
- */
- ;
-
- _proto.insertRule = function insertRule(rule) {
- if (this.renderer) {
- this.renderer.insertRule(rule);
- }
- }
- /**
- * Create and add rules.
- * Will render also after Style Sheet was rendered the first time.
- */
- ;
-
- _proto.addRules = function addRules(styles, options) {
- var added = [];
-
- for (var name in styles) {
- var rule = this.addRule(name, styles[name], options);
- if (rule) added.push(rule);
- }
-
- return added;
- }
- /**
- * Get a rule by name.
- */
- ;
-
- _proto.getRule = function getRule(name) {
- return this.rules.get(name);
- }
- /**
- * Delete a rule by name.
- * Returns `true`: if rule has been deleted from the DOM.
- */
- ;
-
- _proto.deleteRule = function deleteRule(name) {
- var rule = typeof name === 'object' ? name : this.rules.get(name);
-
- if (!rule || // Style sheet was created without link: true and attached, in this case we
- // won't be able to remove the CSS rule from the DOM.
- this.attached && !rule.renderable) {
- return false;
- }
-
- this.rules.remove(rule);
-
- if (this.attached && rule.renderable && this.renderer) {
- return this.renderer.deleteRule(rule.renderable);
- }
-
- return true;
- }
- /**
- * Get index of a rule.
- */
- ;
-
- _proto.indexOf = function indexOf(rule) {
- return this.rules.indexOf(rule);
- }
- /**
- * Deploy pure CSS string to a renderable.
- */
- ;
-
- _proto.deploy = function deploy() {
- if (this.renderer) this.renderer.deploy();
- this.deployed = true;
- return this;
- }
- /**
- * Update the function values with a new data.
- */
- ;
-
- _proto.update = function update() {
- var _this$rules;
-
- (_this$rules = this.rules).update.apply(_this$rules, arguments);
-
- return this;
- }
- /**
- * Updates a single rule.
- */
- ;
-
- _proto.updateOne = function updateOne(rule, data, options) {
- this.rules.updateOne(rule, data, options);
- return this;
- }
- /**
- * Convert rules to a CSS string.
- */
- ;
-
- _proto.toString = function toString(options) {
- return this.rules.toString(options);
- };
-
- return StyleSheet;
-}();
-
-var PluginsRegistry =
-/*#__PURE__*/
-function () {
- function PluginsRegistry() {
- this.plugins = {
- internal: [],
- external: []
- };
- this.registry = void 0;
- }
-
- var _proto = PluginsRegistry.prototype;
-
- /**
- * Call `onCreateRule` hooks and return an object if returned by a hook.
- */
- _proto.onCreateRule = function onCreateRule(name, decl, options) {
- for (var i = 0; i < this.registry.onCreateRule.length; i++) {
- var rule = this.registry.onCreateRule[i](name, decl, options);
- if (rule) return rule;
- }
-
- return null;
- }
- /**
- * Call `onProcessRule` hooks.
- */
- ;
-
- _proto.onProcessRule = function onProcessRule(rule) {
- if (rule.isProcessed) return;
- var sheet = rule.options.sheet;
-
- for (var i = 0; i < this.registry.onProcessRule.length; i++) {
- this.registry.onProcessRule[i](rule, sheet);
- }
-
- if (rule.style) this.onProcessStyle(rule.style, rule, sheet);
- rule.isProcessed = true;
- }
- /**
- * Call `onProcessStyle` hooks.
- */
- ;
-
- _proto.onProcessStyle = function onProcessStyle(style, rule, sheet) {
- for (var i = 0; i < this.registry.onProcessStyle.length; i++) {
- // $FlowFixMe[prop-missing]
- rule.style = this.registry.onProcessStyle[i](rule.style, rule, sheet);
- }
- }
- /**
- * Call `onProcessSheet` hooks.
- */
- ;
-
- _proto.onProcessSheet = function onProcessSheet(sheet) {
- for (var i = 0; i < this.registry.onProcessSheet.length; i++) {
- this.registry.onProcessSheet[i](sheet);
- }
- }
- /**
- * Call `onUpdate` hooks.
- */
- ;
-
- _proto.onUpdate = function onUpdate(data, rule, sheet, options) {
- for (var i = 0; i < this.registry.onUpdate.length; i++) {
- this.registry.onUpdate[i](data, rule, sheet, options);
- }
- }
- /**
- * Call `onChangeValue` hooks.
- */
- ;
-
- _proto.onChangeValue = function onChangeValue(value, prop, rule) {
- var processedValue = value;
-
- for (var i = 0; i < this.registry.onChangeValue.length; i++) {
- processedValue = this.registry.onChangeValue[i](processedValue, prop, rule);
- }
-
- return processedValue;
- }
- /**
- * Register a plugin.
- */
- ;
-
- _proto.use = function use(newPlugin, options) {
- if (options === void 0) {
- options = {
- queue: 'external'
- };
- }
-
- var plugins = this.plugins[options.queue]; // Avoids applying same plugin twice, at least based on ref.
-
- if (plugins.indexOf(newPlugin) !== -1) {
- return;
- }
-
- plugins.push(newPlugin);
- this.registry = [].concat(this.plugins.external, this.plugins.internal).reduce(function (registry, plugin) {
- for (var name in plugin) {
- if (name in registry) {
- registry[name].push(plugin[name]);
- } else {
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] Unknown hook \"" + name + "\".") : undefined;
- }
- }
-
- return registry;
- }, {
- onCreateRule: [],
- onProcessRule: [],
- onProcessStyle: [],
- onProcessSheet: [],
- onChangeValue: [],
- onUpdate: []
- });
- };
-
- return PluginsRegistry;
-}();
-
-/**
- * Sheets registry to access them all at one place.
- */
-var SheetsRegistry =
-/*#__PURE__*/
-function () {
- function SheetsRegistry() {
- this.registry = [];
- }
-
- var _proto = SheetsRegistry.prototype;
-
- /**
- * Register a Style Sheet.
- */
- _proto.add = function add(sheet) {
- var registry = this.registry;
- var index = sheet.options.index;
- if (registry.indexOf(sheet) !== -1) return;
-
- if (registry.length === 0 || index >= this.index) {
- registry.push(sheet);
- return;
- } // Find a position.
-
-
- for (var i = 0; i < registry.length; i++) {
- if (registry[i].options.index > index) {
- registry.splice(i, 0, sheet);
- return;
- }
- }
- }
- /**
- * Reset the registry.
- */
- ;
-
- _proto.reset = function reset() {
- this.registry = [];
- }
- /**
- * Remove a Style Sheet.
- */
- ;
-
- _proto.remove = function remove(sheet) {
- var index = this.registry.indexOf(sheet);
- this.registry.splice(index, 1);
- }
- /**
- * Convert all attached sheets to a CSS string.
- */
- ;
-
- _proto.toString = function toString(_temp) {
- var _ref = _temp === void 0 ? {} : _temp,
- attached = _ref.attached,
- options = Object(_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"])(_ref, ["attached"]);
-
- var css = '';
-
- for (var i = 0; i < this.registry.length; i++) {
- var sheet = this.registry[i];
-
- if (attached != null && sheet.attached !== attached) {
- continue;
- }
-
- if (css) css += '\n';
- css += sheet.toString(options);
- }
-
- return css;
- };
-
- Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(SheetsRegistry, [{
- key: "index",
-
- /**
- * Current highest index number.
- */
- get: function get() {
- return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index;
- }
- }]);
-
- return SheetsRegistry;
-}();
-
-/**
- * This is a global sheets registry. Only DomRenderer will add sheets to it.
- * On the server one should use an own SheetsRegistry instance and add the
- * sheets to it, because you need to make sure to create a new registry for
- * each request in order to not leak sheets across requests.
- */
-
-var registry = new SheetsRegistry();
-
-/* eslint-disable */
-
-/**
- * Now that `globalThis` is available on most platforms
- * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis#browser_compatibility)
- * we check for `globalThis` first. `globalThis` is necessary for jss
- * to run in Agoric's secure version of JavaScript (SES). Under SES,
- * `globalThis` exists, but `window`, `self`, and `Function('return
- * this')()` are all undefined for security reasons.
- *
- * https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
- */
-var globalThis$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' && window.Math === Math ? window : typeof self !== 'undefined' && self.Math === Math ? self : Function('return this')();
-
-var ns = '2f1acc6c3a606b082e5eef5e54414ffb';
-if (globalThis$1[ns] == null) globalThis$1[ns] = 0; // Bundle may contain multiple JSS versions at the same time. In order to identify
-// the current version with just one short number and use it for classes generation
-// we use a counter. Also it is more accurate, because user can manually reevaluate
-// the module.
-
-var moduleId = globalThis$1[ns]++;
-
-var maxRules = 1e10;
-
-/**
- * Returns a function which generates unique class names based on counters.
- * When new generator function is created, rule counter is reseted.
- * We need to reset the rule counter for SSR for each request.
- */
-var createGenerateId = function createGenerateId(options) {
- if (options === void 0) {
- options = {};
- }
-
- var ruleCounter = 0;
- return function (rule, sheet) {
- ruleCounter += 1;
-
- if (ruleCounter > maxRules) {
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] You might have a memory leak. Rule counter is at " + ruleCounter + ".") : undefined;
- }
-
- var jssId = '';
- var prefix = '';
-
- if (sheet) {
- if (sheet.options.classNamePrefix) {
- prefix = sheet.options.classNamePrefix;
- }
-
- if (sheet.options.jss.id != null) {
- jssId = String(sheet.options.jss.id);
- }
- }
-
- if (options.minify) {
- // Using "c" because a number can't be the first char in a class name.
- return "" + (prefix || 'c') + moduleId + jssId + ruleCounter;
- }
-
- return prefix + rule.key + "-" + moduleId + (jssId ? "-" + jssId : '') + "-" + ruleCounter;
- };
-};
-
-/**
- * Cache the value from the first time a function is called.
- */
-var memoize = function memoize(fn) {
- var value;
- return function () {
- if (!value) value = fn();
- return value;
- };
-};
-
-/**
- * Get a style property value.
- */
-var getPropertyValue = function getPropertyValue(cssRule, prop) {
- try {
- // Support CSSTOM.
- if (cssRule.attributeStyleMap) {
- return cssRule.attributeStyleMap.get(prop);
- }
-
- return cssRule.style.getPropertyValue(prop);
- } catch (err) {
- // IE may throw if property is unknown.
- return '';
- }
-};
-
-/**
- * Set a style property.
- */
-var setProperty = function setProperty(cssRule, prop, value) {
- try {
- var cssValue = value;
-
- if (Array.isArray(value)) {
- cssValue = toCssValue(value, true);
-
- if (value[value.length - 1] === '!important') {
- cssRule.style.setProperty(prop, cssValue, 'important');
- return true;
- }
- } // Support CSSTOM.
-
-
- if (cssRule.attributeStyleMap) {
- cssRule.attributeStyleMap.set(prop, cssValue);
- } else {
- cssRule.style.setProperty(prop, cssValue);
- }
- } catch (err) {
- // IE may throw if property is unknown.
- return false;
- }
-
- return true;
-};
-
-/**
- * Remove a style property.
- */
-var removeProperty = function removeProperty(cssRule, prop) {
- try {
- // Support CSSTOM.
- if (cssRule.attributeStyleMap) {
- cssRule.attributeStyleMap.delete(prop);
- } else {
- cssRule.style.removeProperty(prop);
- }
- } catch (err) {
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] DOMException \"" + err.message + "\" was thrown. Tried to remove property \"" + prop + "\".") : undefined;
- }
-};
-
-/**
- * Set the selector.
- */
-var setSelector = function setSelector(cssRule, selectorText) {
- cssRule.selectorText = selectorText; // Return false if setter was not successful.
- // Currently works in chrome only.
-
- return cssRule.selectorText === selectorText;
-};
-/**
- * Gets the `head` element upon the first call and caches it.
- * We assume it can't be null.
- */
-
-
-var getHead = memoize(function () {
- return document.querySelector('head');
-});
-/**
- * Find attached sheet with an index higher than the passed one.
- */
-
-function findHigherSheet(registry, options) {
- for (var i = 0; i < registry.length; i++) {
- var sheet = registry[i];
-
- if (sheet.attached && sheet.options.index > options.index && sheet.options.insertionPoint === options.insertionPoint) {
- return sheet;
- }
- }
-
- return null;
-}
-/**
- * Find attached sheet with the highest index.
- */
-
-
-function findHighestSheet(registry, options) {
- for (var i = registry.length - 1; i >= 0; i--) {
- var sheet = registry[i];
-
- if (sheet.attached && sheet.options.insertionPoint === options.insertionPoint) {
- return sheet;
- }
- }
-
- return null;
-}
-/**
- * Find a comment with "jss" inside.
- */
-
-
-function findCommentNode(text) {
- var head = getHead();
-
- for (var i = 0; i < head.childNodes.length; i++) {
- var node = head.childNodes[i];
-
- if (node.nodeType === 8 && node.nodeValue.trim() === text) {
- return node;
- }
- }
-
- return null;
-}
-
-/**
- * Find a node before which we can insert the sheet.
- */
-function findPrevNode(options) {
- var registry$1 = registry.registry;
-
- if (registry$1.length > 0) {
- // Try to insert before the next higher sheet.
- var sheet = findHigherSheet(registry$1, options);
-
- if (sheet && sheet.renderer) {
- return {
- parent: sheet.renderer.element.parentNode,
- node: sheet.renderer.element
- };
- } // Otherwise insert after the last attached.
-
-
- sheet = findHighestSheet(registry$1, options);
-
- if (sheet && sheet.renderer) {
- return {
- parent: sheet.renderer.element.parentNode,
- node: sheet.renderer.element.nextSibling
- };
- }
- } // Try to find a comment placeholder if registry is empty.
-
-
- var insertionPoint = options.insertionPoint;
-
- if (insertionPoint && typeof insertionPoint === 'string') {
- var comment = findCommentNode(insertionPoint);
-
- if (comment) {
- return {
- parent: comment.parentNode,
- node: comment.nextSibling
- };
- } // If user specifies an insertion point and it can't be found in the document -
- // bad specificity issues may appear.
-
-
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] Insertion point \"" + insertionPoint + "\" not found.") : undefined;
- }
-
- return false;
-}
-/**
- * Insert style element into the DOM.
- */
-
-
-function insertStyle(style, options) {
- var insertionPoint = options.insertionPoint;
- var nextNode = findPrevNode(options);
-
- if (nextNode !== false && nextNode.parent) {
- nextNode.parent.insertBefore(style, nextNode.node);
- return;
- } // Works with iframes and any node types.
-
-
- if (insertionPoint && typeof insertionPoint.nodeType === 'number') {
- // https://stackoverflow.com/questions/41328728/force-casting-in-flow
- var insertionPointElement = insertionPoint;
- var parentNode = insertionPointElement.parentNode;
- if (parentNode) parentNode.insertBefore(style, insertionPointElement.nextSibling);else true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, '[JSS] Insertion point is not in the DOM.') : undefined;
- return;
- }
-
- getHead().appendChild(style);
-}
-/**
- * Read jss nonce setting from the page if the user has set it.
- */
-
-
-var getNonce = memoize(function () {
- var node = document.querySelector('meta[property="csp-nonce"]');
- return node ? node.getAttribute('content') : null;
-});
-
-var _insertRule = function insertRule(container, rule, index) {
- try {
- if ('insertRule' in container) {
- var c = container;
- c.insertRule(rule, index);
- } // Keyframes rule.
- else if ('appendRule' in container) {
- var _c = container;
-
- _c.appendRule(rule);
- }
- } catch (err) {
- true ? Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] " + err.message) : undefined;
- return false;
- }
-
- return container.cssRules[index];
-};
-
-var getValidRuleInsertionIndex = function getValidRuleInsertionIndex(container, index) {
- var maxIndex = container.cssRules.length; // In case previous insertion fails, passed index might be wrong
-
- if (index === undefined || index > maxIndex) {
- // eslint-disable-next-line no-param-reassign
- return maxIndex;
- }
-
- return index;
-};
-
-var createStyle = function createStyle() {
- var el = document.createElement('style'); // Without it, IE will have a broken source order specificity if we
- // insert rules after we insert the style tag.
- // It seems to kick-off the source order specificity algorithm.
-
- el.textContent = '\n';
- return el;
-};
-
-var DomRenderer =
-/*#__PURE__*/
-function () {
- // HTMLStyleElement needs fixing https://github.com/facebook/flow/issues/2696
- // Will be empty if link: true option is not set, because
- // it is only for use together with insertRule API.
- function DomRenderer(sheet) {
- this.getPropertyValue = getPropertyValue;
- this.setProperty = setProperty;
- this.removeProperty = removeProperty;
- this.setSelector = setSelector;
- this.element = void 0;
- this.sheet = void 0;
- this.hasInsertedRules = false;
- this.cssRules = [];
- // There is no sheet when the renderer is used from a standalone StyleRule.
- if (sheet) registry.add(sheet);
- this.sheet = sheet;
-
- var _ref = this.sheet ? this.sheet.options : {},
- media = _ref.media,
- meta = _ref.meta,
- element = _ref.element;
-
- this.element = element || createStyle();
- this.element.setAttribute('data-jss', '');
- if (media) this.element.setAttribute('media', media);
- if (meta) this.element.setAttribute('data-meta', meta);
- var nonce = getNonce();
- if (nonce) this.element.setAttribute('nonce', nonce);
- }
- /**
- * Insert style element into render tree.
- */
-
-
- var _proto = DomRenderer.prototype;
-
- _proto.attach = function attach() {
- // In the case the element node is external and it is already in the DOM.
- if (this.element.parentNode || !this.sheet) return;
- insertStyle(this.element, this.sheet.options); // When rules are inserted using `insertRule` API, after `sheet.detach().attach()`
- // most browsers create a new CSSStyleSheet, except of all IEs.
-
- var deployed = Boolean(this.sheet && this.sheet.deployed);
-
- if (this.hasInsertedRules && deployed) {
- this.hasInsertedRules = false;
- this.deploy();
- }
- }
- /**
- * Remove style element from render tree.
- */
- ;
-
- _proto.detach = function detach() {
- if (!this.sheet) return;
- var parentNode = this.element.parentNode;
- if (parentNode) parentNode.removeChild(this.element); // In the most browsers, rules inserted using insertRule() API will be lost when style element is removed.
- // Though IE will keep them and we need a consistent behavior.
-
- if (this.sheet.options.link) {
- this.cssRules = [];
- this.element.textContent = '\n';
- }
- }
- /**
- * Inject CSS string into element.
- */
- ;
-
- _proto.deploy = function deploy() {
- var sheet = this.sheet;
- if (!sheet) return;
-
- if (sheet.options.link) {
- this.insertRules(sheet.rules);
- return;
- }
-
- this.element.textContent = "\n" + sheet.toString() + "\n";
- }
- /**
- * Insert RuleList into an element.
- */
- ;
-
- _proto.insertRules = function insertRules(rules, nativeParent) {
- for (var i = 0; i < rules.index.length; i++) {
- this.insertRule(rules.index[i], i, nativeParent);
- }
- }
- /**
- * Insert a rule into element.
- */
- ;
-
- _proto.insertRule = function insertRule(rule, index, nativeParent) {
- if (nativeParent === void 0) {
- nativeParent = this.element.sheet;
- }
-
- if (rule.rules) {
- var parent = rule;
- var latestNativeParent = nativeParent;
-
- if (rule.type === 'conditional' || rule.type === 'keyframes') {
- var _insertionIndex = getValidRuleInsertionIndex(nativeParent, index); // We need to render the container without children first.
-
-
- latestNativeParent = _insertRule(nativeParent, parent.toString({
- children: false
- }), _insertionIndex);
-
- if (latestNativeParent === false) {
- return false;
- }
-
- this.refCssRule(rule, _insertionIndex, latestNativeParent);
- }
-
- this.insertRules(parent.rules, latestNativeParent);
- return latestNativeParent;
- }
-
- var ruleStr = rule.toString();
- if (!ruleStr) return false;
- var insertionIndex = getValidRuleInsertionIndex(nativeParent, index);
-
- var nativeRule = _insertRule(nativeParent, ruleStr, insertionIndex);
-
- if (nativeRule === false) {
- return false;
- }
-
- this.hasInsertedRules = true;
- this.refCssRule(rule, insertionIndex, nativeRule);
- return nativeRule;
- };
-
- _proto.refCssRule = function refCssRule(rule, index, cssRule) {
- rule.renderable = cssRule; // We only want to reference the top level rules, deleteRule API doesn't support removing nested rules
- // like rules inside media queries or keyframes
-
- if (rule.options.parent instanceof StyleSheet) {
- this.cssRules[index] = cssRule;
- }
- }
- /**
- * Delete a rule.
- */
- ;
-
- _proto.deleteRule = function deleteRule(cssRule) {
- var sheet = this.element.sheet;
- var index = this.indexOf(cssRule);
- if (index === -1) return false;
- sheet.deleteRule(index);
- this.cssRules.splice(index, 1);
- return true;
- }
- /**
- * Get index of a CSS Rule.
- */
- ;
-
- _proto.indexOf = function indexOf(cssRule) {
- return this.cssRules.indexOf(cssRule);
- }
- /**
- * Generate a new CSS rule and replace the existing one.
- *
- * Only used for some old browsers because they can't set a selector.
- */
- ;
-
- _proto.replaceRule = function replaceRule(cssRule, rule) {
- var index = this.indexOf(cssRule);
- if (index === -1) return false;
- this.element.sheet.deleteRule(index);
- this.cssRules.splice(index, 1);
- return this.insertRule(rule, index);
- }
- /**
- * Get all rules elements.
- */
- ;
-
- _proto.getRules = function getRules() {
- return this.element.sheet.cssRules;
- };
-
- return DomRenderer;
-}();
-
-var instanceCounter = 0;
-
-var Jss =
-/*#__PURE__*/
-function () {
- function Jss(options) {
- this.id = instanceCounter++;
- this.version = "10.6.0";
- this.plugins = new PluginsRegistry();
- this.options = {
- id: {
- minify: false
- },
- createGenerateId: createGenerateId,
- Renderer: is_in_browser__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"] ? DomRenderer : null,
- plugins: []
- };
- this.generateId = createGenerateId({
- minify: false
- });
-
- for (var i = 0; i < plugins.length; i++) {
- this.plugins.use(plugins[i], {
- queue: 'internal'
- });
- }
-
- this.setup(options);
- }
- /**
- * Prepares various options, applies plugins.
- * Should not be used twice on the same instance, because there is no plugins
- * deduplication logic.
- */
-
-
- var _proto = Jss.prototype;
-
- _proto.setup = function setup(options) {
- if (options === void 0) {
- options = {};
- }
-
- if (options.createGenerateId) {
- this.options.createGenerateId = options.createGenerateId;
- }
-
- if (options.id) {
- this.options.id = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, this.options.id, options.id);
- }
-
- if (options.createGenerateId || options.id) {
- this.generateId = this.options.createGenerateId(this.options.id);
- }
-
- if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;
-
- if ('Renderer' in options) {
- this.options.Renderer = options.Renderer;
- } // eslint-disable-next-line prefer-spread
-
-
- if (options.plugins) this.use.apply(this, options.plugins);
- return this;
- }
- /**
- * Create a Style Sheet.
- */
- ;
-
- _proto.createStyleSheet = function createStyleSheet(styles, options) {
- if (options === void 0) {
- options = {};
- }
-
- var _options = options,
- index = _options.index;
-
- if (typeof index !== 'number') {
- index = registry.index === 0 ? 0 : registry.index + 1;
- }
-
- var sheet = new StyleSheet(styles, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, options, {
- jss: this,
- generateId: options.generateId || this.generateId,
- insertionPoint: this.options.insertionPoint,
- Renderer: this.options.Renderer,
- index: index
- }));
- this.plugins.onProcessSheet(sheet);
- return sheet;
- }
- /**
- * Detach the Style Sheet and remove it from the registry.
- */
- ;
-
- _proto.removeStyleSheet = function removeStyleSheet(sheet) {
- sheet.detach();
- registry.remove(sheet);
- return this;
- }
- /**
- * Create a rule without a Style Sheet.
- * [Deprecated] will be removed in the next major version.
- */
- ;
-
- _proto.createRule = function createRule$1(name, style, options) {
- if (style === void 0) {
- style = {};
- }
-
- if (options === void 0) {
- options = {};
- }
-
- // Enable rule without name for inline styles.
- if (typeof name === 'object') {
- // $FlowFixMe[incompatible-call]
- return this.createRule(undefined, name, style);
- } // $FlowFixMe[incompatible-type]
-
-
- var ruleOptions = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({}, options, {
- name: name,
- jss: this,
- Renderer: this.options.Renderer
- });
-
- if (!ruleOptions.generateId) ruleOptions.generateId = this.generateId;
- if (!ruleOptions.classes) ruleOptions.classes = {};
- if (!ruleOptions.keyframes) ruleOptions.keyframes = {};
-
- var rule = createRule(name, style, ruleOptions);
-
- if (rule) this.plugins.onProcessRule(rule);
- return rule;
- }
- /**
- * Register plugin. Passed function will be invoked with a rule instance.
- */
- ;
-
- _proto.use = function use() {
- var _this = this;
-
- for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
- plugins[_key] = arguments[_key];
- }
-
- plugins.forEach(function (plugin) {
- _this.plugins.use(plugin);
- });
- return this;
- };
-
- return Jss;
-}();
-
-/**
- * Extracts a styles object with only props that contain function values.
- */
-function getDynamicStyles(styles) {
- var to = null;
-
- for (var key in styles) {
- var value = styles[key];
- var type = typeof value;
-
- if (type === 'function') {
- if (!to) to = {};
- to[key] = value;
- } else if (type === 'object' && value !== null && !Array.isArray(value)) {
- var extracted = getDynamicStyles(value);
-
- if (extracted) {
- if (!to) to = {};
- to[key] = extracted;
- }
- }
- }
-
- return to;
-}
-
-/**
- * SheetsManager is like a WeakMap which is designed to count StyleSheet
- * instances and attach/detach automatically.
- */
-var SheetsManager =
-/*#__PURE__*/
-function () {
- function SheetsManager() {
- this.length = 0;
- this.sheets = new WeakMap();
- }
-
- var _proto = SheetsManager.prototype;
-
- _proto.get = function get(key) {
- var entry = this.sheets.get(key);
- return entry && entry.sheet;
- };
-
- _proto.add = function add(key, sheet) {
- if (this.sheets.has(key)) return;
- this.length++;
- this.sheets.set(key, {
- sheet: sheet,
- refs: 0
- });
- };
-
- _proto.manage = function manage(key) {
- var entry = this.sheets.get(key);
-
- if (entry) {
- if (entry.refs === 0) {
- entry.sheet.attach();
- }
-
- entry.refs++;
- return entry.sheet;
- }
-
- Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "[JSS] SheetsManager: can't find sheet to manage");
- return undefined;
- };
-
- _proto.unmanage = function unmanage(key) {
- var entry = this.sheets.get(key);
-
- if (entry) {
- if (entry.refs > 0) {
- entry.refs--;
- if (entry.refs === 0) entry.sheet.detach();
- }
- } else {
- Object(tiny_warning__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(false, "SheetsManager: can't find sheet to unmanage");
- }
- };
-
- Object(_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(SheetsManager, [{
- key: "size",
- get: function get() {
- return this.length;
- }
- }]);
-
- return SheetsManager;
-}();
-
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[function(e,t,n){"use strict";e.exports=n(1149)},,function(e,t,n){"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t
n-1&&(void 0===o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/n|0,o[r]%=n)}return o.reverse()}O.absoluteValue=O.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),R(e)},O.ceil=function(){return R(new this.constructor(this),this.e+1,2)},O.comparedTo=O.cmp=function(e){var t,n,r,i,o=this,a=o.d,s=(e=new o.constructor(e)).d,u=o.s,l=e.s;if(!a||!s)return u&&l?u!==l?u:a===s?0:!a^u<0?1:-1:NaN;if(!a[0]||!s[0])return a[0]?u:s[0]?-l:0;if(u!==l)return u;if(o.e!==e.e)return o.e>e.e^u<0?1:-1;for(t=0,n=(r=a.length)<(i=s.length)?r:i;t