From dce71606c7963de476edfae60fe87b9c8e5c525a Mon Sep 17 00:00:00 2001 From: Seva Maltsev Date: Fri, 30 Aug 2024 23:31:25 -0400 Subject: [PATCH] Refactored InfoProvider loader --- .../SearchSeeds/SearchViews/FungalShifts.tsx | 4 +- .../ExcavationsiteCubeChamber.tsx | 4 +- .../SeedInfo/SeedInfoViews/FungalShifts.tsx | 6 +- .../SeedInfo/SeedInfoViews/HolyMountain.tsx | 7 +- src/components/Settings/FavoritesSettings.tsx | 4 +- .../InfoProviders/Alchemy/index.ts | 2 + .../infoHandler/InfoProviders/AlwaysCast.ts | 2 + .../infoHandler/InfoProviders/Biome.ts | 2 + .../InfoProviders/BiomeModifier.ts | 2 + .../infoHandler/InfoProviders/ChestRandom.ts | 4 +- .../infoHandler/InfoProviders/Entity.ts | 2 + .../ExcavationsiteCubeChamber.ts | 2 + .../{Fungal => FungalShift}/Fungal-base.d.ts | 0 .../{Fungal => FungalShift}/Fungal-base.mjs | 0 .../{Fungal => FungalShift}/Fungal-base.wasm | Bin .../{Fungal => FungalShift}/Fungal.d.ts | 0 .../{Fungal => FungalShift}/Fungal.mjs | 0 .../{Fungal => FungalShift}/Fungal.spec.ts | 0 .../{Fungal => FungalShift}/Fungal.wasm | Bin .../FungalShift/FungalShift-base.d.ts | 55 ++++ .../FungalShift/FungalShift-base.mjs | 18 ++ .../FungalShift/FungalShift-base.wasm | Bin 0 -> 97481 bytes .../FungalShift/FungalShift.d.ts | 55 ++++ .../InfoProviders/FungalShift/FungalShift.mjs | 18 ++ .../FungalShift/FungalShift.wasm | Bin 0 -> 97187 bytes .../{Fungal => FungalShift}/fungal.cpp | 0 .../{Fungal => FungalShift}/index.ts | 4 +- .../infoHandler/InfoProviders/Lottery.ts | 2 + .../infoHandler/InfoProviders/Map/index.ts | 2 + .../infoHandler/InfoProviders/Material.ts | 2 + .../InfoProviders/PacifistChest.ts | 4 +- .../infoHandler/InfoProviders/Perk/index.ts | 2 + .../infoHandler/InfoProviders/Potion.ts | 2 + .../InfoProviders/PotionRandomMaterial.ts | 2 + .../infoHandler/InfoProviders/PotionSecret.ts | 2 + .../infoHandler/InfoProviders/PowderStash.ts | 2 + .../infoHandler/InfoProviders/Shop.ts | 2 + .../InfoProviders/SnowcastleSecretChamber.ts | 4 +- .../InfoProviders/SnowcaveSecretChamber.ts | 4 +- .../infoHandler/InfoProviders/Spell.ts | 2 + .../infoHandler/InfoProviders/StartingBomb.ts | 2 + .../InfoProviders/StartingFlask.ts | 2 + .../InfoProviders/StartingSpell.ts | 2 + .../infoHandler/InfoProviders/Wand.ts | 2 + .../infoHandler/InfoProviders/WaterCave.ts | 2 + .../infoHandler/InfoProviders/Weather.ts | 2 + src/services/SeedInfo/infoHandler/helpers.ts | 2 + src/services/SeedInfo/infoHandler/index.ts | 269 +++++++++--------- src/services/seedSolverHandler.ts | 4 +- 49 files changed, 355 insertions(+), 155 deletions(-) rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/Fungal-base.d.ts (100%) rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/Fungal-base.mjs (100%) rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/Fungal-base.wasm (100%) rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/Fungal.d.ts (100%) rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/Fungal.mjs (100%) rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/Fungal.spec.ts (100%) rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/Fungal.wasm (100%) create mode 100644 src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.d.ts create mode 100644 src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.mjs create mode 100755 src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.wasm create mode 100644 src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.d.ts create mode 100644 src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.mjs create mode 100755 src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.wasm rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/fungal.cpp (100%) rename src/services/SeedInfo/infoHandler/InfoProviders/{Fungal => FungalShift}/index.ts (97%) diff --git a/src/components/SearchSeeds/SearchViews/FungalShifts.tsx b/src/components/SearchSeeds/SearchViews/FungalShifts.tsx index 411fe212..3629334f 100644 --- a/src/components/SearchSeeds/SearchViews/FungalShifts.tsx +++ b/src/components/SearchSeeds/SearchViews/FungalShifts.tsx @@ -2,12 +2,12 @@ import React, { useState, useEffect, FC } from "react"; import { Row, Col, Container, Stack, Button } from "react-bootstrap"; -import { FungalInfoProvider } from "../../../services/SeedInfo/infoHandler/InfoProviders/Fungal"; +import { FungalShiftInfoProvider } from "../../../services/SeedInfo/infoHandler/InfoProviders/FungalShift"; import { IRule } from "../../../services/SeedInfo/infoHandler/IRule"; import { Square } from "../../helpers"; import { FlaskMaterialSelect } from "../../MaterialSelect"; -const fungalInfoProvider = new FungalInfoProvider({} as any); +const fungalInfoProvider = new FungalShiftInfoProvider({} as any); interface IFungalShiftsProps { onUpdateConfig: (config: Partial) => void; diff --git a/src/components/SeedInfo/SeedInfoViews/ExcavationsiteCubeChamber.tsx b/src/components/SeedInfo/SeedInfoViews/ExcavationsiteCubeChamber.tsx index 92bf09a5..8a616736 100755 --- a/src/components/SeedInfo/SeedInfoViews/ExcavationsiteCubeChamber.tsx +++ b/src/components/SeedInfo/SeedInfoViews/ExcavationsiteCubeChamber.tsx @@ -10,11 +10,11 @@ const ExcavationsiteCubeChamber = () => { const { gameInfoProvider } = useContext(GameInfoContext); const [wand, setWand] = React.useState(() => - gameInfoProvider.providers.excavationSiteCubeChamber.provide(gameInfoProvider.config.seed), + gameInfoProvider.providers.excavationsiteCubeChamber.provide(gameInfoProvider.config.seed), ); useEffect(() => { - const wand = gameInfoProvider.providers.excavationSiteCubeChamber.provide(gameInfoProvider.config.seed); + const wand = gameInfoProvider.providers.excavationsiteCubeChamber.provide(gameInfoProvider.config.seed); setWand(wand); }, [gameInfoProvider]); diff --git a/src/components/SeedInfo/SeedInfoViews/FungalShifts.tsx b/src/components/SeedInfo/SeedInfoViews/FungalShifts.tsx index b76192e4..f64e736f 100644 --- a/src/components/SeedInfo/SeedInfoViews/FungalShifts.tsx +++ b/src/components/SeedInfo/SeedInfoViews/FungalShifts.tsx @@ -3,7 +3,7 @@ import { Stack, Form, Tooltip, OverlayTrigger, Table } from "react-bootstrap"; import { CountdownCircleTimer } from "react-countdown-circle-timer"; import { GameInfoProvider } from "../../../services/SeedInfo/infoHandler"; -import { FungalInfoProvider } from "../../../services/SeedInfo/infoHandler/InfoProviders/Fungal"; +import { FungalShiftInfoProvider } from "../../../services/SeedInfo/infoHandler/InfoProviders/FungalShift"; import { MaterialInfoProvider } from "../../../services/SeedInfo/infoHandler/InfoProviders/Material"; import { AlchemyConfigContext } from "../../AlchemyConfigContext"; import { capitalize } from "../../../services/helpers"; @@ -148,7 +148,7 @@ export const FungalMaterialList: React.FC = ({ }; interface IShiftProps { - data: ReturnType[number]; + data: ReturnType[number]; shifted: boolean; setShifted: (shifted: boolean) => void; materialProvider: MaterialInfoProvider; @@ -250,7 +250,7 @@ export const Shift: FC = props => { }; interface IFungalShiftsProps { - fungalData: ReturnType; + fungalData: ReturnType; infoProvider: GameInfoProvider; } diff --git a/src/components/SeedInfo/SeedInfoViews/HolyMountain.tsx b/src/components/SeedInfo/SeedInfoViews/HolyMountain.tsx index 2f2ba721..c6661976 100644 --- a/src/components/SeedInfo/SeedInfoViews/HolyMountain.tsx +++ b/src/components/SeedInfo/SeedInfoViews/HolyMountain.tsx @@ -514,12 +514,9 @@ const HolyMountainContextProvider = (props: IHolyMountainContextProviderProps) = const [perkStacks, setPerkStacks] = useState(() => infoProvider.config.perkStacks); const perkStack = perkStacks[perkStacks.length - 1]; - const favorites = useFavoritePerks( - advanced ? infoProvider.providers.statelessPerk : infoProvider.providers.perk, - perkDeck, - ); + const favorites = useFavoritePerks(infoProvider.providers.perk, perkDeck); const getPerkData = () => { - const perk = infoProvider.providers.statelessPerk; + const perk = infoProvider.providers.perk; const data = perk.provideStateless(perkStack); const hydrated = perk.hydrate(data.perks); return { diff --git a/src/components/Settings/FavoritesSettings.tsx b/src/components/Settings/FavoritesSettings.tsx index aa17d57d..235a1197 100644 --- a/src/components/Settings/FavoritesSettings.tsx +++ b/src/components/Settings/FavoritesSettings.tsx @@ -8,9 +8,9 @@ import SpellSelect from "../SpellSelect"; import { ConfigRow, ConfigTitle } from "./helpers"; import useLocalStorage from "../../services/useLocalStorage"; -import { FungalInfoProvider } from "../../services/SeedInfo/infoHandler/InfoProviders/Fungal"; +import { FungalShiftInfoProvider } from "../../services/SeedInfo/infoHandler/InfoProviders/FungalShift"; -const fungalInfoProvider = new FungalInfoProvider({} as any); +const fungalInfoProvider = new FungalShiftInfoProvider({} as any); const materialsFrom = fungalInfoProvider.fungalData.materials_from.flatMap(m => m.materials); const materialsTo = fungalInfoProvider.fungalData.materials_to.map(m => m.material); diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Alchemy/index.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Alchemy/index.ts index facc6269..24813efb 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Alchemy/index.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Alchemy/index.ts @@ -70,3 +70,5 @@ export class AlchemyInfoProvider extends InfoProvider { return allLC && allAP; } } + +export default AlchemyInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/AlwaysCast.ts b/src/services/SeedInfo/infoHandler/InfoProviders/AlwaysCast.ts index 79f97d15..41746998 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/AlwaysCast.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/AlwaysCast.ts @@ -50,3 +50,5 @@ export class AlwaysCastInfoProvider extends InfoProvider { return true; } } + +export default AlwaysCastInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Biome.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Biome.ts index a722e0f0..9ab940cb 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Biome.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Biome.ts @@ -29,3 +29,5 @@ export class BiomeInfoProvider extends InfoProvider { return true; } } + +export default BiomeInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/BiomeModifier.ts b/src/services/SeedInfo/infoHandler/InfoProviders/BiomeModifier.ts index 363b5ff3..db058483 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/BiomeModifier.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/BiomeModifier.ts @@ -227,3 +227,5 @@ export class BiomeModifierInfoProvider extends InfoProvider { return true; } } + +export default BiomeModifierInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/ChestRandom.ts b/src/services/SeedInfo/infoHandler/InfoProviders/ChestRandom.ts index 17e4ade7..0d5b1a79 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/ChestRandom.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/ChestRandom.ts @@ -20,7 +20,7 @@ export interface IItem { extra?: any; } -export class ChestRandomProvider extends InfoProvider { +export class ChestRandomInfoProvider extends InfoProvider { unlockedSpells: boolean[]; constructor(randoms: IRandom, unlockedSpells: boolean[], spellInfoProvider: SpellInfoProvider) { @@ -389,3 +389,5 @@ export class ChestRandomProvider extends InfoProvider { return true; } } + +export default ChestRandomInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Entity.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Entity.ts index 1ccb9948..10f49fc6 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Entity.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Entity.ts @@ -29,3 +29,5 @@ export class EntityInfoProvider extends InfoProvider { return true; } } + +export default EntityInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/ExcavationsiteCubeChamber.ts b/src/services/SeedInfo/infoHandler/InfoProviders/ExcavationsiteCubeChamber.ts index 38936f4a..353b20cd 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/ExcavationsiteCubeChamber.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/ExcavationsiteCubeChamber.ts @@ -36,3 +36,5 @@ export class ExcavationsiteCubeChamberInfoProvider extends InfoProvider { return true; } } + +export default ExcavationsiteCubeChamberInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal-base.d.ts b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal-base.d.ts similarity index 100% rename from src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal-base.d.ts rename to src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal-base.d.ts diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal-base.mjs b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal-base.mjs similarity index 100% rename from src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal-base.mjs rename to src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal-base.mjs diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal-base.wasm b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal-base.wasm similarity index 100% rename from src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal-base.wasm rename to src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal-base.wasm diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal.d.ts b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal.d.ts similarity index 100% rename from src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal.d.ts rename to src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal.d.ts diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal.mjs b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal.mjs similarity index 100% rename from src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal.mjs rename to src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal.mjs diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal.spec.ts b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal.spec.ts similarity index 100% rename from src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal.spec.ts rename to src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal.spec.ts diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal.wasm b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal.wasm similarity index 100% rename from src/services/SeedInfo/infoHandler/InfoProviders/Fungal/Fungal.wasm rename to src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/Fungal.wasm diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.d.ts b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.d.ts new file mode 100644 index 00000000..1929de9d --- /dev/null +++ b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.d.ts @@ -0,0 +1,55 @@ +// TypeScript bindings for emscripten-generated code. Automatically generated at compile time. +declare namespace RuntimeExports { + let HEAPF32: any; + let HEAPF64: any; + let HEAP_DATA_VIEW: any; + let HEAP8: any; + let HEAPU8: any; + let HEAP16: any; + let HEAPU16: any; + let HEAP32: any; + let HEAPU32: any; + let HEAP64: any; + let HEAPU64: any; +} +interface WasmModule { + _malloc(_0: number): number; + _free(_0: number): void; +} + +type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string; +export interface VectorString { + push_back(_0: EmbindString): void; + resize(_0: number, _1: EmbindString): void; + size(): number; + get(_0: number): EmbindString | undefined; + set(_0: number, _1: EmbindString): boolean; + delete(): void; +} + +export type FungalTransformation = { + flaskTo: boolean, + flaskFrom: boolean, + from: VectorString, + to: EmbindString, + gold_to_x: EmbindString, + grass_to_x: EmbindString +}; + +export interface VectorFungalTransformation { + push_back(_0: FungalTransformation): void; + resize(_0: number, _1: FungalTransformation): void; + size(): number; + get(_0: number): FungalTransformation | undefined; + set(_0: number, _1: FungalTransformation): boolean; + delete(): void; +} + +interface EmbindModule { + VectorString: {new(): VectorString}; + VectorFungalTransformation: {new(): VectorFungalTransformation}; + PickForSeed(_0: number, _1: number): VectorFungalTransformation; +} + +export type MainModule = WasmModule & typeof RuntimeExports & EmbindModule; +export default function MainModuleFactory (options?: unknown): Promise; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.mjs b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.mjs new file mode 100644 index 00000000..c8f8f0e9 --- /dev/null +++ b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.mjs @@ -0,0 +1,18 @@ +/* eslint-disable */ +/* tslint:disable */ + +var create_FungalShift = (() => { + var _scriptName = import.meta.url; + + return ( +async function(moduleArg = {}) { + var moduleRtn; + +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){const{createRequire:createRequire}=await import("module");var require=createRequire(import.meta.url)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=require("url").fileURLToPath(new URL("./",import.meta.url));readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);var ret=fs.readFileSync(filename);return ret};readAsync=(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return new Promise((resolve,reject)=>{fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)reject(err);else resolve(binary?data.buffer:data)})})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=url=>fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function findWasmBinary(){if(Module["locateFile"]){var f="FungalShift-base.wasm";if(!isDataURI(f)){return locateFile(f)}return f}return new URL("FungalShift-base.wasm",import.meta.url).href}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{a:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["w"];updateMemoryViews();wasmTable=wasmExports["z"];addOnInit(wasmExports["x"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||true;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}get_exception_ptr(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var __abort_js=()=>{abort("")};var structRegistrations={};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function readPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var InternalError;var throwInternalError=message=>{throw new InternalError(message)};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}};var __embind_finalize_value_object=structType=>{var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map(field=>field.getterReturnType).concat(fieldRecords.map(field=>field.setterArgumentType));whenDependentTypesAreResolved([structType],fieldTypes,fieldTypes=>{var fields={};fieldRecords.forEach((field,i)=>{var fieldName=field.fieldName;var getterReturnType=fieldTypes[i];var getter=field.getter;var getterContext=field.getterContext;var setterArgumentType=fieldTypes[i+fieldRecords.length];var setter=field.setter;var setterContext=field.setterContext;fields[fieldName]={read:ptr=>getterReturnType["fromWireType"](getter(getterContext,ptr)),write:(ptr,o)=>{var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,o));runDestructors(destructors)}}});return[{name:reg.name,fromWireType:ptr=>{var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv},toWireType:(destructors,o)=>{for(var fieldName in fields){if(!(fieldName in o)){throw new TypeError(`Missing field: "${fieldName}"`)}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction:rawDestructor}]})};var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{};var embind_init_charCodes=()=>{var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes};var embind_charCodes;var readLatin1String=ptr=>{var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret};var BindingError;var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type "${name}" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}return sharedRegisterType(rawType,registeredInstance,options)}var GenericWireTypeSize=8;var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=readLatin1String(name);registerType(rawType,{name:name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},argPackAdvance:GenericWireTypeSize,readValueFromPointer:function(pointer){return this["fromWireType"](HEAPU8[pointer])},destructorFunction:null})};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredPointers={};var getInheritedInstanceCount=()=>Object.keys(registeredInstances).length;var getLiveInheritedInstances=()=>{var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}};var delayFunction;var setDelayFunction=fn=>{delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}};var init_embind=()=>{Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var attachFinalizer=handle=>{if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var init_ClassHandle=()=>{Object.assign(ClassHandle.prototype,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}})};function ClassHandle(){}var createNamedFunction=(name,body)=>Object.defineProperty(body,"name",{value:name});var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle["delete"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistent public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var dynCallLegacy=(sig,ptr,args)=>{sig=sig.replace(/p/g,"i");var f=Module["dynCall_"+sig];return f(ptr,...args)};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var dynCall=(sig,ptr,args=[])=>{if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr)(...args);return rtn};var getDynCaller=(sig,ptr)=>(...args)=>dynCall(sig,ptr,args);var embind__requireFunction=(signature,rawFunction)=>{signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};var extendError=(baseErrorType,errorName)=>{var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return`${this.name}: ${this.message}`}};return errorClass};var UnboundTypeError;var getTypeName=type=>{var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([", "]))};var __embind_register_class=(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i>2])}return array};function usesDestructorStack(argTypes){for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns||isAsync?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`)}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf("(");if(argsIndex!==-1){return signature.substr(0,argsIndex)}else{return signature}};var __embind_register_class_function=(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var emval_freelist=[];var emval_handles=[];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){emval_handles[handle]=undefined;emval_freelist.push(handle)}};var count_emval_handles=()=>emval_handles.length/2-5-emval_freelist.length;var init_emval=()=>{emval_handles.push(0,1,undefined,1,null,1,true,1,false,1);Module["count_emval_handles"]=count_emval_handles};var Emval={toValue:handle=>{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:"emscripten::val",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction:null};var __embind_register_emval=rawType=>registerType(rawType,EmValType);var embindRepr=v=>{if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}};var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 8:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=readLatin1String(name);registerType(rawType,{name:name,fromWireType:value=>value,toWireType:(destructors,value)=>value,argPackAdvance:GenericWireTypeSize,readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};var __embind_register_function=(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync)=>{var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);name=getFunctionName(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError(`Cannot call ${name} due to unbound types`,argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,argTypes=>{var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})};var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,fromWireType:fromWireType,toWireType:toWireType,argPackAdvance:GenericWireTypeSize,readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,fromWireType:decodeMemoryView,argPackAdvance:GenericWireTypeSize,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})};var __embind_register_optional=(rawOptionalType,rawType)=>{__embind_register_emval(rawOptionalType)};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var __embind_register_std_string=(rawType,name)=>{name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i{var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead)=>{var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=readLatin1String(name);var decodeString,encodeString,readCharAt,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;readCharAt=pointer=>HEAPU16[pointer>>1]}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;readCharAt=pointer=>HEAPU32[pointer>>2]}registerType(rawType,{name:name,fromWireType:value=>{var length=HEAPU32[value>>2];var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||readCharAt(currentBytePtr)==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value=="string")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var __embind_register_value_object=(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor)=>{structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}};var __embind_register_value_object_field=(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext)=>{structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})};var __embind_register_void=(rawType,name)=>{name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,argPackAdvance:0,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var __emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var __emval_take_value=(type,arg)=>{type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)};var getHeapMax=()=>2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};InternalError=Module["InternalError"]=class InternalError extends Error{constructor(message){super(message);this.name="InternalError"}};embind_init_charCodes();BindingError=Module["BindingError"]=class BindingError extends Error{constructor(message){super(message);this.name="BindingError"}};init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var wasmImports={l:___cxa_throw,p:__abort_js,n:__embind_finalize_value_object,o:__embind_register_bigint,t:__embind_register_bool,h:__embind_register_class,g:__embind_register_class_constructor,b:__embind_register_class_function,s:__embind_register_emval,k:__embind_register_float,m:__embind_register_function,c:__embind_register_integer,a:__embind_register_memory_view,i:__embind_register_optional,j:__embind_register_std_string,e:__embind_register_std_wstring,v:__embind_register_value_object,d:__embind_register_value_object_field,u:__embind_register_void,r:__emscripten_memcpy_js,f:__emval_take_value,q:_emscripten_resize_heap};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["x"])();var ___getTypeName=a0=>(___getTypeName=wasmExports["y"])(a0);var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["A"])(a0);var _free=Module["_free"]=a0=>(_free=Module["_free"]=wasmExports["B"])(a0);var ___cxa_is_pointer_type=a0=>(___cxa_is_pointer_type=wasmExports["C"])(a0);var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise; + + + return moduleRtn; +} +); +})(); +export default create_FungalShift; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.wasm b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift-base.wasm new file mode 100755 index 0000000000000000000000000000000000000000..f1cbc40cdb459e4f0497a33f93180e118c24ea99 GIT binary patch literal 97481 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%0Aa!yd|}mn zVI}&)iu*#vpbPp!Y36zLWmC-30_ghGQUw8W_*jR)tR=4K@{d~gC8l3;F5Cmtp$ZXF zRAh2dk+CmJOz%?<9C%WF^09}xb-Ou64=cFpqkF=PVCf&bN@kOu;8vB`JS?_D|zj^Y*|IpccHmmp^Ojo;^#04Utu47?57(>m$@yHi<-cE0i%=vZ-SX$D%fe^vU|{L;cp zp_sEhh{A!kh1QJCp`ziJl?Az2JI5flF2Y}3^}`D4W~1D7MK_Q>xv-3MZ`aMwA}r$} zLA3AW6uDNz#W_{u2jae;@V>nd<8WK=c?$KrdS9y~3o5W&8nE}EG(h4;95FzcK~yn} zC*xVzmiTxI1yrw}(gq4?du!#|w^di0h!UBq&&WRjYT^bYpe{Mr(1c z{yHLXc7f$h_+li>sKQ~li&&0rMLJ4TuU($$Kys;_-r)4WiBLB0SK*KCSMAX>x6ACn zmpy^b{fOGp%3{BYLm%gdF>q9f2<8_Lf~V3w4+!kuUGheE)s~+wY88l zU9dWcf#*%E@2H<;?9mbGS;n%S`dLAs&I$t6QSUK`3xMb`h-LMj0Kr{miJakHA=1gc zwX$6A!Q0A`2tuc)t2jaqE5IB$CcZgel@2XG|DjL3Wn^hb{y9?gEwo`2W>G2aMHbtM z<)1x${I$9ai2hac*oEAxLjAfZX!{}Fh!18*jSrR!HbK0ZhYvgmj(i|DFCQw259H?M zgN z0vb-h{@G{8!lSvEXW`-lY859E3}>Wtjg7oIjyw>~5(Le&jI=_x!BegUJT%nU5D)#^DMA# z4{+ys3fa|1oBXAz4o8A|vE#h?d(>(lYU3JnI4G;~c%6slLT!(MGaeG!yDgT+=dgMh z4(V*6?FlS)S&v_N%B?eJhLlgKhId71(}@TBYdwBds10(cMx*TsES|XZ1eTJ113x@` zRnVhnuC*mbx5%mOVz=X)fQ*e(*cPxTSzlX8beKBvs=Wa(DM*hyG_aPmO+Ccdh^v=) zQZEz9aOS)eWg4jWd${q{b5>TnMZ?CULWZr&&vL;xY)0b1yvkaP$fdHN#=Jo1wu4tA z^(s*qHy|UjOK*|s^)?$W@{!_(-z`C6EsC+*bYx z0A68ma?(!#wCTvpc2m0U-=?1cQ2dGDw7VL<;-3HrH~xi8u`1ganKI2cO^6cC2Qe^d zwx2K{?9B9I4uXjj)6Cyj)pHeDeEP_H~Ye>YQ}y zPB0R>dRtEi1PThPW*fM?B8qM6MrZALj2KU9k=Dw(p?u#1S7yp|3 zB1I779LbsGd({Fg7l6Hy|I%hlwu_yf`7b+D3zn$fUVA$-DEr0o!-hU&Zq*J2-v}#$ zhq(6Cb``Eq!>E_?}jKUnUs6r_~k+v^cYkfRZ`%)QL7xEt|L;D5kHSa1&e@08K57 zz#UD%EVyQ*5RdaLB#f?j9HYs9;q9Clk9QD{cf@#H`;ion>og%~v}txP1luiB-l_`p zFrTmx)+xWxZ`7F1Gl$LvgXR9rMEJhYU|K0&xCI* zYXl=et`q?>8)ZWhnV zWr~OOj~rFWF+T2@k#7LvJMCY&fgVQ0-i9E{QenevVk9`3Qv6rCz)R)tS`} zwzn;gLLIiTL5~>MgaO>rAWk<~a=E4``6ktU6$MB9sRH(ggAt;F<_H|w{w0J|XB{4iREMh1N zMk0r5;&z688v0ifLoEzqD85Jxxho(sDh}T=#JxiuB*=9KeDH9%qQ;-l~CR~AEt&@o3)0Ns2ZQ(v?Pqi z1XyotiyjMrJ9=LKCKWoi14X)lvjHi7YCoFN7#MVhF4%I-!cY=Q;tKB9Cq*)?U z94+=`D5rv)8mmGe5RVwOlM&z25|Rtcnzu=-RI-0~xwfeWtl5UX5DMstk%a<80>9N3 zA^~DXwg^myTZ(E=;Q)R;tE`c$KUZ%OuhW?f{?mSG0m;vVwsJnMgrB#%08umf;IcVK z(GUjDD(BZTxD%Z3d3uG3QO;8U!Ej*3E)bH~YX$@Y?C-Qyqc2xLg+Y9(a&ZLWvf9ne zO%|u{(%t5zO~PTC-bHo}wYjZT2NV2E?z`LAWL8Uv>^BI!y5!ZnYhQ1cC1xh+Rse~5G8w~<$O3yv zqwqt=!HNTP5}sApNJ(una)JMvk`-)u?Nk=Kq*FZGI!V9uQWRid3Jy?*hdQB$ zw=mRB;^h^>`MqKzwIY?XL`=vB4vyEy)A@ZD^mY09y)HB8{9Y&4i|sUAFO&!3!%Z#` z&-$94wwV)v4gtt`lJ3M%@Fb*fiJqBn4HnFrD=!!M$?o zG-OXx=Is%g#cP@oU$=6`zIX3jCIW%fWbqlnM97iy;=0wL2c$1!BKUzs z(M12kCD{fBU!P0_IhhFA1c2Q{a4s^}MCh^})$M0@vf#-fAzC`ilO;4mTR5bdCMPY1 zG9g9m)mMEa6Mjk1_z{Foc8(%0Jp9-SW7pOYZszEZ%&srCS zx-Z(}9K`^t@hzGX6L@T%@NYJ<= z?sa6S^>dZcJO^O~X9rKCx*!(p7TH2CF=H}l^s*j8EcL0tLY!%^fnCl-MUccfbPYQs z0c*=DTj*O=lkTbo3w45Lg;GbFMbG4kKP?s`oyr>K#h+eMh{IoUv=B!whlgTKE(ht- zQlOF1<&aDA#1kHKIXr4I!7-NuCsK%`1;tvJ%~x;}R#dg7jWSW~dXi?mZL1rA>!XOL-d3msNoAw{Kjq1c&_C}g6-bW4ejk!TF( zN446gBpEhfZ;*sav`%KLD(b6EvHGD`hD8|36Hel3+?B9ayl)ld!O3GF`&o+W8X-!4 zkl~YU1f}8-8D6SwDvYJaf!HI{U$ef^RvKci!B)b8pB3#3Kb@pM$WtRo3P`qbG^moD zU-rC3s`PfL5{EW@88fTWqLJ0C2&5+@?6Pz~DGnHYIt{3Ox!SfUZs#m0 z?81aH#Uj*#(B$f4sHG`Vtto~e%WNjIL)sL7h0UKB9pcPB`{|iJ-AU++&*=+4FSZef z$kp5S4>96DJ*w|WuHK$Z`}%~K1aardl0Ek3musp`Bx6S-$>fSvv4WFq9MG8-WJ-PY z=(yLGKKMU54djFn=9N6DPrscam*6NF$}FLt)EnC|h{Tcdf4YDy{}=b@8bzj~?4i(z zU<^T*{9pXZ7yG3bX`$}Lm$zQc%iF!9c0oLqD#6nH%{)!ZkyUNJF`36 zGrj$`somM_g3oTeb?2^`+qaTSBW<~9GPXAM+&;NuS2jD7?V6ckyvaQ`PbfdVXJ%)% zXLjr5mrvcXWop;#G{vSV&rWTh+6DQO)^xRvyYAMVH%@M!*gd&(&kZxXp*Hl2L~ohd zdBd%HRCWFKnVGGP+W~3DDYABCH|(C_A5pSSxjnN}lRL8OXJ)o%liRn<+(bGvy}h~P z^;5g|Ozplo+jZ-nn;O?oZn-%QaRUTRXV*_|ZA|XoJ$Ywi=hW?u?Nd8%oV}^JKNN4B z+0ocFv;EE;GrM=Sw8FO8$?LaIovFR(mKeN!X6KE8eYfwK-91g=`pG@WODq^;%lTU` zzO<=$$;wy^j2#a+c2Dh@{`XVa?wQ%yshy1-Q3@s`5AM!Z=c!HgbP`W zlw^}zz*j1pP zbP%%EU6+jyk6hDOyLqB9J~5aNT$gPc>>nH12(s(4Yc*sxoR4cB8;2$)NL5oNyqV;z zOl-CmMocuW%_cTYtR1;F%g4q>uF3jGhDSD!HLe>RW?(Ok}&6@_GXD#GSWTPWP<1~jtKHNV7A7V+w#_ag! zQF=_UB%>o^6ODfL)IU^Oes~1N4-Ab@7%Q!6!^lRh#`p$0FuB-sbZq1&S=J#ICA1jF z`*UD64CYr~r`n0^nvjf)tsR29sTF^Rx{OmLEirawV}s*^&eye@hleRdnYDc2X>7=ckca@oLLdSm&zkmo zer%-wDo~i-S#~@d7|bU&G!Xmo@oZvbbN`0M=upa{YvjWsnktN=5o4oygE^0k8=mn| zgxO(SImW|82E>bj&HY!6yQ~jwx_W3ly9&mzuo5@JVKf*CgP{Uh?!O8#rWgj_wE3#o z6mnPR{hMJe?1zuEpyiFtqbU43V<-2cos>s-1uPL$oq!| z8tZf6FWZE5D0Hhlp&lb+!4eG&PK<2IRgBss14(J);KU%wy5XGM25iINSQc2>m>6k{ zT6u7Md{A~RRhV@siUaw^eEnc!-N@MB)pT#BtADdh7C6mxLCj{MYJzc+km?b^Cc(Z& z5*{TsNouGJA`U2xfg#)y(@EB%fumW!eh%@mvWfgy*F1q(i6KT^OjRAB>4-dCYlCLg3_3bAiW`t) zY_4BFHn=GtK)~WC#*3IY5gZ7#mrO`wZKyJL9`t*V*+qS%6MiY%ya_jgxooW8yeU@Y zWBsKPtB$ZlH`XG!*9-|oaNgJCZp2s)J)Xu3cDxy6a>7U5gLrAa+#2G`IvTNiSEjK!XvESq-ltrU3 zF}M*wo{wGE7#+?hFaaB*zD|r>JJc`xOwGVpehnxjn^`m#UQ){?-j;8k7|Dk=W*c$; zjTk{hbcxhdA1r`FnPm(yM_k9@%?Rtr=JCeB*wFBBwr=yLtMIh)63(Vj7#JMRuN%bY zT2nEfYhYP6h615=~U#sDnz0a>iJ;44&`?+Do#%qa-Vq0ZymSk~mx>9L`AjSzZ> z0?HV73l`i;j*sSJS7pRuqd8WAfbA*|5hYI9Rh#&CEe%!GXkyw5H)FsoJCn88opP*V?IjZ^@M{RBY!`sBqZm1jg;bP3 zxIWb=>qcdrS&@8rU7F8eY8zzZFgWxn zIC9lsQWP{`J*yq}ux3&z$F;@wZld(A!LbpAC&Xd68f;0-H*JGAf+L|NA_H!qF*ZnG z%!=fAwwMp%griodh63u}6e=gF8~_6mANn{DB+sHkz^~5bltL+4#ZU~Jj}*#<%3v8o zJ~(90v;Q0%BbYJq+%(`atPN-uS;{5+olUn?1xd4<74=2RWH2SBwp=*9Nd$7390{)Uhi*i0JgH zSh7t|VFzPvuo1Bkca(wF7!-woA#ClnLUIQ1O>WvtX}PQ|Dsjl0rwZ9{c!02Ir@+5) zyKVB6#G{|pa`(|7`eBPP!b~w2If|x7aIJ6NcPAdkl3#%WeZIX~^TpLV=#o98b2$F~*@(zY!z_RPvHf!^sz!m2d zL)fGdc|u3djv35lxit!f_4&q)c{V<@o_{yt2y*tD@BpBAO4L|Cw4SHuwmB~hyPu-W z+h~?D^egOPD3?5tb=77yw2Wv|#sZ_fT)Pg+FTV6;Ff0tXl8XsZYCk zP_Inh+E9Z-hsg1`i#Xgit3Y|Um#-wKyqX|&`q1h8y8v=k_^xZg0gyh2wem8SxD4 znS*FxPb((X2$j+F;F)nv&&4%82NyL7*D2w;ctv5XF1c-Tdz||fKitxG@x>)WHnhd( zcJ0D&lMc6cVK}%R=J)WzaIhl49a|V~*5OVs3*R`e&6Ry6*T0BsptwLJw@?pis!UqI!VJrU*Hm* zV=B_n^Myn+Lkh4J!-*>|vClV4fX{t#UO*>4b;ut*n$>>9F&0BNv!hg>-}BVGm~XJp z^Cc3VpC8akNFDOWztqCEdw##f`O?_dm2&<(0Q0cHQ77W_C%;^pozJp0Esc=x|AVZy z++`zh=_^rIo{i~KCD}Ov_=@Ib%Ca++Q+@vQ(^;(o8ToT$=17DZ_W!r6wmNipB=Xb| zx0aFN_zCcmwCCx5xzE!(x*(moTu}Jrv3U@*j@(*)B5{fd{P)Be2x=nG8Cj&ES@S+g zx5$6*R$3l|^RmF7{zD|i=h>P{QXc=x0-_`g_x#bzU^odt-5KL)AlNC?wR`L(N ztk1VfYH;^6MnTfJIdga(fH^W?wEqvJM42y;ImZXfvVwRMY?;QWEyO0FNaM0aMW-mGehW%rmqL^|54qvi$CEG+DKX`5QW>W7$ja~8rK}Efnxpg{UH*Y>uiUNEqO6W6W zmXzqpUsQ{@{Lr6AkS}=VG?}`~Nx<#PQd*|``18CA{{Ni&==yK``@61eO|$&aw`q1P ztto%N=p@a}$X!Tq$N34G=g{C-e7?x~3+RYfBjXfH%a!1KnS3?!yZ>j4vOPeBnT(TU z(!h?{>GX1zAN-3nuw?piiYQmoru-NcJ-)0-3i5s5Ny_Ek5QC9FM0JzypP(YzPKPU& zAfVIQ9sXY>qwj+UBB9DYWoh2`VhOw%%tf>u-@OQUqDsR({g)+!TNZ`;PDSoL(XF*m}C&VZ0X@U39Kd}^E?cgcR_wQ{h4CWlL z{3y*a?k%|B#5;A~&CA8$hku4U)Xm`ThFstzF8hDB&FAiR>C7q04Y-Nfi)3J~&&J31 z)CbP;BkyGZC(F~&%}vt_r5I-aT`(np`EJAMk=6Jv%}E_gvSbLI9L?+K&!u@4+V8_U z8O}Y}aCc(%3n_4Mu;%nDN%o6Lo>X@)IuAVc`erocE$We6PP*yiRK&y(Lru}P1QQxW~7yP8sW!zacbdS60=9OXwTwgk$8 zI`9igwhL)<2Jmx@<>pkK#(4Y}+X~-MXmA3|_x~q|C|2(wipd9LMcAJo6I@sa5&L|A z^Nt0F58so>EtWs9P&V&5nkzET_x(~^?MDhHl?ZamV;btUMyKcyO-tbg0zuzM&M1^= z&kyZyqW37p7*hEz#g#(P`~P!lcGY%SSH$%=%}ZRzH2sr;ciNmQX%6{4?}v*HUm!$< zX;=~9pNQgFkQ2C6NQ&b{27a005|0h8>^GjIxwP4Hy5JcN(eTZ)7;(I2yam-rV;^p3NPWKhITRa;SVrb@9wEj(#y^0BqICnOAGA+UyS15o)Qhu2OgT;+?7}0 z;IE_=D6j|c0<5(RQ3n!HX9n|bS$-Vw#5td;r_KTgZ%q;252kf{B#McrPb9{-b_-?N z^L@XXx))O1I(qYZ7L!7_=^i%@QoMV9&CFY%S_^cDijpb#0>zRhCpgO#jwFn4*7kmQ z88$_awalhah64Nq;Bh!jZvThSh3~xc@DKgmUwrt=)|B9p<`VQtK|5z!Q;>#Nv@T3ntn90@Ws*dp|yJ`vX)b9|lkIWAnqkNVVZP{F{l> z^N|$9}71F}>Nlg~_{TEYK9)5B-<4GOZC@5oCC@ z641$%J@BYWd19{5%2I_X#{ejqlkd(4??*?9)*k+Uo8XU7j4R*D952($N6qg(1n))H zK{8Rw3*P%|J;luc7OB&Uo}xHsG>2~HsU+s;Cy=wyTx{oEJPA7fzmoZx!#bnct$QiW z_y1SK&$0TT90F2pVs)HMoSL(sSXl2zeE3*|f0#_1qli92F-7pMJ6ZmsgWvtzwyp75 zC*C@bo$ma(0O<4e)G6>3clUVWs+$rg_!}+mON+4gldlT=IN+rve34=b<$M^See!T= zyH;ul6U>}^4CE8ZdbE-&Jde_B>u`ch+)cX4^CN(-rD+vhIP(9$D)9ZEIwKe6qv|B! zNfhIhN^`pB(~;;SWRmdsoINdwJ@7jvFt2v7fL_XadOolK?wiLa06X?%;%H&*6Sn-( z&&;!bZ=Iw>ckhuBRiVFYKv{u~0oJldcs6>6GpAUd-%Z^fnd6hfXl_cLNJr8T^;x?8 z)lJ{r_uHqx^^Vq{thszFiUnzYlx}O9=THb`sDB}XyZtTPvr~h!|Ggw8?g1UlSD=_P z;o9d);LYpmoOCM0@RJ32fh7z+w+u0#PwO*J9BN`?8}ctegc~+bTd@WqV_EZ40uRk| zr`XyZ#(pt@y9{~w^UV}R`Di$bqY1o_&1MlU7z!~0_hwH6wign1ugAYUh2%SpUhOG^ ze<_Jv!T!+f4y6bUy&jSK{RL=t?R1V|@c}P6fM+Q7&1Fd|mDuesr(p_CI(kow$?W@s z#2P2w?PAGATR%y`QGo{{u@Ui;h;}ef^Shsp7VIFII2-!qM<^!4=PW9SIxT3gM*ja> zvP6Xdhp|P|Ni`?vICh{34&+CVl~yzKDmK>m`~RML`-xil0O&N$krc&i`~Q%lGo9#@ zVmdb}@hgAmD@{isVOZ(KX&T~Q%jfb$+DC9a`bQ;%ZbC3A`9ohVdC2lpioMSy`ilij z+{lm6ToR+>6qEaNs57N7=YKTyK1^}W318^#ywe=_9Zwde&_W0E!I&#xoB)TFD)i7- zE=g7X=(ACZo>WF7JWZzQ?D4)oF2xBz#7|l&D@$0O1CWhbb3;iUVn-)}2;@(!gH!34 z6F{sergh)fnznx4A%v2Co54rartQVh!2z97UT!8;b2#+%v?@}jqZE_;d+&mt{m-Q> z##{mMX?g11JjHg>JsxKj-2-i{=BU)3AN|u(H=l|V=jGN>5x5htpqq1~Ao4Wbl3;qZ zFOiqw)Hh1lofvO!PTlKhfgb*|IoQ3~Q-SUK<~+LPL^N|u;3vx94(4eyF#RR zulC^eiO54u{@`CGPOJDhMYH^0AcMzs1U?QccPiocX*phJzOSedo;Wjj0p{EyNdBvr z#a@iU%K!BO;LS@YVouHn-U?O_bL4LlcEl`xLh}=859DQR>Pvt-wq|grxkwQ^fv4Ur z*u6fX%a8qS0x#sGb(8}9;CEAO;LB8a<78U$yZ`PCR^S8;XHb5r+@aGY^kG!rQN55N z4Px>CJr9_Jd&;^1mIez`cP!5`*wMc)HG8iBrsliG_3WLG28pI39O(pVD)DL;_x$o zmG)w-!#cf4<9os9(@DY|;R~=+fJLvuisk$6N>miYdT&pWKEO)7PQJ2U2Y;^OB3(#_ za|WbE^Rvl#7h|5Ld3As;dOMq2BV3=Lx3jUnyE50KCG0JHDTq4q^Od>!;>}Ktm(ja@ zmDUET2?1ikvkIO)yMZFHbFU_ft z#L(PY7Wk>T;4T|ZlS?S&{OB*75xaNuQ3QVQ7w3S_1#{wHOaWe)d~f!&VC&KUl!S(< z*vD6=^f=$@JuWOF5BPfz66@F;yQk>vFF|{Ab3s&dJ?oJl2Yk*>!NEMm-|sIC>eZey z=zlITEKI2&-N6El;_q?5lOOSBPYG_`Ur|gGDtsd?d$jMDQ@su=Cy2TF`i#K&cGuvDL)0z94PI<}A&d;Vsf)Rd3k zm(-_NM(1QmAv(YBS1MsM@GzO^OW}0WCWV= zKT!%-ANXK|KSXAZIJV+1#`&)L$(8N@)iloB7_NYS8Zd)DK_0rRiBweK1jt@Z<+6rd~cuVA->! zwLa0@>vXx7GdQG$5k>1h+%(p4if5RyDBJ&$1TDTjOfgaBW3*C8yjt|qeD;5opI&un zrwG}m+7{ac!8Oogjv0P1m!Ib4cX;`|*gaD}zzD*s}2kfLJR&_`wz=6HS#XE1_uOzr%=UyT`kMHtF9%xEwh_Nu!U z=I<4CJ)>!RMZM2#wifKJb-VLJ!3MpZ^l;2)q(@@@^Y>@jmt+3Dr5 zULVI|qm3UQ1q|9&|$Hsh{tFD)_99b<&-6R+D9? z!6&%&d^hkNpS`U3Ll%?|Gv-NPs4xD40rjFK1E2bj&#qiC@86DyaLa%bJ^I{4s%_5@ z-=E|=K6~-S+h_DALZ)`_<}Y#x@3j#x&Ds4C{;C3gW%$b!u>>M!~q Q{wUkXFIH;Rz3;62AJNK~=>Px# literal 0 HcmV?d00001 diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.d.ts b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.d.ts new file mode 100644 index 00000000..1929de9d --- /dev/null +++ b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.d.ts @@ -0,0 +1,55 @@ +// TypeScript bindings for emscripten-generated code. Automatically generated at compile time. +declare namespace RuntimeExports { + let HEAPF32: any; + let HEAPF64: any; + let HEAP_DATA_VIEW: any; + let HEAP8: any; + let HEAPU8: any; + let HEAP16: any; + let HEAPU16: any; + let HEAP32: any; + let HEAPU32: any; + let HEAP64: any; + let HEAPU64: any; +} +interface WasmModule { + _malloc(_0: number): number; + _free(_0: number): void; +} + +type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string; +export interface VectorString { + push_back(_0: EmbindString): void; + resize(_0: number, _1: EmbindString): void; + size(): number; + get(_0: number): EmbindString | undefined; + set(_0: number, _1: EmbindString): boolean; + delete(): void; +} + +export type FungalTransformation = { + flaskTo: boolean, + flaskFrom: boolean, + from: VectorString, + to: EmbindString, + gold_to_x: EmbindString, + grass_to_x: EmbindString +}; + +export interface VectorFungalTransformation { + push_back(_0: FungalTransformation): void; + resize(_0: number, _1: FungalTransformation): void; + size(): number; + get(_0: number): FungalTransformation | undefined; + set(_0: number, _1: FungalTransformation): boolean; + delete(): void; +} + +interface EmbindModule { + VectorString: {new(): VectorString}; + VectorFungalTransformation: {new(): VectorFungalTransformation}; + PickForSeed(_0: number, _1: number): VectorFungalTransformation; +} + +export type MainModule = WasmModule & typeof RuntimeExports & EmbindModule; +export default function MainModuleFactory (options?: unknown): Promise; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.mjs b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.mjs new file mode 100644 index 00000000..3790b2b2 --- /dev/null +++ b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.mjs @@ -0,0 +1,18 @@ +/* eslint-disable */ +/* tslint:disable */ + +var create_FungalShift = (() => { + var _scriptName = import.meta.url; + + return ( +async function(moduleArg = {}) { + var moduleRtn; + +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){const{createRequire:createRequire}=await import("module");var require=createRequire(import.meta.url)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=require("url").fileURLToPath(new URL("./",import.meta.url));readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);var ret=fs.readFileSync(filename);return ret};readAsync=(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return new Promise((resolve,reject)=>{fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)reject(err);else resolve(binary?data.buffer:data)})})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=url=>fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function findWasmBinary(){if(Module["locateFile"]){var f="FungalShift.wasm";if(!isDataURI(f)){return locateFile(f)}return f}return new URL("FungalShift.wasm",import.meta.url).href}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{a:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["w"];updateMemoryViews();wasmTable=wasmExports["z"];addOnInit(wasmExports["x"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||true;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}get_exception_ptr(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var __abort_js=()=>{abort("")};var structRegistrations={};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function readPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var InternalError;var throwInternalError=message=>{throw new InternalError(message)};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}};var __embind_finalize_value_object=structType=>{var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map(field=>field.getterReturnType).concat(fieldRecords.map(field=>field.setterArgumentType));whenDependentTypesAreResolved([structType],fieldTypes,fieldTypes=>{var fields={};fieldRecords.forEach((field,i)=>{var fieldName=field.fieldName;var getterReturnType=fieldTypes[i];var getter=field.getter;var getterContext=field.getterContext;var setterArgumentType=fieldTypes[i+fieldRecords.length];var setter=field.setter;var setterContext=field.setterContext;fields[fieldName]={read:ptr=>getterReturnType["fromWireType"](getter(getterContext,ptr)),write:(ptr,o)=>{var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,o));runDestructors(destructors)}}});return[{name:reg.name,fromWireType:ptr=>{var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv},toWireType:(destructors,o)=>{for(var fieldName in fields){if(!(fieldName in o)){throw new TypeError(`Missing field: "${fieldName}"`)}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction:rawDestructor}]})};var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{};var embind_init_charCodes=()=>{var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes};var embind_charCodes;var readLatin1String=ptr=>{var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret};var BindingError;var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type "${name}" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}return sharedRegisterType(rawType,registeredInstance,options)}var GenericWireTypeSize=8;var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=readLatin1String(name);registerType(rawType,{name:name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},argPackAdvance:GenericWireTypeSize,readValueFromPointer:function(pointer){return this["fromWireType"](HEAPU8[pointer])},destructorFunction:null})};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredPointers={};var getInheritedInstanceCount=()=>Object.keys(registeredInstances).length;var getLiveInheritedInstances=()=>{var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}};var delayFunction;var setDelayFunction=fn=>{delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}};var init_embind=()=>{Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var attachFinalizer=handle=>{if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var init_ClassHandle=()=>{Object.assign(ClassHandle.prototype,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}})};function ClassHandle(){}var createNamedFunction=(name,body)=>Object.defineProperty(body,"name",{value:name});var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle["delete"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistent public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var dynCallLegacy=(sig,ptr,args)=>{sig=sig.replace(/p/g,"i");var f=Module["dynCall_"+sig];return f(ptr,...args)};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var dynCall=(sig,ptr,args=[])=>{if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr)(...args);return rtn};var getDynCaller=(sig,ptr)=>(...args)=>dynCall(sig,ptr,args);var embind__requireFunction=(signature,rawFunction)=>{signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};var extendError=(baseErrorType,errorName)=>{var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return`${this.name}: ${this.message}`}};return errorClass};var UnboundTypeError;var getTypeName=type=>{var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([", "]))};var __embind_register_class=(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i>2])}return array};function usesDestructorStack(argTypes){for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns||isAsync?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`)}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf("(");if(argsIndex!==-1){return signature.substr(0,argsIndex)}else{return signature}};var __embind_register_class_function=(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var emval_freelist=[];var emval_handles=[];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){emval_handles[handle]=undefined;emval_freelist.push(handle)}};var count_emval_handles=()=>emval_handles.length/2-5-emval_freelist.length;var init_emval=()=>{emval_handles.push(0,1,undefined,1,null,1,true,1,false,1);Module["count_emval_handles"]=count_emval_handles};var Emval={toValue:handle=>{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:"emscripten::val",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction:null};var __embind_register_emval=rawType=>registerType(rawType,EmValType);var embindRepr=v=>{if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}};var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 8:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=readLatin1String(name);registerType(rawType,{name:name,fromWireType:value=>value,toWireType:(destructors,value)=>value,argPackAdvance:GenericWireTypeSize,readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};var __embind_register_function=(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync)=>{var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);name=getFunctionName(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError(`Cannot call ${name} due to unbound types`,argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,argTypes=>{var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})};var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,fromWireType:fromWireType,toWireType:toWireType,argPackAdvance:GenericWireTypeSize,readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,fromWireType:decodeMemoryView,argPackAdvance:GenericWireTypeSize,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})};var __embind_register_optional=(rawOptionalType,rawType)=>{__embind_register_emval(rawOptionalType)};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var __embind_register_std_string=(rawType,name)=>{name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i{var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead)=>{var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=readLatin1String(name);var decodeString,encodeString,readCharAt,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;readCharAt=pointer=>HEAPU16[pointer>>1]}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;readCharAt=pointer=>HEAPU32[pointer>>2]}registerType(rawType,{name:name,fromWireType:value=>{var length=HEAPU32[value>>2];var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||readCharAt(currentBytePtr)==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value=="string")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var __embind_register_value_object=(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor)=>{structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}};var __embind_register_value_object_field=(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext)=>{structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})};var __embind_register_void=(rawType,name)=>{name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,argPackAdvance:0,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var __emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var __emval_take_value=(type,arg)=>{type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)};var getHeapMax=()=>2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};InternalError=Module["InternalError"]=class InternalError extends Error{constructor(message){super(message);this.name="InternalError"}};embind_init_charCodes();BindingError=Module["BindingError"]=class BindingError extends Error{constructor(message){super(message);this.name="BindingError"}};init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var wasmImports={l:___cxa_throw,p:__abort_js,n:__embind_finalize_value_object,o:__embind_register_bigint,t:__embind_register_bool,h:__embind_register_class,g:__embind_register_class_constructor,b:__embind_register_class_function,s:__embind_register_emval,k:__embind_register_float,m:__embind_register_function,c:__embind_register_integer,a:__embind_register_memory_view,i:__embind_register_optional,j:__embind_register_std_string,e:__embind_register_std_wstring,v:__embind_register_value_object,d:__embind_register_value_object_field,u:__embind_register_void,r:__emscripten_memcpy_js,f:__emval_take_value,q:_emscripten_resize_heap};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["x"])();var ___getTypeName=a0=>(___getTypeName=wasmExports["y"])(a0);var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["A"])(a0);var _free=Module["_free"]=a0=>(_free=Module["_free"]=wasmExports["B"])(a0);var ___cxa_is_pointer_type=a0=>(___cxa_is_pointer_type=wasmExports["C"])(a0);var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise; + + + return moduleRtn; +} +); +})(); +export default create_FungalShift; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.wasm b/src/services/SeedInfo/infoHandler/InfoProviders/FungalShift/FungalShift.wasm new file mode 100755 index 0000000000000000000000000000000000000000..8fdeb703393a66b95b2fbb0602d4122cdc798997 GIT binary patch literal 97187 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%0A=8@;%` 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

2z@H+vee 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 g*nxWWIRKn+LuZm`^%wn*e3)(I7b~^u{; fungal!: MainModule; @@ -131,3 +131,5 @@ export type IFungalRule = Array<{ flaskFrom?: boolean; flaskTo?: boolean; }>; + +export default FungalShiftInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Lottery.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Lottery.ts index ed80649e..ecc1eacb 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Lottery.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Lottery.ts @@ -25,3 +25,5 @@ export class LotteryInfoProvider extends InfoProvider { return true; } } + +export default LotteryInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Map/index.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Map/index.ts index 3add87a2..62640221 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Map/index.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Map/index.ts @@ -549,3 +549,5 @@ snowCave, 2160684, 1988 snowCastle, 1104125, 25762 vault, 2252795, 11505 */ + +export default MapInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Material.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Material.ts index f756ba60..ad5b4d79 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Material.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Material.ts @@ -57,3 +57,5 @@ export class MaterialInfoProvider extends InfoProvider { return true; } } + +export default MaterialInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/PacifistChest.ts b/src/services/SeedInfo/infoHandler/InfoProviders/PacifistChest.ts index f8e92d08..dc8e9db0 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/PacifistChest.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/PacifistChest.ts @@ -49,7 +49,7 @@ const itemMap = { "data/entities/items/pickup/heart_fullhp.xml": null, }; -export class PacifistChestProvider extends InfoProvider { +export class PacifistChestInfoProvider extends InfoProvider { temples = templeData; chestProvider: ChestRandomProvider; @@ -109,3 +109,5 @@ export class PacifistChestProvider extends InfoProvider { return true; } } + +export default PacifistChestInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Perk/index.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Perk/index.ts index 4ebd6cc8..5eb99e9d 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Perk/index.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Perk/index.ts @@ -597,3 +597,5 @@ export interface IPerkRule { all: string[][]; deck: string[][]; } + +export default PerkInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Potion.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Potion.ts index df90da39..902b6843 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Potion.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Potion.ts @@ -166,3 +166,5 @@ export class PotionInfoProvider extends InfoProvider { // return isEqual(rule.val, info); // } } + +export default PotionInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/PotionRandomMaterial.ts b/src/services/SeedInfo/infoHandler/InfoProviders/PotionRandomMaterial.ts index b4d2a583..6e3f8157 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/PotionRandomMaterial.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/PotionRandomMaterial.ts @@ -253,3 +253,5 @@ export class PotionRandomMaterialInfoProvider extends InfoProvider { return true; } } + +export default PotionRandomMaterialInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/PotionSecret.ts b/src/services/SeedInfo/infoHandler/InfoProviders/PotionSecret.ts index c4f2b708..762b589e 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/PotionSecret.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/PotionSecret.ts @@ -67,3 +67,5 @@ export class PotionSecretInfoProvider extends InfoProvider { return true; } } + +export default PotionSecretInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/PowderStash.ts b/src/services/SeedInfo/infoHandler/InfoProviders/PowderStash.ts index 08a9e073..1e6c719a 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/PowderStash.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/PowderStash.ts @@ -94,3 +94,5 @@ export class PowderStashInfoProvider extends InfoProvider { // return isEqual(rule.val, info); // } } + +export default PowderStashInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Shop.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Shop.ts index 64609830..14d0d2a5 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Shop.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Shop.ts @@ -354,3 +354,5 @@ export class ShopInfoProvider extends InfoProvider { return true; } } + +export default ShopInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/SnowcastleSecretChamber.ts b/src/services/SeedInfo/infoHandler/InfoProviders/SnowcastleSecretChamber.ts index a1f33d72..284f9196 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/SnowcastleSecretChamber.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/SnowcastleSecretChamber.ts @@ -6,7 +6,7 @@ import { InfoProvider } from "./Base"; import { MapInfoProvider } from "./Map"; // Hourglass chamber -export class SnowcastleSecretChamberProvider extends InfoProvider { +export class SnowcastleSecretChamberInfoProvider extends InfoProvider { mapInfoProvider: MapInfoProvider; constructor(randoms, mapInfoProvider: MapInfoProvider) { super(randoms); @@ -29,3 +29,5 @@ export class SnowcastleSecretChamberProvider extends InfoProvider { return true; } } + +export default SnowcastleSecretChamberInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/SnowcaveSecretChamber.ts b/src/services/SeedInfo/infoHandler/InfoProviders/SnowcaveSecretChamber.ts index bcb63030..abead3b3 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/SnowcaveSecretChamber.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/SnowcaveSecretChamber.ts @@ -16,7 +16,7 @@ const getWandArgs = (wand: string): [number, number, boolean] => { return [0, 0, false]; }; -export class SnowcaveSecretChamberProvider extends InfoProvider { +export class SnowcaveSecretChamberInfoProvider extends InfoProvider { wandInfoProvider: WandInfoProvider; mapInfoProvider: MapInfoProvider; constructor(randoms, mapInfoProvider: MapInfoProvider, wandInfoProvider: WandInfoProvider) { @@ -41,3 +41,5 @@ export class SnowcaveSecretChamberProvider extends InfoProvider { return true; } } + +export default SnowcaveSecretChamberInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Spell.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Spell.ts index 16525336..7556b9ed 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Spell.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Spell.ts @@ -38,3 +38,5 @@ export class SpellInfoProvider extends InfoProvider { return true; } } + +export default SpellInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/StartingBomb.ts b/src/services/SeedInfo/infoHandler/InfoProviders/StartingBomb.ts index 1eea86d9..4e05d5b1 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/StartingBomb.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/StartingBomb.ts @@ -35,3 +35,5 @@ export class StartingBombSpellInfoProvider extends InfoProvider { return true; } } + +export default StartingBombSpellInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/StartingFlask.ts b/src/services/SeedInfo/infoHandler/InfoProviders/StartingFlask.ts index 0632bc76..f1fc4c73 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/StartingFlask.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/StartingFlask.ts @@ -63,3 +63,5 @@ export class StartingFlaskInfoProvider extends InfoProvider { return true; } } + +export default StartingFlaskInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/StartingSpell.ts b/src/services/SeedInfo/infoHandler/InfoProviders/StartingSpell.ts index 8a62a449..85f3bcaa 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/StartingSpell.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/StartingSpell.ts @@ -70,3 +70,5 @@ export class StartingSpellInfoProvider extends InfoProvider { return true; } } + +export default StartingSpellInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Wand.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Wand.ts index b72d3210..1ee733c4 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Wand.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Wand.ts @@ -678,3 +678,5 @@ export interface IWandRule { cards?: string[]; permanentCard?: string; } + +export default WandInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/WaterCave.ts b/src/services/SeedInfo/infoHandler/InfoProviders/WaterCave.ts index 07a10b00..09d53e9e 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/WaterCave.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/WaterCave.ts @@ -14,3 +14,5 @@ export class WaterCaveInfoProvider extends InfoProvider { return true; } } + +export default WaterCaveInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/InfoProviders/Weather.ts b/src/services/SeedInfo/infoHandler/InfoProviders/Weather.ts index f49eebf2..5698e629 100644 --- a/src/services/SeedInfo/infoHandler/InfoProviders/Weather.ts +++ b/src/services/SeedInfo/infoHandler/InfoProviders/Weather.ts @@ -187,3 +187,5 @@ export interface IWeatherRule { fog?: [number, number]; clouds?: [number, number]; } + +export default WeatherInfoProvider; diff --git a/src/services/SeedInfo/infoHandler/helpers.ts b/src/services/SeedInfo/infoHandler/helpers.ts index bbf94d78..977bac4c 100644 --- a/src/services/SeedInfo/infoHandler/helpers.ts +++ b/src/services/SeedInfo/infoHandler/helpers.ts @@ -1 +1,3 @@ export const mapHandlerStub: (...args) => any = (...args) => {}; + +export const camelCaseName = s => s.charAt(0).toLowerCase() + s.slice(1); diff --git a/src/services/SeedInfo/infoHandler/index.ts b/src/services/SeedInfo/infoHandler/index.ts index aa9a8ed5..3b3053eb 100644 --- a/src/services/SeedInfo/infoHandler/index.ts +++ b/src/services/SeedInfo/infoHandler/index.ts @@ -1,7 +1,7 @@ import type { AlchemyInfoProvider } from "./InfoProviders/Alchemy"; import type { BiomeInfoProvider } from "./InfoProviders/Biome"; import type { BiomeModifierInfoProvider } from "./InfoProviders/BiomeModifier"; -import type { FungalInfoProvider } from "./InfoProviders/Fungal"; +import type { FungalShiftInfoProvider } from "./InfoProviders/FungalShift"; import type { InfoProvider } from "./InfoProviders/Base"; import type { IPerkChangeAction, PerkInfoProvider } from "./InfoProviders/Perk"; import type { LotteryInfoProvider } from "./InfoProviders/Lottery"; @@ -22,23 +22,24 @@ import type { PotionRandomMaterialInfoProvider } from "./InfoProviders/PotionRan import type { WandInfoProvider } from "./InfoProviders/Wand"; // Chests -import type { ChestRandomProvider } from "./InfoProviders/ChestRandom"; -import type { PacifistChestProvider } from "./InfoProviders/PacifistChest"; +import type { ChestRandomInfoProvider } from "./InfoProviders/ChestRandom"; +import type { PacifistChestInfoProvider } from "./InfoProviders/PacifistChest"; // Special biomes import type { ExcavationsiteCubeChamberInfoProvider } from "./InfoProviders/ExcavationsiteCubeChamber"; -import type { SnowcaveSecretChamberProvider } from "./InfoProviders/SnowcaveSecretChamber"; -import type { SnowcastleSecretChamberProvider } from "./InfoProviders/SnowcastleSecretChamber"; +import type { SnowcaveSecretChamberInfoProvider } from "./InfoProviders/SnowcaveSecretChamber"; +import type { SnowcastleSecretChamberInfoProvider } from "./InfoProviders/SnowcastleSecretChamber"; import loadRandom, { IRandom } from "../random"; import type { i18n } from "i18next"; +import { camelCaseName } from "./helpers"; interface IProviders { alchemy: AlchemyInfoProvider; alwaysCast: AlwaysCastInfoProvider; biome: BiomeInfoProvider; biomeModifier: BiomeModifierInfoProvider; - fungalShift: FungalInfoProvider; + fungalShift: FungalShiftInfoProvider; lottery: LotteryInfoProvider; map: MapInfoProvider; material: MaterialInfoProvider; @@ -49,7 +50,6 @@ interface IProviders { startingBombSpell: StartingBombSpellInfoProvider; startingFlask: StartingFlaskInfoProvider; startingSpell: StartingSpellInfoProvider; - statelessPerk: PerkInfoProvider; waterCave: WaterCaveInfoProvider; wand: WandInfoProvider; @@ -58,12 +58,12 @@ interface IProviders { potionRandomMaterial: PotionRandomMaterialInfoProvider; powderStash: PowderStashInfoProvider; - chestRandom: ChestRandomProvider; - pacifistChest: PacifistChestProvider; + chestRandom: ChestRandomInfoProvider; + pacifistChest: PacifistChestInfoProvider; - excavationSiteCubeChamber: ExcavationsiteCubeChamberInfoProvider; - snowcaveSecretChamber: SnowcaveSecretChamberProvider; - snowcastleSecretChamber: SnowcastleSecretChamberProvider; + excavationsiteCubeChamber: ExcavationsiteCubeChamberInfoProvider; + snowcaveSecretChamber: SnowcaveSecretChamberInfoProvider; + snowcastleSecretChamber: SnowcastleSecretChamberInfoProvider; [key: string]: InfoProvider; } @@ -144,127 +144,128 @@ export class GameInfoProvider extends EventTarget { async buildInfoProviders(): Promise { // We have to import like this so that vite can bundle them - const imports = await Promise.allSettled([ - import("./InfoProviders/Alchemy"), - import("./InfoProviders/AlwaysCast"), - import("./InfoProviders/Biome"), - import("./InfoProviders/BiomeModifier"), - import("./InfoProviders/Fungal"), - import("./InfoProviders/Lottery"), - import("./InfoProviders/Map"), - import("./InfoProviders/Material"), - import("./InfoProviders/Perk"), - import("./InfoProviders/Weather"), - import("./InfoProviders/Spell"), - import("./InfoProviders/StartingBomb"), - import("./InfoProviders/StartingFlask"), - import("./InfoProviders/StartingSpell"), - import("./InfoProviders/Perk"), - import("./InfoProviders/Wand"), - import("./InfoProviders/WaterCave"), - import("./InfoProviders/Potion"), - import("./InfoProviders/PotionSecret"), - import("./InfoProviders/PotionRandomMaterial"), - import("./InfoProviders/PowderStash"), - import("./InfoProviders/ChestRandom"), - import("./InfoProviders/PacifistChest"), - import("./InfoProviders/Shop"), - import("./InfoProviders/ExcavationsiteCubeChamber"), - import("./InfoProviders/SnowcaveSecretChamber"), - import("./InfoProviders/SnowcastleSecretChamber"), - ]); - - const [ - alchemy, - alwaysCast, - biome, - biomeModifier, - fungalShift, - lottery, - map, - material, - perk, - weather, - spells, - startingBombSpell, - startingFlask, - startingSpell, - statelessPerk, - wand, - waterCave, - potion, - potionSecret, - potionRandomMaterial, - powderStash, - chestRandom, - pacifistChest, - shop, - excavationSiteCubeChamber, - snowcaveSecretChamber, - snowcastleSecretChamber, - ] = imports; - - const providers: any = {}; - - if (alchemy && "value" in alchemy) providers.alchemy = new alchemy.value.AlchemyInfoProvider(this.randoms); - if (alwaysCast && "value" in alwaysCast) - providers.alwaysCast = new alwaysCast.value.AlwaysCastInfoProvider(this.randoms); - if (biome && "value" in biome) providers.biome = new biome.value.BiomeInfoProvider(this.randoms); - if (biomeModifier && "value" in biomeModifier) - providers.biomeModifier = new biomeModifier.value.BiomeModifierInfoProvider(this.randoms); - if (fungalShift && "value" in fungalShift) - providers.fungalShift = new fungalShift.value.FungalInfoProvider(this.randoms); - if (lottery && "value" in lottery) providers.lottery = new lottery.value.LotteryInfoProvider(this.randoms); - if (map && "value" in map) providers.map = new map.value.MapInfoProvider(this.randoms); - if (material && "value" in material) providers.material = new material.value.MaterialInfoProvider(this.i18n); - if (perk && "value" in perk) providers.perk = new perk.value.PerkInfoProvider(this.randoms); - if (weather && "value" in weather) providers.weather = new weather.value.WeatherInfoProvider(this.randoms); - if (spells && "value" in spells) providers.spells = new spells.value.SpellInfoProvider(this.randoms); - if (startingBombSpell && "value" in startingBombSpell) - providers.startingBombSpell = new startingBombSpell.value.StartingBombSpellInfoProvider(this.randoms); - if (startingFlask && "value" in startingFlask) - providers.startingFlask = new startingFlask.value.StartingFlaskInfoProvider(this.randoms); - if (startingSpell && "value" in startingSpell) - providers.startingSpell = new startingSpell.value.StartingSpellInfoProvider(this.randoms); - if (statelessPerk && "value" in statelessPerk) - providers.statelessPerk = new statelessPerk.value.PerkInfoProvider(this.randoms); - if (wand && "value" in wand) providers.wand = new wand.value.WandInfoProvider(this.randoms); - if (waterCave && "value" in waterCave) - providers.waterCave = new waterCave.value.WaterCaveInfoProvider(this.randoms); - if (potion && "value" in potion) providers.potion = new potion.value.PotionInfoProvider(this.randoms); - if (potionSecret && "value" in potionSecret) - providers.potionSecret = new potionSecret.value.PotionSecretInfoProvider(this.randoms); - if (potionRandomMaterial && "value" in potionRandomMaterial) - providers.potionRandomMaterial = new potionRandomMaterial.value.PotionRandomMaterialInfoProvider(this.randoms); - if (powderStash && "value" in powderStash) - providers.powderStash = new powderStash.value.PowderStashInfoProvider(this.randoms); - if (chestRandom && "value" in chestRandom) - providers.chestRandom = new chestRandom.value.ChestRandomProvider( - this.randoms, - this.unlockedSpells, - providers.spells, - ); - if (pacifistChest && "value" in pacifistChest) - providers.pacifistChest = new pacifistChest.value.PacifistChestProvider(this.randoms, providers.chestRandom); - if (shop && "value" in shop) - providers.shop = new shop.value.ShopInfoProvider(this.randoms, providers.wand, providers.spells); - if (excavationSiteCubeChamber && "value" in excavationSiteCubeChamber) - providers.excavationSiteCubeChamber = new excavationSiteCubeChamber.value.ExcavationsiteCubeChamberInfoProvider( - this.randoms, - providers.map, - providers.wand, - ); - if (snowcaveSecretChamber && "value" in snowcaveSecretChamber) - providers.snowcaveSecretChamber = new snowcaveSecretChamber.value.SnowcaveSecretChamberProvider( - this.randoms, - providers.map, - providers.wand, - ); - if (snowcastleSecretChamber && "value" in snowcastleSecretChamber) - providers.snowcastleSecretChamber = new snowcastleSecretChamber.value.SnowcastleSecretChamberProvider( - this.randoms, - providers.map, - ); + const imports = await Promise.allSettled( + [ + import("./InfoProviders/Alchemy"), + import("./InfoProviders/AlwaysCast"), + import("./InfoProviders/Biome"), + import("./InfoProviders/BiomeModifier"), + import("./InfoProviders/FungalShift"), + import("./InfoProviders/Lottery"), + import("./InfoProviders/Map"), + import("./InfoProviders/Material"), + import("./InfoProviders/Perk"), + import("./InfoProviders/Weather"), + import("./InfoProviders/Spell"), + import("./InfoProviders/StartingBomb"), + import("./InfoProviders/StartingFlask"), + import("./InfoProviders/StartingSpell"), + import("./InfoProviders/Perk"), + import("./InfoProviders/Wand"), + import("./InfoProviders/WaterCave"), + import("./InfoProviders/Potion"), + import("./InfoProviders/PotionSecret"), + import("./InfoProviders/PotionRandomMaterial"), + import("./InfoProviders/PowderStash"), + import("./InfoProviders/ChestRandom"), + import("./InfoProviders/PacifistChest"), + import("./InfoProviders/ExcavationsiteCubeChamber"), + import("./InfoProviders/SnowcaveSecretChamber"), + import("./InfoProviders/SnowcastleSecretChamber"), + import("./InfoProviders/Shop"), + ].map(p => + p.catch(e => { + console.error(e); + return null; + }), + ), + ); + + const providers: Partial = {}; + const queue: [string, any][] = []; + + const getDependencies = (providerName: string): { deps: string[]; getArgs: () => any[] } => { + const baseArgs = [this.randoms]; + switch (providerName) { + case "ChestRandom": + return { + deps: ["spell"], + getArgs: () => [...baseArgs, this.unlockedSpells, providers.spell], + }; + case "PacifistChest": + return { + deps: ["chestRandom"], + getArgs: () => [...baseArgs, providers.chestRandom], + }; + case "Shop": + return { + deps: ["wand", "spell"], + getArgs: () => [...baseArgs, providers.wand, providers.spell], + }; + case "ExcavationsiteCubeChamber": + return { + deps: ["map", "wand"], + getArgs: () => [...baseArgs, providers.map, providers.wand], + }; + case "SnowcaveSecretChamber": + return { + deps: ["map", "wand"], + getArgs: () => [...baseArgs, providers.map, providers.wand], + }; + case "SnowcastleSecretChamber": + return { + deps: ["map"], + getArgs: () => [...baseArgs, providers.map], + }; + case "Material": + return { + deps: [], + getArgs: () => [this.i18n], + }; + default: + return { + deps: [], + getArgs: () => baseArgs, + }; + } + }; + + const createProvider = (providerName: string, ProviderClass: any) => { + const { deps, getArgs } = getDependencies(providerName); + if (deps.every(dep => providers[dep] !== undefined)) { + const args = getArgs(); + if (args.every(arg => arg !== undefined)) { + providers[camelCaseName(providerName)] = new ProviderClass(...args); + return true; + } + } + return false; + }; + + imports.forEach(result => { + if (result.status === "fulfilled" && result.value && typeof result.value === "object") { + const ProviderClass = result.value.default; + if (typeof ProviderClass === "function") { + const providerName = ProviderClass.name.replace(/InfoProvider$/, ""); + queue.push([providerName, ProviderClass]); + } + } + }); + + let iter = 0; + + while (queue.length > 0) { + if (iter++ > 100) { + console.error("Too many iterations", queue); + break; + } + const [providerName, ProviderClass] = queue.shift()!; + if (!createProvider(providerName, ProviderClass)) { + queue.push([providerName, ProviderClass]); + } + } + + console.log(providers); return providers as IProviders; } @@ -285,7 +286,7 @@ export class GameInfoProvider extends EventTarget { this.config.perkWorldOffset, this.config.perkRerolls, ), - statelessPerks: this.providers.statelessPerk.provideStateless( + statelessPerks: this.providers.perk.provideStateless( this.config.perkStacks[this.config.perkStacks.length - 1], true, ), diff --git a/src/services/seedSolverHandler.ts b/src/services/seedSolverHandler.ts index d42909c7..83c4fe41 100755 --- a/src/services/seedSolverHandler.ts +++ b/src/services/seedSolverHandler.ts @@ -116,7 +116,7 @@ export class SeedSolver { }; }); - const res: number[] = []; + let res: number[] = []; let checked = 0; @@ -128,7 +128,7 @@ export class SeedSolver { const { subFrom, subTo } = config; checked += subTo - subFrom; const r = await worker.searchChunk(subFrom, subTo, rules); - res.push(...r); + res = res.concat(r); await new Promise(res => setTimeout(res, 0)); } }),