diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c36c026fc..3da7163dd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -390,7 +390,7 @@ jobs: - name: Cache CMake Configuration uses: actions/cache@v4 env: - cache-name: ${{ runner.os }}-sdl-cache-cmake-configuration + cache-name: ${{ runner.os }}-sdl-gcc-cache-cmake-configuration with: path: | ${{github.workspace}}/build @@ -401,7 +401,7 @@ jobs: - name: Cache CMake Build uses: hendrikmuhs/ccache-action@v1.2.14 env: - cache-name: ${{ runner.os }}-sdl-cache-cmake-build + cache-name: ${{ runner.os }}-sdl-gcc-cache-cmake-build with: append-timestamp: false key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }} @@ -426,7 +426,7 @@ jobs: - name: Cache CMake Configuration uses: actions/cache@v4 env: - cache-name: ${{ runner.os }}-qt-cache-cmake-configuration + cache-name: ${{ runner.os }}-qt-gcc-cache-cmake-configuration with: path: | ${{github.workspace}}/build @@ -437,7 +437,7 @@ jobs: - name: Cache CMake Build uses: hendrikmuhs/ccache-action@v1.2.14 env: - cache-name: ${{ runner.os }}-qt-cache-cmake-build + cache-name: ${{ runner.os }}-qt-gcc-cache-cmake-build with: append-timestamp: false key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ec04dad5..30cb033ed 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -250,10 +250,14 @@ set(KERNEL_LIB src/core/libraries/kernel/sync/mutex.cpp src/core/libraries/kernel/time.h src/core/libraries/kernel/orbis_error.h src/core/libraries/kernel/posix_error.h + src/core/libraries/kernel/aio.cpp + src/core/libraries/kernel/aio.h ) set(NETWORK_LIBS src/core/libraries/network/http.cpp src/core/libraries/network/http.h + src/core/libraries/network/http2.cpp + src/core/libraries/network/http2.h src/core/libraries/network/net.cpp src/core/libraries/network/netctl.cpp src/core/libraries/network/netctl.h @@ -263,6 +267,8 @@ set(NETWORK_LIBS src/core/libraries/network/http.cpp src/core/libraries/network/net.h src/core/libraries/network/ssl.cpp src/core/libraries/network/ssl.h + src/core/libraries/network/ssl2.cpp + src/core/libraries/network/ssl2.h ) set(AVPLAYER_LIB src/core/libraries/avplayer/avplayer_common.cpp @@ -415,7 +421,9 @@ set(VDEC_LIB src/core/libraries/videodec/videodec2_impl.cpp src/core/libraries/videodec/videodec_impl.h ) -set(NP_LIBS src/core/libraries/np_manager/np_manager.cpp +set(NP_LIBS src/core/libraries/np_common/np_common.cpp + src/core/libraries/np_common/np_common.h + src/core/libraries/np_manager/np_manager.cpp src/core/libraries/np_manager/np_manager.h src/core/libraries/np_score/np_score.cpp src/core/libraries/np_score/np_score.h @@ -424,6 +432,8 @@ set(NP_LIBS src/core/libraries/np_manager/np_manager.cpp src/core/libraries/np_trophy/trophy_ui.cpp src/core/libraries/np_trophy/trophy_ui.h src/core/libraries/np_trophy/np_trophy_error.h + src/core/libraries/np_web_api/np_web_api.cpp + src/core/libraries/np_web_api/np_web_api.h ) set(MISC_LIBS src/core/libraries/screenshot/screenshot.cpp diff --git a/dist/net.shadps4.shadPS4.metainfo.xml b/dist/net.shadps4.shadPS4.metainfo.xml index 384cf75e8..d8f51baac 100644 --- a/dist/net.shadps4.shadPS4.metainfo.xml +++ b/dist/net.shadps4.shadPS4.metainfo.xml @@ -26,7 +26,7 @@ https://cdn.jsdelivr.net/gh/shadps4-emu/shadps4@main/documents/Screenshots/3.png - Yakuza Kiwami + Yakuza 0 https://cdn.jsdelivr.net/gh/shadps4-emu/shadps4@main/documents/Screenshots/4.png diff --git a/externals/sdl3 b/externals/sdl3 index 3a1d76d29..22422f774 160000 --- a/externals/sdl3 +++ b/externals/sdl3 @@ -1 +1 @@ -Subproject commit 3a1d76d298db023f6cf37fb08ee766f20a4e12ab +Subproject commit 22422f7748d5128135995ed34c8f8012861c7332 diff --git a/externals/sirit b/externals/sirit index 1e74f4ef8..26ad5a9d0 160000 --- a/externals/sirit +++ b/externals/sirit @@ -1 +1 @@ -Subproject commit 1e74f4ef8d2a0e3221a4de51977663f342b53c35 +Subproject commit 26ad5a9d0fe13260b0d7d6c64419d01a196b2e32 diff --git a/src/common/adaptive_mutex.h b/src/common/adaptive_mutex.h new file mode 100644 index 000000000..f174f5996 --- /dev/null +++ b/src/common/adaptive_mutex.h @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#ifdef __linux__ +#include +#endif + +namespace Common { + +#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP +class AdaptiveMutex { +public: + void lock() { + pthread_mutex_lock(&mutex); + } + void unlock() { + pthread_mutex_unlock(&mutex); + } + +private: + pthread_mutex_t mutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP; +}; +#endif // PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + +} // namespace Common diff --git a/src/common/config.cpp b/src/common/config.cpp index e2015b549..23924bf64 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -45,6 +45,8 @@ static std::string logFilter; static std::string logType = "async"; static std::string userName = "shadPS4"; static std::string updateChannel; +static u16 deadZoneLeft = 2.0; +static u16 deadZoneRight = 2.0; static std::string backButtonBehavior = "left"; static std::string widgetStyle = "Fusion"; static bool useSpecialPad = false; @@ -62,9 +64,10 @@ static u32 vblankDivider = 1; static bool vkValidation = false; static bool vkValidationSync = false; static bool vkValidationGpu = false; -static bool rdocEnable = false; -static bool vkMarkers = false; static bool vkCrashDiagnostic = false; +static bool vkHostMarkers = false; +static bool vkGuestMarkers = false; +static bool rdocEnable = false; static s16 cursorState = HideCursorState::Idle; static int cursorHideTimeout = 5; // 5 seconds (default) static bool separateupdatefolder = false; @@ -73,6 +76,7 @@ static bool checkCompatibilityOnStartup = false; static std::string trophyKey; // Gui +static bool load_game_size = true; std::vector settings_install_dirs = {}; std::filesystem::path settings_addon_install_dir = {}; u32 main_window_geometry_x = 400; @@ -103,6 +107,14 @@ void setTrophyKey(std::string key) { trophyKey = key; } +bool GetLoadGameSizeEnabled() { + return load_game_size; +} + +void setLoadGameSizeEnabled(bool enable) { + load_game_size = enable; +} + bool isNeoModeConsole() { return isNeo; } @@ -131,6 +143,14 @@ bool getEnableDiscordRPC() { return enableDiscordRPC; } +u16 leftDeadZone() { + return deadZoneLeft; +} + +u16 rightDeadZone() { + return deadZoneRight; +} + s16 getCursorState() { return cursorState; } @@ -223,10 +243,6 @@ bool isRdocEnabled() { return rdocEnable; } -bool isMarkersEnabled() { - return vkMarkers; -} - u32 vblankDiv() { return vblankDivider; } @@ -243,14 +259,20 @@ bool vkValidationGpuEnabled() { return vkValidationGpu; } -bool vkMarkersEnabled() { - return vkMarkers || vkCrashDiagnostic; // Crash diagnostic forces markers on -} - bool vkCrashDiagnosticEnabled() { return vkCrashDiagnostic; } +bool vkHostMarkersEnabled() { + // Forced on when crash diagnostic enabled. + return vkHostMarkers || vkCrashDiagnostic; +} + +bool vkGuestMarkersEnabled() { + // Forced on when crash diagnostic enabled. + return vkGuestMarkers || vkCrashDiagnostic; +} + bool getSeparateUpdateEnabled() { return separateupdatefolder; } @@ -617,6 +639,8 @@ void load(const std::filesystem::path& path) { if (data.contains("Input")) { const toml::value& input = data.at("Input"); + deadZoneLeft = toml::find_or(input, "deadZoneLeft", 2.0); + deadZoneRight = toml::find_or(input, "deadZoneRight", 2.0); cursorState = toml::find_or(input, "cursorState", HideCursorState::Idle); cursorHideTimeout = toml::find_or(input, "cursorHideTimeout", 5); backButtonBehavior = toml::find_or(input, "backButtonBehavior", "left"); @@ -644,9 +668,10 @@ void load(const std::filesystem::path& path) { vkValidation = toml::find_or(vk, "validation", false); vkValidationSync = toml::find_or(vk, "validation_sync", false); vkValidationGpu = toml::find_or(vk, "validation_gpu", true); - rdocEnable = toml::find_or(vk, "rdocEnable", false); - vkMarkers = toml::find_or(vk, "rdocMarkersEnable", false); vkCrashDiagnostic = toml::find_or(vk, "crashDiagnostic", false); + vkHostMarkers = toml::find_or(vk, "hostMarkers", false); + vkGuestMarkers = toml::find_or(vk, "guestMarkers", false); + rdocEnable = toml::find_or(vk, "rdocEnable", false); } if (data.contains("Debug")) { @@ -659,6 +684,7 @@ void load(const std::filesystem::path& path) { if (data.contains("GUI")) { const toml::value& gui = data.at("GUI"); + load_game_size = toml::find_or(gui, "loadGameSizeEnabled", true); m_icon_size = toml::find_or(gui, "iconSize", 0); m_icon_size_grid = toml::find_or(gui, "iconSizeGrid", 0); m_slider_pos = toml::find_or(gui, "sliderPos", 0); @@ -735,6 +761,8 @@ void save(const std::filesystem::path& path) { data["General"]["separateUpdateEnabled"] = separateupdatefolder; data["General"]["compatibilityEnabled"] = compatibilityData; data["General"]["checkCompatibilityOnStartup"] = checkCompatibilityOnStartup; + data["Input"]["deadZoneLeft"] = deadZoneLeft; + data["Input"]["deadZoneRight"] = deadZoneRight; data["Input"]["cursorState"] = cursorState; data["Input"]["cursorHideTimeout"] = cursorHideTimeout; data["Input"]["backButtonBehavior"] = backButtonBehavior; @@ -752,9 +780,10 @@ void save(const std::filesystem::path& path) { data["Vulkan"]["validation"] = vkValidation; data["Vulkan"]["validation_sync"] = vkValidationSync; data["Vulkan"]["validation_gpu"] = vkValidationGpu; - data["Vulkan"]["rdocEnable"] = rdocEnable; - data["Vulkan"]["rdocMarkersEnable"] = vkMarkers; data["Vulkan"]["crashDiagnostic"] = vkCrashDiagnostic; + data["Vulkan"]["hostMarkers"] = vkHostMarkers; + data["Vulkan"]["guestMarkers"] = vkGuestMarkers; + data["Vulkan"]["rdocEnable"] = rdocEnable; data["Debug"]["DebugDump"] = isDebugDump; data["Debug"]["CollectShader"] = isShaderDebug; @@ -765,6 +794,7 @@ void save(const std::filesystem::path& path) { install_dirs.emplace_back(std::string{fmt::UTF(dirString.u8string()).data}); } data["GUI"]["installDirs"] = install_dirs; + data["GUI"]["loadGameSizeEnabled"] = load_game_size; data["GUI"]["addonInstallDir"] = std::string{fmt::UTF(settings_addon_install_dir.u8string()).data}; @@ -853,9 +883,10 @@ void setDefaultValues() { vkValidation = false; vkValidationSync = false; vkValidationGpu = false; - rdocEnable = false; - vkMarkers = false; vkCrashDiagnostic = false; + vkHostMarkers = false; + vkGuestMarkers = false; + rdocEnable = false; emulator_language = "en"; m_language = 1; gpuId = -1; diff --git a/src/common/config.h b/src/common/config.h index 3178c5d39..6f4a4a313 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -17,6 +17,8 @@ void saveMainWindow(const std::filesystem::path& path); std::string getTrophyKey(); void setTrophyKey(std::string key); +bool GetLoadGameSizeEnabled(); +void setLoadGameSizeEnabled(bool enable); bool getIsFullscreen(); std::string getFullscreenMode(); bool isNeoModeConsole(); @@ -34,6 +36,8 @@ std::string getWidgetStyle(); std::string getUserName(); std::string getUpdateChannel(); +u16 leftDeadZone(); +u16 rightDeadZone(); s16 getCursorState(); int getCursorHideTimeout(); std::string getBackButtonBehavior(); @@ -100,8 +104,9 @@ void setRdocEnabled(bool enable); bool vkValidationEnabled(); bool vkValidationSyncEnabled(); bool vkValidationGpuEnabled(); -bool vkMarkersEnabled(); bool vkCrashDiagnosticEnabled(); +bool vkHostMarkersEnabled(); +bool vkGuestMarkersEnabled(); // Gui void setMainWindowGeometry(u32 x, u32 y, u32 w, u32 h); diff --git a/src/common/logging/filter.cpp b/src/common/logging/filter.cpp index 5ee2dce73..168d03948 100644 --- a/src/common/logging/filter.cpp +++ b/src/common/logging/filter.cpp @@ -95,12 +95,16 @@ bool ParseFilterRule(Filter& instance, Iterator begin, Iterator end) { SUB(Lib, SaveData) \ SUB(Lib, SaveDataDialog) \ SUB(Lib, Http) \ + SUB(Lib, Http2) \ SUB(Lib, Ssl) \ + SUB(Lib, Ssl2) \ SUB(Lib, SysModule) \ SUB(Lib, Move) \ + SUB(Lib, NpCommon) \ SUB(Lib, NpManager) \ SUB(Lib, NpScore) \ SUB(Lib, NpTrophy) \ + SUB(Lib, NpWebApi) \ SUB(Lib, Screenshot) \ SUB(Lib, LibCInternal) \ SUB(Lib, AppContent) \ diff --git a/src/common/logging/types.h b/src/common/logging/types.h index 6829e2d1b..4ca88e1be 100644 --- a/src/common/logging/types.h +++ b/src/common/logging/types.h @@ -63,11 +63,15 @@ enum class Class : u8 { Lib_SaveData, ///< The LibSceSaveData implementation. Lib_SaveDataDialog, ///< The LibSceSaveDataDialog implementation. Lib_Ssl, ///< The LibSceSsl implementation. + Lib_Ssl2, ///< The LibSceSsl2 implementation. Lib_Http, ///< The LibSceHttp implementation. + Lib_Http2, ///< The LibSceHttp2 implementation. Lib_SysModule, ///< The LibSceSysModule implementation + Lib_NpCommon, ///< The LibSceNpCommon implementation Lib_NpManager, ///< The LibSceNpManager implementation Lib_NpScore, ///< The LibSceNpScore implementation Lib_NpTrophy, ///< The LibSceNpTrophy implementation + Lib_NpWebApi, ///< The LibSceWebApi implementation Lib_Screenshot, ///< The LibSceScreenshot implementation Lib_LibCInternal, ///< The LibCInternal implementation. Lib_AppContent, ///< The LibSceAppContent implementation. diff --git a/src/common/thread.h b/src/common/thread.h index 175ba9445..92cc0c59d 100644 --- a/src/common/thread.h +++ b/src/common/thread.h @@ -37,6 +37,10 @@ public: void Start(); void End(); + + std::chrono::nanoseconds GetTotalWait() const { + return total_wait; + } }; } // namespace Common diff --git a/src/core/debug_state.h b/src/core/debug_state.h index 6a8e15baa..a9e6f48b7 100644 --- a/src/core/debug_state.h +++ b/src/core/debug_state.h @@ -131,6 +131,8 @@ class DebugStateImpl { friend class Core::Devtools::Widget::FrameGraph; friend class Core::Devtools::Widget::ShaderList; + bool showing_debug_menu_bar = false; + std::queue debug_message_popup; std::mutex guest_threads_mutex{}; @@ -153,6 +155,9 @@ class DebugStateImpl { std::vector shader_dump_list{}; public: + float Framerate = 1.0f / 60.0f; + float FrameDeltaTime; + void ShowDebugMessage(std::string message) { if (message.empty()) { return; @@ -160,6 +165,10 @@ public: debug_message_popup.push(std::move(message)); } + bool& IsShowingDebugMenuBar() { + return showing_debug_menu_bar; + } + void AddCurrentThreadToGuestList(); void RemoveCurrentThreadFromGuestList(); diff --git a/src/core/devtools/layer.cpp b/src/core/devtools/layer.cpp index 776f3377d..c652849e7 100644 --- a/src/core/devtools/layer.cpp +++ b/src/core/devtools/layer.cpp @@ -28,7 +28,6 @@ static bool show_simple_fps = false; static bool visibility_toggled = false; static float fps_scale = 1.0f; -static bool show_advanced_debug = false; static int dump_frame_count = 1; static Widget::FrameGraph frame_graph; @@ -253,8 +252,8 @@ void L::DrawAdvanced() { } void L::DrawSimple() { - const auto io = GetIO(); - Text("%.1f FPS (%.2f ms)", io.Framerate, 1000.0f / io.Framerate); + const float frameRate = DebugState.Framerate; + Text("%d FPS (%.1f ms)", static_cast(std::round(frameRate)), 1000.0f / frameRate); } static void LoadSettings(const char* line) { @@ -265,7 +264,7 @@ static void LoadSettings(const char* line) { return; } if (sscanf(line, "show_advanced_debug=%d", &i) == 1) { - show_advanced_debug = i != 0; + DebugState.IsShowingDebugMenuBar() = i != 0; return; } if (sscanf(line, "show_frame_graph=%d", &i) == 1) { @@ -310,7 +309,7 @@ void L::SetupSettings() { handler.WriteAllFn = [](ImGuiContext*, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf) { buf->appendf("[%s][Data]\n", handler->TypeName); buf->appendf("fps_scale=%f\n", fps_scale); - buf->appendf("show_advanced_debug=%d\n", show_advanced_debug); + buf->appendf("show_advanced_debug=%d\n", DebugState.IsShowingDebugMenuBar()); buf->appendf("show_frame_graph=%d\n", frame_graph.is_open); buf->appendf("dump_frame_count=%d\n", dump_frame_count); buf->append("\n"); @@ -336,12 +335,12 @@ void L::Draw() { if (!DebugState.IsGuestThreadsPaused()) { const auto fn = DebugState.flip_frame_count.load(); - frame_graph.AddFrame(fn, io.DeltaTime); + frame_graph.AddFrame(fn, DebugState.FrameDeltaTime); } if (IsKeyPressed(ImGuiKey_F10, false)) { if (io.KeyCtrl) { - show_advanced_debug = !show_advanced_debug; + DebugState.IsShowingDebugMenuBar() ^= true; } else { show_simple_fps = !show_simple_fps; } @@ -376,7 +375,7 @@ void L::Draw() { End(); } - if (show_advanced_debug) { + if (DebugState.IsShowingDebugMenuBar()) { PushFont(io.Fonts->Fonts[IMGUI_FONT_MONO]); PushID("DevtoolsLayer"); DrawAdvanced(); diff --git a/src/core/devtools/widget/frame_graph.cpp b/src/core/devtools/widget/frame_graph.cpp index 0e170db38..d93de571a 100644 --- a/src/core/devtools/widget/frame_graph.cpp +++ b/src/core/devtools/widget/frame_graph.cpp @@ -83,15 +83,13 @@ void FrameGraph::Draw() { auto isSystemPaused = DebugState.IsGuestThreadsPaused(); - static float deltaTime; - static float frameRate; - if (!isSystemPaused) { - deltaTime = io.DeltaTime * 1000.0f; + deltaTime = DebugState.FrameDeltaTime * 1000.0f; frameRate = 1000.0f / deltaTime; } Text("Frame time: %.3f ms (%.1f FPS)", deltaTime, frameRate); + Text("Presenter time: %.3f ms (%.1f FPS)", io.DeltaTime * 1000.0f, 1.0f / io.DeltaTime); Text("Flip frame: %d Gnm submit frame: %d", DebugState.flip_frame_count.load(), DebugState.gnm_frame_count.load()); diff --git a/src/core/devtools/widget/frame_graph.h b/src/core/devtools/widget/frame_graph.h index 40a68ffa7..aef3c0747 100644 --- a/src/core/devtools/widget/frame_graph.h +++ b/src/core/devtools/widget/frame_graph.h @@ -16,6 +16,9 @@ class FrameGraph { std::array frame_list{}; + float deltaTime{}; + float frameRate{}; + void DrawFrameGraph(); public: diff --git a/src/core/devtools/widget/reg_popup.cpp b/src/core/devtools/widget/reg_popup.cpp index fae620901..7bb38df24 100644 --- a/src/core/devtools/widget/reg_popup.cpp +++ b/src/core/devtools/widget/reg_popup.cpp @@ -105,7 +105,8 @@ void RegPopup::DrawDepthBuffer(const DepthBuffer& depth_data) { "DEPTH_SLICE.TILE_MAX", depth_buffer.depth_slice.tile_max, "Pitch()", depth_buffer.Pitch(), "Height()", depth_buffer.Height(), - "Address()", depth_buffer.Address(), + "DepthAddress()", depth_buffer.DepthAddress(), + "StencilAddress()", depth_buffer.StencilAddress(), "NumSamples()", depth_buffer.NumSamples(), "NumBits()", depth_buffer.NumBits(), "GetDepthSliceSize()", depth_buffer.GetDepthSliceSize() diff --git a/src/core/devtools/widget/reg_view.cpp b/src/core/devtools/widget/reg_view.cpp index a1b7937df..fa3c5e3e6 100644 --- a/src/core/devtools/widget/reg_view.cpp +++ b/src/core/devtools/widget/reg_view.cpp @@ -155,7 +155,7 @@ void RegView::DrawGraphicsRegs() { TableNextColumn(); TextUnformatted("Depth buffer"); TableNextColumn(); - if (regs.depth_buffer.Address() == 0 || !regs.depth_control.depth_enable) { + if (regs.depth_buffer.DepthAddress() == 0 || !regs.depth_control.depth_enable) { TextUnformatted("N/A"); } else { const char* text = last_selected_cb == depth_id && default_reg_popup.open ? "x" : "->"; @@ -241,7 +241,7 @@ void RegView::SetData(DebugStateType::RegDump _data, const std::string& base_tit default_reg_popup.open = false; if (last_selected_cb == depth_id) { const auto& has_depth = - regs.depth_buffer.Address() != 0 && regs.depth_control.depth_enable; + regs.depth_buffer.DepthAddress() != 0 && regs.depth_control.depth_enable; if (has_depth) { default_reg_popup.SetData(title, regs.depth_buffer, regs.depth_control); default_reg_popup.open = true; diff --git a/src/core/libraries/kernel/aio.cpp b/src/core/libraries/kernel/aio.cpp new file mode 100644 index 000000000..e017010cb --- /dev/null +++ b/src/core/libraries/kernel/aio.cpp @@ -0,0 +1,339 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include + +#include "aio.h" +#include "common/assert.h" +#include "common/debug.h" +#include "common/logging/log.h" +#include "core/libraries/kernel/equeue.h" +#include "core/libraries/kernel/orbis_error.h" +#include "core/libraries/libs.h" +#include "file_system.h" + +namespace Libraries::Kernel { + +#define MAX_QUEUE 512 + +static s32* id_state; +static s32 id_index; + +s32 sceKernelAioInitializeImpl(void* p, s32 size) { + + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioDeleteRequest(OrbisKernelAioSubmitId id, s32* ret) { + if (ret == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + id_state[id] = ORBIS_KERNEL_AIO_STATE_ABORTED; + *ret = 0; + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioDeleteRequests(OrbisKernelAioSubmitId id[], s32 num, s32 ret[]) { + if (ret == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + for (s32 i = 0; i < num; i++) { + id_state[id[i]] = ORBIS_KERNEL_AIO_STATE_ABORTED; + ret[i] = 0; + } + + return 0; +} +s32 PS4_SYSV_ABI sceKernelAioPollRequest(OrbisKernelAioSubmitId id, s32* state) { + if (state == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + *state = id_state[id]; + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioPollRequests(OrbisKernelAioSubmitId id[], s32 num, s32 state[]) { + if (state == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + for (s32 i = 0; i < num; i++) { + state[i] = id_state[id[i]]; + } + + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioCancelRequest(OrbisKernelAioSubmitId id, s32* state) { + if (state == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + if (id) { + id_state[id] = ORBIS_KERNEL_AIO_STATE_ABORTED; + *state = ORBIS_KERNEL_AIO_STATE_ABORTED; + } else { + *state = ORBIS_KERNEL_AIO_STATE_PROCESSING; + } + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioCancelRequests(OrbisKernelAioSubmitId id[], s32 num, s32 state[]) { + if (state == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + for (s32 i = 0; i < num; i++) { + if (id[i]) { + id_state[id[i]] = ORBIS_KERNEL_AIO_STATE_ABORTED; + state[i] = ORBIS_KERNEL_AIO_STATE_ABORTED; + } else { + state[i] = ORBIS_KERNEL_AIO_STATE_PROCESSING; + } + } + + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioWaitRequest(OrbisKernelAioSubmitId id, s32* state, u32* usec) { + if (state == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + u32 timer = 0; + + s32 timeout = 0; + + while (id_state[id] == ORBIS_KERNEL_AIO_STATE_PROCESSING) { + sceKernelUsleep(10); + + timer += 10; + if (*usec) { + if (timer > *usec) { + timeout = 1; + break; + } + } + } + + *state = id_state[id]; + + if (timeout) + return ORBIS_KERNEL_ERROR_ETIMEDOUT; + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioWaitRequests(OrbisKernelAioSubmitId id[], s32 num, s32 state[], + u32 mode, u32* usec) { + if (state == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + u32 timer = 0; + s32 timeout = 0; + s32 completion = 0; + + for (s32 i = 0; i < num; i++) { + if (!completion && !timeout) { + while (id_state[id[i]] == ORBIS_KERNEL_AIO_STATE_PROCESSING) { + sceKernelUsleep(10); + timer += 10; + + if (*usec) { + if (timer > *usec) { + timeout = 1; + break; + } + } + } + } + + if (mode == 0x02) { + if (id_state[id[i]] == ORBIS_KERNEL_AIO_STATE_COMPLETED) + completion = 1; + } + + state[i] = id_state[id[i]]; + } + + if (timeout) + return ORBIS_KERNEL_ERROR_ETIMEDOUT; + + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioSubmitReadCommands(OrbisKernelAioRWRequest req[], s32 size, s32 prio, + OrbisKernelAioSubmitId* id) { + if (req == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + if (id == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_PROCESSING; + + for (s32 i = 0; i < size; i++) { + + s64 ret = sceKernelPread(req[i].fd, req[i].buf, req[i].nbyte, req[i].offset); + + if (ret < 0) { + req[i].result->state = ORBIS_KERNEL_AIO_STATE_ABORTED; + req[i].result->returnValue = ret; + + } else { + req[i].result->state = ORBIS_KERNEL_AIO_STATE_COMPLETED; + req[i].result->returnValue = ret; + } + } + + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_COMPLETED; + + *id = id_index; + + id_index = (id_index + 1) % MAX_QUEUE; + + if (!id_index) + id_index++; + + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioSubmitReadCommandsMultiple(OrbisKernelAioRWRequest req[], s32 size, + s32 prio, OrbisKernelAioSubmitId id[]) { + if (req == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + if (id == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + for (s32 i = 0; i < size; i++) { + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_PROCESSING; + + s64 ret = sceKernelPread(req[i].fd, req[i].buf, req[i].nbyte, req[i].offset); + + if (ret < 0) { + req[i].result->state = ORBIS_KERNEL_AIO_STATE_ABORTED; + req[i].result->returnValue = ret; + + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_ABORTED; + + } else { + req[i].result->state = ORBIS_KERNEL_AIO_STATE_COMPLETED; + req[i].result->returnValue = ret; + + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_COMPLETED; + } + + id[i] = id_index; + + id_index = (id_index + 1) % MAX_QUEUE; + + if (!id_index) + id_index++; + } + + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioSubmitWriteCommands(OrbisKernelAioRWRequest req[], s32 size, s32 prio, + OrbisKernelAioSubmitId* id) { + if (req == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + if (id == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + for (s32 i = 0; i < size; i++) { + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_PROCESSING; + + s64 ret = sceKernelPwrite(req[i].fd, req[i].buf, req[i].nbyte, req[i].offset); + + if (ret < 0) { + req[i].result->state = ORBIS_KERNEL_AIO_STATE_ABORTED; + req[i].result->returnValue = ret; + + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_ABORTED; + + } else { + req[i].result->state = ORBIS_KERNEL_AIO_STATE_COMPLETED; + req[i].result->returnValue = ret; + + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_COMPLETED; + } + } + + *id = id_index; + + id_index = (id_index + 1) % MAX_QUEUE; + + // skip id_index equals 0 , because sceKernelAioCancelRequest will submit id + // equal to 0 + if (!id_index) + id_index++; + + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioSubmitWriteCommandsMultiple(OrbisKernelAioRWRequest req[], s32 size, + s32 prio, OrbisKernelAioSubmitId id[]) { + if (req == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + if (id == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + for (s32 i = 0; i < size; i++) { + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_PROCESSING; + s64 ret = sceKernelPwrite(req[i].fd, req[i].buf, req[i].nbyte, req[i].offset); + + if (ret < 0) { + req[i].result->state = ORBIS_KERNEL_AIO_STATE_ABORTED; + req[i].result->returnValue = ret; + + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_ABORTED; + + } else { + req[i].result->state = ORBIS_KERNEL_AIO_STATE_COMPLETED; + req[i].result->returnValue = ret; + id_state[id_index] = ORBIS_KERNEL_AIO_STATE_COMPLETED; + } + + id[i] = id_index; + id_index = (id_index + 1) % MAX_QUEUE; + + if (!id_index) + id_index++; + } + return 0; +} + +s32 PS4_SYSV_ABI sceKernelAioSetParam() { + LOG_ERROR(Kernel, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceKernelAioInitializeParam() { + LOG_ERROR(Kernel, "(STUBBED) called"); + return ORBIS_OK; +} + +void RegisterAio(Core::Loader::SymbolsResolver* sym) { + id_index = 1; + id_state = (int*)malloc(sizeof(int) * MAX_QUEUE); + memset(id_state, 0, sizeof(sizeof(int) * MAX_QUEUE)); + + LIB_FUNCTION("fR521KIGgb8", "libkernel", 1, "libkernel", 1, 1, sceKernelAioCancelRequest); + LIB_FUNCTION("3Lca1XBrQdY", "libkernel", 1, "libkernel", 1, 1, sceKernelAioCancelRequests); + LIB_FUNCTION("5TgME6AYty4", "libkernel", 1, "libkernel", 1, 1, sceKernelAioDeleteRequest); + LIB_FUNCTION("Ft3EtsZzAoY", "libkernel", 1, "libkernel", 1, 1, sceKernelAioDeleteRequests); + LIB_FUNCTION("vYU8P9Td2Zo", "libkernel", 1, "libkernel", 1, 1, sceKernelAioInitializeImpl); + LIB_FUNCTION("nu4a0-arQis", "libkernel", 1, "libkernel", 1, 1, sceKernelAioInitializeParam); + LIB_FUNCTION("2pOuoWoCxdk", "libkernel", 1, "libkernel", 1, 1, sceKernelAioPollRequest); + LIB_FUNCTION("o7O4z3jwKzo", "libkernel", 1, "libkernel", 1, 1, sceKernelAioPollRequests); + LIB_FUNCTION("9WK-vhNXimw", "libkernel", 1, "libkernel", 1, 1, sceKernelAioSetParam); + LIB_FUNCTION("HgX7+AORI58", "libkernel", 1, "libkernel", 1, 1, sceKernelAioSubmitReadCommands); + LIB_FUNCTION("lXT0m3P-vs4", "libkernel", 1, "libkernel", 1, 1, + sceKernelAioSubmitReadCommandsMultiple); + LIB_FUNCTION("XQ8C8y+de+E", "libkernel", 1, "libkernel", 1, 1, sceKernelAioSubmitWriteCommands); + LIB_FUNCTION("xT3Cpz0yh6Y", "libkernel", 1, "libkernel", 1, 1, + sceKernelAioSubmitWriteCommandsMultiple); + LIB_FUNCTION("KOF-oJbQVvc", "libkernel", 1, "libkernel", 1, 1, sceKernelAioWaitRequest); + LIB_FUNCTION("lgK+oIWkJyA", "libkernel", 1, "libkernel", 1, 1, sceKernelAioWaitRequests); +} + +} // namespace Libraries::Kernel \ No newline at end of file diff --git a/src/core/libraries/kernel/aio.h b/src/core/libraries/kernel/aio.h new file mode 100644 index 000000000..0ad21e938 --- /dev/null +++ b/src/core/libraries/kernel/aio.h @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include +#include +#include +#include +#include + +#include "common/types.h" + +namespace Core::Loader { +class SymbolsResolver; +} + +namespace Libraries::Kernel { + +enum AioState { + ORBIS_KERNEL_AIO_STATE_SUBMITTED = 1, + ORBIS_KERNEL_AIO_STATE_PROCESSING = 2, + ORBIS_KERNEL_AIO_STATE_COMPLETED = 3, + ORBIS_KERNEL_AIO_STATE_ABORTED = 4 +}; + +struct OrbisKernelAioResult { + s64 returnValue; + u32 state; +}; + +typedef s32 OrbisKernelAioSubmitId; + +struct OrbisKernelAioRWRequest { + s64 offset; + s64 nbyte; + void* buf; + OrbisKernelAioResult* result; + s32 fd; +}; + +void RegisterAio(Core::Loader::SymbolsResolver* sym); +} // namespace Libraries::Kernel \ No newline at end of file diff --git a/src/core/libraries/kernel/file_system.h b/src/core/libraries/kernel/file_system.h index 6443962ff..1838df2fe 100644 --- a/src/core/libraries/kernel/file_system.h +++ b/src/core/libraries/kernel/file_system.h @@ -67,7 +67,8 @@ constexpr int ORBIS_KERNEL_O_DIRECTORY = 0x00020000; s64 PS4_SYSV_ABI sceKernelWrite(int d, const void* buf, size_t nbytes); s64 PS4_SYSV_ABI sceKernelRead(int d, void* buf, size_t nbytes); - +s64 PS4_SYSV_ABI sceKernelPread(int d, void* buf, size_t nbytes, s64 offset); +s64 PS4_SYSV_ABI sceKernelPwrite(int d, void* buf, size_t nbytes, s64 offset); void RegisterFileSystem(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Kernel diff --git a/src/core/libraries/kernel/kernel.cpp b/src/core/libraries/kernel/kernel.cpp index b05c96fad..2b7735219 100644 --- a/src/core/libraries/kernel/kernel.cpp +++ b/src/core/libraries/kernel/kernel.cpp @@ -28,6 +28,7 @@ #include #endif #include +#include "aio.h" namespace Libraries::Kernel { @@ -59,7 +60,7 @@ static void KernelServiceThread(std::stop_token stoken) { } io_context.run(); - io_context.reset(); + io_context.restart(); asio_requests = 0; } @@ -218,6 +219,7 @@ void RegisterKernel(Core::Loader::SymbolsResolver* sym) { Libraries::Kernel::RegisterEventQueue(sym); Libraries::Kernel::RegisterProcess(sym); Libraries::Kernel::RegisterException(sym); + Libraries::Kernel::RegisterAio(sym); LIB_OBJ("f7uOxY9mM1U", "libkernel", 1, "libkernel", 1, 1, &g_stack_chk_guard); LIB_FUNCTION("PfccT7qURYE", "libkernel", 1, "libkernel", 1, 1, kernel_ioctl); diff --git a/src/core/libraries/kernel/threads/condvar.cpp b/src/core/libraries/kernel/threads/condvar.cpp index 853526559..0b0545ace 100644 --- a/src/core/libraries/kernel/threads/condvar.cpp +++ b/src/core/libraries/kernel/threads/condvar.cpp @@ -339,6 +339,8 @@ int PS4_SYSV_ABI posix_pthread_condattr_setpshared(PthreadCondAttrT* attr, int p void RegisterCond(Core::Loader::SymbolsResolver* sym) { // Posix LIB_FUNCTION("mKoTx03HRWA", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_condattr_init); + LIB_FUNCTION("dJcuQVn6-Iw", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_condattr_destroy); LIB_FUNCTION("0TyVk4MSLt0", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_cond_init); LIB_FUNCTION("2MOy+rUfuhQ", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_cond_signal); LIB_FUNCTION("RXXqi4CtF8w", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_cond_destroy); @@ -347,8 +349,11 @@ void RegisterCond(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("mkx2fVhNMsg", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_cond_broadcast); // Posix-Kernel + LIB_FUNCTION("0TyVk4MSLt0", "libkernel", 1, "libkernel", 1, 1, posix_pthread_cond_init); LIB_FUNCTION("Op8TBGY5KHg", "libkernel", 1, "libkernel", 1, 1, posix_pthread_cond_wait); LIB_FUNCTION("mkx2fVhNMsg", "libkernel", 1, "libkernel", 1, 1, posix_pthread_cond_broadcast); + LIB_FUNCTION("mKoTx03HRWA", "libkernel", 1, "libkernel", 1, 1, posix_pthread_condattr_init); + LIB_FUNCTION("dJcuQVn6-Iw", "libkernel", 1, "libkernel", 1, 1, posix_pthread_condattr_destroy); // Orbis LIB_FUNCTION("2Tb92quprl0", "libkernel", 1, "libkernel", 1, 1, ORBIS(scePthreadCondInit)); diff --git a/src/core/libraries/kernel/threads/exception.cpp b/src/core/libraries/kernel/threads/exception.cpp index cc391e928..5e2f35d69 100644 --- a/src/core/libraries/kernel/threads/exception.cpp +++ b/src/core/libraries/kernel/threads/exception.cpp @@ -153,6 +153,11 @@ int PS4_SYSV_ABI sceKernelDebugRaiseException() { return 0; } +int PS4_SYSV_ABI sceKernelDebugRaiseExceptionOnReleaseMode() { + UNREACHABLE(); + return 0; +} + void RegisterException(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("il03nluKfMk", "libkernel_unity", 1, "libkernel", 1, 1, sceKernelRaiseException); LIB_FUNCTION("WkwEd3N7w0Y", "libkernel_unity", 1, "libkernel", 1, 1, @@ -160,6 +165,8 @@ void RegisterException(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("Qhv5ARAoOEc", "libkernel_unity", 1, "libkernel", 1, 1, sceKernelRemoveExceptionHandler) LIB_FUNCTION("OMDRKKAZ8I4", "libkernel", 1, "libkernel", 1, 1, sceKernelDebugRaiseException); + LIB_FUNCTION("zE-wXIZjLoM", "libkernel", 1, "libkernel", 1, 1, + sceKernelDebugRaiseExceptionOnReleaseMode); } } // namespace Libraries::Kernel diff --git a/src/core/libraries/kernel/threads/mutex.cpp b/src/core/libraries/kernel/threads/mutex.cpp index 4f11e32da..956e5ef65 100644 --- a/src/core/libraries/kernel/threads/mutex.cpp +++ b/src/core/libraries/kernel/threads/mutex.cpp @@ -438,8 +438,11 @@ void RegisterMutex(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("K-jXhbt2gn4", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_mutex_trylock); // Posix-Kernel + LIB_FUNCTION("ttHNfU+qDBU", "libkernel", 1, "libkernel", 1, 1, posix_pthread_mutex_init); LIB_FUNCTION("7H0iTOciTLo", "libkernel", 1, "libkernel", 1, 1, posix_pthread_mutex_lock); LIB_FUNCTION("2Z+PpY6CaJg", "libkernel", 1, "libkernel", 1, 1, posix_pthread_mutex_unlock); + LIB_FUNCTION("dQHWEsJtoE4", "libkernel", 1, "libkernel", 1, 1, posix_pthread_mutexattr_init); + LIB_FUNCTION("mDmgMOGVUqg", "libkernel", 1, "libkernel", 1, 1, posix_pthread_mutexattr_settype); // Orbis LIB_FUNCTION("cmo1RIYva9o", "libkernel", 1, "libkernel", 1, 1, ORBIS(scePthreadMutexInit)); diff --git a/src/core/libraries/kernel/threads/pthread.cpp b/src/core/libraries/kernel/threads/pthread.cpp index e81207a0d..641fbe10d 100644 --- a/src/core/libraries/kernel/threads/pthread.cpp +++ b/src/core/libraries/kernel/threads/pthread.cpp @@ -386,6 +386,9 @@ int PS4_SYSV_ABI posix_sched_get_priority_min() { } int PS4_SYSV_ABI posix_pthread_rename_np(PthreadT thread, const char* name) { + if (thread == nullptr) { + return POSIX_EINVAL; + } LOG_INFO(Kernel_Pthread, "name = {}", name); Common::SetThreadName(reinterpret_cast(thread->native_thr.GetHandle()), name); thread->name = name; @@ -535,6 +538,7 @@ void RegisterThread(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("6XG4B33N09g", "libScePosix", 1, "libkernel", 1, 1, sched_yield); // Posix-Kernel + LIB_FUNCTION("Z4QosVuAsA0", "libkernel", 1, "libkernel", 1, 1, posix_pthread_once); LIB_FUNCTION("EotR8a3ASf4", "libkernel", 1, "libkernel", 1, 1, posix_pthread_self); LIB_FUNCTION("OxhIB8LB-PQ", "libkernel", 1, "libkernel", 1, 1, posix_pthread_create); diff --git a/src/core/libraries/kernel/time.h b/src/core/libraries/kernel/time.h index 6aa281aaf..407b6f9ed 100644 --- a/src/core/libraries/kernel/time.h +++ b/src/core/libraries/kernel/time.h @@ -82,6 +82,7 @@ int PS4_SYSV_ABI sceKernelConvertLocaltimeToUtc(time_t param_1, int64_t param_2, int PS4_SYSV_ABI sceKernelConvertUtcToLocaltime(time_t time, time_t* local_time, OrbisTimesec* st, u64* dst_sec); +int PS4_SYSV_ABI sceKernelUsleep(u32 microseconds); void RegisterTime(Core::Loader::SymbolsResolver* sym); diff --git a/src/core/libraries/libs.cpp b/src/core/libraries/libs.cpp index 69728e523..6dc455028 100644 --- a/src/core/libraries/libs.cpp +++ b/src/core/libraries/libs.cpp @@ -21,12 +21,16 @@ #include "core/libraries/mouse/mouse.h" #include "core/libraries/move/move.h" #include "core/libraries/network/http.h" +#include "core/libraries/network/http2.h" #include "core/libraries/network/net.h" #include "core/libraries/network/netctl.h" #include "core/libraries/network/ssl.h" +#include "core/libraries/network/ssl2.h" +#include "core/libraries/np_common/np_common.h" #include "core/libraries/np_manager/np_manager.h" #include "core/libraries/np_score/np_score.h" #include "core/libraries/np_trophy/np_trophy.h" +#include "core/libraries/np_web_api/np_web_api.h" #include "core/libraries/pad/pad.h" #include "core/libraries/playgo/playgo.h" #include "core/libraries/playgo/playgo_dialog.h" @@ -64,17 +68,21 @@ void InitHLELibs(Core::Loader::SymbolsResolver* sym) { Libraries::MsgDialog::RegisterlibSceMsgDialog(sym); Libraries::AudioOut::RegisterlibSceAudioOut(sym); Libraries::Http::RegisterlibSceHttp(sym); + Libraries::Http2::RegisterlibSceHttp2(sym); Libraries::Net::RegisterlibSceNet(sym); Libraries::NetCtl::RegisterlibSceNetCtl(sym); Libraries::SaveData::RegisterlibSceSaveData(sym); Libraries::SaveData::Dialog::RegisterlibSceSaveDataDialog(sym); Libraries::Ssl::RegisterlibSceSsl(sym); + Libraries::Ssl2::RegisterlibSceSsl2(sym); Libraries::SysModule::RegisterlibSceSysmodule(sym); Libraries::Posix::Registerlibsceposix(sym); Libraries::AudioIn::RegisterlibSceAudioIn(sym); + Libraries::NpCommon::RegisterlibSceNpCommon(sym); Libraries::NpManager::RegisterlibSceNpManager(sym); Libraries::NpScore::RegisterlibSceNpScore(sym); Libraries::NpTrophy::RegisterlibSceNpTrophy(sym); + Libraries::NpWebApi::RegisterlibSceNpWebApi(sym); Libraries::ScreenShot::RegisterlibSceScreenShot(sym); Libraries::AppContent::RegisterlibSceAppContent(sym); Libraries::PngDec::RegisterlibScePngDec(sym); diff --git a/src/core/libraries/network/http2.cpp b/src/core/libraries/network/http2.cpp new file mode 100644 index 000000000..52f73edc6 --- /dev/null +++ b/src/core/libraries/network/http2.cpp @@ -0,0 +1,360 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/logging/log.h" +#include "core/libraries/error_codes.h" +#include "core/libraries/libs.h" +#include "core/libraries/network/http2.h" + +namespace Libraries::Http2 { + +int PS4_SYSV_ABI _Z5dummyv() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2AbortRequest() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2AddCookie() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2AddRequestHeader() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2AuthCacheFlush() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2CookieExport() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2CookieFlush() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2CookieImport() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2CreateCookieBox() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2CreateRequestWithURL() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2CreateTemplate() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2DeleteCookieBox() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2DeleteRequest() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2DeleteTemplate() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetAllResponseHeaders() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetAuthEnabled() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetAutoRedirect() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetCookie() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetCookieBox() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetCookieStats() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetMemoryPoolStats() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetResponseContentLength() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2GetStatusCode() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2Init(int net_id, int ssl_id, size_t pool_size, int max_requests) { + LOG_ERROR(Lib_Http2, "(DUMMY) called"); + static int id = 0; + return ++id; +} + +int PS4_SYSV_ABI sceHttp2ReadData() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2ReadDataAsync() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2RedirectCacheFlush() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2RemoveRequestHeader() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SendRequest() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SendRequestAsync() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetAuthEnabled() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetAuthInfoCallback() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetAutoRedirect() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetConnectionWaitTimeOut() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetConnectTimeOut() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetCookieBox() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetCookieMaxNum() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetCookieMaxNumPerDomain() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetCookieMaxSize() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetCookieRecvCallback() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetCookieSendCallback() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetInflateGZIPEnabled() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetMinSslVersion() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetPreSendCallback() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetRecvTimeOut() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetRedirectCallback() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetRequestContentLength() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetResolveRetry() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetResolveTimeOut() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetSendTimeOut() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetSslCallback() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SetTimeOut() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SslDisableOption() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2SslEnableOption() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2Term() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceHttp2WaitAsync() { + LOG_ERROR(Lib_Http2, "(STUBBED) called"); + return ORBIS_OK; +} + +void RegisterlibSceHttp2(Core::Loader::SymbolsResolver* sym) { + LIB_FUNCTION("AS45QoYHjc4", "libSceHttp2", 1, "libSceHttp2", 1, 1, _Z5dummyv); + LIB_FUNCTION("IZ-qjhRqvjk", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2AbortRequest); + LIB_FUNCTION("flPxnowtvWY", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2AddCookie); + LIB_FUNCTION("nrPfOE8TQu0", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2AddRequestHeader); + LIB_FUNCTION("WeuDjj5m4YU", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2AuthCacheFlush); + LIB_FUNCTION("JlFGR4v50Kw", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2CookieExport); + LIB_FUNCTION("5VlQSzXW-SQ", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2CookieFlush); + LIB_FUNCTION("B5ibZI5UlzU", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2CookieImport); + LIB_FUNCTION("N4UfjvWJsMw", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2CreateCookieBox); + LIB_FUNCTION("mmyOCxQMVYQ", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2CreateRequestWithURL); + LIB_FUNCTION("+wCt7fCijgk", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2CreateTemplate); + LIB_FUNCTION("O9ync3F-JVI", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2DeleteCookieBox); + LIB_FUNCTION("c8D9qIjo8EY", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2DeleteRequest); + LIB_FUNCTION("pDom5-078DA", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2DeleteTemplate); + LIB_FUNCTION("-rdXUi2XW90", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2GetAllResponseHeaders); + LIB_FUNCTION("m-OL13q8AI8", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2GetAuthEnabled); + LIB_FUNCTION("od5QCZhZSfw", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2GetAutoRedirect); + LIB_FUNCTION("GQFGj0rYX+A", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2GetCookie); + LIB_FUNCTION("IX23slKvtQI", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2GetCookieBox); + LIB_FUNCTION("eij7UzkUqK8", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2GetCookieStats); + LIB_FUNCTION("otUQuZa-mv0", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2GetMemoryPoolStats); + LIB_FUNCTION("o0DBQpFE13o", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2GetResponseContentLength); + LIB_FUNCTION("9XYJwCf3lEA", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2GetStatusCode); + LIB_FUNCTION("3JCe3lCbQ8A", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2Init); + LIB_FUNCTION("QygCNNmbGss", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2ReadData); + LIB_FUNCTION("bGN-6zbo7ms", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2ReadDataAsync); + LIB_FUNCTION("klwUy2Wg+q8", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2RedirectCacheFlush); + LIB_FUNCTION("jHdP0CS4ZlA", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2RemoveRequestHeader); + LIB_FUNCTION("rbqZig38AT8", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SendRequest); + LIB_FUNCTION("A+NVAFu4eCg", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SendRequestAsync); + LIB_FUNCTION("jjFahkBPCYs", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetAuthEnabled); + LIB_FUNCTION("Wwj6HbB2mOo", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetAuthInfoCallback); + LIB_FUNCTION("b9AvoIaOuHI", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetAutoRedirect); + LIB_FUNCTION("n8hMLe31OPA", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2SetConnectionWaitTimeOut); + LIB_FUNCTION("-HIO4VT87v8", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetConnectTimeOut); + LIB_FUNCTION("jrVHsKCXA0g", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetCookieBox); + LIB_FUNCTION("mPKVhQqh2Es", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetCookieMaxNum); + LIB_FUNCTION("o7+WXe4WadE", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2SetCookieMaxNumPerDomain); + LIB_FUNCTION("6a0N6GPD7RM", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetCookieMaxSize); + LIB_FUNCTION("zdtXKn9X7no", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2SetCookieRecvCallback); + LIB_FUNCTION("McYmUpQ3-DY", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2SetCookieSendCallback); + LIB_FUNCTION("uRosf8GQbHQ", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2SetInflateGZIPEnabled); + LIB_FUNCTION("09tk+kIA1Ns", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetMinSslVersion); + LIB_FUNCTION("UL4Fviw+IAM", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetPreSendCallback); + LIB_FUNCTION("izvHhqgDt44", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetRecvTimeOut); + LIB_FUNCTION("BJgi0CH7al4", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetRedirectCallback); + LIB_FUNCTION("FSAFOzi0FpM", "libSceHttp2", 1, "libSceHttp2", 1, 1, + sceHttp2SetRequestContentLength); + LIB_FUNCTION("Gcjh+CisAZM", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetResolveRetry); + LIB_FUNCTION("ACjtE27aErY", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetResolveTimeOut); + LIB_FUNCTION("XPtW45xiLHk", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetSendTimeOut); + LIB_FUNCTION("YrWX+DhPHQY", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetSslCallback); + LIB_FUNCTION("VYMxTcBqSE0", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SetTimeOut); + LIB_FUNCTION("B37SruheQ5Y", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SslDisableOption); + LIB_FUNCTION("EWcwMpbr5F8", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2SslEnableOption); + LIB_FUNCTION("YiBUtz-pGkc", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2Term); + LIB_FUNCTION("MOp-AUhdfi8", "libSceHttp2", 1, "libSceHttp2", 1, 1, sceHttp2WaitAsync); +}; + +} // namespace Libraries::Http2 \ No newline at end of file diff --git a/src/core/libraries/network/http2.h b/src/core/libraries/network/http2.h new file mode 100644 index 000000000..aa1d0c5b4 --- /dev/null +++ b/src/core/libraries/network/http2.h @@ -0,0 +1,72 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/types.h" + +namespace Core::Loader { +class SymbolsResolver; +} + +namespace Libraries::Http2 { + +int PS4_SYSV_ABI _Z5dummyv(); +int PS4_SYSV_ABI sceHttp2AbortRequest(); +int PS4_SYSV_ABI sceHttp2AddCookie(); +int PS4_SYSV_ABI sceHttp2AddRequestHeader(); +int PS4_SYSV_ABI sceHttp2AuthCacheFlush(); +int PS4_SYSV_ABI sceHttp2CookieExport(); +int PS4_SYSV_ABI sceHttp2CookieFlush(); +int PS4_SYSV_ABI sceHttp2CookieImport(); +int PS4_SYSV_ABI sceHttp2CreateCookieBox(); +int PS4_SYSV_ABI sceHttp2CreateRequestWithURL(); +int PS4_SYSV_ABI sceHttp2CreateTemplate(); +int PS4_SYSV_ABI sceHttp2DeleteCookieBox(); +int PS4_SYSV_ABI sceHttp2DeleteRequest(); +int PS4_SYSV_ABI sceHttp2DeleteTemplate(); +int PS4_SYSV_ABI sceHttp2GetAllResponseHeaders(); +int PS4_SYSV_ABI sceHttp2GetAuthEnabled(); +int PS4_SYSV_ABI sceHttp2GetAutoRedirect(); +int PS4_SYSV_ABI sceHttp2GetCookie(); +int PS4_SYSV_ABI sceHttp2GetCookieBox(); +int PS4_SYSV_ABI sceHttp2GetCookieStats(); +int PS4_SYSV_ABI sceHttp2GetMemoryPoolStats(); +int PS4_SYSV_ABI sceHttp2GetResponseContentLength(); +int PS4_SYSV_ABI sceHttp2GetStatusCode(); +int PS4_SYSV_ABI sceHttp2Init(int net_id, int ssl_id, size_t pool_size, int max_requests); +int PS4_SYSV_ABI sceHttp2ReadData(); +int PS4_SYSV_ABI sceHttp2ReadDataAsync(); +int PS4_SYSV_ABI sceHttp2RedirectCacheFlush(); +int PS4_SYSV_ABI sceHttp2RemoveRequestHeader(); +int PS4_SYSV_ABI sceHttp2SendRequest(); +int PS4_SYSV_ABI sceHttp2SendRequestAsync(); +int PS4_SYSV_ABI sceHttp2SetAuthEnabled(); +int PS4_SYSV_ABI sceHttp2SetAuthInfoCallback(); +int PS4_SYSV_ABI sceHttp2SetAutoRedirect(); +int PS4_SYSV_ABI sceHttp2SetConnectionWaitTimeOut(); +int PS4_SYSV_ABI sceHttp2SetConnectTimeOut(); +int PS4_SYSV_ABI sceHttp2SetCookieBox(); +int PS4_SYSV_ABI sceHttp2SetCookieMaxNum(); +int PS4_SYSV_ABI sceHttp2SetCookieMaxNumPerDomain(); +int PS4_SYSV_ABI sceHttp2SetCookieMaxSize(); +int PS4_SYSV_ABI sceHttp2SetCookieRecvCallback(); +int PS4_SYSV_ABI sceHttp2SetCookieSendCallback(); +int PS4_SYSV_ABI sceHttp2SetInflateGZIPEnabled(); +int PS4_SYSV_ABI sceHttp2SetMinSslVersion(); +int PS4_SYSV_ABI sceHttp2SetPreSendCallback(); +int PS4_SYSV_ABI sceHttp2SetRecvTimeOut(); +int PS4_SYSV_ABI sceHttp2SetRedirectCallback(); +int PS4_SYSV_ABI sceHttp2SetRequestContentLength(); +int PS4_SYSV_ABI sceHttp2SetResolveRetry(); +int PS4_SYSV_ABI sceHttp2SetResolveTimeOut(); +int PS4_SYSV_ABI sceHttp2SetSendTimeOut(); +int PS4_SYSV_ABI sceHttp2SetSslCallback(); +int PS4_SYSV_ABI sceHttp2SetTimeOut(); +int PS4_SYSV_ABI sceHttp2SslDisableOption(); +int PS4_SYSV_ABI sceHttp2SslEnableOption(); +int PS4_SYSV_ABI sceHttp2Term(); +int PS4_SYSV_ABI sceHttp2WaitAsync(); + +void RegisterlibSceHttp2(Core::Loader::SymbolsResolver* sym); +} // namespace Libraries::Http2 \ No newline at end of file diff --git a/src/core/libraries/network/netctl.cpp b/src/core/libraries/network/netctl.cpp index b167d2789..00d980663 100644 --- a/src/core/libraries/network/netctl.cpp +++ b/src/core/libraries/network/netctl.cpp @@ -93,7 +93,7 @@ int PS4_SYSV_ABI sceNetCtlUnregisterCallbackV6() { } int PS4_SYSV_ABI sceNetCtlCheckCallback() { - netctl.CheckCallback(); + LOG_DEBUG(Lib_NetCtl, "(STUBBED) called"); return ORBIS_OK; } @@ -373,7 +373,7 @@ int PS4_SYSV_ABI Func_D8DCB6973537A3DC() { } int PS4_SYSV_ABI sceNetCtlCheckCallbackForNpToolkit() { - netctl.CheckNpToolkitCallback(); + LOG_DEBUG(Lib_NetCtl, "(STUBBED) called"); return ORBIS_OK; } diff --git a/src/core/libraries/network/ssl2.cpp b/src/core/libraries/network/ssl2.cpp new file mode 100644 index 000000000..8ca29526e --- /dev/null +++ b/src/core/libraries/network/ssl2.cpp @@ -0,0 +1,353 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/logging/log.h" +#include "core/libraries/error_codes.h" +#include "core/libraries/libs.h" +#include "core/libraries/network/ssl2.h" + +namespace Libraries::Ssl2 { + +int PS4_SYSV_ABI CA_MGMT_extractKeyBlobEx() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI CA_MGMT_extractPublicKeyInfo() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI CA_MGMT_freeKeyBlob() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI CRYPTO_initAsymmetricKey() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI CRYPTO_uninitAsymmetricKey() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI RSA_verifySignature() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslCheckRecvPending() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslClose() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslConnect() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslCreateConnection() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslCreateSslConnection() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslDeleteConnection() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslDeleteSslConnection() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslDisableOption() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslDisableOptionInternal() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslDisableOptionInternalInsecure() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslDisableVerifyOption() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslEnableOption() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslEnableOptionInternal() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslEnableVerifyOption() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslFreeCaCerts() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslFreeCaList() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslFreeSslCertName() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetAlpnSelected() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetCaCerts() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetCaList() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetFingerprint() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetIssuerName() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetMemoryPoolStats() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetNameEntryCount() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetNameEntryInfo() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetNanoSSLModuleId() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetNotAfter() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetNotBefore() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetPeerCert() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetPem() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetSerialNumber() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetSslError() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslGetSubjectName() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslInit(std::size_t poolSize) { + LOG_ERROR(Lib_Ssl2, "(DUMMY) called poolSize = {}", poolSize); + // return a value >1 + static int id = 0; + return ++id; +} + +int PS4_SYSV_ABI sceSslLoadCert() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslLoadRootCACert() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslRead() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslRecv() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslReuseConnection() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslSend() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslSetAlpn() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslSetMinSslVersion() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslSetSslVersion() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslSetVerifyCallback() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslTerm() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslUnloadCert() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceSslWrite() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI VLONG_freeVlongQueue() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_22E76E60BC0587D7() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_28F8791A771D39C7() { + LOG_ERROR(Lib_Ssl2, "(STUBBED) called"); + return ORBIS_OK; +} + +void RegisterlibSceSsl2(Core::Loader::SymbolsResolver* sym) { + LIB_FUNCTION("Md+HYkCBZB4", "libSceSsl", 1, "libSceSsl", 2, 1, CA_MGMT_extractKeyBlobEx); + LIB_FUNCTION("9bKYzKP6kYU", "libSceSsl", 1, "libSceSsl", 2, 1, CA_MGMT_extractPublicKeyInfo); + LIB_FUNCTION("ipLIammTj2Q", "libSceSsl", 1, "libSceSsl", 2, 1, CA_MGMT_freeKeyBlob); + LIB_FUNCTION("PRWr3-ytpdg", "libSceSsl", 1, "libSceSsl", 2, 1, CRYPTO_initAsymmetricKey); + LIB_FUNCTION("cW7VCIMCh9A", "libSceSsl", 1, "libSceSsl", 2, 1, CRYPTO_uninitAsymmetricKey); + LIB_FUNCTION("pBwtarKd7eg", "libSceSsl", 1, "libSceSsl", 2, 1, RSA_verifySignature); + LIB_FUNCTION("1VM0h1JrUfA", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslCheckRecvPending); + LIB_FUNCTION("viRXSHZYd0c", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslClose); + LIB_FUNCTION("zXvd6iNyfgc", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslConnect); + LIB_FUNCTION("tuscfitnhEo", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslCreateConnection); + LIB_FUNCTION("P14ATpXc4J8", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslCreateSslConnection); + LIB_FUNCTION("HJ1n138CQ2g", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslDeleteConnection); + LIB_FUNCTION("hwrHV6Pprk4", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslDeleteSslConnection); + LIB_FUNCTION("iLKz4+ukLqk", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslDisableOption); + LIB_FUNCTION("-WqxBRAUVM4", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslDisableOptionInternal); + LIB_FUNCTION("w1+L-27nYas", "libSceSsl", 1, "libSceSsl", 2, 1, + sceSslDisableOptionInternalInsecure); + LIB_FUNCTION("PwsHbErG+e8", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslDisableVerifyOption); + LIB_FUNCTION("m-zPyAsIpco", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslEnableOption); + LIB_FUNCTION("g-zCwUKstEQ", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslEnableOptionInternal); + LIB_FUNCTION("po1X86mgHDU", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslEnableVerifyOption); + LIB_FUNCTION("qIvLs0gYxi0", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslFreeCaCerts); + LIB_FUNCTION("+DzXseDVkeI", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslFreeCaList); + LIB_FUNCTION("RwXD8grHZHM", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslFreeSslCertName); + LIB_FUNCTION("4O7+bRkRUe8", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetAlpnSelected); + LIB_FUNCTION("TDfQqO-gMbY", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetCaCerts); + LIB_FUNCTION("qOn+wm28wmA", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetCaList); + LIB_FUNCTION("brRtwGBu4A8", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetFingerprint); + LIB_FUNCTION("7whYpYfHP74", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetIssuerName); + LIB_FUNCTION("-PoIzr3PEk0", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetMemoryPoolStats); + LIB_FUNCTION("R1ePzopYPYM", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetNameEntryCount); + LIB_FUNCTION("7RBSTKGrmDA", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetNameEntryInfo); + LIB_FUNCTION("AzUipl-DpIw", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetNanoSSLModuleId); + LIB_FUNCTION("xHpt6+2pGYk", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetNotAfter); + LIB_FUNCTION("Eo0S65Jy28Q", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetNotBefore); + LIB_FUNCTION("-TbZc8pwPNc", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetPeerCert); + LIB_FUNCTION("kLB5aGoUJXg", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetPem); + LIB_FUNCTION("DOwXL+FQMEY", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetSerialNumber); + LIB_FUNCTION("0XcZknp7-Wc", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetSslError); + LIB_FUNCTION("dQReuBX9sD8", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslGetSubjectName); + LIB_FUNCTION("hdpVEUDFW3s", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslInit); + LIB_FUNCTION("Ab7+DH+gYyM", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslLoadCert); + LIB_FUNCTION("3-643mGVFJo", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslLoadRootCACert); + LIB_FUNCTION("jltWpVKtetg", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslRead); + LIB_FUNCTION("hi0veU3L2pU", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslRecv); + LIB_FUNCTION("50R2xYaYZwE", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslReuseConnection); + LIB_FUNCTION("p5bM5PPufFY", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslSend); + LIB_FUNCTION("TL86glUrmUw", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslSetAlpn); + LIB_FUNCTION("QWSxBzf6lAg", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslSetMinSslVersion); + LIB_FUNCTION("bKaEtQnoUuQ", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslSetSslVersion); + LIB_FUNCTION("E4a-ahM57QQ", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslSetVerifyCallback); + LIB_FUNCTION("0K1yQ6Lv-Yc", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslTerm); + LIB_FUNCTION("UQ+3Qu7v3cA", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslUnloadCert); + LIB_FUNCTION("iNjkt9Poblw", "libSceSsl", 1, "libSceSsl", 2, 1, sceSslWrite); + LIB_FUNCTION("wcVuyTUr5ys", "libSceSsl", 1, "libSceSsl", 2, 1, VLONG_freeVlongQueue); + LIB_FUNCTION("IuduYLwFh9c", "libSceSsl", 1, "libSceSsl", 2, 1, Func_22E76E60BC0587D7); + LIB_FUNCTION("KPh5GncdOcc", "libSceSsl", 1, "libSceSsl", 2, 1, Func_28F8791A771D39C7); +}; + +} // namespace Libraries::Ssl2 \ No newline at end of file diff --git a/src/core/libraries/network/ssl2.h b/src/core/libraries/network/ssl2.h new file mode 100644 index 000000000..03ee3b86e --- /dev/null +++ b/src/core/libraries/network/ssl2.h @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/types.h" + +namespace Core::Loader { +class SymbolsResolver; +} + +namespace Libraries::Ssl2 { +void RegisterlibSceSsl2(Core::Loader::SymbolsResolver* sym); +} // namespace Libraries::Ssl2 \ No newline at end of file diff --git a/src/core/libraries/np_common/np_common.cpp b/src/core/libraries/np_common/np_common.cpp new file mode 100644 index 000000000..1234705cc --- /dev/null +++ b/src/core/libraries/np_common/np_common.cpp @@ -0,0 +1,7915 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/logging/log.h" +#include "core/libraries/error_codes.h" +#include "core/libraries/libs.h" +#include "core/libraries/np_common/np_common.h" +#include "core/libraries/np_common/np_common_error.h" + +namespace Libraries::NpCommon { + +int PS4_SYSV_ABI sceNpCmpNpId(OrbisNpId* np_id1, OrbisNpId* np_id2) { + if (np_id1 == nullptr || np_id2 == nullptr) { + return ORBIS_NP_ERROR_INVALID_ARGUMENT; + } + + // Compare data + if (std::strncmp(np_id1->handle.data, np_id2->handle.data, ORBIS_NP_ONLINEID_MAX_LENGTH) != 0) { + return ORBIS_NP_UTIL_ERROR_NOT_MATCH; + } + + // Compare opt + for (u32 i = 0; i < 8; i++) { + if (np_id1->opt[i] != np_id2->opt[i]) { + return ORBIS_NP_UTIL_ERROR_NOT_MATCH; + } + } + + // Compare reserved + for (u32 i = 0; i < 8; i++) { + if (np_id1->reserved[i] != np_id2->reserved[i]) { + return ORBIS_NP_UTIL_ERROR_NOT_MATCH; + } + } + + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCmpNpIdInOrder(OrbisNpId* np_id1, OrbisNpId* np_id2, u32* out_result) { + if (np_id1 == nullptr || np_id2 == nullptr || out_result == nullptr) { + return ORBIS_NP_ERROR_INVALID_ARGUMENT; + } + + // Compare data + u32 compare = + std::strncmp(np_id1->handle.data, np_id2->handle.data, ORBIS_NP_ONLINEID_MAX_LENGTH); + if (compare < 0) { + *out_result = -1; + return ORBIS_OK; + } else if (compare > 0) { + *out_result = 1; + return ORBIS_OK; + } + + // Compare opt + for (u32 i = 0; i < 8; i++) { + if (np_id1->opt[i] < np_id2->opt[i]) { + *out_result = -1; + return ORBIS_OK; + } else if (np_id1->opt[i] > np_id2->opt[i]) { + *out_result = 1; + return ORBIS_OK; + } + } + + // Compare reserved + for (u32 i = 0; i < 8; i++) { + if (np_id1->reserved[i] < np_id2->reserved[i]) { + *out_result = -1; + return ORBIS_OK; + } else if (np_id1->reserved[i] > np_id2->reserved[i]) { + *out_result = 1; + return ORBIS_OK; + } + } + + *out_result = 0; + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCmpOnlineId(OrbisNpOnlineId* online_id1, OrbisNpOnlineId* online_id2) { + if (online_id1 == nullptr || online_id2 == nullptr) { + return ORBIS_NP_ERROR_INVALID_ARGUMENT; + } + + if (std::strncmp(online_id1->data, online_id2->data, ORBIS_NP_ONLINEID_MAX_LENGTH) != 0) { + return ORBIS_NP_UTIL_ERROR_NOT_MATCH; + } + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorExConvertAllocator() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorExFree() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorExMalloc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorExRealloc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorExStrdup() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorExStrndup() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorFree() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorMalloc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorRealloc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorStrdup() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpAllocatorStrndup() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpFree() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpHeapFree() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpHeapMalloc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpHeapRealloc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpHeapStrdup() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpHeapStrndup() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpMalloc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _sceNpRealloc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable10IsCanceledEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable10LockCancelEPKciS3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable11CheckCancelEPKciS3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable12UnlockCancelEPKciS3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable13SetCancelableEb() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable14SetupSubCancelEPS1_PKciS4_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable16CleanupSubCancelEPS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable4InitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable6CancelEij() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10Cancelable7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelableC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelableD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelableD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelableD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelLock3EndEPKciS3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelLock5BeginEPNS0_6HandleEPKciS5_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelLockC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelLockC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelLockD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10CancelLockD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue10ClearAbortEt() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue10TryDequeueEPvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue4InitEPKcmm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue5AbortEt() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue7DequeueEPvmj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueue7EnqueueEPKvmj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueueC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueueD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueueD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10EventQueueD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonObject16DeleteFieldValueEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonObject5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonParser4InitEPK7JsonDefPNS1_12EventHandlerE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonParser5ParseEPKcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonParserC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonParserD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonParserD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonParserD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonString5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10JsonString6SetStrEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile4SyncEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile5CloseEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile5WriteEPNS0_6HandleEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile8TruncateEl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFileC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFileD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFileD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np10MemoryFileD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI +_ZN3sce2np12HttpTemplate19SetAuthInfoCallbackEPFii15SceHttpAuthTypePKcPcS5_iPPhPmPiPvESA_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplate4InitEiPKcib() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplate7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamBufferixEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamReader4ReadEPNS0_6HandleEPNS0_9StreamCtxEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamReader7ReadAllEPNS0_6HandleEPNS0_9StreamCtxEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamReader7ReadAllEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamReader8ReadDataEPNS0_6HandleEPNS0_9StreamCtxEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamReader8ReadDataEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamReader8SkipDataEPNS0_6HandleElPl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamReader8SkipDataEPNS0_6HandleEPNS0_9StreamCtxElPl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter15WriteFilledDataEPNS0_6HandleEcl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter15WriteFilledDataEPNS0_6HandleEPNS0_9StreamCtxEcl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter5WriteEPNS0_6HandleEPNS0_9StreamCtxEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter9WriteDataEPNS0_6HandleEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter9WriteDataEPNS0_6HandleEPNS0_9StreamCtxEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12WorkerThread10ThreadMainEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadC1EPNS0_9WorkQueueE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadC2EPNS0_9WorkQueueE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParser5ParseEPKcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParser9GetResultEPPNS0_10JsonObjectE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParser9GetResultEPPNS0_9JsonValueE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParserC2EP16SceNpAllocatorExPK7JsonDef() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParserD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParserD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParserD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecret5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC1EPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC1ERK16SceNpTitleSecret() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC1ERKS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC2EPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC2ERK16SceNpTitleSecret() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC2ERKS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory4InitEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory6ExpandEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemoryC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemoryD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemoryD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemoryD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14CalloutContext4InitEPKcimm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14CalloutContext4InitEPKNS1_5ParamE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14CalloutContext7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilder12BuildBufSizeEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilder16EscapeJsonStringEPKcPcmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilder23EscapeJsonStringBufSizeEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilder5BuildEPcmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderC1ERKNS0_9JsonValueE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderC2ERKNS0_9JsonValueE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np15CancelableScope3EndEiPKciS3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np15CancelableScope5BeginEPNS0_6HandleEPKciS5_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np15CancelableScopeC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np15CancelableScopeD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np15CancelableScopeD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np15CancelableScopeD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np16StreamReadBufferC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np16StreamReadBufferD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np16StreamReadBufferD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPool13InvalidateAllEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPool4InitEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPool7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolC1EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReader4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderC1EPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderC2EPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriter5WriteEPNS0_6HandleEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterC1EPvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterC2EPvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReader4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReader5CloseEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReaderC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReaderD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReaderD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReaderD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient10DisconnectEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient11IsConnectedEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient16invokeSyncMethodEjPKvmPvPmm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient4InitEPKNS2_6ConfigE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient7ConnectEPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI +_ZN3sce2np3ipc13ServiceClientC1EPNS1_17ServiceIpmiClientEPKNS1_17ServiceClientInfoE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI +_ZN3sce2np3ipc13ServiceClientC2EPNS1_17ServiceIpmiClientEPKNS1_17ServiceClientInfoE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient10DisconnectEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient10EndRequestEii() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient11findServiceEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient11InitServiceEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient11TermServiceEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient11WaitRequestEiij() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient12AbortRequestEii() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient12BeginRequestEii() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient13CreateRequestEPiiPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient13DeleteRequestEii() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient13PollEventFlagEijmjPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient13WaitEventFlagEijmjPmj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient14PollEventQueueEiPvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient15CancelEventFlagEijm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient15RegisterServiceEPKNS1_17ServiceClientInfoE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient16RegisterServicesEPKNS1_17ServiceClientInfoE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient17invokeInitServiceEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient17invokeTermServiceEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient17UnregisterServiceEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient18EndRequestForAsyncEii() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient19WaitRequestForAsyncEiij() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient20AbortRequestForAsyncEii() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI +_ZN3sce2np3ipc17ServiceIpmiClient20BeginRequestForAsyncEiiPN4IPMI6Client12EventNotifeeE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient21CreateRequestForAsyncEPiiPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient21DeleteRequestForAsyncEii() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient4InitEPNS2_6ConfigE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient7ConnectEPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Cond4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Cond4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Cond4InitEPKcPNS0_5MutexE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Cond4WaitEj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Cond6SignalEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Cond7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Cond9SignalAllEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4CondC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4CondC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4CondD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4CondD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4CondD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Path11BuildAppendEPcmcPKcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Path12AddDelimiterEPcmc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Path5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Path6SetStrEPKcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4PathD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4PathD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4PathD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Time10AddMinutesEl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Time10AddSecondsEl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Time12GetUserClockEPS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Time15AddMicroSecondsEl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Time15GetNetworkClockEPS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Time20GetDebugNetworkClockEPS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Time7AddDaysEl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4Time8AddHoursEl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4TimeplERK10SceRtcTick() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np4TimeplERKS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5Mutex4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5Mutex4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5Mutex4InitEPKcj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5Mutex4LockEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5Mutex6UnlockEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5Mutex7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5Mutex7TryLockEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5MutexC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5MutexC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5MutexD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5MutexD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5MutexD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np5NpEnv8GetNpEnvEPS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Handle10CancelImplEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Handle4InitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Handle7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6HandleC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6HandleC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6HandleD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6HandleD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6HandleD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectdaEPv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectdaEPvR14SceNpAllocator() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectdaEPvR16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectdlEPv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectdlEPvR14SceNpAllocator() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectdlEPvR16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectnaEmR14SceNpAllocator() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectnaEmR16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectnwEmR14SceNpAllocator() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ObjectnwEmR16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread12DoThreadMainEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread4InitEPKcimm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread4InitEPKNS1_5ParamE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread4JoinEPi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread5StartEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread9EntryFuncEPv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread9GetResultEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6Thread9IsRunningEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ThreadC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ThreadD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ThreadD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np6ThreadD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7Callout10IsTimedoutEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7Callout11CalloutFuncEPv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7Callout4StopEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7Callout5StartEjPNS1_7HandlerE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7Callout5StartEmPNS1_7HandlerE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7Callout9IsStartedEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7CalloutC1EPNS0_14CalloutContextE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7CalloutC2EPNS0_14CalloutContextE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7CalloutD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7CalloutD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7CalloutD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7HttpUri5BuildEPKS1_PcmPmj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7HttpUri5ParseEPS1_PKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7HttpUriC1EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7HttpUriC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7HttpUriD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7HttpUriD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7HttpUriD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf14CheckinForReadEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf15CheckinForWriteEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf15CheckoutForReadEPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf16CheckoutForWriteEPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4InitEPvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4PeekEmPvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4ReadEPvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf5WriteEPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBuf7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBufC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBufC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBufD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBufD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np7RingBufD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8HttpFile4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8HttpFile5CloseEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8HttpFileC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8HttpFileD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8HttpFileD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8HttpFileD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8JsonBool5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8JsonBool7SetBoolEb() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8JsonFile5CloseEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8JsonFileD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8JsonFileD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8JsonFileD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8JsonNull5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommId5BuildERKS1_Pcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommId5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommId5ParseEPS1_PKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommId5ParseEPS1_PKcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC1ERK20SceNpCommunicationId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC1ERKS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC2ERK20SceNpCommunicationId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC2ERKS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8Selector4InitEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8SelectorD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8SelectorD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8SelectorD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItem10SetPendingEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItem10SetRunningEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItem11SetFinishedEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItem14FinishCallbackEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItem15RemoveFromQueueEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItem6CancelEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItem9BindQueueEPNS0_9WorkQueueEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItemC2EPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItemD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItemD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np8WorkItemD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag3SetEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4OpenEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4PollEmjPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4WaitEmjPmj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag5ClearEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag6CancelEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag6CreateEPKcj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlag7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlagC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlagC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlagD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlagD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9EventFlagD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans10SetTimeoutEPKNS1_12TimeoutParamE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans11SendRequestEPNS0_6HandleEPKvm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans12RecvResponseEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans12SkipResponseEPNS0_6HandleE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans16AddRequestHeaderEPKcS3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans16SetRequestHeaderEPKcS3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans21GetResponseStatusCodeEPNS0_6HandleEPi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans21SetRequestContentTypeEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans23SetRequestContentLengthEm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans24GetResponseContentLengthEPNS0_6HandleEPbPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans4InitERKNS0_12HttpTemplateEPNS0_18HttpConnectionPoolEiPKcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI +_ZN3sce2np9HttpTrans4InitERKNS0_12HttpTemplateEPNS0_18HttpConnectionPoolEiPKcS8_tS8_m() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans5WriteEPNS0_6HandleEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTransC1EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTransC2EP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTransD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTransD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9HttpTransD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9JsonArray12AddItemArrayEPPS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9JsonArray5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9JsonValue12GetItemValueEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9JsonValue13GetFieldValueEiPPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9JsonValue13GetFieldValueEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9JsonValueD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9JsonValueD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9JsonValueD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFile4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFile4SeekEliPl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFile4SyncEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFile5CloseEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFile5WriteEPNS0_6HandleEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFile6RemoveEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFile8TruncateEl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFileC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFileC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFileD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFileD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9LocalFileD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleId5BuildERKS1_Pcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleId5ClearEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleId5ParseEPS1_PKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleId5ParseEPS1_PKcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC1ERK12SceNpTitleId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC1ERKS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC2ERK12SceNpTitleId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC2ERKS1_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9RefObject6AddRefEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9RefObject7ReleaseEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9RefObjectC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9RefObjectC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9RefObjectD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9RefObjectD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9RefObjectD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9Semaphore4OpenEPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9Semaphore4WaitEj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9Semaphore6CreateEiiPKc() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9Semaphore6SignalEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9Semaphore7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue11GetItemByIdEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue15GetFinishedItemENS0_14WorkItemStatusE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue16WorkItemFinishedEPNS0_8WorkItemEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue17ProcFinishedItemsENS0_14WorkItemStatusE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue18RemoveFinishedItemEPNS0_8WorkItemE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue18WaitForPendingItemEPPNS0_8WorkItemEPb() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4ctorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4dtorEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4InitEPKcimm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4InitEPKNS0_6Thread5ParamE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4StopEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue5StartEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue6CancelEii() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue7DestroyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue7EnqueueEiPNS0_8WorkItemE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue9CancelAllEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue9IsRunningEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueC1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueC2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueD2Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERK10SceRtcTickRKNS0_4TimeE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERK12SceNpTitleIdRKNS0_9NpTitleIdE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERK16SceNpTitleSecretRKNS0_13NpTitleSecretE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERK20SceNpCommunicationIdRKNS0_8NpCommIdE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_13NpTitleSecretERK16SceNpTitleSecret() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_13NpTitleSecretES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_4TimeERK10SceRtcTick() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_4TimeES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_8NpCommIdERK20SceNpCommunicationId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_8NpCommIdES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_9NpTitleIdERK12SceNpTitleId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_9NpTitleIdES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npgeERK10SceRtcTickRKNS0_4TimeE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npgeERKNS0_4TimeERK10SceRtcTick() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npgeERKNS0_4TimeES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npgtERK10SceRtcTickRKNS0_4TimeE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npgtERKNS0_4TimeERK10SceRtcTick() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npgtERKNS0_4TimeES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npleERK10SceRtcTickRKNS0_4TimeE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npleERKNS0_4TimeERK10SceRtcTick() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npleERKNS0_4TimeES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npltERK10SceRtcTickRKNS0_4TimeE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npltERKNS0_4TimeERK10SceRtcTick() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npltERKNS0_4TimeES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERK10SceRtcTickRKNS0_4TimeE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERK12SceNpTitleIdRKNS0_9NpTitleIdE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERK16SceNpTitleSecretRKNS0_13NpTitleSecretE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERK20SceNpCommunicationIdRKNS0_8NpCommIdE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_13NpTitleSecretERK16SceNpTitleSecret() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_13NpTitleSecretES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_4TimeERK10SceRtcTick() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_4TimeES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_8NpCommIdERK20SceNpCommunicationId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_8NpCommIdES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_9NpTitleIdERK12SceNpTitleId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_9NpTitleIdES3_() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10Cancelable6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10EventQueue6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10EventQueue7IsEmptyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber5CloneEP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPj() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber9GetNumStrEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonObject5CloneEP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonString5CloneEP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonString6GetStrEPcm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonString6GetStrEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np10JsonString9GetLengthEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np12HttpTemplate6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np18HttpConnectionPool6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np3ipc10IpmiClient6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np3ipc17ServiceIpmiClient6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np4Cond6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np4Time18ConvertToPosixTimeEPl() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np5Mutex6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np6Handle6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np6Thread6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np7RingBuf11GetDataSizeEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np7RingBuf11GetFreeSizeEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np7RingBuf6IsFullEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np7RingBuf7IsEmptyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np8JsonBool5CloneEP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np8JsonBool7GetBoolEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np8JsonNull5CloneEP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np8NpCommId7IsEmptyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np9EventFlag6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np9HttpTrans6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np9JsonArray5CloneEP16SceNpAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np9JsonValue12GetItemValueEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np9NpTitleId7IsEmptyEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZNK3sce2np9Semaphore6IsInitEv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np10MemoryFile5WriteEPNS0_6HandleEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np10MemoryFileD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np10MemoryFileD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np9HttpTrans5WriteEPNS0_6HandleEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np9HttpTransD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np9HttpTransD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np9LocalFile5WriteEPNS0_6HandleEPKvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np9LocalFileD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn16_N3sce2np9LocalFileD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np10MemoryFile4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np10MemoryFileD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np10MemoryFileD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np6Handle10CancelImplEi() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np6HandleD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np6HandleD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np9HttpTrans4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np9HttpTransD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np9HttpTransD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np9LocalFile4ReadEPNS0_6HandleEPvmPm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np9LocalFileD0Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZThn8_N3sce2np9LocalFileD1Ev() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZTVN3sce2np10JsonNumberE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZTVN3sce2np10JsonObjectE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZTVN3sce2np10JsonStringE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZTVN3sce2np8JsonBoolE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZTVN3sce2np8JsonNullE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZTVN3sce2np8SelectorE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZTVN3sce2np9JsonArrayE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI _ZTVN3sce2np9JsonValueE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpAllocateKernelMemoryNoAlignment() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpAllocateKernelMemoryWithAlignment() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpArchInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpArchTerm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpAtomicCas32() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpAtomicDec32() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpAtomicInc32() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpBase64Decoder() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpBase64Encoder() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpBase64GetDecodeSize() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpBase64UrlDecoder() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpBase64UrlEncoder() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpBase64UrlGetDecodeSize() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCalloutInitCtx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCalloutStartOnCtx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCalloutStartOnCtx64() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCalloutStopOnCtx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCalloutTermCtx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCancelEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpClearEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCloseEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCloseSema() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCondDestroy() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCondInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCondSignal() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCondSignalAll() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCondSignalTo() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCondTimedwait() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCondWait() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCreateEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCreateSema() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpCreateThread() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpDbgAssignDebugId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpDbgDumpBinary() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpDbgDumpText() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpDeleteEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpDeleteSema() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpEventGetCurrentNetworkTick() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpFreeKernelMemory() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGetNavSdkVersion() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGetPlatformType() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGetProcessId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGetRandom() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGetSdkVersion() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGetSdkVersionUInt() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGetSystemClockUsec() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGlobalHeapGetAllocator() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGlobalHeapGetAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGlobalHeapGetAllocatorExPtr() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpGlobalHeapGetAllocatorPtr() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpHeapDestroy() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpHeapGetAllocator() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpHeapGetStat() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpHeapInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpHeapShowStat() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpHexToInt() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpInt32ToStr() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpInt64ToStr() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpIntGetPlatformType() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpIntIsOnlineIdString() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpIntIsValidOnlineId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpIntSetPlatformType() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpIntToHex() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpIpc2ClientInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpIpc2ClientTerm() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpJoinThread() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpJsonParse() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpJsonParseBuf() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpJsonParseBufInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpJsonParseEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpJsonParseExInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpJsonParseInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwCondDestroy() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwCondInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwCondSignal() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwCondSignalAll() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwCondSignalTo() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwCondWait() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwMutexDestroy() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwMutexInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwMutexLock() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwMutexTryLock() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpLwMutexUnlock() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMemoryHeapDestroy() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMemoryHeapGetAllocator() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMemoryHeapGetAllocatorEx() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMemoryHeapInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMutexDestroy() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMutexInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMutexLock() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMutexTryLock() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpMutexUnlock() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpOpenEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpOpenSema() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpPanic() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpPollEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpPollSema() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpRtcConvertToPosixTime() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpRtcFormatRFC3339() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpRtcParseRFC3339() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpServerErrorJsonGetErrorCode() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpServerErrorJsonMultiGetErrorCode() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpServerErrorJsonParse() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpServerErrorJsonParseInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpServerErrorJsonParseMultiInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpSetEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpSetPlatformType() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpSignalSema() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrBuildHex() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrcpyToBuf() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrncpyToBuf() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrnParseHex() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrParseHex() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrToInt32() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrToInt64() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrToUInt32() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpStrToUInt64() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpThreadGetId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUInt32ToStr() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUInt64ToStr() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUserGetUserIdList() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilBuildTitleId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilCanonicalizeNpIdForPs4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilCanonicalizeNpIdForPsp2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilCmpAccountId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetDateSetAuto() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetDbgCommerce() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetEnv() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetFakeDisplayNameMode() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetFakeRateLimit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetIgnoreNpTitleId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetNpDebug() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetNpLanguageCode() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetNpLanguageCode2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetNpLanguageCode2Str() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetNpLanguageCodeStr() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetNpTestPatch() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetNthChar() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetShareTitleCheck() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetSystemLanguage() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetTrcNotify() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetWebApi2FakeRateLimit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetWebApi2FakeRateLimitTarget() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilGetWebTraceSetting() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilHttpUrlEncode() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilJidToNpId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilJsonEscape() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilJsonGetOneChar() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilJsonUnescape() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilNpIdToJid() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilNumChars() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilParseJid() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilParseTitleId() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilSerializeJid() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilXmlEscape() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilXmlGetOneChar() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpUtilXmlUnescape() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpWaitEventFlag() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpWaitSema() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpXmlParse() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceNpXmlParseInit() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_00FD578C2DD966DF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0131A2EA80689F4C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_01443C54863BDD20() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_01BC55BDC5C0ADAD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_01D1ECF5750F40E8() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_020A479A74F5FBAC() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_024AF5E1D9472AB5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_027C5D488713A6B3() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_02FE9D94C6858355() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_041F34F1C70D15C1() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0530B1D276114248() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_065DAA14E9C73AD9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_06AFF4E5D042BC3E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_06EE369299F73997() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_07C92D9F8D76B617() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_07E9117498F1E4BF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_08F3E0AF3664F275() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0A9937C01EF21375() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0ACBE6ACCBA3876D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0AE07D3354510CE6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0AEC3C342AE67B7C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0B318420C11E7C23() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0BB6C37B03F35D89() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0BBE8A9ACDD90FDF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0C7B62905E224E9C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0D35913117241AF9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0D5EE95CEED879A7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0D6FB24B27AB1DA2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0DE8032D534AC41C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0DF4CCA9DCA9E742() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0E7449B1D3D98C01() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0E77094B7750CB37() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0ECAB397B6D50603() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0F1DE1D1EADA2948() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_0F8AFEFA1D26BF1A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_11881710562A6BAD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_11AFD88BBD0C70DB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_11E704A30A4B8877() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_125014842452F94B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_126F0071E11CAC46() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_12926DCF35994B01() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_12CC7ABFBF31618F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_13C4E51F44592AA2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_15330E7C56338254() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1566B358CABF2612() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1625818F268F45EF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_16D32B40D28A9AC2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_183F4483BDBD25CD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1887E9E95AF62F3D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_18A3CE95FD893D3A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_18B3665E4854E7E9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1923B003948AF47E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_19B533DA4C59A532() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1BB399772DB68E08() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1C0AC612D3A2971B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1C5599B779990A43() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1CCBB296B04317BE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1CD045542FB93002() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1DECECA673AB77B7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1E03E024E26C1A7F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1F101732BB0D7E21() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1F4D153EC3DD47BB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1F7C47F63FAF0CBE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_1FBE2EE68C0F31B6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2038C1628914B9C9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_203FCB56FDB86A74() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_20569C107C6CB08C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_20AB2D734EDE55F0() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_22B1281180FB0A5E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_22F1AADA66A449AE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_238B215EFFDF3D30() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_24E8EC51D149FA15() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_25728E78A3962C02() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_25E649A1C6891C05() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_264B8A38B577705D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_266ED08DC1C82A0E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_27BB4DE62AB58BAD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_283AA96A196EA2EA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_285315A390A85A94() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_29049DBB1EF3194E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_29F7BA9C3732CB47() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2A732DF331ACCB37() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2AA01660EC75B6FB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2B37CBCE941C1681() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2CAA3B64D0544E55() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2CCD79617EC10A75() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2CD8B69716AC0667() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2D74F7C0FF9B5E9C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2DCA5A8080544E95() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2E69F2743CE7CE57() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_2EAF1F3BAFF0527D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_31493E55BB4E8F66() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_317EDCAD00FB5F5E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_31E01CFA8A18CDA2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_32AFD782A061B526() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_32B5CDEB093B8189() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_34155152513C93AE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_34E4EFFF8EF6C9FE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3572FA0D5C54563B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_367C479B264E0DB9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_36884FBC964B29CC() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3860081BB7559949() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_39314F7E674AB132() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3A02E780FCC556A5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3A17B885BA4849B6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3A38EACAEA5E23A4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3B34A5E07F0DBC1F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3B4E8FFC00FC7EA4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3BAB18FDA235107A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3BDF9996A0A33F11() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3C1952F1A45CC37A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3CA37906CDB05F3B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3CDB2908ACEE3A6F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3D3ED165F2BDCD33() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3DA4D7D1575FCDCE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3DDFB612CD0BC769() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3E0415E167DEADC7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3E7E9F0F1581C1E6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3ED389DB8280ED65() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3F0C7F6C0C35487D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3FDA7200389EF0D2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_3FF3C258BA516E58() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4029453F628A3C5D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_405826DDB4AE538E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_405A926759F25865() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_406608FDEE7AE88A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_40DDA5558C17DDCF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_419D12E52FF60664() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4296E539474BE77F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_42F41FC563CC3654() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_43CCC86F4C93026A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4409F60BDABC65E1() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4563C70AEC675382() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_45E66370219BD05E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_466A54F072785696() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_46CD2536976F209A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4863717BD2FDD157() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4902EBD19A263149() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4904F7FE8D83F40C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4A5E13F784ABFCE7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4B65EEB135C12781() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4C19D49978DA85E2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4DE5D620FF66F136() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4E170C12B57A8F9E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4E2F3FA405C3260C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4EA9350577513B4D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_4F78EB6FC4B5F21F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_50348BE4331117B7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_508C7E8CDD281CAA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_521C1D2C028F5A7E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_522FF24A35E67291() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5470FE90C25CDD4C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_557F260F9A4ACD18() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5586F97209F391EB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_55B2C9B7ADA95C3C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_55B488A3A540B936() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5642DFE82AF43143() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_574E046F294AE187() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_578926EBF8AA6CBF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_585DA5FC650896BC() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_58D6EB27349EC276() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5906B7317949872D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5910B5614335BE70() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_593D7DA8911F08C9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_59757FE6A93B0D53() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_598E60F862B1141E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5A45351666680DAF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5AABE9EA702E6A7F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5AEA4AE472355B80() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5B20E53CDE598741() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5B480B59FAE947E0() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5B5EEC23690AB9BD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5C0AC5B0AF3EDAE0() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5D2E999BEA0762D4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5D55BBFD45110E16() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_5DEE15403D2BB5FD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6020C708CA74B130() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_606E1415503C34D2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_612140E8EE9A693E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_61F13F551DAF61DF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6206D39131752328() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_621D4543EF0344DE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6259A9A8E56D0273() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_625F9C7016346F4E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_62EF8DF746CD8C4A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_636D2A99FD1E6B2B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_68013EDF66FE7425() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6971F7067DD639D1() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_69896ADB3AB410B2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6A1389AA6E561387() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6A5560D89F12B2E7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6ABF99CF854ABCF1() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6B4FDDC6500D8DCB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6CA11D5B49D1928A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6D6C0FB61E6D0715() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6D750745FE1348F5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6E1AF3F9D09914BE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6E53ED4C08B2A521() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6EF43ACA1ED6B968() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_6F6FA09F3E1B6A60() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7035C340C7195901() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7038E21CB5CF641B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_706345DCDA5BA44D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7120714EBF10BF1F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_713D28A91BC803DD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7153BD76A53AA012() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_715C625CC7041B6B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_71E467BDB18711D0() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_720D17965C1F4E3F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_734380C9BCF65B9A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_73F4C08CCD4BBCCF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_74403101B7B29D46() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7525B081ACD66FF4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_75BF4477C13A05CA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7609793F5987C6F7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7616ED01B04769AA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_764F873D91A124D8() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7706F1E123059565() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_77F2D07EB6D806E6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_79C3704CDCD59E57() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_79DA0BBA21351545() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_79FA2447B5F3F0C4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7A4D6F65FF6195A5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7B3195CD114DECE7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7B3238F2301AD36D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7C77FC70750A3266() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7D23A9DC459D6D18() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7D5988C748D0A05F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7D9597147A99F4F4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7E2953F407DD8346() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_7EE34E5099709B32() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_80470E5511D5CA00() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_807179701C08F069() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8096E81FFAF24E46() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_80B764F4F1B87042() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_80BF691438AD008B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_80CF6CFC96012442() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_80EA772F8C0519FD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_81D0AFD0084D327A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_821EB8A72176FD67() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_82D2FAB54127273F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_836AE669C42A59E9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8559A25BFEC3518C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_85C1F66C767A49D2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8689ED1383F87BA7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8796CD9E5355D3A6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_87D37EB6DDC19D99() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_880AA48F70F84FDD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_897B07562093665B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8ACAF55F16368087() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8AE8A5589B30D4E0() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8AE997909831B331() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8B2D640BE0D0FB99() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8B3D9AB4668DAECB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8B5EFAAAACE0B46C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8C27943F40A988DB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8C54096C75F5F2D0() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8D7663A0A5168814() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8E618F509994FAD7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8F19E6CC064E2B98() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8F6A8AEAEE922FF5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_9010E1AD8EBBFBCA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_90A955A0E7001AE9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_90F9D6067FEECC05() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_9348F3D19546A1DA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_93D3C011DB19388A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_956E7A4FD9F89103() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_95F699E042C3E40F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_96877B39AA0E8735() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_96CE07C49ED234EA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_976BB178235B5681() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_978C0B25E588C4D6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_98BA2612BEF238D6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_995BDD4931AF9137() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_9966E39A926B7250() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_99C2306F18963464() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_99C92C613B776BA7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_9A4E4B938CC8AD39() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_9B23F7B4B7F72081() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_9C0EAEEAE705A8DB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_9D47AC59545DE9E8() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A13052D8B1B2ACFA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A1AA43E3A78F6F62() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A1E48CDF54649DC9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A2E7DEE5B0AF5D14() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A2F5C7FD9FF113F5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A36296E2269D46BC() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A3EE2A7B9F0D88AF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A4471F9F7E0BFA82() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A449BBA521EA34E1() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A48E666C334E726C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A49B7449B4DDE69C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A5748451125C9EA4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A690A28D648CC176() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A6A86DE1B1CBB1D9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A8F2BB7B815740A1() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_A93F64C06A6F7397() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AB35925FC97D6AA3() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AC014AA2C991FA29() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AC06E10901404AEB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AC75C68813523505() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AD441BC497082C3E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AD4F25F021D354C3() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_ADFA04A85541A4FE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AE9610A6B5217A23() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AF201923826F0A58() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_AFC021B4389CA3FA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B015E999A3373D8F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B0384B86107FC652() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B0C630653B316563() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B100DCCD88D5C73D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B11A3FEA5E4D9EA4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B2E7F8DC199C0B93() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B3AB61A296F6DDC8() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B3F32F6AE619EC82() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B4227AB213BF8CF5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B4652BF42B604360() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B536C1F13BFE97CB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B645CC264184BC89() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B67E17B1582C6FBD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B6D047C5D7695A4D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B75ED8E1EA62EFC7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B7A9A944DBD7E100() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B7C4E75BE94F31F3() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B888B1F92C464121() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B8DEC22564AA057B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_B9BADD1CBBBAE4F8() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_BAA9F7169C85E59F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_BAEE5C38908D62DB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_BCC855EB25183F84() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_BD01F637029C7364() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_BDD29F5AC7077E53() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_BED83DD33ECAD50D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_BEE7D5D098ABF728() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C0DB15CCF59AE62C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C1C229FEE0FD60FA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C228B9AD68298E98() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C298525CEF6FB283() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C350F09351F6D6B5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C3742E80FA580319() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C3C9853D5D4D45D4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C3F5DAD4FB9FC340() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C45FB0E4CCE9AED6() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C4979CB948B7E3C7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C49B25BA16CF0B8C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C551345D9631201E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C57A294421368298() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C5DC91CAD721D628() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C6DECEE589135357() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C81F8B20D67AC78D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C820FA56FAC87BEA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C878EA9114C5E490() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C8A813EBFF477509() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C966A663D5A35482() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C97C4C67FD3674D3() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_C990550F15848B07() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CA59737A8EC1BBBE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CAC5FDE8F80D7B65() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CB135B30D0639B83() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CB8A1AAA61F64C3A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CB9E674672580757() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CC2B9D25EAEAAB1D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CD1B252BBEDF5B53() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CF003BE90CBE1A27() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_CF008E34884AC1E2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D0B8F4B3A3687AB2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D0EE19B8E91F60F5() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D12B9294BD0E0F56() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D1CC8626D8FA328B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D2FA2BB9EB8B63AC() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D32197880CF93CEB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D326F5C26CC81B8E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D4FA06B95A321B7A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D52A37A901E04B21() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D5504DFC399AB400() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D56105CB27F8F5DC() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D568AB19235ECB19() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D6DF7BF6639FE611() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D8608A903119D746() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D9E8FC707D59914D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_D9F079E62DEE5B29() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DA17CE4F29748536() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DA40B9EFD7F61185() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DA6B274FEBC2666A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DAD01535C87A51FC() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DB4511D448510EC4() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DB8EF1FFFC66269C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DBB508FA1B9DA8F7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DC59C9B870B729A2() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DC669ED6CBF6751C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DCB8A2849A41C991() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DD8F9916D7F03AF7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DDC33F2F4E480C2A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_DE0B420BDE8B22D7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E0C0BC29898FE370() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E0CD893E46FB55BA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E25530164B7F659F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E3682F43FDF76C58() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E38177E1C78A80FA() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E3CA74CFF965DF0A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E45BB191B49B2ED9() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E465B9D6B60E6D7D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E4D82876C296C38A() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E4DDB5350FA5B538() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E54BFF6FB72BC7BE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E592A93203020BBB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E5A44AF6D7D48AFD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E639A97CF9FF1430() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E6AC0179E48A8927() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E751596682775D83() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E788B1E52EF82702() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E94F17613F5C9D31() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E9590113128D55E0() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E9E0B0DD12560B16() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_EAF5C8ECE64C7B05() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_EB98BF5C42D4A7EB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_EBABC4AAC43A468C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_EBF00085F082CC8B() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_ECB659EE058D06AF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_ECF096AB751487AE() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_EE5A271701DB33C0() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_EF64CB6A1625248E() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_EF6C8A357C7ED863() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F00FE94F7E699994() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F1A51DBA30329038() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F216E766A90FDC12() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F2A10584ABE5D82C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F2D99D395E5421A3() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F38001E528BA1371() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F39EC9C8FA7687B3() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F3AFFFDCD632775C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F3B8DFF33748BFD3() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F5E47F9550F7A147() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F6E93714D1A939CF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F6FD19AD48E4EF09() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F744EBFC620F7CBF() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F76E4525ACBACC7F() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F7957A48882F42CB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F7A80B07809BA838() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F8571C6CC5B6B59D() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_F9787CFA873836FB() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_FA789F6D34D383F8() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_FABA574083AC1E6C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_FC04FDBBAE368FB7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_FD2DAFBF2E40EEE7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_FD55EE6D35F950AD() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_FE55EE32098D0D58() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_FE79841022E1DA1C() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_FFF4A3E279FB44A7() { + LOG_ERROR(Lib_NpCommon, "(STUBBED) called"); + return ORBIS_OK; +} + +void RegisterlibSceNpCommon(Core::Loader::SymbolsResolver* sym) { + LIB_FUNCTION("i8UmXTSq7N4", "libSceNpCommonCompat", 1, "libSceNpCommon", 1, 1, sceNpCmpNpId); + LIB_FUNCTION("TcwEFnakiSc", "libSceNpCommonCompat", 1, "libSceNpCommon", 1, 1, + sceNpCmpNpIdInOrder); + LIB_FUNCTION("dj+O5aD2a0Q", "libSceNpCommonCompat", 1, "libSceNpCommon", 1, 1, + sceNpCmpOnlineId); + LIB_FUNCTION("0gdlCVNNHCI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _sceNpAllocatorExConvertAllocator); + LIB_FUNCTION("Zh23aSLeeZo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpAllocatorExFree); + LIB_FUNCTION("a2qdVU8RWb4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _sceNpAllocatorExMalloc); + LIB_FUNCTION("kKF3w-XkCWA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _sceNpAllocatorExRealloc); + LIB_FUNCTION("Cmd4+m7V00c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _sceNpAllocatorExStrdup); + LIB_FUNCTION("EziLjfyTnKI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _sceNpAllocatorExStrndup); + LIB_FUNCTION("BztTl7QeYqE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpAllocatorFree); + LIB_FUNCTION("mzlILsFx0cU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpAllocatorMalloc); + LIB_FUNCTION("VWcTu8wKwlQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _sceNpAllocatorRealloc); + LIB_FUNCTION("c8-4aC9opYE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpAllocatorStrdup); + LIB_FUNCTION("vqA9bl6WsF0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _sceNpAllocatorStrndup); + LIB_FUNCTION("z5kwfM5InpI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpFree); + LIB_FUNCTION("p1vvpKGRXe4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpHeapFree); + LIB_FUNCTION("kwW5qddf+Lo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpHeapMalloc); + LIB_FUNCTION("wsfyvM+VbUk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpHeapRealloc); + LIB_FUNCTION("atWcfgasESY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpHeapStrdup); + LIB_FUNCTION("RzLv+HR5E2A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpHeapStrndup); + LIB_FUNCTION("w2+qV1RJgcI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpMalloc); + LIB_FUNCTION("UmzxltBpiiY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _sceNpRealloc); + LIB_FUNCTION("LJvHO3uCNm4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable10IsCanceledEv); + LIB_FUNCTION("fd+grYAEph0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable10LockCancelEPKciS3_); + LIB_FUNCTION("IwDQAbQxvD0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable11CheckCancelEPKciS3_); + LIB_FUNCTION("-zbpF68OGDs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable12UnlockCancelEPKciS3_); + LIB_FUNCTION("bBLapYYwyr0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable13SetCancelableEb); + LIB_FUNCTION("j4gLOIpHgNk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable14SetupSubCancelEPS1_PKciS4_); + LIB_FUNCTION("vmt3ZOlQu3o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable16CleanupSubCancelEPS1_); + LIB_FUNCTION("Y7f+qBjKxdo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable4InitEv); + LIB_FUNCTION("Jhbrpz0YhHU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable6CancelEij); + LIB_FUNCTION("v2yJZLY0w1U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10Cancelable7DestroyEv); + LIB_FUNCTION("vqekW3s-eFg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelableC2Ev); + LIB_FUNCTION("kdOC-2AE06w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelableD0Ev); + LIB_FUNCTION("upzdrzOYkS0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelableD1Ev); + LIB_FUNCTION("vZXDqs2x7t0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelableD2Ev); + LIB_FUNCTION("nleHqndSeQ0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelLock3EndEPKciS3_); + LIB_FUNCTION("lJ2Efd9PUKI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelLock5BeginEPNS0_6HandleEPKciS5_); + LIB_FUNCTION("Vq9LKkPXkIQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelLockC1Ev); + LIB_FUNCTION("MecB8wAHCfE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelLockC2Ev); + LIB_FUNCTION("K7FjXiy2z+A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelLockD1Ev); + LIB_FUNCTION("1iHBAKrdE90", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10CancelLockD2Ev); + LIB_FUNCTION("aoas3bJANfY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue10ClearAbortEt); + LIB_FUNCTION("QlP4t2SGZ4I", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue10TryDequeueEPvm); + LIB_FUNCTION("xu9qWN0YYC4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue4ctorEv); + LIB_FUNCTION("N1gnYosdK7Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue4dtorEv); + LIB_FUNCTION("b20e017Ei94", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue4InitEPKcmm); + LIB_FUNCTION("slmKkuIoC28", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue5AbortEt); + LIB_FUNCTION("suxln7PooIo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue7DequeueEPvmj); + LIB_FUNCTION("qvpEuKumIGM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue7DestroyEv); + LIB_FUNCTION("AV5jHo8O3+E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueue7EnqueueEPKvmj); + LIB_FUNCTION("esiO4He2WTU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueueC2EP16SceNpAllocatorEx); + LIB_FUNCTION("E4uoqSdo8ek", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueueD0Ev); + LIB_FUNCTION("lQXgvDXBGtA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueueD1Ev); + LIB_FUNCTION("8kUkQPQP7bA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10EventQueueD2Ev); + LIB_FUNCTION("YHNEgBCSL2o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonNumber5ClearEv); + LIB_FUNCTION("UgmqDr1BCLw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonNumber6SetNumEi); + LIB_FUNCTION("PccynQ5NdVQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonNumber6SetNumEj); + LIB_FUNCTION("MY0CSk24EcY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonNumber6SetNumEl); + LIB_FUNCTION("qbW7qOvVafI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonNumber6SetNumEm); + LIB_FUNCTION("VyCn9EVJGlU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonNumber6SetNumEPKc); + LIB_FUNCTION("-WgnISXjJ7A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonObject16DeleteFieldValueEPKc); + LIB_FUNCTION("DiHxx2k5zfM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonObject5ClearEv); + LIB_FUNCTION("AGadQiCfKDY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonParser4InitEPK7JsonDefPNS1_12EventHandlerE); + LIB_FUNCTION("CDzSgHA6hWg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonParser5ParseEPKcm); + LIB_FUNCTION("ZJbPQt+FTnY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonParserC2EP16SceNpAllocatorEx); + LIB_FUNCTION("u+A16O-TAHk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonParserD0Ev); + LIB_FUNCTION("qJb7IXDg9xk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonParserD1Ev); + LIB_FUNCTION("AvvE5A5A6ZA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonParserD2Ev); + LIB_FUNCTION("kXE1imLw7yo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonString5ClearEv); + LIB_FUNCTION("SN4IgvT26To", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10JsonString6SetStrEPKc); + LIB_FUNCTION("EyhtbPFMWNA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFile4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("AZTMWob-mog", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFile4SyncEv); + LIB_FUNCTION("dl6+SFHLke0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFile5CloseEv); + LIB_FUNCTION("r2O0f9X-mqs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFile5WriteEPNS0_6HandleEPKvmPm); + LIB_FUNCTION("1DtavqenQjg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFile8TruncateEl); + LIB_FUNCTION("ev77AviWYu8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFileC2EP16SceNpAllocatorEx); + LIB_FUNCTION("6Vst7HqJMXU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFileD0Ev); + LIB_FUNCTION("ZUf92uPkRuA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFileD1Ev); + LIB_FUNCTION("lGjyfcI++PY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np10MemoryFileD2Ev); + LIB_FUNCTION( + "ezJnmv7hkAg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12HttpTemplate19SetAuthInfoCallbackEPFii15SceHttpAuthTypePKcPcS5_iPPhPmPiPvESA_); + LIB_FUNCTION("iOTsJTR6Y9U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12HttpTemplate4InitEiPKcib); + LIB_FUNCTION("73qbxKjBH0o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12HttpTemplate7DestroyEv); + LIB_FUNCTION("Vj7HiXK-tTg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12HttpTemplateC1Ev); + LIB_FUNCTION("hw-UPUK9T+w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12HttpTemplateC2Ev); + LIB_FUNCTION("cXYOwTVAuMs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12HttpTemplateD0Ev); + LIB_FUNCTION("Bm74HLvoNY4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12HttpTemplateD1Ev); + LIB_FUNCTION("h6XPsGpHAtc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12HttpTemplateD2Ev); + LIB_FUNCTION("jr0OcEeQJ8o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamBufferixEi); + LIB_FUNCTION("rCRh3V03bPs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamReader4ReadEPNS0_6HandleEPNS0_9StreamCtxEPvmPm); + LIB_FUNCTION("2SKuIvr9sYU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamReader7ReadAllEPNS0_6HandleEPNS0_9StreamCtxEPvmPm); + LIB_FUNCTION("f1ncwa-JXlA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamReader7ReadAllEPNS0_6HandleEPvmPm); + LIB_FUNCTION("z8qO7hql4Fs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamReader8ReadDataEPNS0_6HandleEPNS0_9StreamCtxEPvmPm); + LIB_FUNCTION("oNqSobbGC80", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamReader8ReadDataEPNS0_6HandleEPvmPm); + LIB_FUNCTION("MSMPXUL5AuM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamReader8SkipDataEPNS0_6HandleElPl); + LIB_FUNCTION("fJB07vDf7no", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamReader8SkipDataEPNS0_6HandleEPNS0_9StreamCtxElPl); + LIB_FUNCTION("etMUeqIhN+w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamWriter15WriteFilledDataEPNS0_6HandleEcl); + LIB_FUNCTION("SP2010+gtqw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamWriter15WriteFilledDataEPNS0_6HandleEPNS0_9StreamCtxEcl); + LIB_FUNCTION("Z1MRG-L+V0o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamWriter5WriteEPNS0_6HandleEPNS0_9StreamCtxEPKvmPm); + LIB_FUNCTION("vHaV+tsSVu4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamWriter9WriteDataEPNS0_6HandleEPKvmPm); + LIB_FUNCTION("u9s1aUWSZB0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12StreamWriter9WriteDataEPNS0_6HandleEPNS0_9StreamCtxEPKvmPm); + LIB_FUNCTION("gimH2zdBANg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12WorkerThread10ThreadMainEv); + LIB_FUNCTION("YKz2oBW3ZkM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12WorkerThreadC1EPNS0_9WorkQueueE); + LIB_FUNCTION("L9Ty-fG1IM4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12WorkerThreadC2EPNS0_9WorkQueueE); + LIB_FUNCTION("f5L6ax7EWHk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12WorkerThreadD0Ev); + LIB_FUNCTION("PvGTq9AGFfk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12WorkerThreadD1Ev); + LIB_FUNCTION("+qB+WcQlMio", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np12WorkerThreadD2Ev); + LIB_FUNCTION("4nCyBD9jBus", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13JsonDocParser5ParseEPKcm); + LIB_FUNCTION("sgh9D+MBBKA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13JsonDocParser9GetResultEPPNS0_10JsonObjectE); + LIB_FUNCTION("lZWmdDoBDmI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13JsonDocParser9GetResultEPPNS0_9JsonValueE); + LIB_FUNCTION("yPmQcnrgR2Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13JsonDocParserC2EP16SceNpAllocatorExPK7JsonDef); + LIB_FUNCTION("p5hRe1k4Wlg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13JsonDocParserD0Ev); + LIB_FUNCTION("iFOXfoXRHFQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13JsonDocParserD1Ev); + LIB_FUNCTION("xS-Hjw1psYs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13JsonDocParserD2Ev); + LIB_FUNCTION("X0vEo7cZamA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecret5ClearEv); + LIB_FUNCTION("IjOpzNzl57o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretC1EPKvm); + LIB_FUNCTION("bC4+qi0mqJE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretC1ERK16SceNpTitleSecret); + LIB_FUNCTION("fYr7Ahl-vNA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretC1ERKS1_); + LIB_FUNCTION("08AQ2wYpzpk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretC1Ev); + LIB_FUNCTION("Ft-VezxSErk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretC2EPKvm); + LIB_FUNCTION("9QN7g5mQgCU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretC2ERK16SceNpTitleSecret); + LIB_FUNCTION("JHG9CTmkdQw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretC2ERKS1_); + LIB_FUNCTION("K1+uzxxReX0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretC2Ev); + LIB_FUNCTION("dJRIc7d5iqU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretD0Ev); + LIB_FUNCTION("XBzzdzT3qyg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretD1Ev); + LIB_FUNCTION("QDlnJL6stA0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13NpTitleSecretD2Ev); + LIB_FUNCTION("RPv5L-o5qRQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemory4ctorEv); + LIB_FUNCTION("NfhXX6LFmj8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemory4dtorEv); + LIB_FUNCTION("BkuxOAPlMMw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemory4InitEm); + LIB_FUNCTION("do0t--lEKMM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemory6ExpandEm); + LIB_FUNCTION("zdRXyt-65kA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemory6IsInitEv); + LIB_FUNCTION("Za00SEoNA2A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemory7DestroyEv); + LIB_FUNCTION("lGIw3qfqI60", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemoryC2EP16SceNpAllocatorEx); + LIB_FUNCTION("70qFzq4z3UI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemoryD0Ev); + LIB_FUNCTION("C1TJsMv9wb8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemoryD1Ev); + LIB_FUNCTION("EaxLv8TfsrM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np13RingBufMemoryD2Ev); + LIB_FUNCTION("j6CorpmdjRk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14CalloutContext4InitEPKcimm); + LIB_FUNCTION("oLpLfV2Ov9A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14CalloutContext4InitEPKNS1_5ParamE); + LIB_FUNCTION("C282U0P6Nwg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14CalloutContext7DestroyEv); + LIB_FUNCTION("dV+zK-Ce-2E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14CalloutContextC1Ev); + LIB_FUNCTION("j4IAvbKKTzw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14CalloutContextC2Ev); + LIB_FUNCTION("WR4mjQeqz6s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14CalloutContextD0Ev); + LIB_FUNCTION("S+a+rgnGX8A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14CalloutContextD1Ev); + LIB_FUNCTION("wY9g+hVxLTM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14CalloutContextD2Ev); + LIB_FUNCTION("PYBehFWVd60", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilder12BuildBufSizeEv); + LIB_FUNCTION("cLdoHqi5Ezg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilder16EscapeJsonStringEPKcPcmPm); + LIB_FUNCTION("V5xX2eroaWY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilder23EscapeJsonStringBufSizeEPKc); + LIB_FUNCTION("irex3q-O6po", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilder5BuildEPcmPm); + LIB_FUNCTION("ikFI73f3hP4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilderC1ERKNS0_9JsonValueE); + LIB_FUNCTION("dhJGQPKLmn0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilderC2ERKNS0_9JsonValueE); + LIB_FUNCTION("wDLaq7IgfIc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilderD0Ev); + LIB_FUNCTION("Kfv9jPxf7qA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilderD1Ev); + LIB_FUNCTION("MH0LyghLJEE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np14JsonDocBuilderD2Ev); + LIB_FUNCTION("pCIB7QX5e1g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np15CancelableScope3EndEiPKciS3_); + LIB_FUNCTION("Etvu03IpTEc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np15CancelableScope5BeginEPNS0_6HandleEPKciS5_); + LIB_FUNCTION("pp88xnRgJrM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np15CancelableScopeC2Ev); + LIB_FUNCTION("E8yuDNYbzl0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np15CancelableScopeD0Ev); + LIB_FUNCTION("km5-rjNjSFk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np15CancelableScopeD1Ev); + LIB_FUNCTION("xpLjHhJBhpo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np15CancelableScopeD2Ev); + LIB_FUNCTION("LCk8T5b1h+4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np16StreamReadBufferC2EP16SceNpAllocatorEx); + LIB_FUNCTION("ZufKqNXItD0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np16StreamReadBufferD1Ev); + LIB_FUNCTION("bH7ljyLOsBw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np16StreamReadBufferD2Ev); + LIB_FUNCTION("et05S+nkWG8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18HttpConnectionPool13InvalidateAllEv); + LIB_FUNCTION("Vzob5RCgfnY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18HttpConnectionPool4InitEi); + LIB_FUNCTION("iBdEFRdfpgg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18HttpConnectionPool7DestroyEv); + LIB_FUNCTION("PznfSvchYJ8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18HttpConnectionPoolC1EP16SceNpAllocatorEx); + LIB_FUNCTION("-2TYwZ4ERbM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18HttpConnectionPoolC2EP16SceNpAllocatorEx); + LIB_FUNCTION("5HWP63cOH+w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18HttpConnectionPoolD0Ev); + LIB_FUNCTION("kTfkKhcdW5Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18HttpConnectionPoolD1Ev); + LIB_FUNCTION("3MVW8+eWnjs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18HttpConnectionPoolD2Ev); + LIB_FUNCTION("ELa6nMcCO9w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamReader4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("UHj0GDTA2CU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamReaderC1EPKvm); + LIB_FUNCTION("WXRruhGp9dI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamReaderC2EPKvm); + LIB_FUNCTION("gA0CaCjJpg0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamReaderD0Ev); + LIB_FUNCTION("oULMh4JVC4o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamReaderD1Ev); + LIB_FUNCTION("rNJ1+3KoZP4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamReaderD2Ev); + LIB_FUNCTION("VxKQGrudnzk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamWriter5WriteEPNS0_6HandleEPKvmPm); + LIB_FUNCTION("Lkdm2yqZN1c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamWriterC1EPvm); + LIB_FUNCTION("abQ7xd3yVXM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamWriterC2EPvm); + LIB_FUNCTION("TXJnPiKuTf8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamWriterD0Ev); + LIB_FUNCTION("3VdCUl+DkNw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamWriterD1Ev); + LIB_FUNCTION("YmOVGwSJmzk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np18MemoryStreamWriterD2Ev); + LIB_FUNCTION("INZSjlRcuyQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np20BufferedStreamReader4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("3Ku9r8b6gCg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np20BufferedStreamReader5CloseEv); + LIB_FUNCTION("l6s7aomzWGA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np20BufferedStreamReaderC2EP16SceNpAllocatorEx); + LIB_FUNCTION("i28bR54-QFQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np20BufferedStreamReaderD0Ev); + LIB_FUNCTION("Tgr66MThOxA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np20BufferedStreamReaderD1Ev); + LIB_FUNCTION("PHWvRXbOnYs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np20BufferedStreamReaderD2Ev); + LIB_FUNCTION("7dyKpPHU+Yk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClient10DisconnectEv); + LIB_FUNCTION("prj9aMR74bA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClient11IsConnectedEv); + LIB_FUNCTION("r7UpNm1Po9s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClient16invokeSyncMethodEjPKvmPvPmm); + LIB_FUNCTION("+EQNga+wsPc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClient4ctorEv); + LIB_FUNCTION("2h59YqPcrdM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClient4dtorEv); + LIB_FUNCTION("iRH-NE2evR4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClient4InitEPKNS2_6ConfigE); + LIB_FUNCTION("CGKtxL26XqI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClient7ConnectEPKvm); + LIB_FUNCTION("+xvhXA8Ci4E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClient7DestroyEv); + LIB_FUNCTION("6aKYLBS8Di8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClientC1Ev); + LIB_FUNCTION("dqjlsaUX0sc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClientC2Ev); + LIB_FUNCTION("3LuoWoXJ1WI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClientD0Ev); + LIB_FUNCTION("DRbjyNom-BE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClientD1Ev); + LIB_FUNCTION("J1lpiTKAEuk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc10IpmiClientD2Ev); + LIB_FUNCTION( + "aQzxfON3l2Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc13ServiceClientC1EPNS1_17ServiceIpmiClientEPKNS1_17ServiceClientInfoE); + LIB_FUNCTION( + "Mx6wrcdGC2w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc13ServiceClientC2EPNS1_17ServiceIpmiClientEPKNS1_17ServiceClientInfoE); + LIB_FUNCTION("uvYTUK5xYG8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient10DisconnectEv); + LIB_FUNCTION("fFGPlE0oNhw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient10EndRequestEii); + LIB_FUNCTION("F2xYmg5DiR4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient11findServiceEi); + LIB_FUNCTION("G4FYQtsjOX0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient11InitServiceEi); + LIB_FUNCTION("0rqwC4+sgzU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient11TermServiceEi); + LIB_FUNCTION("oCx3mVNvqzU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient11WaitRequestEiij); + LIB_FUNCTION("tQOrMf4KtIo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient12AbortRequestEii); + LIB_FUNCTION("9aiQo-uRPJY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient12BeginRequestEii); + LIB_FUNCTION("H35UsHYlhB4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient13CreateRequestEPiiPKvm); + LIB_FUNCTION("cMj7li0eXgw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient13DeleteRequestEii); + LIB_FUNCTION("+ZC8QYB-BA8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient13PollEventFlagEijmjPm); + LIB_FUNCTION("4GZ9O-OrfzE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient13WaitEventFlagEijmjPmj); + LIB_FUNCTION("q+uCQLffwQE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient14PollEventQueueEiPvm); + LIB_FUNCTION("bH08FzR5rFU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient15CancelEventFlagEijm); + LIB_FUNCTION("stUzNgtFmtY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient15RegisterServiceEPKNS1_17ServiceClientInfoE); + LIB_FUNCTION("fqAS9GQTmOU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient16RegisterServicesEPKNS1_17ServiceClientInfoE); + LIB_FUNCTION("BJCXJJCi0Zc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient17invokeInitServiceEi); + LIB_FUNCTION("GuruEy9Q-Zk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient17invokeTermServiceEi); + LIB_FUNCTION("k9jCtANC+QM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient17UnregisterServiceEi); + LIB_FUNCTION("8TpAxZoLLRw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient18EndRequestForAsyncEii); + LIB_FUNCTION("1ONFW86TETY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient19WaitRequestForAsyncEiij); + LIB_FUNCTION("nQm4o5iOye0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient20AbortRequestForAsyncEii); + LIB_FUNCTION( + "ktb6iOBLnd4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient20BeginRequestForAsyncEiiPN4IPMI6Client12EventNotifeeE); + LIB_FUNCTION("v5Z2LAKua28", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient21CreateRequestForAsyncEPiiPKvm); + LIB_FUNCTION("7oJpAd+vJQA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient21DeleteRequestForAsyncEii); + LIB_FUNCTION("KxlKRHLf9AY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient4ctorEv); + LIB_FUNCTION("s+dG6iqG7j0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient4dtorEv); + LIB_FUNCTION("qFdG8Ucfeqg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient4InitEPNS2_6ConfigE); + LIB_FUNCTION("NTPZ5GZIA6U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient7ConnectEPKvm); + LIB_FUNCTION("IGngArGbzHo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClient7DestroyEv); + LIB_FUNCTION("FubuBXanVWk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClientC1Ev); + LIB_FUNCTION("zARyDXgocuk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClientC2Ev); + LIB_FUNCTION("PmsH4f3z8Yk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClientD0Ev); + LIB_FUNCTION("90XdvAqFFn8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClientD1Ev); + LIB_FUNCTION("agYDXAyL-K8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np3ipc17ServiceIpmiClientD2Ev); + LIB_FUNCTION("n9pzAHeCCVU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Cond4ctorEv); + LIB_FUNCTION("BtXPJQEg41Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Cond4dtorEv); + LIB_FUNCTION("wWTqVcTnep8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Cond4InitEPKcPNS0_5MutexE); + LIB_FUNCTION("SLPuaDLbeD4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Cond4WaitEj); + LIB_FUNCTION("OQiPXR6gfj0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Cond6SignalEv); + LIB_FUNCTION("I5uzTXxbziU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Cond7DestroyEv); + LIB_FUNCTION("-hchsElmzXY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Cond9SignalAllEv); + LIB_FUNCTION("3z5EPY-ph14", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np4CondC1Ev); + LIB_FUNCTION("6nW8WXQYRgM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np4CondC2Ev); + LIB_FUNCTION("AKiHGWhC2KU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np4CondD0Ev); + LIB_FUNCTION("yX9ISVXv+0M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np4CondD1Ev); + LIB_FUNCTION("6RQRpTn+-cc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np4CondD2Ev); + LIB_FUNCTION("6r6ssbPbKc4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Path11BuildAppendEPcmcPKcm); + LIB_FUNCTION("vfBKsg+lKWc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Path12AddDelimiterEPcmc); + LIB_FUNCTION("BqFx1VLEMPk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Path5ClearEv); + LIB_FUNCTION("AcG6blobOQE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Path6SetStrEPKcm); + LIB_FUNCTION("0fwoTW7gqfM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np4PathD0Ev); + LIB_FUNCTION("-3UvpBs-26g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np4PathD1Ev); + LIB_FUNCTION("1nF0eXrBZYM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np4PathD2Ev); + LIB_FUNCTION("KhoD7EapiYI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Time10AddMinutesEl); + LIB_FUNCTION("PgiCaoqRKKc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Time10AddSecondsEl); + LIB_FUNCTION("vINvzJOaqws", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Time12GetUserClockEPS1_); + LIB_FUNCTION("dLNhHwYyt4c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Time15AddMicroSecondsEl); + LIB_FUNCTION("WZqwoPoMzFA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Time15GetNetworkClockEPS1_); + LIB_FUNCTION("fimORKx4RDg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Time20GetDebugNetworkClockEPS1_); + LIB_FUNCTION("++qSDotsHuE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Time7AddDaysEl); + LIB_FUNCTION("Zc+a6k6i7gY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4Time8AddHoursEl); + LIB_FUNCTION("Fgm7cz6AX4k", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4TimeplERK10SceRtcTick); + LIB_FUNCTION("F9khEfgTmsE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np4TimeplERKS1_); + LIB_FUNCTION("I1kBZV6keO4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np5Mutex4ctorEv); + LIB_FUNCTION("mo+gaebiE+M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np5Mutex4dtorEv); + LIB_FUNCTION("aTNOl9EB4V4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np5Mutex4InitEPKcj); + LIB_FUNCTION("VM+CXTW4F-s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np5Mutex4LockEv); + LIB_FUNCTION("eYgHIWx0Hco", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np5Mutex6UnlockEv); + LIB_FUNCTION("RgGW4f0ox1g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np5Mutex7DestroyEv); + LIB_FUNCTION("TJNrs69haak", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np5Mutex7TryLockEv); + LIB_FUNCTION("O1AvlQU33pI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np5MutexC1Ev); + LIB_FUNCTION("2beu2bHw6qo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np5MutexC2Ev); + LIB_FUNCTION("omf1GoUEJCA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np5MutexD0Ev); + LIB_FUNCTION("9zi9FTPol74", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np5MutexD1Ev); + LIB_FUNCTION("CI7ciM21NXs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np5MutexD2Ev); + LIB_FUNCTION("uuyEiBHghY4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np5NpEnv8GetNpEnvEPS1_); + LIB_FUNCTION("-c9QK+CpQLg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Handle10CancelImplEi); + LIB_FUNCTION("ifqJb-V1QZw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Handle4InitEv); + LIB_FUNCTION("1atFu71dFAU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Handle7DestroyEv); + LIB_FUNCTION("KUJtztDMJYY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6HandleC1Ev); + LIB_FUNCTION("OhpofCxYOJc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6HandleC2Ev); + LIB_FUNCTION("ZOHgNNSZq4Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6HandleD0Ev); + LIB_FUNCTION("YWt5S4-cg9c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6HandleD1Ev); + LIB_FUNCTION("dt0A2cWjwLs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6HandleD2Ev); + LIB_FUNCTION("1x0jThSUr4w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectdaEPv); + LIB_FUNCTION("4il4PZAZOnQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectdaEPvR14SceNpAllocator); + LIB_FUNCTION("q2USyzLF4kI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectdaEPvR16SceNpAllocatorEx); + LIB_FUNCTION("CnDHI7sU+l0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectdlEPv); + LIB_FUNCTION("05KEwpDf4Ls", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectdlEPvR14SceNpAllocator); + LIB_FUNCTION("iwDNdnEGyhI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectdlEPvR16SceNpAllocatorEx); + LIB_FUNCTION("V75N47uYdQc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectnaEmR14SceNpAllocator); + LIB_FUNCTION("bKMVqRcCQ1U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectnaEmR16SceNpAllocatorEx); + LIB_FUNCTION("0syNkhJANVw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectnwEmR14SceNpAllocator); + LIB_FUNCTION("orRb69nSo64", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6ObjectnwEmR16SceNpAllocatorEx); + LIB_FUNCTION("Ehkz-BkTPwI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread12DoThreadMainEv); + LIB_FUNCTION("3CJl5ewd7-0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread4ctorEv); + LIB_FUNCTION("-3gV5N2u-sc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread4dtorEv); + LIB_FUNCTION("EqX45DhWUpo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread4InitEPKcimm); + LIB_FUNCTION("OoK0Ah0l1ko", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread4InitEPKNS1_5ParamE); + LIB_FUNCTION("ne77q1GOlF8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread4JoinEPi); + LIB_FUNCTION("VNKdE2Dgp0Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread5StartEv); + LIB_FUNCTION("sPti0OkVM8c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread7DestroyEv); + LIB_FUNCTION("uphWwLZAuXA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread9EntryFuncEPv); + LIB_FUNCTION("gnwCmkY-V70", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread9GetResultEv); + LIB_FUNCTION("qy4V8O+snLU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np6Thread9IsRunningEv); + LIB_FUNCTION("0f3ylOQJwqE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6ThreadC2Ev); + LIB_FUNCTION("MEYMyfJxWXg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6ThreadD0Ev); + LIB_FUNCTION("0Q5aKjYErBA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6ThreadD1Ev); + LIB_FUNCTION("6750DaF5Pas", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, _ZN3sce2np6ThreadD2Ev); + LIB_FUNCTION("xxOTJpEyoj4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7Callout10IsTimedoutEv); + LIB_FUNCTION("Zw3QlKu49eM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7Callout11CalloutFuncEPv); + LIB_FUNCTION("14PDhhMEBKY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7Callout4StopEv); + LIB_FUNCTION("TDuC6To9HJ8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7Callout5StartEjPNS1_7HandlerE); + LIB_FUNCTION("r0PYNWZLZS8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7Callout5StartEmPNS1_7HandlerE); + LIB_FUNCTION("3ErXia+y89M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7Callout9IsStartedEv); + LIB_FUNCTION("XEXFdmQj5oI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7CalloutC1EPNS0_14CalloutContextE); + LIB_FUNCTION("Bpay3NjseSU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7CalloutC2EPNS0_14CalloutContextE); + LIB_FUNCTION("Fx2UwoQVVmo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7CalloutD0Ev); + LIB_FUNCTION("kUitiIVR43g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7CalloutD1Ev); + LIB_FUNCTION("ebomQLbpptw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7CalloutD2Ev); + LIB_FUNCTION("YtzL-Rso9bk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7HttpUri5BuildEPKS1_PcmPmj); + LIB_FUNCTION("Xp92SsA5atA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7HttpUri5ParseEPS1_PKc); + LIB_FUNCTION("LL9z5QvmwaA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7HttpUriC1EP16SceNpAllocatorEx); + LIB_FUNCTION("q4G7qxTJWps", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7HttpUriC2EP16SceNpAllocatorEx); + LIB_FUNCTION("w+C8QXqZKSw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7HttpUriD0Ev); + LIB_FUNCTION("wSCKvDDBPy4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7HttpUriD1Ev); + LIB_FUNCTION("D-dT+vERWmU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7HttpUriD2Ev); + LIB_FUNCTION("oaSKGgwTWG0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf14CheckinForReadEm); + LIB_FUNCTION("78yvwepeL7U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf15CheckinForWriteEm); + LIB_FUNCTION("d8NGGmSEFfU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf15CheckoutForReadEPm); + LIB_FUNCTION("E2QFpAcDPq4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf16CheckoutForWriteEPm); + LIB_FUNCTION("1P-MUvbtyTM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf4ctorEv); + LIB_FUNCTION("rvz8xYxhMW0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf4dtorEv); + LIB_FUNCTION("IL3Wk7QuRhA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf4InitEPvm); + LIB_FUNCTION("kDaQLJv89bs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf4PeekEmPvm); + LIB_FUNCTION("Mg-IhL6SWfg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf4ReadEPvm); + LIB_FUNCTION("IZOGdJ+LFFU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf5ClearEv); + LIB_FUNCTION("8Y5OOBb0B5Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf5WriteEPKvm); + LIB_FUNCTION("u-TlLaJUJEA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBuf7DestroyEv); + LIB_FUNCTION("L5BnZpuQImk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBufC1Ev); + LIB_FUNCTION("e2a1ZA+lJC4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBufC2Ev); + LIB_FUNCTION("hfJ1gGLgvq8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBufD0Ev); + LIB_FUNCTION("7w+LeZ5ymys", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBufD1Ev); + LIB_FUNCTION("9+NmoosRoBA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np7RingBufD2Ev); + LIB_FUNCTION("d+xJZ63-wrc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8HttpFile4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("jcPO4bt5i3o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8HttpFile5CloseEv); + LIB_FUNCTION("RXdPqxVnrvo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8HttpFileC2EP16SceNpAllocatorEx); + LIB_FUNCTION("T2w3ndcG-+Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8HttpFileD0Ev); + LIB_FUNCTION("6fomUWNk6Xc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8HttpFileD1Ev); + LIB_FUNCTION("WAat5MtCKpc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8HttpFileD2Ev); + LIB_FUNCTION("uDyILPgHF9Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8JsonBool5ClearEv); + LIB_FUNCTION("FdpYFbq5C3Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8JsonBool7SetBoolEb); + LIB_FUNCTION("mFZezLIogNI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8JsonFile5CloseEv); + LIB_FUNCTION("hqPavTyQlNg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8JsonFileD0Ev); + LIB_FUNCTION("wzqAM7IYGzU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8JsonFileD1Ev); + LIB_FUNCTION("QFYVZvAJNC8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8JsonFileD2Ev); + LIB_FUNCTION("88GKkivBFhI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8JsonNull5ClearEv); + LIB_FUNCTION("WcLP8wPB9X4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommId5BuildERKS1_Pcm); + LIB_FUNCTION("LnjjzlJ+L5c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommId5ClearEv); + LIB_FUNCTION("1TjLUwirok0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommId5ParseEPS1_PKc); + LIB_FUNCTION("UrJocI5M8GY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommId5ParseEPS1_PKcm); + LIB_FUNCTION("To1XvNOzjo0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdC1ERK20SceNpCommunicationId); + LIB_FUNCTION("N6SkkX1GkFU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdC1ERKS1_); + LIB_FUNCTION("AQyiYChNI0c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdC1Ev); + LIB_FUNCTION("WywlusFissg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdC2ERK20SceNpCommunicationId); + LIB_FUNCTION("rB0oqLSjH6g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdC2ERKS1_); + LIB_FUNCTION("BBtBjx9-bMI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdC2Ev); + LIB_FUNCTION("XeCZTzqIk2k", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdD0Ev); + LIB_FUNCTION("EPJbX73AVeU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdD1Ev); + LIB_FUNCTION("hP18CDS6eBU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8NpCommIdD2Ev); + LIB_FUNCTION("5WuiSZkU3mg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8Selector4InitEPKc); + LIB_FUNCTION("2HkOOhiWK3M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8SelectorD0Ev); + LIB_FUNCTION("asZdig1mPlA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8SelectorD1Ev); + LIB_FUNCTION("PA9VYFAVKIE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8SelectorD2Ev); + LIB_FUNCTION("2YbS+GhInZQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItem10SetPendingEv); + LIB_FUNCTION("XUCjhejJvPc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItem10SetRunningEv); + LIB_FUNCTION("-91vFSqiuKw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItem11SetFinishedEi); + LIB_FUNCTION("zepqHjfGe0M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItem14FinishCallbackEv); + LIB_FUNCTION("3rGzxcMK-Mg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItem15RemoveFromQueueEv); + LIB_FUNCTION("Oq5aepLkEWg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItem6CancelEi); + LIB_FUNCTION("gnh2cpEgSS8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItem9BindQueueEPNS0_9WorkQueueEi); + LIB_FUNCTION("HldN461O2Dw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItemC2EPKc); + LIB_FUNCTION("Y-I66cSNp+A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItemD0Ev); + LIB_FUNCTION("dnwItoXLoy4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItemD1Ev); + LIB_FUNCTION("ga4OW9MGahU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np8WorkItemD2Ev); + LIB_FUNCTION("8i-vOVRVt5w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag3SetEm); + LIB_FUNCTION("vhbvgH7wWiE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag4ctorEv); + LIB_FUNCTION("5nM4Yy92Qwg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag4dtorEv); + LIB_FUNCTION("5Wy+JxpCBxg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag4OpenEPKc); + LIB_FUNCTION("37Rd2JS+FCM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag4PollEmjPm); + LIB_FUNCTION("1s+c3SG0WYc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag4WaitEmjPmj); + LIB_FUNCTION("03UlDLFsTfw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag5ClearEm); + LIB_FUNCTION("wJ-k9+UShJg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag6CancelEm); + LIB_FUNCTION("amFi-Av19hU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag6CreateEPKcj); + LIB_FUNCTION("QlaBcxSFPZI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlag7DestroyEv); + LIB_FUNCTION("cMOgkE2M2e8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlagC1Ev); + LIB_FUNCTION("Uv1IQpTWecw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlagC2Ev); + LIB_FUNCTION("uHOOEbuzjEQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlagD0Ev); + LIB_FUNCTION("WWW4bvT-rSw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlagD1Ev); + LIB_FUNCTION("RpWWfCEs9xA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9EventFlagD2Ev); + LIB_FUNCTION("jDDvll2aQpQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans10SetTimeoutEPKNS1_12TimeoutParamE); + LIB_FUNCTION("+hKyaJJCE+0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans11SendRequestEPNS0_6HandleEPKvm); + LIB_FUNCTION("EhLaOnhdcXo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans12RecvResponseEPNS0_6HandleEPvmPm); + LIB_FUNCTION("fV+Q5a6p+zQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans12SkipResponseEPNS0_6HandleE); + LIB_FUNCTION("Qfsmqs-bHeY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans16AddRequestHeaderEPKcS3_); + LIB_FUNCTION("6bYsRATI3tQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans16SetRequestHeaderEPKcS3_); + LIB_FUNCTION("WoFp77mNyw0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans21GetResponseStatusCodeEPNS0_6HandleEPi); + LIB_FUNCTION("RJOlguLEy-E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans21SetRequestContentTypeEPKc); + LIB_FUNCTION("ws3x3yjUyeE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans23SetRequestContentLengthEm); + LIB_FUNCTION("YW09CP0Vrtw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans24GetResponseContentLengthEPNS0_6HandleEPbPm); + LIB_FUNCTION("JEYp0T1VC58", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans4InitERKNS0_12HttpTemplateEPNS0_18HttpConnectionPoolEiPKcm); + LIB_FUNCTION( + "O+FeLkOM7w0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans4InitERKNS0_12HttpTemplateEPNS0_18HttpConnectionPoolEiPKcS8_tS8_m); + LIB_FUNCTION("aWo+7jvpllY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("cocNRQpq+NA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans5WriteEPNS0_6HandleEPKvmPm); + LIB_FUNCTION("2e9GLlHTKA4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTrans7DestroyEv); + LIB_FUNCTION("sqNxD6H5ZOQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTransC1EP16SceNpAllocatorEx); + LIB_FUNCTION("HEeXBdgvJI4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTransC2EP16SceNpAllocatorEx); + LIB_FUNCTION("Pe9fHKX7krE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTransD0Ev); + LIB_FUNCTION("ls8yIODZmzc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTransD1Ev); + LIB_FUNCTION("GSVe-aaTiEg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9HttpTransD2Ev); + LIB_FUNCTION("4cIJxNKQK5g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9JsonArray12AddItemArrayEPPS1_); + LIB_FUNCTION("cWsZswBMjqg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9JsonArray5ClearEv); + LIB_FUNCTION("aCZjveAsynw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9JsonValue12GetItemValueEi); + LIB_FUNCTION("aIV+HI6llz4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9JsonValue13GetFieldValueEiPPKc); + LIB_FUNCTION("BDie4qEtKuA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9JsonValue13GetFieldValueEPKc); + LIB_FUNCTION("LotC9rVP3Lo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9JsonValueD0Ev); + LIB_FUNCTION("hBuLbn3mGBw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9JsonValueD1Ev); + LIB_FUNCTION("FfSNfBmn+K8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9JsonValueD2Ev); + LIB_FUNCTION("PsP6LYRZ7Dc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFile4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("Flyyg6hzUOM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFile4SeekEliPl); + LIB_FUNCTION("YtvLEI7uZRI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFile4SyncEv); + LIB_FUNCTION("9q+h2q5YprU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFile5CloseEv); + LIB_FUNCTION("0xL7AwgxphE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFile5WriteEPNS0_6HandleEPKvmPm); + LIB_FUNCTION("haDbtVOmaao", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFile6RemoveEPKc); + LIB_FUNCTION("Sgo7wy9okFI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFile8TruncateEl); + LIB_FUNCTION("QWlZu1JZOww", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFileC1Ev); + LIB_FUNCTION("HP4jsVYqBKg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFileC2Ev); + LIB_FUNCTION("-n0CR0QxhnY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFileD0Ev); + LIB_FUNCTION("3eoh4hjcYag", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFileD1Ev); + LIB_FUNCTION("s-C88O6Y8iU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9LocalFileD2Ev); + LIB_FUNCTION("euE6Yo5hkrY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleId5BuildERKS1_Pcm); + LIB_FUNCTION("a76a3D9Adts", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleId5ClearEv); + LIB_FUNCTION("4O8lYvForpk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleId5ParseEPS1_PKc); + LIB_FUNCTION("-swgMjedLUQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleId5ParseEPS1_PKcm); + LIB_FUNCTION("Fcvdbqpwpnw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdC1ERK12SceNpTitleId); + LIB_FUNCTION("wd+YWDKMTQE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdC1ERKS1_); + LIB_FUNCTION("-Ja2aT6A3fg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdC1Ev); + LIB_FUNCTION("9n60S+t4Cxs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdC2ERK12SceNpTitleId); + LIB_FUNCTION("IefAhNUAivM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdC2ERKS1_); + LIB_FUNCTION("OL7DU1kkm+4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdC2Ev); + LIB_FUNCTION("rFcQRK+GMcQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdD0Ev); + LIB_FUNCTION("TGJ5bE+Fb1s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdD1Ev); + LIB_FUNCTION("XKVRBLdw+7I", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9NpTitleIdD2Ev); + LIB_FUNCTION("zurkNUps5o8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9RefObject6AddRefEv); + LIB_FUNCTION("5tYi1l9CXD0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9RefObject7ReleaseEv); + LIB_FUNCTION("brUrttJp6MM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9RefObjectC1Ev); + LIB_FUNCTION("JRtw5pROOiM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9RefObjectC2Ev); + LIB_FUNCTION("8DrClRz7Z2U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9RefObjectD0Ev); + LIB_FUNCTION("lPQzOhwPjuw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9RefObjectD1Ev); + LIB_FUNCTION("417JucZaE3g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9RefObjectD2Ev); + LIB_FUNCTION("EFffsPLsOio", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9Semaphore4OpenEPKc); + LIB_FUNCTION("hQLw6eE4O44", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9Semaphore4WaitEj); + LIB_FUNCTION("wcOCedFKan4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9Semaphore6CreateEiiPKc); + LIB_FUNCTION("b7qnGORh+H4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9Semaphore6SignalEv); + LIB_FUNCTION("Es-CwSVnalY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9Semaphore7DestroyEv); + LIB_FUNCTION("Tuth2BRl4x0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9SemaphoreC1Ev); + LIB_FUNCTION("8k1rNqvczTc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9SemaphoreC2Ev); + LIB_FUNCTION("S6luQz76AQ4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9SemaphoreD0Ev); + LIB_FUNCTION("nW9XeX3eokI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9SemaphoreD1Ev); + LIB_FUNCTION("OukNoRur97E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9SemaphoreD2Ev); + LIB_FUNCTION("F2umEBpQFHc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue11GetItemByIdEi); + LIB_FUNCTION("wM4q1JMisvA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue15GetFinishedItemENS0_14WorkItemStatusE); + LIB_FUNCTION("UYAD7sUQcYU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue16WorkItemFinishedEPNS0_8WorkItemEi); + LIB_FUNCTION("-9cU3y6rXVM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue17ProcFinishedItemsENS0_14WorkItemStatusE); + LIB_FUNCTION("ovc4ZvD0YjY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue18RemoveFinishedItemEPNS0_8WorkItemE); + LIB_FUNCTION("vPju3W13byw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue18WaitForPendingItemEPPNS0_8WorkItemEPb); + LIB_FUNCTION("XMIv42L5bEA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue4ctorEv); + LIB_FUNCTION("wESN-qrVhOU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue4dtorEv); + LIB_FUNCTION("+dGO+GS2ZXQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue4InitEPKcimm); + LIB_FUNCTION("U0YoWwgg8aI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue4InitEPKNS0_6Thread5ParamE); + LIB_FUNCTION("4DE+nnCVRPA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue4StopEv); + LIB_FUNCTION("VnQolo6vTr4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue5StartEv); + LIB_FUNCTION("laqZEULcfgw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue6CancelEii); + LIB_FUNCTION("CznMfhTIvVY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue6IsInitEv); + LIB_FUNCTION("NeopmYshD0U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue7DestroyEv); + LIB_FUNCTION("KQSxXJBepQ4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue7EnqueueEiPNS0_8WorkItemE); + LIB_FUNCTION("zmOmSLnqlBQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue9CancelAllEi); + LIB_FUNCTION("eTy3L1azX4E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueue9IsRunningEv); + LIB_FUNCTION("X6NVkdpRnog", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueueC1Ev); + LIB_FUNCTION("p+bd65J177I", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueueC2Ev); + LIB_FUNCTION("uyNO0GnFhPw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueueD0Ev); + LIB_FUNCTION("1QFKnDJxk3A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueueD1Ev); + LIB_FUNCTION("AIDhc3KCK7w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2np9WorkQueueD2Ev); + LIB_FUNCTION("XLpPRMl5jro", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERK10SceRtcTickRKNS0_4TimeE); + LIB_FUNCTION("6jHOZ6fItFU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERK12SceNpTitleIdRKNS0_9NpTitleIdE); + LIB_FUNCTION("i+xzwYeeEtk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERK16SceNpTitleSecretRKNS0_13NpTitleSecretE); + LIB_FUNCTION("ZWZ9KqoIvQY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERK20SceNpCommunicationIdRKNS0_8NpCommIdE); + LIB_FUNCTION("Vsj50ZwNUFM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERKNS0_13NpTitleSecretERK16SceNpTitleSecret); + LIB_FUNCTION("WM5DPO-LryU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERKNS0_13NpTitleSecretES3_); + LIB_FUNCTION("ps246w9eXI8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERKNS0_4TimeERK10SceRtcTick); + LIB_FUNCTION("UVLmT9lzRYA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERKNS0_4TimeES3_); + LIB_FUNCTION("WaNQzws1ATU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERKNS0_8NpCommIdERK20SceNpCommunicationId); + LIB_FUNCTION("E-mYAG-aa1A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERKNS0_8NpCommIdES3_); + LIB_FUNCTION("FmDmhB16wwE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERKNS0_9NpTitleIdERK12SceNpTitleId); + LIB_FUNCTION("niXN2N4o3yY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npeqERKNS0_9NpTitleIdES3_); + LIB_FUNCTION("gKruhA35EXQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npgeERK10SceRtcTickRKNS0_4TimeE); + LIB_FUNCTION("1mnghWFX0wQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npgeERKNS0_4TimeERK10SceRtcTick); + LIB_FUNCTION("svAQxJ3yow4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npgeERKNS0_4TimeES3_); + LIB_FUNCTION("oVZ6spoeeN0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npgtERK10SceRtcTickRKNS0_4TimeE); + LIB_FUNCTION("snloJp6qQCc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npgtERKNS0_4TimeERK10SceRtcTick); + LIB_FUNCTION("EFES6UR65oU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npgtERKNS0_4TimeES3_); + LIB_FUNCTION("UIrMxV07mL0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npleERK10SceRtcTickRKNS0_4TimeE); + LIB_FUNCTION("cAeFZE72SXU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npleERKNS0_4TimeERK10SceRtcTick); + LIB_FUNCTION("ttA9TcO06uA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npleERKNS0_4TimeES3_); + LIB_FUNCTION("rVtImV4rxSA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npltERK10SceRtcTickRKNS0_4TimeE); + LIB_FUNCTION("nVB1Nsjwpj0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npltERKNS0_4TimeERK10SceRtcTick); + LIB_FUNCTION("d0zSLZMER34", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npltERKNS0_4TimeES3_); + LIB_FUNCTION("MVY+jtY-WiQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERK10SceRtcTickRKNS0_4TimeE); + LIB_FUNCTION("tDs31ASQGV8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERK12SceNpTitleIdRKNS0_9NpTitleIdE); + LIB_FUNCTION("OwsjgCQyZUI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERK16SceNpTitleSecretRKNS0_13NpTitleSecretE); + LIB_FUNCTION("O5QkjyiPM4c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERK20SceNpCommunicationIdRKNS0_8NpCommIdE); + LIB_FUNCTION("7b5y1XSa+KQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERKNS0_13NpTitleSecretERK16SceNpTitleSecret); + LIB_FUNCTION("zbliTwZKRyU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERKNS0_13NpTitleSecretES3_); + LIB_FUNCTION("yXMjXN--3rY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERKNS0_4TimeERK10SceRtcTick); + LIB_FUNCTION("cnoM7EjlLe4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERKNS0_4TimeES3_); + LIB_FUNCTION("SM7OEf11LCA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERKNS0_8NpCommIdERK20SceNpCommunicationId); + LIB_FUNCTION("QQCqBHk79sI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERKNS0_8NpCommIdES3_); + LIB_FUNCTION("ONgEITYl9mA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERKNS0_9NpTitleIdERK12SceNpTitleId); + LIB_FUNCTION("9pp9-dwqIHM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZN3sce2npneERKNS0_9NpTitleIdES3_); + LIB_FUNCTION("KyDWNwpREH4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10Cancelable6IsInitEv); + LIB_FUNCTION("VI8AHrfLdqY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10EventQueue6IsInitEv); + LIB_FUNCTION("jxPY-0x8e-M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10EventQueue7IsEmptyEv); + LIB_FUNCTION("COxqqhvLSyM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10JsonNumber5CloneEP16SceNpAllocatorEx); + LIB_FUNCTION("m+dAaZ5pyO4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10JsonNumber6GetNumEPcm); + LIB_FUNCTION("Sk8AdNQUDm8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10JsonNumber6GetNumEPi); + LIB_FUNCTION("nHgo2VpnCB8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10JsonNumber6GetNumEPj); + LIB_FUNCTION("Agsyrf4L8uA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10JsonNumber6GetNumEPl); + LIB_FUNCTION("P2cGbJ5nD1w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np10JsonNumber6GetNumEPm); + LIB_FUNCTION("EcboqmwkrMY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np9JsonArray5CloneEP16SceNpAllocatorEx); + LIB_FUNCTION("JcAsZlyr3Mo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np9JsonValue12GetItemValueEi); + LIB_FUNCTION("XZTZqqSVGlY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np9NpTitleId7IsEmptyEv); + LIB_FUNCTION("sreH33xjV0A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZNK3sce2np9Semaphore6IsInitEv); + LIB_FUNCTION("QwO4sr6XzSY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np10MemoryFile5WriteEPNS0_6HandleEPKvmPm); + LIB_FUNCTION("ojBk-UJxzWw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np10MemoryFileD0Ev); + LIB_FUNCTION("8S1mWU-N9kM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np10MemoryFileD1Ev); + LIB_FUNCTION("eRlqlofFKYg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np9HttpTrans5WriteEPNS0_6HandleEPKvmPm); + LIB_FUNCTION("zWIFe+d77PU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np9HttpTransD0Ev); + LIB_FUNCTION("GG1Y+vBUkdU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np9HttpTransD1Ev); + LIB_FUNCTION("+3ySpB1buMs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np9LocalFile5WriteEPNS0_6HandleEPKvmPm); + LIB_FUNCTION("hSnLhjGefsU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np9LocalFileD0Ev); + LIB_FUNCTION("q3s6++iIzjE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn16_N3sce2np9LocalFileD1Ev); + LIB_FUNCTION("E6GYo9uzjds", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np10MemoryFile4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("7bzUdBtIQhE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np10MemoryFileD0Ev); + LIB_FUNCTION("lNs-oTKpG9s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np10MemoryFileD1Ev); + LIB_FUNCTION("xDrWJARfCbk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np6Handle10CancelImplEi); + LIB_FUNCTION("YqMS-iAjFY8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np6HandleD0Ev); + LIB_FUNCTION("lUsG1QfgVN4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np6HandleD1Ev); + LIB_FUNCTION("G+v692ul7MA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np9HttpTrans4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("sGhCzaJf+jQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np9HttpTransD0Ev); + LIB_FUNCTION("PUqCtFwnNvA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np9HttpTransD1Ev); + LIB_FUNCTION("NtsHoOq2ao4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np9LocalFile4ReadEPNS0_6HandleEPvmPm); + LIB_FUNCTION("Gh35wbyg4U8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np9LocalFileD0Ev); + LIB_FUNCTION("kD3l0P19Wzg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZThn8_N3sce2np9LocalFileD1Ev); + LIB_FUNCTION("IvTsS4VJq1w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZTVN3sce2np10JsonNumberE); + LIB_FUNCTION("aLGD1kOLQXE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZTVN3sce2np10JsonObjectE); + LIB_FUNCTION("1At86OClqtY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZTVN3sce2np10JsonStringE); + LIB_FUNCTION("jsHe99x6l0w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZTVN3sce2np8JsonBoolE); + LIB_FUNCTION("A742Lh-FnVE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZTVN3sce2np8JsonNullE); + LIB_FUNCTION("FfXZGW1TMvo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZTVN3sce2np8SelectorE); + LIB_FUNCTION("0qrLVqNUn2Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZTVN3sce2np9JsonArrayE); + LIB_FUNCTION("S8TLtKfZCfc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + _ZTVN3sce2np9JsonValueE); + LIB_FUNCTION("MWPOkqzYss0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpAllocateKernelMemoryNoAlignment); + LIB_FUNCTION("gMlY6eewr-c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpAllocateKernelMemoryWithAlignment); + LIB_FUNCTION("jGF+MaB4b-M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpArchInit); + LIB_FUNCTION("UskWpVWxSvg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpArchTerm); + LIB_FUNCTION("+9+kKMY9YIw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpAtomicCas32); + LIB_FUNCTION("Yohe0MMDfj0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpAtomicDec32); + LIB_FUNCTION("pfJgSA4jO3M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpAtomicInc32); + LIB_FUNCTION("l67qBmMmKP4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpBase64Decoder); + LIB_FUNCTION("pu39pU8UgCo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpBase64Encoder); + LIB_FUNCTION("a5IfPlpchXI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpBase64GetDecodeSize); + LIB_FUNCTION("moGcgMNTHvQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpBase64UrlDecoder); + LIB_FUNCTION("IeNj+OcWgU8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpBase64UrlEncoder); + LIB_FUNCTION("7BjZKcN+oZ4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpBase64UrlGetDecodeSize); + LIB_FUNCTION("9+m5nRdJ-wQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCalloutInitCtx); + LIB_FUNCTION("fClnlkZmA6k", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpCalloutStartOnCtx); + LIB_FUNCTION("lpr66Gby8dQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpCalloutStartOnCtx64); + LIB_FUNCTION("in19gH7G040", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCalloutStopOnCtx); + LIB_FUNCTION("AqJ4xkWsV+I", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCalloutTermCtx); + LIB_FUNCTION("kb2thTuS8t8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCancelEventFlag); + LIB_FUNCTION("9pLoHoPMxeg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpClearEventFlag); + LIB_FUNCTION("+nmn+Z0nWDo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCloseEventFlag); + LIB_FUNCTION("8hPzfjZzV88", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCloseSema); + LIB_FUNCTION("i8UmXTSq7N4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCmpNpId); + LIB_FUNCTION("TcwEFnakiSc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCmpNpIdInOrder); + LIB_FUNCTION("dj+O5aD2a0Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCmpOnlineId); + LIB_FUNCTION("1a+iY5YUJcI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCondDestroy); + LIB_FUNCTION("q2tsVO3lM4A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCondInit); + LIB_FUNCTION("uMJFOA62mVU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCondSignal); + LIB_FUNCTION("bsjWg59A7aE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCondSignalAll); + LIB_FUNCTION("bAHIOyNnx5Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCondSignalTo); + LIB_FUNCTION("ss2xO9IJxKQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCondTimedwait); + LIB_FUNCTION("fZShld2PQ7w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCondWait); + LIB_FUNCTION("6jFWpAfqAcc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCreateEventFlag); + LIB_FUNCTION("LHZtCT2W1Pw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCreateSema); + LIB_FUNCTION("fhJ5uKzcn0w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpCreateThread); + LIB_FUNCTION("90pmGqDK4BI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpDbgAssignDebugId); + LIB_FUNCTION("Etq15-l9yko", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpDbgDumpBinary); + LIB_FUNCTION("ZaKa5x61hGA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpDbgDumpText); + LIB_FUNCTION("sjnIeFCuTD0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpDeleteEventFlag); + LIB_FUNCTION("xPrF2nGPBXQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpDeleteSema); + LIB_FUNCTION("OQTweRLgFr8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpEventGetCurrentNetworkTick); + LIB_FUNCTION("vjwlDmsGtME", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpFreeKernelMemory); + LIB_FUNCTION("QmDEFikd3VA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpGetNavSdkVersion); + LIB_FUNCTION("sXVQUIGmk2U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpGetPlatformType); + LIB_FUNCTION("Z3mnqcGmf8E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpGetProcessId); + LIB_FUNCTION("pJlGhXEt5CU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpGetRandom); + LIB_FUNCTION("Pglk7zFj0DI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpGetSdkVersion); + LIB_FUNCTION("ljqnF0hmLjo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpGetSdkVersionUInt); + LIB_FUNCTION("PVVsRmMkO1g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpGetSystemClockUsec); + LIB_FUNCTION("-gN6uE+zWng", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpGlobalHeapGetAllocator); + LIB_FUNCTION("VUHUasztbUY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpGlobalHeapGetAllocatorEx); + LIB_FUNCTION("P4YpPziLBd4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpGlobalHeapGetAllocatorExPtr); + LIB_FUNCTION("DI5n4aOdxmk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpGlobalHeapGetAllocatorPtr); + LIB_FUNCTION("wVdn78HKc30", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpHeapDestroy); + LIB_FUNCTION("lvek8w7yqyE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpHeapGetAllocator); + LIB_FUNCTION("2jdHoPpS+W0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpHeapGetStat); + LIB_FUNCTION("B+yGIX1+BTI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpHeapInit); + LIB_FUNCTION("evz0-93ucJc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpHeapShowStat); + LIB_FUNCTION("Hvpr+otU4bo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpHexToInt); + LIB_FUNCTION("5y0wMPQkaeU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpInt32ToStr); + LIB_FUNCTION("HoPC33siDD4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpInt64ToStr); + LIB_FUNCTION("G6qytFoBJ-w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpIntGetPlatformType); + LIB_FUNCTION("fY4XQoA20i8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpIntIsOnlineIdString); + LIB_FUNCTION("hkeX9iuCwlI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpIntIsValidOnlineId); + LIB_FUNCTION("X6emt+LbSEI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpIntSetPlatformType); + LIB_FUNCTION("TWPY1x1Atys", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpIntToHex); + LIB_FUNCTION("kgDwlmy78k0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpIpc2ClientInit); + LIB_FUNCTION("CI2p6Viee9w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpIpc2ClientTerm); + LIB_FUNCTION("EjMsfO3GCIA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpJoinThread); + LIB_FUNCTION("vJGDnNh4I0g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpJsonParse); + LIB_FUNCTION("RgfCYkjW7As", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpJsonParseBuf); + LIB_FUNCTION("SnAdybtBK3o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpJsonParseBufInit); + LIB_FUNCTION("p5ZkSMRR7AU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpJsonParseEx); + LIB_FUNCTION("nhgjiwPUIzI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpJsonParseExInit); + LIB_FUNCTION("teVnFAL6GNY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpJsonParseInit); + LIB_FUNCTION("zNb6IxegrCE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwCondDestroy); + LIB_FUNCTION("++eqYdzB8Go", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwCondInit); + LIB_FUNCTION("Xkn6VoN-wuQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwCondSignal); + LIB_FUNCTION("FJ4DCt8VzVE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwCondSignalAll); + LIB_FUNCTION("Bwi+EP8VQ+g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwCondSignalTo); + LIB_FUNCTION("ExeLuE3EQCQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwCondWait); + LIB_FUNCTION("4zxevggtYrQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwMutexDestroy); + LIB_FUNCTION("1CiXI-MyEKs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwMutexInit); + LIB_FUNCTION("18j+qk6dRwk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwMutexLock); + LIB_FUNCTION("hp0kVgu5Fxw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwMutexTryLock); + LIB_FUNCTION("CQG2oyx1-nM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpLwMutexUnlock); + LIB_FUNCTION("dfXSH2Tsjkw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpMemoryHeapDestroy); + LIB_FUNCTION("FaMNvjMA6to", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpMemoryHeapGetAllocator); + LIB_FUNCTION("xHAiSVEEjSI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpMemoryHeapGetAllocatorEx); + LIB_FUNCTION("kZizwrFvWZY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpMemoryHeapInit); + LIB_FUNCTION("lQ11BpMM4LU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpMutexDestroy); + LIB_FUNCTION("uEwag-0YZPc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpMutexInit); + LIB_FUNCTION("r9Bet+s6fKc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpMutexLock); + LIB_FUNCTION("DuslmoqQ+nk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpMutexTryLock); + LIB_FUNCTION("oZyb9ktuCpA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpMutexUnlock); + LIB_FUNCTION("5DkyduAF2rs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpOpenEventFlag); + LIB_FUNCTION("-blITIdtUd0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpOpenSema); + LIB_FUNCTION("ZoXUrTiwKNw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpPanic); + LIB_FUNCTION("9YmBJ8KF9eI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpPollEventFlag); + LIB_FUNCTION("xmF0yIF4iXc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpPollSema); + LIB_FUNCTION("VMjIo2Z-aW0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpRtcConvertToPosixTime); + LIB_FUNCTION("W0YWLVDndx0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpRtcFormatRFC3339); + LIB_FUNCTION("LtkeQwMIEWY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpRtcParseRFC3339); + LIB_FUNCTION("0lZHbA-HRD0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpServerErrorJsonGetErrorCode); + LIB_FUNCTION("cRabutqUG7c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpServerErrorJsonMultiGetErrorCode); + LIB_FUNCTION("WSQxnAVLKgw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpServerErrorJsonParse); + LIB_FUNCTION("UbStlMKTBeU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpServerErrorJsonParseInit); + LIB_FUNCTION("hbe+DdooIi4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpServerErrorJsonParseMultiInit); + LIB_FUNCTION("29ftOGIrUCo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpSetEventFlag); + LIB_FUNCTION("m9JzZSoDVFY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpSetPlatformType); + LIB_FUNCTION("-W28+9p1CKI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpSignalSema); + LIB_FUNCTION("i5TP5NLmkoQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrBuildHex); + LIB_FUNCTION("ivnnssCwjGI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrcpyToBuf); + LIB_FUNCTION("PHrpHMSU8Cs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrncpyToBuf); + LIB_FUNCTION("h1SWCcBdImo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrnParseHex); + LIB_FUNCTION("DUHzVPNlugg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrParseHex); + LIB_FUNCTION("fElyBSn-l24", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrToInt32); + LIB_FUNCTION("CwqYdG4TrjA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrToInt64); + LIB_FUNCTION("uj86YxCYid0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrToUInt32); + LIB_FUNCTION("Ted2YU9lv94", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpStrToUInt64); + LIB_FUNCTION("yvaNTRiKXmo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpThreadGetId); + LIB_FUNCTION("rRN89jBArEM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUInt32ToStr); + LIB_FUNCTION("QjNUYQbGoHA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUInt64ToStr); + LIB_FUNCTION("Gh74vNl06sg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUserGetUserIdList); + LIB_FUNCTION("N3tAHlBnowE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilBuildTitleId); + LIB_FUNCTION("4mEAk-UKVNw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilCanonicalizeNpIdForPs4); + LIB_FUNCTION("N3FB4r8JoRE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilCanonicalizeNpIdForPsp2); + LIB_FUNCTION("xPRHNaD3kTc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilCmpAccountId); + LIB_FUNCTION("owm52JoZ8uc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetDateSetAuto); + LIB_FUNCTION("1Gfhi+tZ9IE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetDbgCommerce); + LIB_FUNCTION("kBON3bAtfGs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilGetEnv); + LIB_FUNCTION("MUj0IV6XFGs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetFakeDisplayNameMode); + LIB_FUNCTION("O86rgZ2azfg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetFakeRateLimit); + LIB_FUNCTION("FrxliFYAO8Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetIgnoreNpTitleId); + LIB_FUNCTION("GRvK1ZE+FEQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilGetNpDebug); + LIB_FUNCTION("OFiFmfsADas", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetNpLanguageCode); + LIB_FUNCTION("X9CqyP164Hc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetNpLanguageCode2); + LIB_FUNCTION("Fxux7Ob+Ynk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetNpLanguageCode2Str); + LIB_FUNCTION("RfiA17kV+xs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetNpLanguageCodeStr); + LIB_FUNCTION("OA8f3KF9JsM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetNpTestPatch); + LIB_FUNCTION("KCk4OGu8+sc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilGetNthChar); + LIB_FUNCTION("fB5hE65pzbU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetShareTitleCheck); + LIB_FUNCTION("SXUNKr9Zkv0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetSystemLanguage); + LIB_FUNCTION("AjzLvR0g5Zs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilGetTrcNotify); + LIB_FUNCTION("pmHBFJyju9E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetWebApi2FakeRateLimit); + LIB_FUNCTION("ZRxKp9vjcNc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetWebApi2FakeRateLimitTarget); + LIB_FUNCTION("4CqfNm3pisU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilGetWebTraceSetting); + LIB_FUNCTION("ajoqGz0D9Dw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilHttpUrlEncode); + LIB_FUNCTION("458yjI+OECI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilJidToNpId); + LIB_FUNCTION("EftEB4kmkSg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilJsonEscape); + LIB_FUNCTION("vj04qzp7uKY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilJsonGetOneChar); + LIB_FUNCTION("4YJ5gYtRAAE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilJsonUnescape); + LIB_FUNCTION("KyB1IAY2BiU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilNpIdToJid); + LIB_FUNCTION("c+ssxRf1Si0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilNumChars); + LIB_FUNCTION("oz2SlXNAnuI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilParseJid); + LIB_FUNCTION("EfnfZtjjyR0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilParseTitleId); + LIB_FUNCTION("okX7IjW0QsI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilSerializeJid); + LIB_FUNCTION("5bBPLZV49kY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilXmlEscape); + LIB_FUNCTION("Ls4eWDrbNmg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, + sceNpUtilXmlGetOneChar); + LIB_FUNCTION("+0rj9KhmYb0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpUtilXmlUnescape); + LIB_FUNCTION("ZbdPHUm7jOY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpWaitEventFlag); + LIB_FUNCTION("6adrFGe2cpU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpWaitSema); + LIB_FUNCTION("fEcrs9UPPyo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpXmlParse); + LIB_FUNCTION("MCLGkfBmw4c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, sceNpXmlParseInit); + LIB_FUNCTION("AP1XjC3ZZt8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_00FD578C2DD966DF); + LIB_FUNCTION("ATGi6oBon0w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0131A2EA80689F4C); + LIB_FUNCTION("AUQ8VIY73SA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_01443C54863BDD20); + LIB_FUNCTION("AbxVvcXAra0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_01BC55BDC5C0ADAD); + LIB_FUNCTION("AdHs9XUPQOg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_01D1ECF5750F40E8); + LIB_FUNCTION("AgpHmnT1+6w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_020A479A74F5FBAC); + LIB_FUNCTION("Akr14dlHKrU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_024AF5E1D9472AB5); + LIB_FUNCTION("AnxdSIcTprM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_027C5D488713A6B3); + LIB_FUNCTION("Av6dlMaFg1U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_02FE9D94C6858355); + LIB_FUNCTION("BB808ccNFcE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_041F34F1C70D15C1); + LIB_FUNCTION("BTCx0nYRQkg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0530B1D276114248); + LIB_FUNCTION("Bl2qFOnHOtk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_065DAA14E9C73AD9); + LIB_FUNCTION("Bq-05dBCvD4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_06AFF4E5D042BC3E); + LIB_FUNCTION("Bu42kpn3OZc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_06EE369299F73997); + LIB_FUNCTION("B8ktn412thc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_07C92D9F8D76B617); + LIB_FUNCTION("B+kRdJjx5L8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_07E9117498F1E4BF); + LIB_FUNCTION("CPPgrzZk8nU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_08F3E0AF3664F275); + LIB_FUNCTION("Cpk3wB7yE3U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0A9937C01EF21375); + LIB_FUNCTION("CsvmrMujh20", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0ACBE6ACCBA3876D); + LIB_FUNCTION("CuB9M1RRDOY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0AE07D3354510CE6); + LIB_FUNCTION("Cuw8NCrme3w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0AEC3C342AE67B7C); + LIB_FUNCTION("CzGEIMEefCM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0B318420C11E7C23); + LIB_FUNCTION("C7bDewPzXYk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0BB6C37B03F35D89); + LIB_FUNCTION("C76Kms3ZD98", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0BBE8A9ACDD90FDF); + LIB_FUNCTION("DHtikF4iTpw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0C7B62905E224E9C); + LIB_FUNCTION("DTWRMRckGvk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0D35913117241AF9); + LIB_FUNCTION("DV7pXO7Yeac", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0D5EE95CEED879A7); + LIB_FUNCTION("DW+ySyerHaI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0D6FB24B27AB1DA2); + LIB_FUNCTION("DegDLVNKxBw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0DE8032D534AC41C); + LIB_FUNCTION("DfTMqdyp50I", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0DF4CCA9DCA9E742); + LIB_FUNCTION("DnRJsdPZjAE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0E7449B1D3D98C01); + LIB_FUNCTION("DncJS3dQyzc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0E77094B7750CB37); + LIB_FUNCTION("Dsqzl7bVBgM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0ECAB397B6D50603); + LIB_FUNCTION("Dx3h0eraKUg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0F1DE1D1EADA2948); + LIB_FUNCTION("D4r++h0mvxo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_0F8AFEFA1D26BF1A); + LIB_FUNCTION("EYgXEFYqa60", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_11881710562A6BAD); + LIB_FUNCTION("Ea-Yi70McNs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_11AFD88BBD0C70DB); + LIB_FUNCTION("EecEowpLiHc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_11E704A30A4B8877); + LIB_FUNCTION("ElAUhCRS+Us", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_125014842452F94B); + LIB_FUNCTION("Em8AceEcrEY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_126F0071E11CAC46); + LIB_FUNCTION("EpJtzzWZSwE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_12926DCF35994B01); + LIB_FUNCTION("Esx6v78xYY8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_12CC7ABFBF31618F); + LIB_FUNCTION("E8TlH0RZKqI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_13C4E51F44592AA2); + LIB_FUNCTION("FTMOfFYzglQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_15330E7C56338254); + LIB_FUNCTION("FWazWMq-JhI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1566B358CABF2612); + LIB_FUNCTION("FiWBjyaPRe8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1625818F268F45EF); + LIB_FUNCTION("FtMrQNKKmsI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_16D32B40D28A9AC2); + LIB_FUNCTION("GD9Eg729Jc0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_183F4483BDBD25CD); + LIB_FUNCTION("GIfp6Vr2Lz0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1887E9E95AF62F3D); + LIB_FUNCTION("GKPOlf2JPTo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_18A3CE95FD893D3A); + LIB_FUNCTION("GLNmXkhU5+k", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_18B3665E4854E7E9); + LIB_FUNCTION("GSOwA5SK9H4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1923B003948AF47E); + LIB_FUNCTION("GbUz2kxZpTI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_19B533DA4C59A532); + LIB_FUNCTION("G7OZdy22jgg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1BB399772DB68E08); + LIB_FUNCTION("HArGEtOilxs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1C0AC612D3A2971B); + LIB_FUNCTION("HFWZt3mZCkM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1C5599B779990A43); + LIB_FUNCTION("HMuylrBDF74", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1CCBB296B04317BE); + LIB_FUNCTION("HNBFVC+5MAI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1CD045542FB93002); + LIB_FUNCTION("HezspnOrd7c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1DECECA673AB77B7); + LIB_FUNCTION("HgPgJOJsGn8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1E03E024E26C1A7F); + LIB_FUNCTION("HxAXMrsNfiE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1F101732BB0D7E21); + LIB_FUNCTION("H00VPsPdR7s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1F4D153EC3DD47BB); + LIB_FUNCTION("H3xH9j+vDL4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1F7C47F63FAF0CBE); + LIB_FUNCTION("H74u5owPMbY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_1FBE2EE68C0F31B6); + LIB_FUNCTION("IDjBYokUuck", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2038C1628914B9C9); + LIB_FUNCTION("ID-LVv24anQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_203FCB56FDB86A74); + LIB_FUNCTION("IFacEHxssIw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_20569C107C6CB08C); + LIB_FUNCTION("IKstc07eVfA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_20AB2D734EDE55F0); + LIB_FUNCTION("IrEoEYD7Cl4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_22B1281180FB0A5E); + LIB_FUNCTION("IvGq2makSa4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_22F1AADA66A449AE); + LIB_FUNCTION("I4shXv-fPTA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_238B215EFFDF3D30); + LIB_FUNCTION("JOjsUdFJ+hU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_24E8EC51D149FA15); + LIB_FUNCTION("JXKOeKOWLAI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_25728E78A3962C02); + LIB_FUNCTION("JeZJocaJHAU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_25E649A1C6891C05); + LIB_FUNCTION("JkuKOLV3cF0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_264B8A38B577705D); + LIB_FUNCTION("Jm7QjcHIKg4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_266ED08DC1C82A0E); + LIB_FUNCTION("J7tN5iq1i60", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_27BB4DE62AB58BAD); + LIB_FUNCTION("KDqpahluouo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_283AA96A196EA2EA); + LIB_FUNCTION("KFMVo5CoWpQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_285315A390A85A94); + LIB_FUNCTION("KQSdux7zGU4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_29049DBB1EF3194E); + LIB_FUNCTION("Kfe6nDcyy0c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_29F7BA9C3732CB47); + LIB_FUNCTION("KnMt8zGsyzc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2A732DF331ACCB37); + LIB_FUNCTION("KqAWYOx1tvs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2AA01660EC75B6FB); + LIB_FUNCTION("KzfLzpQcFoE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2B37CBCE941C1681); + LIB_FUNCTION("LKo7ZNBUTlU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2CAA3B64D0544E55); + LIB_FUNCTION("LM15YX7BCnU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2CCD79617EC10A75); + LIB_FUNCTION("LNi2lxasBmc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2CD8B69716AC0667); + LIB_FUNCTION("LXT3wP+bXpw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2D74F7C0FF9B5E9C); + LIB_FUNCTION("LcpagIBUTpU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2DCA5A8080544E95); + LIB_FUNCTION("LmnydDznzlc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2E69F2743CE7CE57); + LIB_FUNCTION("Lq8fO6-wUn0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_2EAF1F3BAFF0527D); + LIB_FUNCTION("MUk+VbtOj2Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_31493E55BB4E8F66); + LIB_FUNCTION("MX7crQD7X14", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_317EDCAD00FB5F5E); + LIB_FUNCTION("MeAc+ooYzaI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_31E01CFA8A18CDA2); + LIB_FUNCTION("Mq-XgqBhtSY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_32AFD782A061B526); + LIB_FUNCTION("MrXN6wk7gYk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_32B5CDEB093B8189); + LIB_FUNCTION("NBVRUlE8k64", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_34155152513C93AE); + LIB_FUNCTION("NOTv-472yf4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_34E4EFFF8EF6C9FE); + LIB_FUNCTION("NXL6DVxUVjs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3572FA0D5C54563B); + LIB_FUNCTION("NnxHmyZODbk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_367C479B264E0DB9); + LIB_FUNCTION("NohPvJZLKcw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_36884FBC964B29CC); + LIB_FUNCTION("OGAIG7dVmUk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3860081BB7559949); + LIB_FUNCTION("OTFPfmdKsTI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_39314F7E674AB132); + LIB_FUNCTION("OgLngPzFVqU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3A02E780FCC556A5); + LIB_FUNCTION("Ohe4hbpISbY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3A17B885BA4849B6); + LIB_FUNCTION("OjjqyupeI6Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3A38EACAEA5E23A4); + LIB_FUNCTION("OzSl4H8NvB8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3B34A5E07F0DBC1F); + LIB_FUNCTION("O06P-AD8fqQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3B4E8FFC00FC7EA4); + LIB_FUNCTION("O6sY-aI1EHo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3BAB18FDA235107A); + LIB_FUNCTION("O9+ZlqCjPxE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3BDF9996A0A33F11); + LIB_FUNCTION("PBlS8aRcw3o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3C1952F1A45CC37A); + LIB_FUNCTION("PKN5Bs2wXzs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3CA37906CDB05F3B); + LIB_FUNCTION("PNspCKzuOm8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3CDB2908ACEE3A6F); + LIB_FUNCTION("PT7RZfK9zTM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3D3ED165F2BDCD33); + LIB_FUNCTION("PaTX0Vdfzc4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3DA4D7D1575FCDCE); + LIB_FUNCTION("Pd+2Es0Lx2k", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3DDFB612CD0BC769); + LIB_FUNCTION("PgQV4Wfercc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3E0415E167DEADC7); + LIB_FUNCTION("Pn6fDxWBweY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3E7E9F0F1581C1E6); + LIB_FUNCTION("PtOJ24KA7WU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3ED389DB8280ED65); + LIB_FUNCTION("Pwx-bAw1SH0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3F0C7F6C0C35487D); + LIB_FUNCTION("P9pyADie8NI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3FDA7200389EF0D2); + LIB_FUNCTION("P-PCWLpRblg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_3FF3C258BA516E58); + LIB_FUNCTION("QClFP2KKPF0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4029453F628A3C5D); + LIB_FUNCTION("QFgm3bSuU44", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_405826DDB4AE538E); + LIB_FUNCTION("QFqSZ1nyWGU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_405A926759F25865); + LIB_FUNCTION("QGYI-e566Io", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_406608FDEE7AE88A); + LIB_FUNCTION("QN2lVYwX3c8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_40DDA5558C17DDCF); + LIB_FUNCTION("QZ0S5S-2BmQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_419D12E52FF60664); + LIB_FUNCTION("QpblOUdL538", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4296E539474BE77F); + LIB_FUNCTION("QvQfxWPMNlQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_42F41FC563CC3654); + LIB_FUNCTION("Q8zIb0yTAmo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_43CCC86F4C93026A); + LIB_FUNCTION("RAn2C9q8ZeE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4409F60BDABC65E1); + LIB_FUNCTION("RWPHCuxnU4I", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4563C70AEC675382); + LIB_FUNCTION("ReZjcCGb0F4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_45E66370219BD05E); + LIB_FUNCTION("RmpU8HJ4VpY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_466A54F072785696); + LIB_FUNCTION("Rs0lNpdvIJo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_46CD2536976F209A); + LIB_FUNCTION("SGNxe9L90Vc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4863717BD2FDD157); + LIB_FUNCTION("SQLr0ZomMUk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4902EBD19A263149); + LIB_FUNCTION("SQT3-o2D9Aw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4904F7FE8D83F40C); + LIB_FUNCTION("Sl4T94Sr-Oc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4A5E13F784ABFCE7); + LIB_FUNCTION("S2XusTXBJ4E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4B65EEB135C12781); + LIB_FUNCTION("TBnUmXjaheI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4C19D49978DA85E2); + LIB_FUNCTION("TeXWIP9m8TY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4DE5D620FF66F136); + LIB_FUNCTION("ThcMErV6j54", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4E170C12B57A8F9E); + LIB_FUNCTION("Ti8-pAXDJgw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4E2F3FA405C3260C); + LIB_FUNCTION("Tqk1BXdRO00", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4EA9350577513B4D); + LIB_FUNCTION("T3jrb8S18h8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_4F78EB6FC4B5F21F); + LIB_FUNCTION("UDSL5DMRF7c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_50348BE4331117B7); + LIB_FUNCTION("UIx+jN0oHKo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_508C7E8CDD281CAA); + LIB_FUNCTION("UhwdLAKPWn4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_521C1D2C028F5A7E); + LIB_FUNCTION("Ui-ySjXmcpE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_522FF24A35E67291); + LIB_FUNCTION("VHD+kMJc3Uw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5470FE90C25CDD4C); + LIB_FUNCTION("VX8mD5pKzRg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_557F260F9A4ACD18); + LIB_FUNCTION("VYb5cgnzkes", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5586F97209F391EB); + LIB_FUNCTION("VbLJt62pXDw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_55B2C9B7ADA95C3C); + LIB_FUNCTION("VbSIo6VAuTY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_55B488A3A540B936); + LIB_FUNCTION("VkLf6Cr0MUM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5642DFE82AF43143); + LIB_FUNCTION("V04EbylK4Yc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_574E046F294AE187); + LIB_FUNCTION("V4km6-iqbL8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_578926EBF8AA6CBF); + LIB_FUNCTION("WF2l-GUIlrw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_585DA5FC650896BC); + LIB_FUNCTION("WNbrJzSewnY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_58D6EB27349EC276); + LIB_FUNCTION("WQa3MXlJhy0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5906B7317949872D); + LIB_FUNCTION("WRC1YUM1vnA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5910B5614335BE70); + LIB_FUNCTION("WT19qJEfCMk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_593D7DA8911F08C9); + LIB_FUNCTION("WXV-5qk7DVM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_59757FE6A93B0D53); + LIB_FUNCTION("WY5g+GKxFB4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_598E60F862B1141E); + LIB_FUNCTION("WkU1FmZoDa8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5A45351666680DAF); + LIB_FUNCTION("Wqvp6nAuan8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5AABE9EA702E6A7F); + LIB_FUNCTION("WupK5HI1W4A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5AEA4AE472355B80); + LIB_FUNCTION("WyDlPN5Zh0E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5B20E53CDE598741); + LIB_FUNCTION("W0gLWfrpR+A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5B480B59FAE947E0); + LIB_FUNCTION("W17sI2kKub0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5B5EEC23690AB9BD); + LIB_FUNCTION("XArFsK8+2uA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5C0AC5B0AF3EDAE0); + LIB_FUNCTION("XS6Zm+oHYtQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5D2E999BEA0762D4); + LIB_FUNCTION("XVW7-UURDhY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5D55BBFD45110E16); + LIB_FUNCTION("Xe4VQD0rtf0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_5DEE15403D2BB5FD); + LIB_FUNCTION("YCDHCMp0sTA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6020C708CA74B130); + LIB_FUNCTION("YG4UFVA8NNI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_606E1415503C34D2); + LIB_FUNCTION("YSFA6O6aaT4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_612140E8EE9A693E); + LIB_FUNCTION("YfE-VR2vYd8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_61F13F551DAF61DF); + LIB_FUNCTION("YgbTkTF1Iyg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6206D39131752328); + LIB_FUNCTION("Yh1FQ+8DRN4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_621D4543EF0344DE); + LIB_FUNCTION("YlmpqOVtAnM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6259A9A8E56D0273); + LIB_FUNCTION("Yl+ccBY0b04", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_625F9C7016346F4E); + LIB_FUNCTION("Yu+N90bNjEo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_62EF8DF746CD8C4A); + LIB_FUNCTION("Y20qmf0eays", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_636D2A99FD1E6B2B); + LIB_FUNCTION("aAE+32b+dCU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_68013EDF66FE7425); + LIB_FUNCTION("aXH3Bn3WOdE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6971F7067DD639D1); + LIB_FUNCTION("aYlq2zq0ELI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_69896ADB3AB410B2); + LIB_FUNCTION("ahOJqm5WE4c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6A1389AA6E561387); + LIB_FUNCTION("alVg2J8Ssuc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6A5560D89F12B2E7); + LIB_FUNCTION("ar+Zz4VKvPE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6ABF99CF854ABCF1); + LIB_FUNCTION("a0-dxlANjcs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6B4FDDC6500D8DCB); + LIB_FUNCTION("bKEdW0nRkoo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6CA11D5B49D1928A); + LIB_FUNCTION("bWwPth5tBxU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6D6C0FB61E6D0715); + LIB_FUNCTION("bXUHRf4TSPU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6D750745FE1348F5); + LIB_FUNCTION("bhrz+dCZFL4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6E1AF3F9D09914BE); + LIB_FUNCTION("blPtTAiypSE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6E53ED4C08B2A521); + LIB_FUNCTION("bvQ6yh7WuWg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6EF43ACA1ED6B968); + LIB_FUNCTION("b2+gnz4bamA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_6F6FA09F3E1B6A60); + LIB_FUNCTION("cDXDQMcZWQE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7035C340C7195901); + LIB_FUNCTION("cDjiHLXPZBs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7038E21CB5CF641B); + LIB_FUNCTION("cGNF3NpbpE0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_706345DCDA5BA44D); + LIB_FUNCTION("cSBxTr8Qvx8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7120714EBF10BF1F); + LIB_FUNCTION("cT0oqRvIA90", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_713D28A91BC803DD); + LIB_FUNCTION("cVO9dqU6oBI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7153BD76A53AA012); + LIB_FUNCTION("cVxiXMcEG2s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_715C625CC7041B6B); + LIB_FUNCTION("ceRnvbGHEdA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_71E467BDB18711D0); + LIB_FUNCTION("cg0XllwfTj8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_720D17965C1F4E3F); + LIB_FUNCTION("c0OAybz2W5o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_734380C9BCF65B9A); + LIB_FUNCTION("c-TAjM1LvM8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_73F4C08CCD4BBCCF); + LIB_FUNCTION("dEAxAbeynUY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_74403101B7B29D46); + LIB_FUNCTION("dSWwgazWb-Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7525B081ACD66FF4); + LIB_FUNCTION("db9Ed8E6Bco", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_75BF4477C13A05CA); + LIB_FUNCTION("dgl5P1mHxvc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7609793F5987C6F7); + LIB_FUNCTION("dhbtAbBHaao", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7616ED01B04769AA); + LIB_FUNCTION("dk+HPZGhJNg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_764F873D91A124D8); + LIB_FUNCTION("dwbx4SMFlWU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7706F1E123059565); + LIB_FUNCTION("d-LQfrbYBuY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_77F2D07EB6D806E6); + LIB_FUNCTION("ecNwTNzVnlc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_79C3704CDCD59E57); + LIB_FUNCTION("edoLuiE1FUU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_79DA0BBA21351545); + LIB_FUNCTION("efokR7Xz8MQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_79FA2447B5F3F0C4); + LIB_FUNCTION("ek1vZf9hlaU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7A4D6F65FF6195A5); + LIB_FUNCTION("ezGVzRFN7Oc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7B3195CD114DECE7); + LIB_FUNCTION("ezI48jAa020", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7B3238F2301AD36D); + LIB_FUNCTION("fHf8cHUKMmY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7C77FC70750A3266); + LIB_FUNCTION("fSOp3EWdbRg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7D23A9DC459D6D18); + LIB_FUNCTION("fVmIx0jQoF8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7D5988C748D0A05F); + LIB_FUNCTION("fZWXFHqZ9PQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7D9597147A99F4F4); + LIB_FUNCTION("filT9Afdg0Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7E2953F407DD8346); + LIB_FUNCTION("fuNOUJlwmzI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_7EE34E5099709B32); + LIB_FUNCTION("gEcOVRHVygA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_80470E5511D5CA00); + LIB_FUNCTION("gHF5cBwI8Gk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_807179701C08F069); + LIB_FUNCTION("gJboH-ryTkY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8096E81FFAF24E46); + LIB_FUNCTION("gLdk9PG4cEI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_80B764F4F1B87042); + LIB_FUNCTION("gL9pFDitAIs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_80BF691438AD008B); + LIB_FUNCTION("gM9s-JYBJEI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_80CF6CFC96012442); + LIB_FUNCTION("gOp3L4wFGf0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_80EA772F8C0519FD); + LIB_FUNCTION("gdCv0AhNMno", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_81D0AFD0084D327A); + LIB_FUNCTION("gh64pyF2-Wc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_821EB8A72176FD67); + LIB_FUNCTION("gtL6tUEnJz8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_82D2FAB54127273F); + LIB_FUNCTION("g2rmacQqWek", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_836AE669C42A59E9); + LIB_FUNCTION("hVmiW-7DUYw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8559A25BFEC3518C); + LIB_FUNCTION("hcH2bHZ6SdI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_85C1F66C767A49D2); + LIB_FUNCTION("hontE4P4e6c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8689ED1383F87BA7); + LIB_FUNCTION("h5bNnlNV06Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8796CD9E5355D3A6); + LIB_FUNCTION("h9N+tt3BnZk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_87D37EB6DDC19D99); + LIB_FUNCTION("iAqkj3D4T90", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_880AA48F70F84FDD); + LIB_FUNCTION("iXsHViCTZls", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_897B07562093665B); + LIB_FUNCTION("isr1XxY2gIc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8ACAF55F16368087); + LIB_FUNCTION("iuilWJsw1OA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8AE8A5589B30D4E0); + LIB_FUNCTION("iumXkJgxszE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8AE997909831B331); + LIB_FUNCTION("iy1kC+DQ+5k", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8B2D640BE0D0FB99); + LIB_FUNCTION("iz2atGaNrss", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8B3D9AB4668DAECB); + LIB_FUNCTION("i176qqzgtGw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8B5EFAAAACE0B46C); + LIB_FUNCTION("jCeUP0CpiNs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8C27943F40A988DB); + LIB_FUNCTION("jFQJbHX18tA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8C54096C75F5F2D0); + LIB_FUNCTION("jXZjoKUWiBQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8D7663A0A5168814); + LIB_FUNCTION("jmGPUJmU+tc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8E618F509994FAD7); + LIB_FUNCTION("jxnmzAZOK5g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8F19E6CC064E2B98); + LIB_FUNCTION("j2qK6u6SL-U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_8F6A8AEAEE922FF5); + LIB_FUNCTION("kBDhrY67+8o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_9010E1AD8EBBFBCA); + LIB_FUNCTION("kKlVoOcAGuk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_90A955A0E7001AE9); + LIB_FUNCTION("kPnWBn-uzAU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_90F9D6067FEECC05); + LIB_FUNCTION("k0jz0ZVGodo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_9348F3D19546A1DA); + LIB_FUNCTION("k9PAEdsZOIo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_93D3C011DB19388A); + LIB_FUNCTION("lW56T9n4kQM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_956E7A4FD9F89103); + LIB_FUNCTION("lfaZ4ELD5A8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_95F699E042C3E40F); + LIB_FUNCTION("lod7OaoOhzU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_96877B39AA0E8735); + LIB_FUNCTION("ls4HxJ7SNOo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_96CE07C49ED234EA); + LIB_FUNCTION("l2uxeCNbVoE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_976BB178235B5681); + LIB_FUNCTION("l4wLJeWIxNY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_978C0B25E588C4D6); + LIB_FUNCTION("mLomEr7yONY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_98BA2612BEF238D6); + LIB_FUNCTION("mVvdSTGvkTc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_995BDD4931AF9137); + LIB_FUNCTION("mWbjmpJrclA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_9966E39A926B7250); + LIB_FUNCTION("mcIwbxiWNGQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_99C2306F18963464); + LIB_FUNCTION("mcksYTt3a6c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_99C92C613B776BA7); + LIB_FUNCTION("mk5Lk4zIrTk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_9A4E4B938CC8AD39); + LIB_FUNCTION("myP3tLf3IIE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_9B23F7B4B7F72081); + LIB_FUNCTION("nA6u6ucFqNs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_9C0EAEEAE705A8DB); + LIB_FUNCTION("nUesWVRd6eg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_9D47AC59545DE9E8); + LIB_FUNCTION("oTBS2LGyrPo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A13052D8B1B2ACFA); + LIB_FUNCTION("oapD46ePb2I", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A1AA43E3A78F6F62); + LIB_FUNCTION("oeSM31Rknck", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A1E48CDF54649DC9); + LIB_FUNCTION("oufe5bCvXRQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A2E7DEE5B0AF5D14); + LIB_FUNCTION("ovXH-Z-xE-U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A2F5C7FD9FF113F5); + LIB_FUNCTION("o2KW4iadRrw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A36296E2269D46BC); + LIB_FUNCTION("o+4qe58NiK8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A3EE2A7B9F0D88AF); + LIB_FUNCTION("pEcfn34L+oI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A4471F9F7E0BFA82); + LIB_FUNCTION("pEm7pSHqNOE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A449BBA521EA34E1); + LIB_FUNCTION("pI5mbDNOcmw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A48E666C334E726C); + LIB_FUNCTION("pJt0SbTd5pw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A49B7449B4DDE69C); + LIB_FUNCTION("pXSEURJcnqQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A5748451125C9EA4); + LIB_FUNCTION("ppCijWSMwXY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A690A28D648CC176); + LIB_FUNCTION("pqht4bHLsdk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A6A86DE1B1CBB1D9); + LIB_FUNCTION("qPK7e4FXQKE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A8F2BB7B815740A1); + LIB_FUNCTION("qT9kwGpvc5c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_A93F64C06A6F7397); + LIB_FUNCTION("qzWSX8l9aqM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AB35925FC97D6AA3); + LIB_FUNCTION("rAFKosmR+ik", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AC014AA2C991FA29); + LIB_FUNCTION("rAbhCQFASus", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AC06E10901404AEB); + LIB_FUNCTION("rHXGiBNSNQU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AC75C68813523505); + LIB_FUNCTION("rUQbxJcILD4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AD441BC497082C3E); + LIB_FUNCTION("rU8l8CHTVMM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AD4F25F021D354C3); + LIB_FUNCTION("rfoEqFVBpP4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_ADFA04A85541A4FE); + LIB_FUNCTION("rpYQprUheiM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AE9610A6B5217A23); + LIB_FUNCTION("ryAZI4JvClg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AF201923826F0A58); + LIB_FUNCTION("r8AhtDico-o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_AFC021B4389CA3FA); + LIB_FUNCTION("sBXpmaM3PY8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B015E999A3373D8F); + LIB_FUNCTION("sDhLhhB-xlI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B0384B86107FC652); + LIB_FUNCTION("sMYwZTsxZWM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B0C630653B316563); + LIB_FUNCTION("sQDczYjVxz0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B100DCCD88D5C73D); + LIB_FUNCTION("sRo-6l5NnqQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B11A3FEA5E4D9EA4); + LIB_FUNCTION("suf43BmcC5M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B2E7F8DC199C0B93); + LIB_FUNCTION("s6thopb23cg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B3AB61A296F6DDC8); + LIB_FUNCTION("s-MvauYZ7II", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B3F32F6AE619EC82); + LIB_FUNCTION("tCJ6shO-jPU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B4227AB213BF8CF5); + LIB_FUNCTION("tGUr9CtgQ2A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B4652BF42B604360); + LIB_FUNCTION("tTbB8Tv+l8s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B536C1F13BFE97CB); + LIB_FUNCTION("tkXMJkGEvIk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B645CC264184BC89); + LIB_FUNCTION("tn4XsVgsb70", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B67E17B1582C6FBD); + LIB_FUNCTION("ttBHxddpWk0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B6D047C5D7695A4D); + LIB_FUNCTION("t17Y4epi78c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B75ED8E1EA62EFC7); + LIB_FUNCTION("t6mpRNvX4QA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B7A9A944DBD7E100); + LIB_FUNCTION("t8TnW+lPMfM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B7C4E75BE94F31F3); + LIB_FUNCTION("uIix+SxGQSE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B888B1F92C464121); + LIB_FUNCTION("uN7CJWSqBXs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B8DEC22564AA057B); + LIB_FUNCTION("ubrdHLu65Pg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_B9BADD1CBBBAE4F8); + LIB_FUNCTION("uqn3FpyF5Z8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_BAA9F7169C85E59F); + LIB_FUNCTION("uu5cOJCNYts", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_BAEE5C38908D62DB); + LIB_FUNCTION("vMhV6yUYP4Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_BCC855EB25183F84); + LIB_FUNCTION("vQH2NwKcc2Q", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_BD01F637029C7364); + LIB_FUNCTION("vdKfWscHflM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_BDD29F5AC7077E53); + LIB_FUNCTION("vtg90z7K1Q0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_BED83DD33ECAD50D); + LIB_FUNCTION("vufV0Jir9yg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_BEE7D5D098ABF728); + LIB_FUNCTION("wNsVzPWa5iw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C0DB15CCF59AE62C); + LIB_FUNCTION("wcIp-uD9YPo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C1C229FEE0FD60FA); + LIB_FUNCTION("wii5rWgpjpg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C228B9AD68298E98); + LIB_FUNCTION("wphSXO9vsoM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C298525CEF6FB283); + LIB_FUNCTION("w1Dwk1H21rU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C350F09351F6D6B5); + LIB_FUNCTION("w3QugPpYAxk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C3742E80FA580319); + LIB_FUNCTION("w8mFPV1NRdQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C3C9853D5D4D45D4); + LIB_FUNCTION("w-Xa1Pufw0A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C3F5DAD4FB9FC340); + LIB_FUNCTION("xF+w5MzprtY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C45FB0E4CCE9AED6); + LIB_FUNCTION("xJecuUi348c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C4979CB948B7E3C7); + LIB_FUNCTION("xJsluhbPC4w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C49B25BA16CF0B8C); + LIB_FUNCTION("xVE0XZYxIB4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C551345D9631201E); + LIB_FUNCTION("xXopRCE2gpg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C57A294421368298); + LIB_FUNCTION("xdyRytch1ig", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C5DC91CAD721D628); + LIB_FUNCTION("xt7O5YkTU1c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C6DECEE589135357); + LIB_FUNCTION("yB+LINZ6x40", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C81F8B20D67AC78D); + LIB_FUNCTION("yCD6VvrIe+o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C820FA56FAC87BEA); + LIB_FUNCTION("yHjqkRTF5JA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C878EA9114C5E490); + LIB_FUNCTION("yKgT6-9HdQk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C8A813EBFF477509); + LIB_FUNCTION("yWamY9WjVII", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C966A663D5A35482); + LIB_FUNCTION("yXxMZ-02dNM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C97C4C67FD3674D3); + LIB_FUNCTION("yZBVDxWEiwc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_C990550F15848B07); + LIB_FUNCTION("yllzeo7Bu74", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CA59737A8EC1BBBE); + LIB_FUNCTION("ysX96PgNe2U", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CAC5FDE8F80D7B65); + LIB_FUNCTION("yxNbMNBjm4M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CB135B30D0639B83); + LIB_FUNCTION("y4oaqmH2TDo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CB8A1AAA61F64C3A); + LIB_FUNCTION("y55nRnJYB1c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CB9E674672580757); + LIB_FUNCTION("zCudJerqqx0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CC2B9D25EAEAAB1D); + LIB_FUNCTION("zRslK77fW1M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CD1B252BBEDF5B53); + LIB_FUNCTION("zwA76Qy+Gic", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CF003BE90CBE1A27); + LIB_FUNCTION("zwCONIhKweI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_CF008E34884AC1E2); + LIB_FUNCTION("0Lj0s6NoerI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D0B8F4B3A3687AB2); + LIB_FUNCTION("0O4ZuOkfYPU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D0EE19B8E91F60F5); + LIB_FUNCTION("0SuSlL0OD1Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D12B9294BD0E0F56); + LIB_FUNCTION("0cyGJtj6Mos", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D1CC8626D8FA328B); + LIB_FUNCTION("0vorueuLY6w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D2FA2BB9EB8B63AC); + LIB_FUNCTION("0yGXiAz5POs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D32197880CF93CEB); + LIB_FUNCTION("0yb1wmzIG44", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D326F5C26CC81B8E); + LIB_FUNCTION("1PoGuVoyG3o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D4FA06B95A321B7A); + LIB_FUNCTION("1So3qQHgSyE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D52A37A901E04B21); + LIB_FUNCTION("1VBN-DmatAA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D5504DFC399AB400); + LIB_FUNCTION("1WEFyyf49dw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D56105CB27F8F5DC); + LIB_FUNCTION("1WirGSNeyxk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D568AB19235ECB19); + LIB_FUNCTION("1t979mOf5hE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D6DF7BF6639FE611); + LIB_FUNCTION("2GCKkDEZ10Y", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D8608A903119D746); + LIB_FUNCTION("2ej8cH1ZkU0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D9E8FC707D59914D); + LIB_FUNCTION("2fB55i3uWyk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_D9F079E62DEE5B29); + LIB_FUNCTION("2hfOTyl0hTY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DA17CE4F29748536); + LIB_FUNCTION("2kC579f2EYU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DA40B9EFD7F61185); + LIB_FUNCTION("2msnT+vCZmo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DA6B274FEBC2666A); + LIB_FUNCTION("2tAVNch6Ufw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DAD01535C87A51FC); + LIB_FUNCTION("20UR1EhRDsQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DB4511D448510EC4); + LIB_FUNCTION("247x--xmJpw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DB8EF1FFFC66269C); + LIB_FUNCTION("27UI+hudqPc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DBB508FA1B9DA8F7); + LIB_FUNCTION("3FnJuHC3KaI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DC59C9B870B729A2); + LIB_FUNCTION("3Gae1sv2dRw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DC669ED6CBF6751C); + LIB_FUNCTION("3LiihJpByZE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DCB8A2849A41C991); + LIB_FUNCTION("3Y+ZFtfwOvc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DD8F9916D7F03AF7); + LIB_FUNCTION("3cM-L05IDCo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DDC33F2F4E480C2A); + LIB_FUNCTION("3gtCC96LItc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_DE0B420BDE8B22D7); + LIB_FUNCTION("4MC8KYmP43A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E0C0BC29898FE370); + LIB_FUNCTION("4M2JPkb7Vbo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E0CD893E46FB55BA); + LIB_FUNCTION("4lUwFkt-ZZ8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E25530164B7F659F); + LIB_FUNCTION("42gvQ-33bFg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E3682F43FDF76C58); + LIB_FUNCTION("44F34ceKgPo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E38177E1C78A80FA); + LIB_FUNCTION("48p0z-ll3wo", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E3CA74CFF965DF0A); + LIB_FUNCTION("5FuxkbSbLtk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E45BB191B49B2ED9); + LIB_FUNCTION("5GW51rYObX0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E465B9D6B60E6D7D); + LIB_FUNCTION("5NgodsKWw4o", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E4D82876C296C38A); + LIB_FUNCTION("5N21NQ+ltTg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E4DDB5350FA5B538); + LIB_FUNCTION("5Uv-b7crx74", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E54BFF6FB72BC7BE); + LIB_FUNCTION("5ZKpMgMCC7s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E592A93203020BBB); + LIB_FUNCTION("5aRK9tfUiv0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E5A44AF6D7D48AFD); + LIB_FUNCTION("5jmpfPn-FDA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E639A97CF9FF1430); + LIB_FUNCTION("5qwBeeSKiSc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E6AC0179E48A8927); + LIB_FUNCTION("51FZZoJ3XYM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E751596682775D83); + LIB_FUNCTION("54ix5S74JwI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E788B1E52EF82702); + LIB_FUNCTION("6U8XYT9cnTE", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E94F17613F5C9D31); + LIB_FUNCTION("6VkBExKNVeA", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E9590113128D55E0); + LIB_FUNCTION("6eCw3RJWCxY", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_E9E0B0DD12560B16); + LIB_FUNCTION("6vXI7OZMewU", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_EAF5C8ECE64C7B05); + LIB_FUNCTION("65i-XELUp+s", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_EB98BF5C42D4A7EB); + LIB_FUNCTION("66vEqsQ6Row", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_EBABC4AAC43A468C); + LIB_FUNCTION("6-AAhfCCzIs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_EBF00085F082CC8B); + LIB_FUNCTION("7LZZ7gWNBq8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_ECB659EE058D06AF); + LIB_FUNCTION("7PCWq3UUh64", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_ECF096AB751487AE); + LIB_FUNCTION("7lonFwHbM8A", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_EE5A271701DB33C0); + LIB_FUNCTION("72TLahYlJI4", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_EF64CB6A1625248E); + LIB_FUNCTION("72yKNXx+2GM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_EF6C8A357C7ED863); + LIB_FUNCTION("8A-pT35pmZQ", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F00FE94F7E699994); + LIB_FUNCTION("8aUdujAykDg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F1A51DBA30329038); + LIB_FUNCTION("8hbnZqkP3BI", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F216E766A90FDC12); + LIB_FUNCTION("8qEFhKvl2Cw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F2A10584ABE5D82C); + LIB_FUNCTION("8tmdOV5UIaM", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F2D99D395E5421A3); + LIB_FUNCTION("84AB5Si6E3E", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F38001E528BA1371); + LIB_FUNCTION("857JyPp2h7M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F39EC9C8FA7687B3); + LIB_FUNCTION("86--3NYyd1w", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F3AFFFDCD632775C); + LIB_FUNCTION("87jf8zdIv9M", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F3B8DFF33748BFD3); + LIB_FUNCTION("9eR-lVD3oUc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F5E47F9550F7A147); + LIB_FUNCTION("9uk3FNGpOc8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F6E93714D1A939CF); + LIB_FUNCTION("9v0ZrUjk7wk", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F6FD19AD48E4EF09); + LIB_FUNCTION("90Tr-GIPfL8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F744EBFC620F7CBF); + LIB_FUNCTION("925FJay6zH8", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F76E4525ACBACC7F); + LIB_FUNCTION("95V6SIgvQss", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F7957A48882F42CB); + LIB_FUNCTION("96gLB4CbqDg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F7A80B07809BA838); + LIB_FUNCTION("+FccbMW2tZ0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F8571C6CC5B6B59D); + LIB_FUNCTION("+Xh8+oc4Nvs", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_F9787CFA873836FB); + LIB_FUNCTION("+nifbTTTg-g", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_FA789F6D34D383F8); + LIB_FUNCTION("+rpXQIOsHmw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_FABA574083AC1E6C); + LIB_FUNCTION("-AT9u642j7c", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_FC04FDBBAE368FB7); + LIB_FUNCTION("-S2vvy5A7uc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_FD2DAFBF2E40EEE7); + LIB_FUNCTION("-VXubTX5UK0", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_FD55EE6D35F950AD); + LIB_FUNCTION("-lXuMgmNDVg", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_FE55EE32098D0D58); + LIB_FUNCTION("-nmEECLh2hw", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_FE79841022E1DA1C); + LIB_FUNCTION("--Sj4nn7RKc", "libSceNpCommon", 1, "libSceNpCommon", 1, 1, Func_FFF4A3E279FB44A7); +}; + +} // namespace Libraries::NpCommon \ No newline at end of file diff --git a/src/core/libraries/np_common/np_common.h b/src/core/libraries/np_common/np_common.h new file mode 100644 index 000000000..886610ccc --- /dev/null +++ b/src/core/libraries/np_common/np_common.h @@ -0,0 +1,1245 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/types.h" + +namespace Core::Loader { +class SymbolsResolver; +} + +namespace Libraries::NpCommon { + +constexpr int ORBIS_NP_ONLINEID_MAX_LENGTH = 16; + +struct OrbisNpOnlineId { + char data[ORBIS_NP_ONLINEID_MAX_LENGTH]; + s8 term; + s8 dummy[3]; +}; + +struct OrbisNpId { + OrbisNpOnlineId handle; + u8 opt[8]; + u8 reserved[8]; +}; + +int PS4_SYSV_ABI sceNpCmpNpId(OrbisNpId* np_id1, OrbisNpId* np_id2); +int PS4_SYSV_ABI sceNpCmpNpIdInOrder(OrbisNpId* np_id1, OrbisNpId* np_id2, u32* out_result); +int PS4_SYSV_ABI sceNpCmpOnlineId(OrbisNpOnlineId* online_id1, OrbisNpOnlineId* online_id2); +int PS4_SYSV_ABI _sceNpAllocatorExConvertAllocator(); +int PS4_SYSV_ABI _sceNpAllocatorExFree(); +int PS4_SYSV_ABI _sceNpAllocatorExMalloc(); +int PS4_SYSV_ABI _sceNpAllocatorExRealloc(); +int PS4_SYSV_ABI _sceNpAllocatorExStrdup(); +int PS4_SYSV_ABI _sceNpAllocatorExStrndup(); +int PS4_SYSV_ABI _sceNpAllocatorFree(); +int PS4_SYSV_ABI _sceNpAllocatorMalloc(); +int PS4_SYSV_ABI _sceNpAllocatorRealloc(); +int PS4_SYSV_ABI _sceNpAllocatorStrdup(); +int PS4_SYSV_ABI _sceNpAllocatorStrndup(); +int PS4_SYSV_ABI _sceNpFree(); +int PS4_SYSV_ABI _sceNpHeapFree(); +int PS4_SYSV_ABI _sceNpHeapMalloc(); +int PS4_SYSV_ABI _sceNpHeapRealloc(); +int PS4_SYSV_ABI _sceNpHeapStrdup(); +int PS4_SYSV_ABI _sceNpHeapStrndup(); +int PS4_SYSV_ABI _sceNpMalloc(); +int PS4_SYSV_ABI _sceNpRealloc(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable10IsCanceledEv(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable10LockCancelEPKciS3_(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable11CheckCancelEPKciS3_(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable12UnlockCancelEPKciS3_(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable13SetCancelableEb(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable14SetupSubCancelEPS1_PKciS4_(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable16CleanupSubCancelEPS1_(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable4InitEv(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable6CancelEij(); +int PS4_SYSV_ABI _ZN3sce2np10Cancelable7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np10CancelableC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np10CancelableD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np10CancelableD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np10CancelableD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np10CancelLock3EndEPKciS3_(); +int PS4_SYSV_ABI _ZN3sce2np10CancelLock5BeginEPNS0_6HandleEPKciS5_(); +int PS4_SYSV_ABI _ZN3sce2np10CancelLockC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np10CancelLockC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np10CancelLockD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np10CancelLockD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue10ClearAbortEt(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue10TryDequeueEPvm(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue4InitEPKcmm(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue5AbortEt(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue7DequeueEPvmj(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueue7EnqueueEPKvmj(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueueC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueueD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueueD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np10EventQueueD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEi(); +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEj(); +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEl(); +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEm(); +int PS4_SYSV_ABI _ZN3sce2np10JsonNumber6SetNumEPKc(); +int PS4_SYSV_ABI _ZN3sce2np10JsonObject16DeleteFieldValueEPKc(); +int PS4_SYSV_ABI _ZN3sce2np10JsonObject5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np10JsonParser4InitEPK7JsonDefPNS1_12EventHandlerE(); +int PS4_SYSV_ABI _ZN3sce2np10JsonParser5ParseEPKcm(); +int PS4_SYSV_ABI _ZN3sce2np10JsonParserC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np10JsonParserD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np10JsonParserD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np10JsonParserD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np10JsonString5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np10JsonString6SetStrEPKc(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile4SyncEv(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile5CloseEv(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile5WriteEPNS0_6HandleEPKvmPm(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFile8TruncateEl(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFileC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFileD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFileD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np10MemoryFileD2Ev(); +int PS4_SYSV_ABI +_ZN3sce2np12HttpTemplate19SetAuthInfoCallbackEPFii15SceHttpAuthTypePKcPcS5_iPPhPmPiPvESA_(); +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplate4InitEiPKcib(); +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplate7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np12HttpTemplateD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np12StreamBufferixEi(); +int PS4_SYSV_ABI _ZN3sce2np12StreamReader4ReadEPNS0_6HandleEPNS0_9StreamCtxEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np12StreamReader7ReadAllEPNS0_6HandleEPNS0_9StreamCtxEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np12StreamReader7ReadAllEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np12StreamReader8ReadDataEPNS0_6HandleEPNS0_9StreamCtxEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np12StreamReader8ReadDataEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np12StreamReader8SkipDataEPNS0_6HandleElPl(); +int PS4_SYSV_ABI _ZN3sce2np12StreamReader8SkipDataEPNS0_6HandleEPNS0_9StreamCtxElPl(); +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter15WriteFilledDataEPNS0_6HandleEcl(); +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter15WriteFilledDataEPNS0_6HandleEPNS0_9StreamCtxEcl(); +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter5WriteEPNS0_6HandleEPNS0_9StreamCtxEPKvmPm(); +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter9WriteDataEPNS0_6HandleEPKvmPm(); +int PS4_SYSV_ABI _ZN3sce2np12StreamWriter9WriteDataEPNS0_6HandleEPNS0_9StreamCtxEPKvmPm(); +int PS4_SYSV_ABI _ZN3sce2np12WorkerThread10ThreadMainEv(); +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadC1EPNS0_9WorkQueueE(); +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadC2EPNS0_9WorkQueueE(); +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np12WorkerThreadD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParser5ParseEPKcm(); +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParser9GetResultEPPNS0_10JsonObjectE(); +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParser9GetResultEPPNS0_9JsonValueE(); +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParserC2EP16SceNpAllocatorExPK7JsonDef(); +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParserD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParserD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np13JsonDocParserD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecret5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC1EPKvm(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC1ERK16SceNpTitleSecret(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC1ERKS1_(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC2EPKvm(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC2ERK16SceNpTitleSecret(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC2ERKS1_(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np13NpTitleSecretD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory4InitEm(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory6ExpandEm(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory6IsInitEv(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemory7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemoryC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemoryD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemoryD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np13RingBufMemoryD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np14CalloutContext4InitEPKcimm(); +int PS4_SYSV_ABI _ZN3sce2np14CalloutContext4InitEPKNS1_5ParamE(); +int PS4_SYSV_ABI _ZN3sce2np14CalloutContext7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np14CalloutContextD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilder12BuildBufSizeEv(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilder16EscapeJsonStringEPKcPcmPm(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilder23EscapeJsonStringBufSizeEPKc(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilder5BuildEPcmPm(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderC1ERKNS0_9JsonValueE(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderC2ERKNS0_9JsonValueE(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np14JsonDocBuilderD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np15CancelableScope3EndEiPKciS3_(); +int PS4_SYSV_ABI _ZN3sce2np15CancelableScope5BeginEPNS0_6HandleEPKciS5_(); +int PS4_SYSV_ABI _ZN3sce2np15CancelableScopeC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np15CancelableScopeD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np15CancelableScopeD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np15CancelableScopeD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np16StreamReadBufferC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np16StreamReadBufferD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np16StreamReadBufferD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPool13InvalidateAllEv(); +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPool4InitEi(); +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPool7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolC1EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np18HttpConnectionPoolD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReader4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderC1EPKvm(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderC2EPKvm(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamReaderD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriter5WriteEPNS0_6HandleEPKvmPm(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterC1EPvm(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterC2EPvm(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np18MemoryStreamWriterD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReader4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReader5CloseEv(); +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReaderC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReaderD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReaderD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np20BufferedStreamReaderD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient10DisconnectEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient11IsConnectedEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient16invokeSyncMethodEjPKvmPvPmm(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient4InitEPKNS2_6ConfigE(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient7ConnectEPKvm(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClient7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc10IpmiClientD2Ev(); +int PS4_SYSV_ABI +_ZN3sce2np3ipc13ServiceClientC1EPNS1_17ServiceIpmiClientEPKNS1_17ServiceClientInfoE(); +int PS4_SYSV_ABI +_ZN3sce2np3ipc13ServiceClientC2EPNS1_17ServiceIpmiClientEPKNS1_17ServiceClientInfoE(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient10DisconnectEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient10EndRequestEii(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient11findServiceEi(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient11InitServiceEi(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient11TermServiceEi(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient11WaitRequestEiij(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient12AbortRequestEii(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient12BeginRequestEii(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient13CreateRequestEPiiPKvm(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient13DeleteRequestEii(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient13PollEventFlagEijmjPm(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient13WaitEventFlagEijmjPmj(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient14PollEventQueueEiPvm(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient15CancelEventFlagEijm(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient15RegisterServiceEPKNS1_17ServiceClientInfoE(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient16RegisterServicesEPKNS1_17ServiceClientInfoE(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient17invokeInitServiceEi(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient17invokeTermServiceEi(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient17UnregisterServiceEi(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient18EndRequestForAsyncEii(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient19WaitRequestForAsyncEiij(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient20AbortRequestForAsyncEii(); +int PS4_SYSV_ABI +_ZN3sce2np3ipc17ServiceIpmiClient20BeginRequestForAsyncEiiPN4IPMI6Client12EventNotifeeE(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient21CreateRequestForAsyncEPiiPKvm(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient21DeleteRequestForAsyncEii(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient4InitEPNS2_6ConfigE(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient7ConnectEPKvm(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClient7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np3ipc17ServiceIpmiClientD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np4Cond4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np4Cond4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np4Cond4InitEPKcPNS0_5MutexE(); +int PS4_SYSV_ABI _ZN3sce2np4Cond4WaitEj(); +int PS4_SYSV_ABI _ZN3sce2np4Cond6SignalEv(); +int PS4_SYSV_ABI _ZN3sce2np4Cond7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np4Cond9SignalAllEv(); +int PS4_SYSV_ABI _ZN3sce2np4CondC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np4CondC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np4CondD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np4CondD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np4CondD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np4Path11BuildAppendEPcmcPKcm(); +int PS4_SYSV_ABI _ZN3sce2np4Path12AddDelimiterEPcmc(); +int PS4_SYSV_ABI _ZN3sce2np4Path5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np4Path6SetStrEPKcm(); +int PS4_SYSV_ABI _ZN3sce2np4PathD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np4PathD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np4PathD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np4Time10AddMinutesEl(); +int PS4_SYSV_ABI _ZN3sce2np4Time10AddSecondsEl(); +int PS4_SYSV_ABI _ZN3sce2np4Time12GetUserClockEPS1_(); +int PS4_SYSV_ABI _ZN3sce2np4Time15AddMicroSecondsEl(); +int PS4_SYSV_ABI _ZN3sce2np4Time15GetNetworkClockEPS1_(); +int PS4_SYSV_ABI _ZN3sce2np4Time20GetDebugNetworkClockEPS1_(); +int PS4_SYSV_ABI _ZN3sce2np4Time7AddDaysEl(); +int PS4_SYSV_ABI _ZN3sce2np4Time8AddHoursEl(); +int PS4_SYSV_ABI _ZN3sce2np4TimeplERK10SceRtcTick(); +int PS4_SYSV_ABI _ZN3sce2np4TimeplERKS1_(); +int PS4_SYSV_ABI _ZN3sce2np5Mutex4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np5Mutex4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np5Mutex4InitEPKcj(); +int PS4_SYSV_ABI _ZN3sce2np5Mutex4LockEv(); +int PS4_SYSV_ABI _ZN3sce2np5Mutex6UnlockEv(); +int PS4_SYSV_ABI _ZN3sce2np5Mutex7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np5Mutex7TryLockEv(); +int PS4_SYSV_ABI _ZN3sce2np5MutexC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np5MutexC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np5MutexD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np5MutexD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np5MutexD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np5NpEnv8GetNpEnvEPS1_(); +int PS4_SYSV_ABI _ZN3sce2np6Handle10CancelImplEi(); +int PS4_SYSV_ABI _ZN3sce2np6Handle4InitEv(); +int PS4_SYSV_ABI _ZN3sce2np6Handle7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np6HandleC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np6HandleC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np6HandleD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np6HandleD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np6HandleD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectdaEPv(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectdaEPvR14SceNpAllocator(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectdaEPvR16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectdlEPv(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectdlEPvR14SceNpAllocator(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectdlEPvR16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectnaEmR14SceNpAllocator(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectnaEmR16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectnwEmR14SceNpAllocator(); +int PS4_SYSV_ABI _ZN3sce2np6ObjectnwEmR16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np6Thread12DoThreadMainEv(); +int PS4_SYSV_ABI _ZN3sce2np6Thread4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np6Thread4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np6Thread4InitEPKcimm(); +int PS4_SYSV_ABI _ZN3sce2np6Thread4InitEPKNS1_5ParamE(); +int PS4_SYSV_ABI _ZN3sce2np6Thread4JoinEPi(); +int PS4_SYSV_ABI _ZN3sce2np6Thread5StartEv(); +int PS4_SYSV_ABI _ZN3sce2np6Thread7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np6Thread9EntryFuncEPv(); +int PS4_SYSV_ABI _ZN3sce2np6Thread9GetResultEv(); +int PS4_SYSV_ABI _ZN3sce2np6Thread9IsRunningEv(); +int PS4_SYSV_ABI _ZN3sce2np6ThreadC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np6ThreadD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np6ThreadD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np6ThreadD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np7Callout10IsTimedoutEv(); +int PS4_SYSV_ABI _ZN3sce2np7Callout11CalloutFuncEPv(); +int PS4_SYSV_ABI _ZN3sce2np7Callout4StopEv(); +int PS4_SYSV_ABI _ZN3sce2np7Callout5StartEjPNS1_7HandlerE(); +int PS4_SYSV_ABI _ZN3sce2np7Callout5StartEmPNS1_7HandlerE(); +int PS4_SYSV_ABI _ZN3sce2np7Callout9IsStartedEv(); +int PS4_SYSV_ABI _ZN3sce2np7CalloutC1EPNS0_14CalloutContextE(); +int PS4_SYSV_ABI _ZN3sce2np7CalloutC2EPNS0_14CalloutContextE(); +int PS4_SYSV_ABI _ZN3sce2np7CalloutD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np7CalloutD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np7CalloutD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np7HttpUri5BuildEPKS1_PcmPmj(); +int PS4_SYSV_ABI _ZN3sce2np7HttpUri5ParseEPS1_PKc(); +int PS4_SYSV_ABI _ZN3sce2np7HttpUriC1EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np7HttpUriC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np7HttpUriD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np7HttpUriD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np7HttpUriD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf14CheckinForReadEm(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf15CheckinForWriteEm(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf15CheckoutForReadEPm(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf16CheckoutForWriteEPm(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4InitEPvm(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4PeekEmPvm(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf4ReadEPvm(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf5WriteEPKvm(); +int PS4_SYSV_ABI _ZN3sce2np7RingBuf7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np7RingBufC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np7RingBufC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np7RingBufD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np7RingBufD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np7RingBufD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np8HttpFile4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np8HttpFile5CloseEv(); +int PS4_SYSV_ABI _ZN3sce2np8HttpFileC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np8HttpFileD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np8HttpFileD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np8HttpFileD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np8JsonBool5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np8JsonBool7SetBoolEb(); +int PS4_SYSV_ABI _ZN3sce2np8JsonFile5CloseEv(); +int PS4_SYSV_ABI _ZN3sce2np8JsonFileD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np8JsonFileD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np8JsonFileD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np8JsonNull5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommId5BuildERKS1_Pcm(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommId5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommId5ParseEPS1_PKc(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommId5ParseEPS1_PKcm(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC1ERK20SceNpCommunicationId(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC1ERKS1_(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC2ERK20SceNpCommunicationId(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC2ERKS1_(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np8NpCommIdD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np8Selector4InitEPKc(); +int PS4_SYSV_ABI _ZN3sce2np8SelectorD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np8SelectorD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np8SelectorD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItem10SetPendingEv(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItem10SetRunningEv(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItem11SetFinishedEi(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItem14FinishCallbackEv(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItem15RemoveFromQueueEv(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItem6CancelEi(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItem9BindQueueEPNS0_9WorkQueueEi(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItemC2EPKc(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItemD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItemD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np8WorkItemD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag3SetEm(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4OpenEPKc(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4PollEmjPm(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag4WaitEmjPmj(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag5ClearEm(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag6CancelEm(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag6CreateEPKcj(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlag7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlagC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlagC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlagD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlagD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9EventFlagD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans10SetTimeoutEPKNS1_12TimeoutParamE(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans11SendRequestEPNS0_6HandleEPKvm(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans12RecvResponseEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans12SkipResponseEPNS0_6HandleE(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans16AddRequestHeaderEPKcS3_(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans16SetRequestHeaderEPKcS3_(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans21GetResponseStatusCodeEPNS0_6HandleEPi(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans21SetRequestContentTypeEPKc(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans23SetRequestContentLengthEm(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans24GetResponseContentLengthEPNS0_6HandleEPbPm(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans4InitERKNS0_12HttpTemplateEPNS0_18HttpConnectionPoolEiPKcm(); +int PS4_SYSV_ABI +_ZN3sce2np9HttpTrans4InitERKNS0_12HttpTemplateEPNS0_18HttpConnectionPoolEiPKcS8_tS8_m(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans5WriteEPNS0_6HandleEPKvmPm(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTrans7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTransC1EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTransC2EP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTransD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTransD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9HttpTransD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9JsonArray12AddItemArrayEPPS1_(); +int PS4_SYSV_ABI _ZN3sce2np9JsonArray5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np9JsonValue12GetItemValueEi(); +int PS4_SYSV_ABI _ZN3sce2np9JsonValue13GetFieldValueEiPPKc(); +int PS4_SYSV_ABI _ZN3sce2np9JsonValue13GetFieldValueEPKc(); +int PS4_SYSV_ABI _ZN3sce2np9JsonValueD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np9JsonValueD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9JsonValueD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFile4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFile4SeekEliPl(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFile4SyncEv(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFile5CloseEv(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFile5WriteEPNS0_6HandleEPKvmPm(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFile6RemoveEPKc(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFile8TruncateEl(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFileC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFileC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFileD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFileD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9LocalFileD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleId5BuildERKS1_Pcm(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleId5ClearEv(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleId5ParseEPS1_PKc(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleId5ParseEPS1_PKcm(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC1ERK12SceNpTitleId(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC1ERKS1_(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC2ERK12SceNpTitleId(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC2ERKS1_(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9NpTitleIdD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9RefObject6AddRefEv(); +int PS4_SYSV_ABI _ZN3sce2np9RefObject7ReleaseEv(); +int PS4_SYSV_ABI _ZN3sce2np9RefObjectC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9RefObjectC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9RefObjectD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np9RefObjectD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9RefObjectD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9Semaphore4OpenEPKc(); +int PS4_SYSV_ABI _ZN3sce2np9Semaphore4WaitEj(); +int PS4_SYSV_ABI _ZN3sce2np9Semaphore6CreateEiiPKc(); +int PS4_SYSV_ABI _ZN3sce2np9Semaphore6SignalEv(); +int PS4_SYSV_ABI _ZN3sce2np9Semaphore7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9SemaphoreD2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue11GetItemByIdEi(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue15GetFinishedItemENS0_14WorkItemStatusE(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue16WorkItemFinishedEPNS0_8WorkItemEi(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue17ProcFinishedItemsENS0_14WorkItemStatusE(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue18RemoveFinishedItemEPNS0_8WorkItemE(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue18WaitForPendingItemEPPNS0_8WorkItemEPb(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4ctorEv(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4dtorEv(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4InitEPKcimm(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4InitEPKNS0_6Thread5ParamE(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue4StopEv(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue5StartEv(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue6CancelEii(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue6IsInitEv(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue7DestroyEv(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue7EnqueueEiPNS0_8WorkItemE(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue9CancelAllEi(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueue9IsRunningEv(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueC1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueC2Ev(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueD0Ev(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueD1Ev(); +int PS4_SYSV_ABI _ZN3sce2np9WorkQueueD2Ev(); +int PS4_SYSV_ABI _ZN3sce2npeqERK10SceRtcTickRKNS0_4TimeE(); +int PS4_SYSV_ABI _ZN3sce2npeqERK12SceNpTitleIdRKNS0_9NpTitleIdE(); +int PS4_SYSV_ABI _ZN3sce2npeqERK16SceNpTitleSecretRKNS0_13NpTitleSecretE(); +int PS4_SYSV_ABI _ZN3sce2npeqERK20SceNpCommunicationIdRKNS0_8NpCommIdE(); +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_13NpTitleSecretERK16SceNpTitleSecret(); +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_13NpTitleSecretES3_(); +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_4TimeERK10SceRtcTick(); +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_4TimeES3_(); +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_8NpCommIdERK20SceNpCommunicationId(); +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_8NpCommIdES3_(); +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_9NpTitleIdERK12SceNpTitleId(); +int PS4_SYSV_ABI _ZN3sce2npeqERKNS0_9NpTitleIdES3_(); +int PS4_SYSV_ABI _ZN3sce2npgeERK10SceRtcTickRKNS0_4TimeE(); +int PS4_SYSV_ABI _ZN3sce2npgeERKNS0_4TimeERK10SceRtcTick(); +int PS4_SYSV_ABI _ZN3sce2npgeERKNS0_4TimeES3_(); +int PS4_SYSV_ABI _ZN3sce2npgtERK10SceRtcTickRKNS0_4TimeE(); +int PS4_SYSV_ABI _ZN3sce2npgtERKNS0_4TimeERK10SceRtcTick(); +int PS4_SYSV_ABI _ZN3sce2npgtERKNS0_4TimeES3_(); +int PS4_SYSV_ABI _ZN3sce2npleERK10SceRtcTickRKNS0_4TimeE(); +int PS4_SYSV_ABI _ZN3sce2npleERKNS0_4TimeERK10SceRtcTick(); +int PS4_SYSV_ABI _ZN3sce2npleERKNS0_4TimeES3_(); +int PS4_SYSV_ABI _ZN3sce2npltERK10SceRtcTickRKNS0_4TimeE(); +int PS4_SYSV_ABI _ZN3sce2npltERKNS0_4TimeERK10SceRtcTick(); +int PS4_SYSV_ABI _ZN3sce2npltERKNS0_4TimeES3_(); +int PS4_SYSV_ABI _ZN3sce2npneERK10SceRtcTickRKNS0_4TimeE(); +int PS4_SYSV_ABI _ZN3sce2npneERK12SceNpTitleIdRKNS0_9NpTitleIdE(); +int PS4_SYSV_ABI _ZN3sce2npneERK16SceNpTitleSecretRKNS0_13NpTitleSecretE(); +int PS4_SYSV_ABI _ZN3sce2npneERK20SceNpCommunicationIdRKNS0_8NpCommIdE(); +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_13NpTitleSecretERK16SceNpTitleSecret(); +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_13NpTitleSecretES3_(); +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_4TimeERK10SceRtcTick(); +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_4TimeES3_(); +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_8NpCommIdERK20SceNpCommunicationId(); +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_8NpCommIdES3_(); +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_9NpTitleIdERK12SceNpTitleId(); +int PS4_SYSV_ABI _ZN3sce2npneERKNS0_9NpTitleIdES3_(); +int PS4_SYSV_ABI _ZNK3sce2np10Cancelable6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np10EventQueue6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np10EventQueue7IsEmptyEv(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber5CloneEP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPcm(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPi(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPj(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPl(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber6GetNumEPm(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonNumber9GetNumStrEv(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonObject5CloneEP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonString5CloneEP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonString6GetStrEPcm(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonString6GetStrEv(); +int PS4_SYSV_ABI _ZNK3sce2np10JsonString9GetLengthEv(); +int PS4_SYSV_ABI _ZNK3sce2np12HttpTemplate6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np18HttpConnectionPool6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np3ipc10IpmiClient6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np3ipc17ServiceIpmiClient6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np4Cond6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np4Time18ConvertToPosixTimeEPl(); +int PS4_SYSV_ABI _ZNK3sce2np5Mutex6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np6Handle6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np6Thread6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np7RingBuf11GetDataSizeEv(); +int PS4_SYSV_ABI _ZNK3sce2np7RingBuf11GetFreeSizeEv(); +int PS4_SYSV_ABI _ZNK3sce2np7RingBuf6IsFullEv(); +int PS4_SYSV_ABI _ZNK3sce2np7RingBuf7IsEmptyEv(); +int PS4_SYSV_ABI _ZNK3sce2np8JsonBool5CloneEP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZNK3sce2np8JsonBool7GetBoolEv(); +int PS4_SYSV_ABI _ZNK3sce2np8JsonNull5CloneEP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZNK3sce2np8NpCommId7IsEmptyEv(); +int PS4_SYSV_ABI _ZNK3sce2np9EventFlag6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np9HttpTrans6IsInitEv(); +int PS4_SYSV_ABI _ZNK3sce2np9JsonArray5CloneEP16SceNpAllocatorEx(); +int PS4_SYSV_ABI _ZNK3sce2np9JsonValue12GetItemValueEi(); +int PS4_SYSV_ABI _ZNK3sce2np9NpTitleId7IsEmptyEv(); +int PS4_SYSV_ABI _ZNK3sce2np9Semaphore6IsInitEv(); +int PS4_SYSV_ABI _ZThn16_N3sce2np10MemoryFile5WriteEPNS0_6HandleEPKvmPm(); +int PS4_SYSV_ABI _ZThn16_N3sce2np10MemoryFileD0Ev(); +int PS4_SYSV_ABI _ZThn16_N3sce2np10MemoryFileD1Ev(); +int PS4_SYSV_ABI _ZThn16_N3sce2np9HttpTrans5WriteEPNS0_6HandleEPKvmPm(); +int PS4_SYSV_ABI _ZThn16_N3sce2np9HttpTransD0Ev(); +int PS4_SYSV_ABI _ZThn16_N3sce2np9HttpTransD1Ev(); +int PS4_SYSV_ABI _ZThn16_N3sce2np9LocalFile5WriteEPNS0_6HandleEPKvmPm(); +int PS4_SYSV_ABI _ZThn16_N3sce2np9LocalFileD0Ev(); +int PS4_SYSV_ABI _ZThn16_N3sce2np9LocalFileD1Ev(); +int PS4_SYSV_ABI _ZThn8_N3sce2np10MemoryFile4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZThn8_N3sce2np10MemoryFileD0Ev(); +int PS4_SYSV_ABI _ZThn8_N3sce2np10MemoryFileD1Ev(); +int PS4_SYSV_ABI _ZThn8_N3sce2np6Handle10CancelImplEi(); +int PS4_SYSV_ABI _ZThn8_N3sce2np6HandleD0Ev(); +int PS4_SYSV_ABI _ZThn8_N3sce2np6HandleD1Ev(); +int PS4_SYSV_ABI _ZThn8_N3sce2np9HttpTrans4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZThn8_N3sce2np9HttpTransD0Ev(); +int PS4_SYSV_ABI _ZThn8_N3sce2np9HttpTransD1Ev(); +int PS4_SYSV_ABI _ZThn8_N3sce2np9LocalFile4ReadEPNS0_6HandleEPvmPm(); +int PS4_SYSV_ABI _ZThn8_N3sce2np9LocalFileD0Ev(); +int PS4_SYSV_ABI _ZThn8_N3sce2np9LocalFileD1Ev(); +int PS4_SYSV_ABI _ZTVN3sce2np10JsonNumberE(); +int PS4_SYSV_ABI _ZTVN3sce2np10JsonObjectE(); +int PS4_SYSV_ABI _ZTVN3sce2np10JsonStringE(); +int PS4_SYSV_ABI _ZTVN3sce2np8JsonBoolE(); +int PS4_SYSV_ABI _ZTVN3sce2np8JsonNullE(); +int PS4_SYSV_ABI _ZTVN3sce2np8SelectorE(); +int PS4_SYSV_ABI _ZTVN3sce2np9JsonArrayE(); +int PS4_SYSV_ABI _ZTVN3sce2np9JsonValueE(); +int PS4_SYSV_ABI sceNpAllocateKernelMemoryNoAlignment(); +int PS4_SYSV_ABI sceNpAllocateKernelMemoryWithAlignment(); +int PS4_SYSV_ABI sceNpArchInit(); +int PS4_SYSV_ABI sceNpArchTerm(); +int PS4_SYSV_ABI sceNpAtomicCas32(); +int PS4_SYSV_ABI sceNpAtomicDec32(); +int PS4_SYSV_ABI sceNpAtomicInc32(); +int PS4_SYSV_ABI sceNpBase64Decoder(); +int PS4_SYSV_ABI sceNpBase64Encoder(); +int PS4_SYSV_ABI sceNpBase64GetDecodeSize(); +int PS4_SYSV_ABI sceNpBase64UrlDecoder(); +int PS4_SYSV_ABI sceNpBase64UrlEncoder(); +int PS4_SYSV_ABI sceNpBase64UrlGetDecodeSize(); +int PS4_SYSV_ABI sceNpCalloutInitCtx(); +int PS4_SYSV_ABI sceNpCalloutStartOnCtx(); +int PS4_SYSV_ABI sceNpCalloutStartOnCtx64(); +int PS4_SYSV_ABI sceNpCalloutStopOnCtx(); +int PS4_SYSV_ABI sceNpCalloutTermCtx(); +int PS4_SYSV_ABI sceNpCancelEventFlag(); +int PS4_SYSV_ABI sceNpClearEventFlag(); +int PS4_SYSV_ABI sceNpCloseEventFlag(); +int PS4_SYSV_ABI sceNpCloseSema(); +int PS4_SYSV_ABI sceNpCondDestroy(); +int PS4_SYSV_ABI sceNpCondInit(); +int PS4_SYSV_ABI sceNpCondSignal(); +int PS4_SYSV_ABI sceNpCondSignalAll(); +int PS4_SYSV_ABI sceNpCondSignalTo(); +int PS4_SYSV_ABI sceNpCondTimedwait(); +int PS4_SYSV_ABI sceNpCondWait(); +int PS4_SYSV_ABI sceNpCreateEventFlag(); +int PS4_SYSV_ABI sceNpCreateSema(); +int PS4_SYSV_ABI sceNpCreateThread(); +int PS4_SYSV_ABI sceNpDbgAssignDebugId(); +int PS4_SYSV_ABI sceNpDbgDumpBinary(); +int PS4_SYSV_ABI sceNpDbgDumpText(); +int PS4_SYSV_ABI sceNpDeleteEventFlag(); +int PS4_SYSV_ABI sceNpDeleteSema(); +int PS4_SYSV_ABI sceNpEventGetCurrentNetworkTick(); +int PS4_SYSV_ABI sceNpFreeKernelMemory(); +int PS4_SYSV_ABI sceNpGetNavSdkVersion(); +int PS4_SYSV_ABI sceNpGetPlatformType(); +int PS4_SYSV_ABI sceNpGetProcessId(); +int PS4_SYSV_ABI sceNpGetRandom(); +int PS4_SYSV_ABI sceNpGetSdkVersion(); +int PS4_SYSV_ABI sceNpGetSdkVersionUInt(); +int PS4_SYSV_ABI sceNpGetSystemClockUsec(); +int PS4_SYSV_ABI sceNpGlobalHeapGetAllocator(); +int PS4_SYSV_ABI sceNpGlobalHeapGetAllocatorEx(); +int PS4_SYSV_ABI sceNpGlobalHeapGetAllocatorExPtr(); +int PS4_SYSV_ABI sceNpGlobalHeapGetAllocatorPtr(); +int PS4_SYSV_ABI sceNpHeapDestroy(); +int PS4_SYSV_ABI sceNpHeapGetAllocator(); +int PS4_SYSV_ABI sceNpHeapGetStat(); +int PS4_SYSV_ABI sceNpHeapInit(); +int PS4_SYSV_ABI sceNpHeapShowStat(); +int PS4_SYSV_ABI sceNpHexToInt(); +int PS4_SYSV_ABI sceNpInt32ToStr(); +int PS4_SYSV_ABI sceNpInt64ToStr(); +int PS4_SYSV_ABI sceNpIntGetPlatformType(); +int PS4_SYSV_ABI sceNpIntIsOnlineIdString(); +int PS4_SYSV_ABI sceNpIntIsValidOnlineId(); +int PS4_SYSV_ABI sceNpIntSetPlatformType(); +int PS4_SYSV_ABI sceNpIntToHex(); +int PS4_SYSV_ABI sceNpIpc2ClientInit(); +int PS4_SYSV_ABI sceNpIpc2ClientTerm(); +int PS4_SYSV_ABI sceNpJoinThread(); +int PS4_SYSV_ABI sceNpJsonParse(); +int PS4_SYSV_ABI sceNpJsonParseBuf(); +int PS4_SYSV_ABI sceNpJsonParseBufInit(); +int PS4_SYSV_ABI sceNpJsonParseEx(); +int PS4_SYSV_ABI sceNpJsonParseExInit(); +int PS4_SYSV_ABI sceNpJsonParseInit(); +int PS4_SYSV_ABI sceNpLwCondDestroy(); +int PS4_SYSV_ABI sceNpLwCondInit(); +int PS4_SYSV_ABI sceNpLwCondSignal(); +int PS4_SYSV_ABI sceNpLwCondSignalAll(); +int PS4_SYSV_ABI sceNpLwCondSignalTo(); +int PS4_SYSV_ABI sceNpLwCondWait(); +int PS4_SYSV_ABI sceNpLwMutexDestroy(); +int PS4_SYSV_ABI sceNpLwMutexInit(); +int PS4_SYSV_ABI sceNpLwMutexLock(); +int PS4_SYSV_ABI sceNpLwMutexTryLock(); +int PS4_SYSV_ABI sceNpLwMutexUnlock(); +int PS4_SYSV_ABI sceNpMemoryHeapDestroy(); +int PS4_SYSV_ABI sceNpMemoryHeapGetAllocator(); +int PS4_SYSV_ABI sceNpMemoryHeapGetAllocatorEx(); +int PS4_SYSV_ABI sceNpMemoryHeapInit(); +int PS4_SYSV_ABI sceNpMutexDestroy(); +int PS4_SYSV_ABI sceNpMutexInit(); +int PS4_SYSV_ABI sceNpMutexLock(); +int PS4_SYSV_ABI sceNpMutexTryLock(); +int PS4_SYSV_ABI sceNpMutexUnlock(); +int PS4_SYSV_ABI sceNpOpenEventFlag(); +int PS4_SYSV_ABI sceNpOpenSema(); +int PS4_SYSV_ABI sceNpPanic(); +int PS4_SYSV_ABI sceNpPollEventFlag(); +int PS4_SYSV_ABI sceNpPollSema(); +int PS4_SYSV_ABI sceNpRtcConvertToPosixTime(); +int PS4_SYSV_ABI sceNpRtcFormatRFC3339(); +int PS4_SYSV_ABI sceNpRtcParseRFC3339(); +int PS4_SYSV_ABI sceNpServerErrorJsonGetErrorCode(); +int PS4_SYSV_ABI sceNpServerErrorJsonMultiGetErrorCode(); +int PS4_SYSV_ABI sceNpServerErrorJsonParse(); +int PS4_SYSV_ABI sceNpServerErrorJsonParseInit(); +int PS4_SYSV_ABI sceNpServerErrorJsonParseMultiInit(); +int PS4_SYSV_ABI sceNpSetEventFlag(); +int PS4_SYSV_ABI sceNpSetPlatformType(); +int PS4_SYSV_ABI sceNpSignalSema(); +int PS4_SYSV_ABI sceNpStrBuildHex(); +int PS4_SYSV_ABI sceNpStrcpyToBuf(); +int PS4_SYSV_ABI sceNpStrncpyToBuf(); +int PS4_SYSV_ABI sceNpStrnParseHex(); +int PS4_SYSV_ABI sceNpStrParseHex(); +int PS4_SYSV_ABI sceNpStrToInt32(); +int PS4_SYSV_ABI sceNpStrToInt64(); +int PS4_SYSV_ABI sceNpStrToUInt32(); +int PS4_SYSV_ABI sceNpStrToUInt64(); +int PS4_SYSV_ABI sceNpThreadGetId(); +int PS4_SYSV_ABI sceNpUInt32ToStr(); +int PS4_SYSV_ABI sceNpUInt64ToStr(); +int PS4_SYSV_ABI sceNpUserGetUserIdList(); +int PS4_SYSV_ABI sceNpUtilBuildTitleId(); +int PS4_SYSV_ABI sceNpUtilCanonicalizeNpIdForPs4(); +int PS4_SYSV_ABI sceNpUtilCanonicalizeNpIdForPsp2(); +int PS4_SYSV_ABI sceNpUtilCmpAccountId(); +int PS4_SYSV_ABI sceNpUtilGetDateSetAuto(); +int PS4_SYSV_ABI sceNpUtilGetDbgCommerce(); +int PS4_SYSV_ABI sceNpUtilGetEnv(); +int PS4_SYSV_ABI sceNpUtilGetFakeDisplayNameMode(); +int PS4_SYSV_ABI sceNpUtilGetFakeRateLimit(); +int PS4_SYSV_ABI sceNpUtilGetIgnoreNpTitleId(); +int PS4_SYSV_ABI sceNpUtilGetNpDebug(); +int PS4_SYSV_ABI sceNpUtilGetNpLanguageCode(); +int PS4_SYSV_ABI sceNpUtilGetNpLanguageCode2(); +int PS4_SYSV_ABI sceNpUtilGetNpLanguageCode2Str(); +int PS4_SYSV_ABI sceNpUtilGetNpLanguageCodeStr(); +int PS4_SYSV_ABI sceNpUtilGetNpTestPatch(); +int PS4_SYSV_ABI sceNpUtilGetNthChar(); +int PS4_SYSV_ABI sceNpUtilGetShareTitleCheck(); +int PS4_SYSV_ABI sceNpUtilGetSystemLanguage(); +int PS4_SYSV_ABI sceNpUtilGetTrcNotify(); +int PS4_SYSV_ABI sceNpUtilGetWebApi2FakeRateLimit(); +int PS4_SYSV_ABI sceNpUtilGetWebApi2FakeRateLimitTarget(); +int PS4_SYSV_ABI sceNpUtilGetWebTraceSetting(); +int PS4_SYSV_ABI sceNpUtilHttpUrlEncode(); +int PS4_SYSV_ABI sceNpUtilJidToNpId(); +int PS4_SYSV_ABI sceNpUtilJsonEscape(); +int PS4_SYSV_ABI sceNpUtilJsonGetOneChar(); +int PS4_SYSV_ABI sceNpUtilJsonUnescape(); +int PS4_SYSV_ABI sceNpUtilNpIdToJid(); +int PS4_SYSV_ABI sceNpUtilNumChars(); +int PS4_SYSV_ABI sceNpUtilParseJid(); +int PS4_SYSV_ABI sceNpUtilParseTitleId(); +int PS4_SYSV_ABI sceNpUtilSerializeJid(); +int PS4_SYSV_ABI sceNpUtilXmlEscape(); +int PS4_SYSV_ABI sceNpUtilXmlGetOneChar(); +int PS4_SYSV_ABI sceNpUtilXmlUnescape(); +int PS4_SYSV_ABI sceNpWaitEventFlag(); +int PS4_SYSV_ABI sceNpWaitSema(); +int PS4_SYSV_ABI sceNpXmlParse(); +int PS4_SYSV_ABI sceNpXmlParseInit(); +int PS4_SYSV_ABI Func_00FD578C2DD966DF(); +int PS4_SYSV_ABI Func_0131A2EA80689F4C(); +int PS4_SYSV_ABI Func_01443C54863BDD20(); +int PS4_SYSV_ABI Func_01BC55BDC5C0ADAD(); +int PS4_SYSV_ABI Func_01D1ECF5750F40E8(); +int PS4_SYSV_ABI Func_020A479A74F5FBAC(); +int PS4_SYSV_ABI Func_024AF5E1D9472AB5(); +int PS4_SYSV_ABI Func_027C5D488713A6B3(); +int PS4_SYSV_ABI Func_02FE9D94C6858355(); +int PS4_SYSV_ABI Func_041F34F1C70D15C1(); +int PS4_SYSV_ABI Func_0530B1D276114248(); +int PS4_SYSV_ABI Func_065DAA14E9C73AD9(); +int PS4_SYSV_ABI Func_06AFF4E5D042BC3E(); +int PS4_SYSV_ABI Func_06EE369299F73997(); +int PS4_SYSV_ABI Func_07C92D9F8D76B617(); +int PS4_SYSV_ABI Func_07E9117498F1E4BF(); +int PS4_SYSV_ABI Func_08F3E0AF3664F275(); +int PS4_SYSV_ABI Func_0A9937C01EF21375(); +int PS4_SYSV_ABI Func_0ACBE6ACCBA3876D(); +int PS4_SYSV_ABI Func_0AE07D3354510CE6(); +int PS4_SYSV_ABI Func_0AEC3C342AE67B7C(); +int PS4_SYSV_ABI Func_0B318420C11E7C23(); +int PS4_SYSV_ABI Func_0BB6C37B03F35D89(); +int PS4_SYSV_ABI Func_0BBE8A9ACDD90FDF(); +int PS4_SYSV_ABI Func_0C7B62905E224E9C(); +int PS4_SYSV_ABI Func_0D35913117241AF9(); +int PS4_SYSV_ABI Func_0D5EE95CEED879A7(); +int PS4_SYSV_ABI Func_0D6FB24B27AB1DA2(); +int PS4_SYSV_ABI Func_0DE8032D534AC41C(); +int PS4_SYSV_ABI Func_0DF4CCA9DCA9E742(); +int PS4_SYSV_ABI Func_0E7449B1D3D98C01(); +int PS4_SYSV_ABI Func_0E77094B7750CB37(); +int PS4_SYSV_ABI Func_0ECAB397B6D50603(); +int PS4_SYSV_ABI Func_0F1DE1D1EADA2948(); +int PS4_SYSV_ABI Func_0F8AFEFA1D26BF1A(); +int PS4_SYSV_ABI Func_11881710562A6BAD(); +int PS4_SYSV_ABI Func_11AFD88BBD0C70DB(); +int PS4_SYSV_ABI Func_11E704A30A4B8877(); +int PS4_SYSV_ABI Func_125014842452F94B(); +int PS4_SYSV_ABI Func_126F0071E11CAC46(); +int PS4_SYSV_ABI Func_12926DCF35994B01(); +int PS4_SYSV_ABI Func_12CC7ABFBF31618F(); +int PS4_SYSV_ABI Func_13C4E51F44592AA2(); +int PS4_SYSV_ABI Func_15330E7C56338254(); +int PS4_SYSV_ABI Func_1566B358CABF2612(); +int PS4_SYSV_ABI Func_1625818F268F45EF(); +int PS4_SYSV_ABI Func_16D32B40D28A9AC2(); +int PS4_SYSV_ABI Func_183F4483BDBD25CD(); +int PS4_SYSV_ABI Func_1887E9E95AF62F3D(); +int PS4_SYSV_ABI Func_18A3CE95FD893D3A(); +int PS4_SYSV_ABI Func_18B3665E4854E7E9(); +int PS4_SYSV_ABI Func_1923B003948AF47E(); +int PS4_SYSV_ABI Func_19B533DA4C59A532(); +int PS4_SYSV_ABI Func_1BB399772DB68E08(); +int PS4_SYSV_ABI Func_1C0AC612D3A2971B(); +int PS4_SYSV_ABI Func_1C5599B779990A43(); +int PS4_SYSV_ABI Func_1CCBB296B04317BE(); +int PS4_SYSV_ABI Func_1CD045542FB93002(); +int PS4_SYSV_ABI Func_1DECECA673AB77B7(); +int PS4_SYSV_ABI Func_1E03E024E26C1A7F(); +int PS4_SYSV_ABI Func_1F101732BB0D7E21(); +int PS4_SYSV_ABI Func_1F4D153EC3DD47BB(); +int PS4_SYSV_ABI Func_1F7C47F63FAF0CBE(); +int PS4_SYSV_ABI Func_1FBE2EE68C0F31B6(); +int PS4_SYSV_ABI Func_2038C1628914B9C9(); +int PS4_SYSV_ABI Func_203FCB56FDB86A74(); +int PS4_SYSV_ABI Func_20569C107C6CB08C(); +int PS4_SYSV_ABI Func_20AB2D734EDE55F0(); +int PS4_SYSV_ABI Func_22B1281180FB0A5E(); +int PS4_SYSV_ABI Func_22F1AADA66A449AE(); +int PS4_SYSV_ABI Func_238B215EFFDF3D30(); +int PS4_SYSV_ABI Func_24E8EC51D149FA15(); +int PS4_SYSV_ABI Func_25728E78A3962C02(); +int PS4_SYSV_ABI Func_25E649A1C6891C05(); +int PS4_SYSV_ABI Func_264B8A38B577705D(); +int PS4_SYSV_ABI Func_266ED08DC1C82A0E(); +int PS4_SYSV_ABI Func_27BB4DE62AB58BAD(); +int PS4_SYSV_ABI Func_283AA96A196EA2EA(); +int PS4_SYSV_ABI Func_285315A390A85A94(); +int PS4_SYSV_ABI Func_29049DBB1EF3194E(); +int PS4_SYSV_ABI Func_29F7BA9C3732CB47(); +int PS4_SYSV_ABI Func_2A732DF331ACCB37(); +int PS4_SYSV_ABI Func_2AA01660EC75B6FB(); +int PS4_SYSV_ABI Func_2B37CBCE941C1681(); +int PS4_SYSV_ABI Func_2CAA3B64D0544E55(); +int PS4_SYSV_ABI Func_2CCD79617EC10A75(); +int PS4_SYSV_ABI Func_2CD8B69716AC0667(); +int PS4_SYSV_ABI Func_2D74F7C0FF9B5E9C(); +int PS4_SYSV_ABI Func_2DCA5A8080544E95(); +int PS4_SYSV_ABI Func_2E69F2743CE7CE57(); +int PS4_SYSV_ABI Func_2EAF1F3BAFF0527D(); +int PS4_SYSV_ABI Func_31493E55BB4E8F66(); +int PS4_SYSV_ABI Func_317EDCAD00FB5F5E(); +int PS4_SYSV_ABI Func_31E01CFA8A18CDA2(); +int PS4_SYSV_ABI Func_32AFD782A061B526(); +int PS4_SYSV_ABI Func_32B5CDEB093B8189(); +int PS4_SYSV_ABI Func_34155152513C93AE(); +int PS4_SYSV_ABI Func_34E4EFFF8EF6C9FE(); +int PS4_SYSV_ABI Func_3572FA0D5C54563B(); +int PS4_SYSV_ABI Func_367C479B264E0DB9(); +int PS4_SYSV_ABI Func_36884FBC964B29CC(); +int PS4_SYSV_ABI Func_3860081BB7559949(); +int PS4_SYSV_ABI Func_39314F7E674AB132(); +int PS4_SYSV_ABI Func_3A02E780FCC556A5(); +int PS4_SYSV_ABI Func_3A17B885BA4849B6(); +int PS4_SYSV_ABI Func_3A38EACAEA5E23A4(); +int PS4_SYSV_ABI Func_3B34A5E07F0DBC1F(); +int PS4_SYSV_ABI Func_3B4E8FFC00FC7EA4(); +int PS4_SYSV_ABI Func_3BAB18FDA235107A(); +int PS4_SYSV_ABI Func_3BDF9996A0A33F11(); +int PS4_SYSV_ABI Func_3C1952F1A45CC37A(); +int PS4_SYSV_ABI Func_3CA37906CDB05F3B(); +int PS4_SYSV_ABI Func_3CDB2908ACEE3A6F(); +int PS4_SYSV_ABI Func_3D3ED165F2BDCD33(); +int PS4_SYSV_ABI Func_3DA4D7D1575FCDCE(); +int PS4_SYSV_ABI Func_3DDFB612CD0BC769(); +int PS4_SYSV_ABI Func_3E0415E167DEADC7(); +int PS4_SYSV_ABI Func_3E7E9F0F1581C1E6(); +int PS4_SYSV_ABI Func_3ED389DB8280ED65(); +int PS4_SYSV_ABI Func_3F0C7F6C0C35487D(); +int PS4_SYSV_ABI Func_3FDA7200389EF0D2(); +int PS4_SYSV_ABI Func_3FF3C258BA516E58(); +int PS4_SYSV_ABI Func_4029453F628A3C5D(); +int PS4_SYSV_ABI Func_405826DDB4AE538E(); +int PS4_SYSV_ABI Func_405A926759F25865(); +int PS4_SYSV_ABI Func_406608FDEE7AE88A(); +int PS4_SYSV_ABI Func_40DDA5558C17DDCF(); +int PS4_SYSV_ABI Func_419D12E52FF60664(); +int PS4_SYSV_ABI Func_4296E539474BE77F(); +int PS4_SYSV_ABI Func_42F41FC563CC3654(); +int PS4_SYSV_ABI Func_43CCC86F4C93026A(); +int PS4_SYSV_ABI Func_4409F60BDABC65E1(); +int PS4_SYSV_ABI Func_4563C70AEC675382(); +int PS4_SYSV_ABI Func_45E66370219BD05E(); +int PS4_SYSV_ABI Func_466A54F072785696(); +int PS4_SYSV_ABI Func_46CD2536976F209A(); +int PS4_SYSV_ABI Func_4863717BD2FDD157(); +int PS4_SYSV_ABI Func_4902EBD19A263149(); +int PS4_SYSV_ABI Func_4904F7FE8D83F40C(); +int PS4_SYSV_ABI Func_4A5E13F784ABFCE7(); +int PS4_SYSV_ABI Func_4B65EEB135C12781(); +int PS4_SYSV_ABI Func_4C19D49978DA85E2(); +int PS4_SYSV_ABI Func_4DE5D620FF66F136(); +int PS4_SYSV_ABI Func_4E170C12B57A8F9E(); +int PS4_SYSV_ABI Func_4E2F3FA405C3260C(); +int PS4_SYSV_ABI Func_4EA9350577513B4D(); +int PS4_SYSV_ABI Func_4F78EB6FC4B5F21F(); +int PS4_SYSV_ABI Func_50348BE4331117B7(); +int PS4_SYSV_ABI Func_508C7E8CDD281CAA(); +int PS4_SYSV_ABI Func_521C1D2C028F5A7E(); +int PS4_SYSV_ABI Func_522FF24A35E67291(); +int PS4_SYSV_ABI Func_5470FE90C25CDD4C(); +int PS4_SYSV_ABI Func_557F260F9A4ACD18(); +int PS4_SYSV_ABI Func_5586F97209F391EB(); +int PS4_SYSV_ABI Func_55B2C9B7ADA95C3C(); +int PS4_SYSV_ABI Func_55B488A3A540B936(); +int PS4_SYSV_ABI Func_5642DFE82AF43143(); +int PS4_SYSV_ABI Func_574E046F294AE187(); +int PS4_SYSV_ABI Func_578926EBF8AA6CBF(); +int PS4_SYSV_ABI Func_585DA5FC650896BC(); +int PS4_SYSV_ABI Func_58D6EB27349EC276(); +int PS4_SYSV_ABI Func_5906B7317949872D(); +int PS4_SYSV_ABI Func_5910B5614335BE70(); +int PS4_SYSV_ABI Func_593D7DA8911F08C9(); +int PS4_SYSV_ABI Func_59757FE6A93B0D53(); +int PS4_SYSV_ABI Func_598E60F862B1141E(); +int PS4_SYSV_ABI Func_5A45351666680DAF(); +int PS4_SYSV_ABI Func_5AABE9EA702E6A7F(); +int PS4_SYSV_ABI Func_5AEA4AE472355B80(); +int PS4_SYSV_ABI Func_5B20E53CDE598741(); +int PS4_SYSV_ABI Func_5B480B59FAE947E0(); +int PS4_SYSV_ABI Func_5B5EEC23690AB9BD(); +int PS4_SYSV_ABI Func_5C0AC5B0AF3EDAE0(); +int PS4_SYSV_ABI Func_5D2E999BEA0762D4(); +int PS4_SYSV_ABI Func_5D55BBFD45110E16(); +int PS4_SYSV_ABI Func_5DEE15403D2BB5FD(); +int PS4_SYSV_ABI Func_6020C708CA74B130(); +int PS4_SYSV_ABI Func_606E1415503C34D2(); +int PS4_SYSV_ABI Func_612140E8EE9A693E(); +int PS4_SYSV_ABI Func_61F13F551DAF61DF(); +int PS4_SYSV_ABI Func_6206D39131752328(); +int PS4_SYSV_ABI Func_621D4543EF0344DE(); +int PS4_SYSV_ABI Func_6259A9A8E56D0273(); +int PS4_SYSV_ABI Func_625F9C7016346F4E(); +int PS4_SYSV_ABI Func_62EF8DF746CD8C4A(); +int PS4_SYSV_ABI Func_636D2A99FD1E6B2B(); +int PS4_SYSV_ABI Func_68013EDF66FE7425(); +int PS4_SYSV_ABI Func_6971F7067DD639D1(); +int PS4_SYSV_ABI Func_69896ADB3AB410B2(); +int PS4_SYSV_ABI Func_6A1389AA6E561387(); +int PS4_SYSV_ABI Func_6A5560D89F12B2E7(); +int PS4_SYSV_ABI Func_6ABF99CF854ABCF1(); +int PS4_SYSV_ABI Func_6B4FDDC6500D8DCB(); +int PS4_SYSV_ABI Func_6CA11D5B49D1928A(); +int PS4_SYSV_ABI Func_6D6C0FB61E6D0715(); +int PS4_SYSV_ABI Func_6D750745FE1348F5(); +int PS4_SYSV_ABI Func_6E1AF3F9D09914BE(); +int PS4_SYSV_ABI Func_6E53ED4C08B2A521(); +int PS4_SYSV_ABI Func_6EF43ACA1ED6B968(); +int PS4_SYSV_ABI Func_6F6FA09F3E1B6A60(); +int PS4_SYSV_ABI Func_7035C340C7195901(); +int PS4_SYSV_ABI Func_7038E21CB5CF641B(); +int PS4_SYSV_ABI Func_706345DCDA5BA44D(); +int PS4_SYSV_ABI Func_7120714EBF10BF1F(); +int PS4_SYSV_ABI Func_713D28A91BC803DD(); +int PS4_SYSV_ABI Func_7153BD76A53AA012(); +int PS4_SYSV_ABI Func_715C625CC7041B6B(); +int PS4_SYSV_ABI Func_71E467BDB18711D0(); +int PS4_SYSV_ABI Func_720D17965C1F4E3F(); +int PS4_SYSV_ABI Func_734380C9BCF65B9A(); +int PS4_SYSV_ABI Func_73F4C08CCD4BBCCF(); +int PS4_SYSV_ABI Func_74403101B7B29D46(); +int PS4_SYSV_ABI Func_7525B081ACD66FF4(); +int PS4_SYSV_ABI Func_75BF4477C13A05CA(); +int PS4_SYSV_ABI Func_7609793F5987C6F7(); +int PS4_SYSV_ABI Func_7616ED01B04769AA(); +int PS4_SYSV_ABI Func_764F873D91A124D8(); +int PS4_SYSV_ABI Func_7706F1E123059565(); +int PS4_SYSV_ABI Func_77F2D07EB6D806E6(); +int PS4_SYSV_ABI Func_79C3704CDCD59E57(); +int PS4_SYSV_ABI Func_79DA0BBA21351545(); +int PS4_SYSV_ABI Func_79FA2447B5F3F0C4(); +int PS4_SYSV_ABI Func_7A4D6F65FF6195A5(); +int PS4_SYSV_ABI Func_7B3195CD114DECE7(); +int PS4_SYSV_ABI Func_7B3238F2301AD36D(); +int PS4_SYSV_ABI Func_7C77FC70750A3266(); +int PS4_SYSV_ABI Func_7D23A9DC459D6D18(); +int PS4_SYSV_ABI Func_7D5988C748D0A05F(); +int PS4_SYSV_ABI Func_7D9597147A99F4F4(); +int PS4_SYSV_ABI Func_7E2953F407DD8346(); +int PS4_SYSV_ABI Func_7EE34E5099709B32(); +int PS4_SYSV_ABI Func_80470E5511D5CA00(); +int PS4_SYSV_ABI Func_807179701C08F069(); +int PS4_SYSV_ABI Func_8096E81FFAF24E46(); +int PS4_SYSV_ABI Func_80B764F4F1B87042(); +int PS4_SYSV_ABI Func_80BF691438AD008B(); +int PS4_SYSV_ABI Func_80CF6CFC96012442(); +int PS4_SYSV_ABI Func_80EA772F8C0519FD(); +int PS4_SYSV_ABI Func_81D0AFD0084D327A(); +int PS4_SYSV_ABI Func_821EB8A72176FD67(); +int PS4_SYSV_ABI Func_82D2FAB54127273F(); +int PS4_SYSV_ABI Func_836AE669C42A59E9(); +int PS4_SYSV_ABI Func_8559A25BFEC3518C(); +int PS4_SYSV_ABI Func_85C1F66C767A49D2(); +int PS4_SYSV_ABI Func_8689ED1383F87BA7(); +int PS4_SYSV_ABI Func_8796CD9E5355D3A6(); +int PS4_SYSV_ABI Func_87D37EB6DDC19D99(); +int PS4_SYSV_ABI Func_880AA48F70F84FDD(); +int PS4_SYSV_ABI Func_897B07562093665B(); +int PS4_SYSV_ABI Func_8ACAF55F16368087(); +int PS4_SYSV_ABI Func_8AE8A5589B30D4E0(); +int PS4_SYSV_ABI Func_8AE997909831B331(); +int PS4_SYSV_ABI Func_8B2D640BE0D0FB99(); +int PS4_SYSV_ABI Func_8B3D9AB4668DAECB(); +int PS4_SYSV_ABI Func_8B5EFAAAACE0B46C(); +int PS4_SYSV_ABI Func_8C27943F40A988DB(); +int PS4_SYSV_ABI Func_8C54096C75F5F2D0(); +int PS4_SYSV_ABI Func_8D7663A0A5168814(); +int PS4_SYSV_ABI Func_8E618F509994FAD7(); +int PS4_SYSV_ABI Func_8F19E6CC064E2B98(); +int PS4_SYSV_ABI Func_8F6A8AEAEE922FF5(); +int PS4_SYSV_ABI Func_9010E1AD8EBBFBCA(); +int PS4_SYSV_ABI Func_90A955A0E7001AE9(); +int PS4_SYSV_ABI Func_90F9D6067FEECC05(); +int PS4_SYSV_ABI Func_9348F3D19546A1DA(); +int PS4_SYSV_ABI Func_93D3C011DB19388A(); +int PS4_SYSV_ABI Func_956E7A4FD9F89103(); +int PS4_SYSV_ABI Func_95F699E042C3E40F(); +int PS4_SYSV_ABI Func_96877B39AA0E8735(); +int PS4_SYSV_ABI Func_96CE07C49ED234EA(); +int PS4_SYSV_ABI Func_976BB178235B5681(); +int PS4_SYSV_ABI Func_978C0B25E588C4D6(); +int PS4_SYSV_ABI Func_98BA2612BEF238D6(); +int PS4_SYSV_ABI Func_995BDD4931AF9137(); +int PS4_SYSV_ABI Func_9966E39A926B7250(); +int PS4_SYSV_ABI Func_99C2306F18963464(); +int PS4_SYSV_ABI Func_99C92C613B776BA7(); +int PS4_SYSV_ABI Func_9A4E4B938CC8AD39(); +int PS4_SYSV_ABI Func_9B23F7B4B7F72081(); +int PS4_SYSV_ABI Func_9C0EAEEAE705A8DB(); +int PS4_SYSV_ABI Func_9D47AC59545DE9E8(); +int PS4_SYSV_ABI Func_A13052D8B1B2ACFA(); +int PS4_SYSV_ABI Func_A1AA43E3A78F6F62(); +int PS4_SYSV_ABI Func_A1E48CDF54649DC9(); +int PS4_SYSV_ABI Func_A2E7DEE5B0AF5D14(); +int PS4_SYSV_ABI Func_A2F5C7FD9FF113F5(); +int PS4_SYSV_ABI Func_A36296E2269D46BC(); +int PS4_SYSV_ABI Func_A3EE2A7B9F0D88AF(); +int PS4_SYSV_ABI Func_A4471F9F7E0BFA82(); +int PS4_SYSV_ABI Func_A449BBA521EA34E1(); +int PS4_SYSV_ABI Func_A48E666C334E726C(); +int PS4_SYSV_ABI Func_A49B7449B4DDE69C(); +int PS4_SYSV_ABI Func_A5748451125C9EA4(); +int PS4_SYSV_ABI Func_A690A28D648CC176(); +int PS4_SYSV_ABI Func_A6A86DE1B1CBB1D9(); +int PS4_SYSV_ABI Func_A8F2BB7B815740A1(); +int PS4_SYSV_ABI Func_A93F64C06A6F7397(); +int PS4_SYSV_ABI Func_AB35925FC97D6AA3(); +int PS4_SYSV_ABI Func_AC014AA2C991FA29(); +int PS4_SYSV_ABI Func_AC06E10901404AEB(); +int PS4_SYSV_ABI Func_AC75C68813523505(); +int PS4_SYSV_ABI Func_AD441BC497082C3E(); +int PS4_SYSV_ABI Func_AD4F25F021D354C3(); +int PS4_SYSV_ABI Func_ADFA04A85541A4FE(); +int PS4_SYSV_ABI Func_AE9610A6B5217A23(); +int PS4_SYSV_ABI Func_AF201923826F0A58(); +int PS4_SYSV_ABI Func_AFC021B4389CA3FA(); +int PS4_SYSV_ABI Func_B015E999A3373D8F(); +int PS4_SYSV_ABI Func_B0384B86107FC652(); +int PS4_SYSV_ABI Func_B0C630653B316563(); +int PS4_SYSV_ABI Func_B100DCCD88D5C73D(); +int PS4_SYSV_ABI Func_B11A3FEA5E4D9EA4(); +int PS4_SYSV_ABI Func_B2E7F8DC199C0B93(); +int PS4_SYSV_ABI Func_B3AB61A296F6DDC8(); +int PS4_SYSV_ABI Func_B3F32F6AE619EC82(); +int PS4_SYSV_ABI Func_B4227AB213BF8CF5(); +int PS4_SYSV_ABI Func_B4652BF42B604360(); +int PS4_SYSV_ABI Func_B536C1F13BFE97CB(); +int PS4_SYSV_ABI Func_B645CC264184BC89(); +int PS4_SYSV_ABI Func_B67E17B1582C6FBD(); +int PS4_SYSV_ABI Func_B6D047C5D7695A4D(); +int PS4_SYSV_ABI Func_B75ED8E1EA62EFC7(); +int PS4_SYSV_ABI Func_B7A9A944DBD7E100(); +int PS4_SYSV_ABI Func_B7C4E75BE94F31F3(); +int PS4_SYSV_ABI Func_B888B1F92C464121(); +int PS4_SYSV_ABI Func_B8DEC22564AA057B(); +int PS4_SYSV_ABI Func_B9BADD1CBBBAE4F8(); +int PS4_SYSV_ABI Func_BAA9F7169C85E59F(); +int PS4_SYSV_ABI Func_BAEE5C38908D62DB(); +int PS4_SYSV_ABI Func_BCC855EB25183F84(); +int PS4_SYSV_ABI Func_BD01F637029C7364(); +int PS4_SYSV_ABI Func_BDD29F5AC7077E53(); +int PS4_SYSV_ABI Func_BED83DD33ECAD50D(); +int PS4_SYSV_ABI Func_BEE7D5D098ABF728(); +int PS4_SYSV_ABI Func_C0DB15CCF59AE62C(); +int PS4_SYSV_ABI Func_C1C229FEE0FD60FA(); +int PS4_SYSV_ABI Func_C228B9AD68298E98(); +int PS4_SYSV_ABI Func_C298525CEF6FB283(); +int PS4_SYSV_ABI Func_C350F09351F6D6B5(); +int PS4_SYSV_ABI Func_C3742E80FA580319(); +int PS4_SYSV_ABI Func_C3C9853D5D4D45D4(); +int PS4_SYSV_ABI Func_C3F5DAD4FB9FC340(); +int PS4_SYSV_ABI Func_C45FB0E4CCE9AED6(); +int PS4_SYSV_ABI Func_C4979CB948B7E3C7(); +int PS4_SYSV_ABI Func_C49B25BA16CF0B8C(); +int PS4_SYSV_ABI Func_C551345D9631201E(); +int PS4_SYSV_ABI Func_C57A294421368298(); +int PS4_SYSV_ABI Func_C5DC91CAD721D628(); +int PS4_SYSV_ABI Func_C6DECEE589135357(); +int PS4_SYSV_ABI Func_C81F8B20D67AC78D(); +int PS4_SYSV_ABI Func_C820FA56FAC87BEA(); +int PS4_SYSV_ABI Func_C878EA9114C5E490(); +int PS4_SYSV_ABI Func_C8A813EBFF477509(); +int PS4_SYSV_ABI Func_C966A663D5A35482(); +int PS4_SYSV_ABI Func_C97C4C67FD3674D3(); +int PS4_SYSV_ABI Func_C990550F15848B07(); +int PS4_SYSV_ABI Func_CA59737A8EC1BBBE(); +int PS4_SYSV_ABI Func_CAC5FDE8F80D7B65(); +int PS4_SYSV_ABI Func_CB135B30D0639B83(); +int PS4_SYSV_ABI Func_CB8A1AAA61F64C3A(); +int PS4_SYSV_ABI Func_CB9E674672580757(); +int PS4_SYSV_ABI Func_CC2B9D25EAEAAB1D(); +int PS4_SYSV_ABI Func_CD1B252BBEDF5B53(); +int PS4_SYSV_ABI Func_CF003BE90CBE1A27(); +int PS4_SYSV_ABI Func_CF008E34884AC1E2(); +int PS4_SYSV_ABI Func_D0B8F4B3A3687AB2(); +int PS4_SYSV_ABI Func_D0EE19B8E91F60F5(); +int PS4_SYSV_ABI Func_D12B9294BD0E0F56(); +int PS4_SYSV_ABI Func_D1CC8626D8FA328B(); +int PS4_SYSV_ABI Func_D2FA2BB9EB8B63AC(); +int PS4_SYSV_ABI Func_D32197880CF93CEB(); +int PS4_SYSV_ABI Func_D326F5C26CC81B8E(); +int PS4_SYSV_ABI Func_D4FA06B95A321B7A(); +int PS4_SYSV_ABI Func_D52A37A901E04B21(); +int PS4_SYSV_ABI Func_D5504DFC399AB400(); +int PS4_SYSV_ABI Func_D56105CB27F8F5DC(); +int PS4_SYSV_ABI Func_D568AB19235ECB19(); +int PS4_SYSV_ABI Func_D6DF7BF6639FE611(); +int PS4_SYSV_ABI Func_D8608A903119D746(); +int PS4_SYSV_ABI Func_D9E8FC707D59914D(); +int PS4_SYSV_ABI Func_D9F079E62DEE5B29(); +int PS4_SYSV_ABI Func_DA17CE4F29748536(); +int PS4_SYSV_ABI Func_DA40B9EFD7F61185(); +int PS4_SYSV_ABI Func_DA6B274FEBC2666A(); +int PS4_SYSV_ABI Func_DAD01535C87A51FC(); +int PS4_SYSV_ABI Func_DB4511D448510EC4(); +int PS4_SYSV_ABI Func_DB8EF1FFFC66269C(); +int PS4_SYSV_ABI Func_DBB508FA1B9DA8F7(); +int PS4_SYSV_ABI Func_DC59C9B870B729A2(); +int PS4_SYSV_ABI Func_DC669ED6CBF6751C(); +int PS4_SYSV_ABI Func_DCB8A2849A41C991(); +int PS4_SYSV_ABI Func_DD8F9916D7F03AF7(); +int PS4_SYSV_ABI Func_DDC33F2F4E480C2A(); +int PS4_SYSV_ABI Func_DE0B420BDE8B22D7(); +int PS4_SYSV_ABI Func_E0C0BC29898FE370(); +int PS4_SYSV_ABI Func_E0CD893E46FB55BA(); +int PS4_SYSV_ABI Func_E25530164B7F659F(); +int PS4_SYSV_ABI Func_E3682F43FDF76C58(); +int PS4_SYSV_ABI Func_E38177E1C78A80FA(); +int PS4_SYSV_ABI Func_E3CA74CFF965DF0A(); +int PS4_SYSV_ABI Func_E45BB191B49B2ED9(); +int PS4_SYSV_ABI Func_E465B9D6B60E6D7D(); +int PS4_SYSV_ABI Func_E4D82876C296C38A(); +int PS4_SYSV_ABI Func_E4DDB5350FA5B538(); +int PS4_SYSV_ABI Func_E54BFF6FB72BC7BE(); +int PS4_SYSV_ABI Func_E592A93203020BBB(); +int PS4_SYSV_ABI Func_E5A44AF6D7D48AFD(); +int PS4_SYSV_ABI Func_E639A97CF9FF1430(); +int PS4_SYSV_ABI Func_E6AC0179E48A8927(); +int PS4_SYSV_ABI Func_E751596682775D83(); +int PS4_SYSV_ABI Func_E788B1E52EF82702(); +int PS4_SYSV_ABI Func_E94F17613F5C9D31(); +int PS4_SYSV_ABI Func_E9590113128D55E0(); +int PS4_SYSV_ABI Func_E9E0B0DD12560B16(); +int PS4_SYSV_ABI Func_EAF5C8ECE64C7B05(); +int PS4_SYSV_ABI Func_EB98BF5C42D4A7EB(); +int PS4_SYSV_ABI Func_EBABC4AAC43A468C(); +int PS4_SYSV_ABI Func_EBF00085F082CC8B(); +int PS4_SYSV_ABI Func_ECB659EE058D06AF(); +int PS4_SYSV_ABI Func_ECF096AB751487AE(); +int PS4_SYSV_ABI Func_EE5A271701DB33C0(); +int PS4_SYSV_ABI Func_EF64CB6A1625248E(); +int PS4_SYSV_ABI Func_EF6C8A357C7ED863(); +int PS4_SYSV_ABI Func_F00FE94F7E699994(); +int PS4_SYSV_ABI Func_F1A51DBA30329038(); +int PS4_SYSV_ABI Func_F216E766A90FDC12(); +int PS4_SYSV_ABI Func_F2A10584ABE5D82C(); +int PS4_SYSV_ABI Func_F2D99D395E5421A3(); +int PS4_SYSV_ABI Func_F38001E528BA1371(); +int PS4_SYSV_ABI Func_F39EC9C8FA7687B3(); +int PS4_SYSV_ABI Func_F3AFFFDCD632775C(); +int PS4_SYSV_ABI Func_F3B8DFF33748BFD3(); +int PS4_SYSV_ABI Func_F5E47F9550F7A147(); +int PS4_SYSV_ABI Func_F6E93714D1A939CF(); +int PS4_SYSV_ABI Func_F6FD19AD48E4EF09(); +int PS4_SYSV_ABI Func_F744EBFC620F7CBF(); +int PS4_SYSV_ABI Func_F76E4525ACBACC7F(); +int PS4_SYSV_ABI Func_F7957A48882F42CB(); +int PS4_SYSV_ABI Func_F7A80B07809BA838(); +int PS4_SYSV_ABI Func_F8571C6CC5B6B59D(); +int PS4_SYSV_ABI Func_F9787CFA873836FB(); +int PS4_SYSV_ABI Func_FA789F6D34D383F8(); +int PS4_SYSV_ABI Func_FABA574083AC1E6C(); +int PS4_SYSV_ABI Func_FC04FDBBAE368FB7(); +int PS4_SYSV_ABI Func_FD2DAFBF2E40EEE7(); +int PS4_SYSV_ABI Func_FD55EE6D35F950AD(); +int PS4_SYSV_ABI Func_FE55EE32098D0D58(); +int PS4_SYSV_ABI Func_FE79841022E1DA1C(); +int PS4_SYSV_ABI Func_FFF4A3E279FB44A7(); + +void RegisterlibSceNpCommon(Core::Loader::SymbolsResolver* sym); +} // namespace Libraries::NpCommon \ No newline at end of file diff --git a/src/core/libraries/np_common/np_common_error.h b/src/core/libraries/np_common/np_common_error.h new file mode 100644 index 000000000..5da6e6a90 --- /dev/null +++ b/src/core/libraries/np_common/np_common_error.h @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/libraries/error_codes.h" + +constexpr int ORBIS_NP_ERROR_INVALID_ARGUMENT = 0x80550003; +constexpr int ORBIS_NP_UTIL_ERROR_NOT_MATCH = 0x80550609; \ No newline at end of file diff --git a/src/core/libraries/np_manager/np_manager.cpp b/src/core/libraries/np_manager/np_manager.cpp index 87d752c69..e26c5a830 100644 --- a/src/core/libraries/np_manager/np_manager.cpp +++ b/src/core/libraries/np_manager/np_manager.cpp @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include "common/config.h" #include "common/logging/log.h" #include "core/libraries/error_codes.h" #include "core/libraries/libs.h" @@ -2510,7 +2509,7 @@ struct NpStateCallbackForNpToolkit { NpStateCallbackForNpToolkit NpStateCbForNp; int PS4_SYSV_ABI sceNpCheckCallbackForLib() { - Core::ExecuteGuest(NpStateCbForNp.func, 1, OrbisNpState::SignedOut, NpStateCbForNp.userdata); + LOG_DEBUG(Lib_NpManager, "(STUBBED) called"); return ORBIS_OK; } diff --git a/src/core/libraries/np_web_api/np_web_api.cpp b/src/core/libraries/np_web_api/np_web_api.cpp new file mode 100644 index 000000000..8a7979978 --- /dev/null +++ b/src/core/libraries/np_web_api/np_web_api.cpp @@ -0,0 +1,692 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/logging/log.h" +#include "core/libraries/error_codes.h" +#include "core/libraries/libs.h" +#include "core/libraries/np_web_api/np_web_api.h" + +namespace Libraries::NpWebApi { + +s32 PS4_SYSV_ABI sceNpWebApiCreateContext() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiCreatePushEventFilter() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiCreateServicePushEventFilter() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiDeletePushEventFilter() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiDeleteServicePushEventFilter() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiRegisterExtdPushEventCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiRegisterNotificationCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiRegisterPushEventCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiRegisterServicePushEventCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiUnregisterNotificationCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiUnregisterPushEventCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiUnregisterServicePushEventCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiAbortHandle() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiAbortRequest() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiAddHttpRequestHeader() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiAddMultipartPart() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiCheckTimeout() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiClearAllUnusedConnection() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiClearUnusedConnection() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiCreateContextA() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiCreateExtdPushEventFilter() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiCreateHandle() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiCreateMultipartRequest() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiCreateRequest() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiDeleteContext() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiDeleteExtdPushEventFilter() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiDeleteHandle() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiDeleteRequest() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiGetConnectionStats() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiGetErrorCode() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiGetHttpResponseHeaderValue() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiGetHttpResponseHeaderValueLength() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiGetHttpStatusCode() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiGetMemoryPoolStats() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiInitialize() { + LOG_ERROR(Lib_NpWebApi, "(DUMMY) called"); + static s32 id = 0; + return ++id; +} + +s32 PS4_SYSV_ABI sceNpWebApiInitializeForPresence() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiIntCreateCtxIndExtdPushEventFilter() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiIntCreateRequest() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiIntCreateServicePushEventFilter() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiIntInitialize() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiIntRegisterServicePushEventCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiIntRegisterServicePushEventCallbackA() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiReadData() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiRegisterExtdPushEventCallbackA() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiSendMultipartRequest() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiSendMultipartRequest2() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiSendRequest() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiSendRequest2() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiSetHandleTimeout() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiSetMaxConnection() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiSetMultipartContentType() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiSetRequestTimeout() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiTerminate() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiUnregisterExtdPushEventCallback() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiUtilityParseNpId() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI sceNpWebApiVshInitialize() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_064C4ED1EDBEB9E8() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_0783955D4E9563DA() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_1A6D77F3FD8323A8() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_1E0693A26FE0F954() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_24A9B5F1D77000CF() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_24AAA6F50E4C2361() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_24D8853D6B47FC79() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_279B3E9C7C4A9DC5() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_28461E29E9F8D697() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_3C29624704FAB9E0() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_3F027804ED2EC11E() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_4066C94E782997CD() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_47C85356815DBE90() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_4FCE8065437E3B87() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_536280BE3DABB521() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_57A0E1BC724219F3() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_5819749C040B6637() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_6198D0C825E86319() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_61F2B9E8AB093743() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_6BC388E6113F0D44() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_7500F0C4F8DC2D16() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_75A03814C7E9039F() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_789D6026C521416E() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_7DED63D06399EFFF() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_7E55A2DCC03D395A() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_7E6C8F9FB86967F4() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_7F04B7D4A7D41E80() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_8E167252DFA5C957() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_95D0046E504E3B09() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_97284BFDA4F18FDF() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_99E32C1F4737EAB4() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_9CFF661EA0BCBF83() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_9EB0E1F467AC3B29() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_A2318FE6FBABFAA3() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_BA07A2E1BF7B3971() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_BD0803EEE0CC29A0() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_BE6F4E5524BB135F() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_C0D490EB481EA4D0() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_C175D392CA6D084A() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_CD0136AF165D2F2F() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_D1C0ADB7B52FEAB5() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_E324765D18EE4D12() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_E789F980D907B653() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +s32 PS4_SYSV_ABI Func_F9A32E8685627436() { + LOG_ERROR(Lib_NpWebApi, "(STUBBED) called"); + return ORBIS_OK; +} + +void RegisterlibSceNpWebApi(Core::Loader::SymbolsResolver* sym) { + LIB_FUNCTION("x1Y7yiYSk7c", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateContext); + LIB_FUNCTION("y5Ta5JCzQHY", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreatePushEventFilter); + LIB_FUNCTION("sIFx734+xys", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateServicePushEventFilter); + LIB_FUNCTION("zE+R6Rcx3W0", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiDeletePushEventFilter); + LIB_FUNCTION("PfQ+f6ws764", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiDeleteServicePushEventFilter); + LIB_FUNCTION("vrM02A5Gy1M", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterExtdPushEventCallback); + LIB_FUNCTION("HVgWmGIOKdk", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterNotificationCallback); + LIB_FUNCTION("PfSTDCgNMgc", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterPushEventCallback); + LIB_FUNCTION("kJQJE0uKm5w", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterServicePushEventCallback); + LIB_FUNCTION("wjYEvo4xbcA", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiUnregisterNotificationCallback); + LIB_FUNCTION("qK4o2656W4w", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiUnregisterPushEventCallback); + LIB_FUNCTION("2edrkr0c-wg", "libSceNpWebApiCompat", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiUnregisterServicePushEventCallback); + LIB_FUNCTION("WKcm4PeyJww", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiAbortHandle); + LIB_FUNCTION("JzhYTP2fG18", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiAbortRequest); + LIB_FUNCTION("joRjtRXTFoc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiAddHttpRequestHeader); + LIB_FUNCTION("19KgfJXgM+U", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiAddMultipartPart); + LIB_FUNCTION("gVNNyxf-1Sg", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCheckTimeout); + LIB_FUNCTION("KQIkDGf80PQ", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiClearAllUnusedConnection); + LIB_FUNCTION("f-pgaNSd1zc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiClearUnusedConnection); + LIB_FUNCTION("x1Y7yiYSk7c", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateContext); + LIB_FUNCTION("zk6c65xoyO0", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateContextA); + LIB_FUNCTION("M2BUB+DNEGE", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateExtdPushEventFilter); + LIB_FUNCTION("79M-JqvvGo0", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateHandle); + LIB_FUNCTION("KBxgeNpoRIQ", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateMultipartRequest); + LIB_FUNCTION("y5Ta5JCzQHY", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreatePushEventFilter); + LIB_FUNCTION("rdgs5Z1MyFw", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateRequest); + LIB_FUNCTION("sIFx734+xys", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiCreateServicePushEventFilter); + LIB_FUNCTION("XUjdsSTTZ3U", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiDeleteContext); + LIB_FUNCTION("pfaJtb7SQ80", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiDeleteExtdPushEventFilter); + LIB_FUNCTION("5Mn7TYwpl30", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiDeleteHandle); + LIB_FUNCTION("zE+R6Rcx3W0", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiDeletePushEventFilter); + LIB_FUNCTION("noQgleu+KLE", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiDeleteRequest); + LIB_FUNCTION("PfQ+f6ws764", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiDeleteServicePushEventFilter); + LIB_FUNCTION("UJ8H+7kVQUE", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiGetConnectionStats); + LIB_FUNCTION("2qSZ0DgwTsc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiGetErrorCode); + LIB_FUNCTION("VwJ5L0Higg0", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiGetHttpResponseHeaderValue); + LIB_FUNCTION("743ZzEBzlV8", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiGetHttpResponseHeaderValueLength); + LIB_FUNCTION("k210oKgP80Y", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiGetHttpStatusCode); + LIB_FUNCTION("3OnubUs02UM", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiGetMemoryPoolStats); + LIB_FUNCTION("G3AnLNdRBjE", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, sceNpWebApiInitialize); + LIB_FUNCTION("FkuwsD64zoQ", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiInitializeForPresence); + LIB_FUNCTION("c1pKoztonB8", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiIntCreateCtxIndExtdPushEventFilter); + LIB_FUNCTION("N2Jbx4tIaQ4", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiIntCreateRequest); + LIB_FUNCTION("TZSep4xB4EY", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiIntCreateServicePushEventFilter); + LIB_FUNCTION("8Vjplhyyc44", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiIntInitialize); + LIB_FUNCTION("VjVukb2EWPc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiIntRegisterServicePushEventCallback); + LIB_FUNCTION("sfq23ZVHVEw", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiIntRegisterServicePushEventCallbackA); + LIB_FUNCTION("CQtPRSF6Ds8", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, sceNpWebApiReadData); + LIB_FUNCTION("vrM02A5Gy1M", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterExtdPushEventCallback); + LIB_FUNCTION("jhXKGQJ4egI", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterExtdPushEventCallbackA); + LIB_FUNCTION("HVgWmGIOKdk", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterNotificationCallback); + LIB_FUNCTION("PfSTDCgNMgc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterPushEventCallback); + LIB_FUNCTION("kJQJE0uKm5w", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiRegisterServicePushEventCallback); + LIB_FUNCTION("KCItz6QkeGs", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiSendMultipartRequest); + LIB_FUNCTION("DsPOTEvSe7M", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiSendMultipartRequest2); + LIB_FUNCTION("kVbL4hL3K7w", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiSendRequest); + LIB_FUNCTION("KjNeZ-29ysQ", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiSendRequest2); + LIB_FUNCTION("6g6q-g1i4XU", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiSetHandleTimeout); + LIB_FUNCTION("gRiilVCvfAI", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiSetMaxConnection); + LIB_FUNCTION("i0dr6grIZyc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiSetMultipartContentType); + LIB_FUNCTION("qWcbJkBj1Lg", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiSetRequestTimeout); + LIB_FUNCTION("asz3TtIqGF8", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, sceNpWebApiTerminate); + LIB_FUNCTION("PqCY25FMzPs", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiUnregisterExtdPushEventCallback); + LIB_FUNCTION("wjYEvo4xbcA", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiUnregisterNotificationCallback); + LIB_FUNCTION("qK4o2656W4w", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiUnregisterPushEventCallback); + LIB_FUNCTION("2edrkr0c-wg", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiUnregisterServicePushEventCallback); + LIB_FUNCTION("or0e885BlXo", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiUtilityParseNpId); + LIB_FUNCTION("uRsskUhAfnM", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, + sceNpWebApiVshInitialize); + LIB_FUNCTION("BkxO0e2+ueg", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_064C4ED1EDBEB9E8); + LIB_FUNCTION("B4OVXU6VY9o", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_0783955D4E9563DA); + LIB_FUNCTION("Gm138-2DI6g", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_1A6D77F3FD8323A8); + LIB_FUNCTION("HgaTom-g+VQ", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_1E0693A26FE0F954); + LIB_FUNCTION("JKm18ddwAM8", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_24A9B5F1D77000CF); + LIB_FUNCTION("JKqm9Q5MI2E", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_24AAA6F50E4C2361); + LIB_FUNCTION("JNiFPWtH-Hk", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_24D8853D6B47FC79); + LIB_FUNCTION("J5s+nHxKncU", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_279B3E9C7C4A9DC5); + LIB_FUNCTION("KEYeKen41pc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_28461E29E9F8D697); + LIB_FUNCTION("PCliRwT6ueA", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_3C29624704FAB9E0); + LIB_FUNCTION("PwJ4BO0uwR4", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_3F027804ED2EC11E); + LIB_FUNCTION("QGbJTngpl80", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_4066C94E782997CD); + LIB_FUNCTION("R8hTVoFdvpA", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_47C85356815DBE90); + LIB_FUNCTION("T86AZUN+O4c", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_4FCE8065437E3B87); + LIB_FUNCTION("U2KAvj2rtSE", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_536280BE3DABB521); + LIB_FUNCTION("V6DhvHJCGfM", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_57A0E1BC724219F3); + LIB_FUNCTION("WBl0nAQLZjc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_5819749C040B6637); + LIB_FUNCTION("YZjQyCXoYxk", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_6198D0C825E86319); + LIB_FUNCTION("YfK56KsJN0M", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_61F2B9E8AB093743); + LIB_FUNCTION("a8OI5hE-DUQ", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_6BC388E6113F0D44); + LIB_FUNCTION("dQDwxPjcLRY", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_7500F0C4F8DC2D16); + LIB_FUNCTION("daA4FMfpA58", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_75A03814C7E9039F); + LIB_FUNCTION("eJ1gJsUhQW4", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_789D6026C521416E); + LIB_FUNCTION("fe1j0GOZ7-8", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_7DED63D06399EFFF); + LIB_FUNCTION("flWi3MA9OVo", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_7E55A2DCC03D395A); + LIB_FUNCTION("fmyPn7hpZ-Q", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_7E6C8F9FB86967F4); + LIB_FUNCTION("fwS31KfUHoA", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_7F04B7D4A7D41E80); + LIB_FUNCTION("jhZyUt+lyVc", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_8E167252DFA5C957); + LIB_FUNCTION("ldAEblBOOwk", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_95D0046E504E3B09); + LIB_FUNCTION("lyhL-aTxj98", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_97284BFDA4F18FDF); + LIB_FUNCTION("meMsH0c36rQ", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_99E32C1F4737EAB4); + LIB_FUNCTION("nP9mHqC8v4M", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_9CFF661EA0BCBF83); + LIB_FUNCTION("nrDh9GesOyk", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_9EB0E1F467AC3B29); + LIB_FUNCTION("ojGP5vur+qM", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_A2318FE6FBABFAA3); + LIB_FUNCTION("ugei4b97OXE", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_BA07A2E1BF7B3971); + LIB_FUNCTION("vQgD7uDMKaA", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_BD0803EEE0CC29A0); + LIB_FUNCTION("vm9OVSS7E18", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_BE6F4E5524BB135F); + LIB_FUNCTION("wNSQ60gepNA", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_C0D490EB481EA4D0); + LIB_FUNCTION("wXXTksptCEo", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_C175D392CA6D084A); + LIB_FUNCTION("zQE2rxZdLy8", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_CD0136AF165D2F2F); + LIB_FUNCTION("0cCtt7Uv6rU", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_D1C0ADB7B52FEAB5); + LIB_FUNCTION("4yR2XRjuTRI", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_E324765D18EE4D12); + LIB_FUNCTION("54n5gNkHtlM", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_E789F980D907B653); + LIB_FUNCTION("+aMuhoVidDY", "libSceNpWebApi", 1, "libSceNpWebApi", 1, 1, Func_F9A32E8685627436); +}; + +} // namespace Libraries::NpWebApi \ No newline at end of file diff --git a/src/core/libraries/np_web_api/np_web_api.h b/src/core/libraries/np_web_api/np_web_api.h new file mode 100644 index 000000000..cc007394f --- /dev/null +++ b/src/core/libraries/np_web_api/np_web_api.h @@ -0,0 +1,116 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/types.h" + +namespace Core::Loader { +class SymbolsResolver; +} + +namespace Libraries::NpWebApi { + +s32 PS4_SYSV_ABI sceNpWebApiCreateContext(); +s32 PS4_SYSV_ABI sceNpWebApiCreatePushEventFilter(); +s32 PS4_SYSV_ABI sceNpWebApiCreateServicePushEventFilter(); +s32 PS4_SYSV_ABI sceNpWebApiDeletePushEventFilter(); +s32 PS4_SYSV_ABI sceNpWebApiDeleteServicePushEventFilter(); +s32 PS4_SYSV_ABI sceNpWebApiRegisterExtdPushEventCallback(); +s32 PS4_SYSV_ABI sceNpWebApiRegisterNotificationCallback(); +s32 PS4_SYSV_ABI sceNpWebApiRegisterPushEventCallback(); +s32 PS4_SYSV_ABI sceNpWebApiRegisterServicePushEventCallback(); +s32 PS4_SYSV_ABI sceNpWebApiUnregisterNotificationCallback(); +s32 PS4_SYSV_ABI sceNpWebApiUnregisterPushEventCallback(); +s32 PS4_SYSV_ABI sceNpWebApiUnregisterServicePushEventCallback(); +s32 PS4_SYSV_ABI sceNpWebApiAbortHandle(); +s32 PS4_SYSV_ABI sceNpWebApiAbortRequest(); +s32 PS4_SYSV_ABI sceNpWebApiAddHttpRequestHeader(); +s32 PS4_SYSV_ABI sceNpWebApiAddMultipartPart(); +s32 PS4_SYSV_ABI sceNpWebApiCheckTimeout(); +s32 PS4_SYSV_ABI sceNpWebApiClearAllUnusedConnection(); +s32 PS4_SYSV_ABI sceNpWebApiClearUnusedConnection(); +s32 PS4_SYSV_ABI sceNpWebApiCreateContextA(); +s32 PS4_SYSV_ABI sceNpWebApiCreateExtdPushEventFilter(); +s32 PS4_SYSV_ABI sceNpWebApiCreateHandle(); +s32 PS4_SYSV_ABI sceNpWebApiCreateMultipartRequest(); +s32 PS4_SYSV_ABI sceNpWebApiCreateRequest(); +s32 PS4_SYSV_ABI sceNpWebApiDeleteContext(); +s32 PS4_SYSV_ABI sceNpWebApiDeleteExtdPushEventFilter(); +s32 PS4_SYSV_ABI sceNpWebApiDeleteHandle(); +s32 PS4_SYSV_ABI sceNpWebApiDeleteRequest(); +s32 PS4_SYSV_ABI sceNpWebApiGetConnectionStats(); +s32 PS4_SYSV_ABI sceNpWebApiGetErrorCode(); +s32 PS4_SYSV_ABI sceNpWebApiGetHttpResponseHeaderValue(); +s32 PS4_SYSV_ABI sceNpWebApiGetHttpResponseHeaderValueLength(); +s32 PS4_SYSV_ABI sceNpWebApiGetHttpStatusCode(); +s32 PS4_SYSV_ABI sceNpWebApiGetMemoryPoolStats(); +s32 PS4_SYSV_ABI sceNpWebApiInitialize(); +s32 PS4_SYSV_ABI sceNpWebApiInitializeForPresence(); +s32 PS4_SYSV_ABI sceNpWebApiIntCreateCtxIndExtdPushEventFilter(); +s32 PS4_SYSV_ABI sceNpWebApiIntCreateRequest(); +s32 PS4_SYSV_ABI sceNpWebApiIntCreateServicePushEventFilter(); +s32 PS4_SYSV_ABI sceNpWebApiIntInitialize(); +s32 PS4_SYSV_ABI sceNpWebApiIntRegisterServicePushEventCallback(); +s32 PS4_SYSV_ABI sceNpWebApiIntRegisterServicePushEventCallbackA(); +s32 PS4_SYSV_ABI sceNpWebApiReadData(); +s32 PS4_SYSV_ABI sceNpWebApiRegisterExtdPushEventCallbackA(); +s32 PS4_SYSV_ABI sceNpWebApiSendMultipartRequest(); +s32 PS4_SYSV_ABI sceNpWebApiSendMultipartRequest2(); +s32 PS4_SYSV_ABI sceNpWebApiSendRequest(); +s32 PS4_SYSV_ABI sceNpWebApiSendRequest2(); +s32 PS4_SYSV_ABI sceNpWebApiSetHandleTimeout(); +s32 PS4_SYSV_ABI sceNpWebApiSetMaxConnection(); +s32 PS4_SYSV_ABI sceNpWebApiSetMultipartContentType(); +s32 PS4_SYSV_ABI sceNpWebApiSetRequestTimeout(); +s32 PS4_SYSV_ABI sceNpWebApiTerminate(); +s32 PS4_SYSV_ABI sceNpWebApiUnregisterExtdPushEventCallback(); +s32 PS4_SYSV_ABI sceNpWebApiUtilityParseNpId(); +s32 PS4_SYSV_ABI sceNpWebApiVshInitialize(); +s32 PS4_SYSV_ABI Func_064C4ED1EDBEB9E8(); +s32 PS4_SYSV_ABI Func_0783955D4E9563DA(); +s32 PS4_SYSV_ABI Func_1A6D77F3FD8323A8(); +s32 PS4_SYSV_ABI Func_1E0693A26FE0F954(); +s32 PS4_SYSV_ABI Func_24A9B5F1D77000CF(); +s32 PS4_SYSV_ABI Func_24AAA6F50E4C2361(); +s32 PS4_SYSV_ABI Func_24D8853D6B47FC79(); +s32 PS4_SYSV_ABI Func_279B3E9C7C4A9DC5(); +s32 PS4_SYSV_ABI Func_28461E29E9F8D697(); +s32 PS4_SYSV_ABI Func_3C29624704FAB9E0(); +s32 PS4_SYSV_ABI Func_3F027804ED2EC11E(); +s32 PS4_SYSV_ABI Func_4066C94E782997CD(); +s32 PS4_SYSV_ABI Func_47C85356815DBE90(); +s32 PS4_SYSV_ABI Func_4FCE8065437E3B87(); +s32 PS4_SYSV_ABI Func_536280BE3DABB521(); +s32 PS4_SYSV_ABI Func_57A0E1BC724219F3(); +s32 PS4_SYSV_ABI Func_5819749C040B6637(); +s32 PS4_SYSV_ABI Func_6198D0C825E86319(); +s32 PS4_SYSV_ABI Func_61F2B9E8AB093743(); +s32 PS4_SYSV_ABI Func_6BC388E6113F0D44(); +s32 PS4_SYSV_ABI Func_7500F0C4F8DC2D16(); +s32 PS4_SYSV_ABI Func_75A03814C7E9039F(); +s32 PS4_SYSV_ABI Func_789D6026C521416E(); +s32 PS4_SYSV_ABI Func_7DED63D06399EFFF(); +s32 PS4_SYSV_ABI Func_7E55A2DCC03D395A(); +s32 PS4_SYSV_ABI Func_7E6C8F9FB86967F4(); +s32 PS4_SYSV_ABI Func_7F04B7D4A7D41E80(); +s32 PS4_SYSV_ABI Func_8E167252DFA5C957(); +s32 PS4_SYSV_ABI Func_95D0046E504E3B09(); +s32 PS4_SYSV_ABI Func_97284BFDA4F18FDF(); +s32 PS4_SYSV_ABI Func_99E32C1F4737EAB4(); +s32 PS4_SYSV_ABI Func_9CFF661EA0BCBF83(); +s32 PS4_SYSV_ABI Func_9EB0E1F467AC3B29(); +s32 PS4_SYSV_ABI Func_A2318FE6FBABFAA3(); +s32 PS4_SYSV_ABI Func_BA07A2E1BF7B3971(); +s32 PS4_SYSV_ABI Func_BD0803EEE0CC29A0(); +s32 PS4_SYSV_ABI Func_BE6F4E5524BB135F(); +s32 PS4_SYSV_ABI Func_C0D490EB481EA4D0(); +s32 PS4_SYSV_ABI Func_C175D392CA6D084A(); +s32 PS4_SYSV_ABI Func_CD0136AF165D2F2F(); +s32 PS4_SYSV_ABI Func_D1C0ADB7B52FEAB5(); +s32 PS4_SYSV_ABI Func_E324765D18EE4D12(); +s32 PS4_SYSV_ABI Func_E789F980D907B653(); +s32 PS4_SYSV_ABI Func_F9A32E8685627436(); + +void RegisterlibSceNpWebApi(Core::Loader::SymbolsResolver* sym); +} // namespace Libraries::NpWebApi \ No newline at end of file diff --git a/src/core/libraries/pad/pad.cpp b/src/core/libraries/pad/pad.cpp index 7eb628a90..f2b81fbe0 100644 --- a/src/core/libraries/pad/pad.cpp +++ b/src/core/libraries/pad/pad.cpp @@ -11,6 +11,8 @@ namespace Libraries::Pad { +using Input::GameController; + int PS4_SYSV_ABI scePadClose(s32 handle) { LOG_ERROR(Lib_Pad, "(STUBBED) called"); return ORBIS_OK; @@ -93,8 +95,8 @@ int PS4_SYSV_ABI scePadGetControllerInformation(s32 handle, OrbisPadControllerIn pInfo->touchPadInfo.pixelDensity = 1; pInfo->touchPadInfo.resolution.x = 1920; pInfo->touchPadInfo.resolution.y = 950; - pInfo->stickInfo.deadZoneLeft = 2; - pInfo->stickInfo.deadZoneRight = 2; + pInfo->stickInfo.deadZoneLeft = Config::leftDeadZone(); + pInfo->stickInfo.deadZoneRight = Config::rightDeadZone(); pInfo->connectionType = ORBIS_PAD_PORT_TYPE_STANDARD; pInfo->connectedCount = 1; pInfo->connected = false; @@ -104,8 +106,8 @@ int PS4_SYSV_ABI scePadGetControllerInformation(s32 handle, OrbisPadControllerIn pInfo->touchPadInfo.pixelDensity = 1; pInfo->touchPadInfo.resolution.x = 1920; pInfo->touchPadInfo.resolution.y = 950; - pInfo->stickInfo.deadZoneLeft = 2; - pInfo->stickInfo.deadZoneRight = 2; + pInfo->stickInfo.deadZoneLeft = Config::leftDeadZone(); + pInfo->stickInfo.deadZoneRight = Config::rightDeadZone(); pInfo->connectionType = ORBIS_PAD_PORT_TYPE_STANDARD; pInfo->connectedCount = 1; pInfo->connected = true; @@ -290,7 +292,8 @@ int PS4_SYSV_ABI scePadRead(s32 handle, OrbisPadData* pData, s32 num) { int connected_count = 0; bool connected = false; Input::State states[64]; - auto* controller = Common::Singleton::Instance(); + auto* controller = Common::Singleton::Instance(); + const auto* engine = controller->GetEngine(); int ret_num = controller->ReadStates(states, num, &connected, &connected_count); if (!connected) { @@ -311,9 +314,14 @@ int PS4_SYSV_ABI scePadRead(s32 handle, OrbisPadData* pData, s32 num) { pData[i].angularVelocity.x = states[i].angularVelocity.x; pData[i].angularVelocity.y = states[i].angularVelocity.y; pData[i].angularVelocity.z = states[i].angularVelocity.z; - Input::GameController::CalculateOrientation(pData[i].acceleration, pData[i].angularVelocity, - 1.0f / controller->accel_poll_rate, - pData[i].orientation); + if (engine) { + const auto accel_poll_rate = engine->GetAccelPollRate(); + if (accel_poll_rate != 0.0f) { + GameController::CalculateOrientation(pData[i].acceleration, + pData[i].angularVelocity, + 1.0f / accel_poll_rate, pData[i].orientation); + } + } pData[i].touchData.touchNum = (states[i].touchpad[0].state ? 1 : 0) + (states[i].touchpad[1].state ? 1 : 0); pData[i].touchData.touch[0].x = states[i].touchpad[0].x; @@ -356,7 +364,8 @@ int PS4_SYSV_ABI scePadReadState(s32 handle, OrbisPadData* pData) { if (handle == ORBIS_PAD_ERROR_DEVICE_NO_HANDLE) { return ORBIS_PAD_ERROR_INVALID_HANDLE; } - auto* controller = Common::Singleton::Instance(); + auto* controller = Common::Singleton::Instance(); + const auto* engine = controller->GetEngine(); int connectedCount = 0; bool isConnected = false; Input::State state; @@ -374,9 +383,13 @@ int PS4_SYSV_ABI scePadReadState(s32 handle, OrbisPadData* pData) { pData->angularVelocity.x = state.angularVelocity.x; pData->angularVelocity.y = state.angularVelocity.y; pData->angularVelocity.z = state.angularVelocity.z; - Input::GameController::CalculateOrientation(pData->acceleration, pData->angularVelocity, - 1.0f / controller->accel_poll_rate, - pData->orientation); + if (engine) { + const auto accel_poll_rate = engine->GetAccelPollRate(); + if (accel_poll_rate != 0.0f) { + GameController::CalculateOrientation(pData->acceleration, pData->angularVelocity, + 1.0f / accel_poll_rate, pData->orientation); + } + } pData->touchData.touchNum = (state.touchpad[0].state ? 1 : 0) + (state.touchpad[1].state ? 1 : 0); pData->touchData.touch[0].x = state.touchpad[0].x; @@ -468,7 +481,7 @@ int PS4_SYSV_ABI scePadSetLightBar(s32 handle, const OrbisPadLightBarParam* pPar return ORBIS_PAD_ERROR_INVALID_LIGHTBAR_SETTING; } - auto* controller = Common::Singleton::Instance(); + auto* controller = Common::Singleton::Instance(); controller->SetLightBarRGB(pParam->r, pParam->g, pParam->b); return ORBIS_OK; } @@ -536,7 +549,7 @@ int PS4_SYSV_ABI scePadSetVibration(s32 handle, const OrbisPadVibrationParam* pP if (pParam != nullptr) { LOG_DEBUG(Lib_Pad, "scePadSetVibration called handle = {} data = {} , {}", handle, pParam->smallMotor, pParam->largeMotor); - auto* controller = Common::Singleton::Instance(); + auto* controller = Common::Singleton::Instance(); controller->SetVibration(pParam->smallMotor, pParam->largeMotor); return ORBIS_OK; } diff --git a/src/core/libraries/videoout/driver.cpp b/src/core/libraries/videoout/driver.cpp index f6c25afe3..de5421fd7 100644 --- a/src/core/libraries/videoout/driver.cpp +++ b/src/core/libraries/videoout/driver.cpp @@ -1,8 +1,6 @@ // SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include - #include "common/assert.h" #include "common/config.h" #include "common/debug.h" @@ -11,6 +9,7 @@ #include "core/libraries/kernel/time.h" #include "core/libraries/videoout/driver.h" #include "core/libraries/videoout/videoout_error.h" +#include "imgui/renderer/imgui_core.h" #include "video_core/renderer_vulkan/vk_presenter.h" extern std::unique_ptr presenter; @@ -207,6 +206,13 @@ void VideoOutDriver::DrawBlankFrame() { presenter->Present(empty_frame); } +void VideoOutDriver::DrawLastFrame() { + const auto frame = presenter->PrepareLastFrame(); + if (frame != nullptr) { + presenter->Present(frame, true); + } +} + bool VideoOutDriver::SubmitFlip(VideoOutPort* port, s32 index, s64 flip_arg, bool is_eop /*= false*/) { { @@ -278,17 +284,26 @@ void VideoOutDriver::PresentThread(std::stop_token token) { return {}; }; - auto delay = std::chrono::microseconds{0}; while (!token.stop_requested()) { timer.Start(); + if (DebugState.IsGuestThreadsPaused()) { + DrawLastFrame(); + timer.End(); + continue; + } + // Check if it's time to take a request. auto& vblank_status = main_port.vblank_status; if (vblank_status.count % (main_port.flip_rate + 1) == 0) { const auto request = receive_request(); if (!request) { - if (!main_port.is_open || DebugState.IsGuestThreadsPaused()) { - DrawBlankFrame(); + if (timer.GetTotalWait().count() < 0) { // Dont draw too fast + if (!main_port.is_open) { + DrawBlankFrame(); + } else if (ImGui::Core::MustKeepDrawing()) { + DrawLastFrame(); + } } } else { Flip(request); diff --git a/src/core/libraries/videoout/driver.h b/src/core/libraries/videoout/driver.h index ec01b621f..ad7c7bec2 100644 --- a/src/core/libraries/videoout/driver.h +++ b/src/core/libraries/videoout/driver.h @@ -102,7 +102,8 @@ private: }; void Flip(const Request& req); - void DrawBlankFrame(); // Used when there is no flip request to keep ImGui up to date + void DrawBlankFrame(); // Video port out not open + void DrawLastFrame(); // Used when there is no flip request void SubmitFlipInternal(VideoOutPort* port, s32 index, s64 flip_arg, bool is_eop = false); void PresentThread(std::stop_token token); diff --git a/src/core/linker.cpp b/src/core/linker.cpp index 28d2eea7b..2461edcb2 100644 --- a/src/core/linker.cpp +++ b/src/core/linker.cpp @@ -52,7 +52,7 @@ Linker::Linker() : memory{Memory::Instance()} {} Linker::~Linker() = default; -void Linker::Execute() { +void Linker::Execute(const std::vector args) { if (Config::debugDump()) { DebugDump(); } @@ -101,7 +101,7 @@ void Linker::Execute() { memory->SetupMemoryRegions(fmem_size, use_extended_mem1, use_extended_mem2); - main_thread.Run([this, module](std::stop_token) { + main_thread.Run([this, module, args](std::stop_token) { Common::SetCurrentThreadName("GAME_MainThread"); LoadSharedLibraries(); @@ -109,6 +109,12 @@ void Linker::Execute() { EntryParams params{}; params.argc = 1; params.argv[0] = "eboot.bin"; + if (!args.empty()) { + params.argc = args.size() + 1; + for (int i = 0; i < args.size() && i < 32; i++) { + params.argv[i + 1] = args[i].c_str(); + } + } params.entry_addr = module->GetEntryAddress(); RunMainEntry(¶ms); }); diff --git a/src/core/linker.h b/src/core/linker.h index 7ef13ae56..00da3a08c 100644 --- a/src/core/linker.h +++ b/src/core/linker.h @@ -49,7 +49,7 @@ class Linker; struct EntryParams { int argc; u32 padding; - const char* argv[3]; + const char* argv[33]; VAddr entry_addr; }; @@ -143,7 +143,7 @@ public: void Relocate(Module* module); bool Resolve(const std::string& name, Loader::SymbolType type, Module* module, Loader::SymbolRecord* return_info); - void Execute(); + void Execute(const std::vector args = {}); void DebugDump(); private: diff --git a/src/emulator.cpp b/src/emulator.cpp index dbe693340..e77c2b87f 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -66,9 +66,10 @@ Emulator::Emulator() { LOG_INFO(Config, "Vulkan vkValidation: {}", Config::vkValidationEnabled()); LOG_INFO(Config, "Vulkan vkValidationSync: {}", Config::vkValidationSyncEnabled()); LOG_INFO(Config, "Vulkan vkValidationGpu: {}", Config::vkValidationGpuEnabled()); - LOG_INFO(Config, "Vulkan rdocEnable: {}", Config::isRdocEnabled()); - LOG_INFO(Config, "Vulkan rdocMarkersEnable: {}", Config::vkMarkersEnabled()); LOG_INFO(Config, "Vulkan crashDiagnostics: {}", Config::vkCrashDiagnosticEnabled()); + LOG_INFO(Config, "Vulkan hostMarkers: {}", Config::vkHostMarkersEnabled()); + LOG_INFO(Config, "Vulkan guestMarkers: {}", Config::vkGuestMarkersEnabled()); + LOG_INFO(Config, "Vulkan rdocEnable: {}", Config::isRdocEnabled()); // Create stdin/stdout/stderr Common::Singleton::Instance()->CreateStdHandles(); @@ -98,7 +99,7 @@ Emulator::~Emulator() { Config::saveMainWindow(config_dir / "config.toml"); } -void Emulator::Run(const std::filesystem::path& file) { +void Emulator::Run(const std::filesystem::path& file, const std::vector args) { // Applications expect to be run from /app0 so mount the file's parent path as app0. auto* mnt = Common::Singleton::Instance(); const auto game_folder = file.parent_path(); @@ -151,6 +152,15 @@ void Emulator::Run(const std::filesystem::path& file) { if (const auto raw_attributes = param_sfo->GetInteger("ATTRIBUTE")) { psf_attributes.raw = *raw_attributes; } + if (!args.empty()) { + int argc = std::min(args.size(), 32); + for (int i = 0; i < argc; i++) { + LOG_INFO(Loader, "Game argument {}: {}", i, args[i]); + } + if (args.size() > 32) { + LOG_ERROR(Loader, "Too many game arguments, only passing the first 32"); + } + } } const auto pic1_path = mnt->GetHostPath("/app0/sce_sys/pic1.png"); @@ -238,7 +248,7 @@ void Emulator::Run(const std::filesystem::path& file) { } #endif - linker->Execute(); + linker->Execute(args); window->InitTimers(); while (window->IsOpen()) { diff --git a/src/emulator.h b/src/emulator.h index a08ab43c3..08c2807a1 100644 --- a/src/emulator.h +++ b/src/emulator.h @@ -25,7 +25,7 @@ public: Emulator(); ~Emulator(); - void Run(const std::filesystem::path& file); + void Run(const std::filesystem::path& file, const std::vector args = {}); void UpdatePlayTime(const std::string& serial); private: diff --git a/src/imgui/imgui_config.h b/src/imgui/imgui_config.h index ccb084d94..7b03a4bab 100644 --- a/src/imgui/imgui_config.h +++ b/src/imgui/imgui_config.h @@ -30,6 +30,12 @@ extern void assert_fail_debug_msg(const char* msg); #define IM_VEC4_CLASS_EXTRA \ constexpr ImVec4(float _v) : x(_v), y(_v), z(_v), w(_v) {} +namespace ImGui { +struct Texture; +} +#define ImTextureID ImTextureID +using ImTextureID = ::ImGui::Texture*; + #ifdef IMGUI_USE_WCHAR32 #error "This project uses 16 bits wchar standard like Orbis" #endif \ No newline at end of file diff --git a/src/imgui/renderer/imgui_core.cpp b/src/imgui/renderer/imgui_core.cpp index 46391faef..26253822c 100644 --- a/src/imgui/renderer/imgui_core.cpp +++ b/src/imgui/renderer/imgui_core.cpp @@ -6,6 +6,7 @@ #include "common/config.h" #include "common/path_util.h" +#include "core/debug_state.h" #include "core/devtools/layer.h" #include "imgui/imgui_layer.h" #include "imgui_core.h" @@ -167,7 +168,7 @@ bool ProcessEvent(SDL_Event* event) { } } -void NewFrame() { +ImGuiID NewFrame(bool is_reusing_frame) { { std::scoped_lock lock{change_layers_mutex}; while (!change_layers.empty()) { @@ -182,24 +183,32 @@ void NewFrame() { } } - Sdl::NewFrame(); + Sdl::NewFrame(is_reusing_frame); ImGui::NewFrame(); - DockSpaceOverViewport(0, GetMainViewport(), ImGuiDockNodeFlags_PassthruCentralNode); + ImGuiWindowFlags flags = + ImGuiDockNodeFlags_PassthruCentralNode | ImGuiDockNodeFlags_AutoHideTabBar; + if (!DebugState.IsShowingDebugMenuBar()) { + flags |= ImGuiDockNodeFlags_NoTabBar; + } + ImGuiID dockId = DockSpaceOverViewport(0, GetMainViewport(), flags); for (auto* layer : layers) { layer->Draw(); } + + return dockId; } -void Render(const vk::CommandBuffer& cmdbuf, ::Vulkan::Frame* frame) { +void Render(const vk::CommandBuffer& cmdbuf, const vk::ImageView& image_view, + const vk::Extent2D& extent) { ImGui::Render(); ImDrawData* draw_data = GetDrawData(); if (draw_data->CmdListsCount == 0) { return; } - if (Config::vkMarkersEnabled()) { + if (Config::vkHostMarkersEnabled()) { cmdbuf.beginDebugUtilsLabelEXT(vk::DebugUtilsLabelEXT{ .pLabelName = "ImGui Render", }); @@ -207,16 +216,16 @@ void Render(const vk::CommandBuffer& cmdbuf, ::Vulkan::Frame* frame) { vk::RenderingAttachmentInfo color_attachments[1]{ { - .imageView = frame->image_view, + .imageView = image_view, .imageLayout = vk::ImageLayout::eColorAttachmentOptimal, - .loadOp = vk::AttachmentLoadOp::eLoad, + .loadOp = vk::AttachmentLoadOp::eClear, .storeOp = vk::AttachmentStoreOp::eStore, }, }; vk::RenderingInfo render_info{}; render_info.renderArea = vk::Rect2D{ .offset = {0, 0}, - .extent = {frame->width, frame->height}, + .extent = extent, }; render_info.layerCount = 1; render_info.colorAttachmentCount = 1; @@ -224,11 +233,15 @@ void Render(const vk::CommandBuffer& cmdbuf, ::Vulkan::Frame* frame) { cmdbuf.beginRendering(render_info); Vulkan::RenderDrawData(*draw_data, cmdbuf); cmdbuf.endRendering(); - if (Config::vkMarkersEnabled()) { + if (Config::vkHostMarkersEnabled()) { cmdbuf.endDebugUtilsLabelEXT(); } } +bool MustKeepDrawing() { + return layers.size() > 1 || DebugState.IsShowingDebugMenuBar(); +} + } // namespace Core void Layer::AddLayer(Layer* layer) { diff --git a/src/imgui/renderer/imgui_core.h b/src/imgui/renderer/imgui_core.h index 9ad708f81..ffee62cf8 100644 --- a/src/imgui/renderer/imgui_core.h +++ b/src/imgui/renderer/imgui_core.h @@ -3,6 +3,8 @@ #pragma once +#include + #include "video_core/renderer_vulkan/vk_instance.h" #include "vulkan/vulkan_handles.hpp" @@ -24,8 +26,11 @@ void Shutdown(const vk::Device& device); bool ProcessEvent(SDL_Event* event); -void NewFrame(); +ImGuiID NewFrame(bool is_reusing_frame = false); -void Render(const vk::CommandBuffer& cmdbuf, Vulkan::Frame* frame); +void Render(const vk::CommandBuffer& cmdbuf, const vk::ImageView& image_view, + const vk::Extent2D& extent); + +bool MustKeepDrawing(); // Force the emulator redraw } // namespace ImGui::Core diff --git a/src/imgui/renderer/imgui_impl_sdl3.cpp b/src/imgui/renderer/imgui_impl_sdl3.cpp index 60b440c24..ccd31d03a 100644 --- a/src/imgui/renderer/imgui_impl_sdl3.cpp +++ b/src/imgui/renderer/imgui_impl_sdl3.cpp @@ -5,13 +5,13 @@ #include #include "common/config.h" +#include "core/debug_state.h" #include "imgui_impl_sdl3.h" // SDL #include #if defined(__APPLE__) #include -#include #endif #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN @@ -27,6 +27,7 @@ struct SdlData { SDL_Window* window{}; SDL_WindowID window_id{}; Uint64 time{}; + Uint64 nonReusedtime{}; const char* clipboard_text_data{}; // IME handling @@ -45,6 +46,11 @@ struct SdlData { ImVector gamepads{}; GamepadMode gamepad_mode{}; bool want_update_gamepads_list{}; + + // Framerate counting (based on ImGui impl) + std::array framerateSecPerFrame; + int framerateSecPerFrameIdx{}; + float framerateSecPerFrameAcc{}; }; // Backend data stored in io.BackendPlatformUserData to allow support for multiple Dear ImGui @@ -72,33 +78,25 @@ static void PlatformSetImeData(ImGuiContext*, ImGuiViewport* viewport, ImGuiPlat auto window_id = (SDL_WindowID)(intptr_t)viewport->PlatformHandle; SDL_Window* window = SDL_GetWindowFromID(window_id); if ((!data->WantVisible || bd->ime_window != window) && bd->ime_window != nullptr) { - auto stop_input = [&bd] { SDL_StopTextInput(bd->ime_window); }; -#ifdef __APPLE__ - dispatch_sync(dispatch_get_main_queue(), ^{ - stop_input(); - }); -#else - stop_input(); -#endif + SDL_RunOnMainThread( + [](void* userdata) { SDL_StopTextInput(static_cast(userdata)); }, + bd->ime_window, true); bd->ime_window = nullptr; } if (data->WantVisible) { - SDL_Rect r; - r.x = (int)data->InputPos.x; - r.y = (int)data->InputPos.y; - r.w = 1; - r.h = (int)data->InputLineHeight; - const auto start_input = [&window, &r] { - SDL_SetTextInputArea(window, &r, 0); - SDL_StartTextInput(window); - }; -#ifdef __APPLE__ - dispatch_sync(dispatch_get_main_queue(), ^{ - start_input(); - }); -#else - start_input(); -#endif + std::pair usr_data; + usr_data.first = window; + usr_data.second.x = (int)data->InputPos.x; + usr_data.second.y = (int)data->InputPos.y; + usr_data.second.w = 1; + usr_data.second.h = (int)data->InputLineHeight; + SDL_RunOnMainThread( + [](void* userdata) { + auto* params = static_cast*>(userdata); + SDL_SetTextInputArea(params->first, ¶ms->second, 0); + SDL_StartTextInput(params->first); + }, + &usr_data, true); bd->ime_window = window; } } @@ -794,7 +792,7 @@ static void UpdateGamepads() { +thumb_dead_zone, +32767); } -void NewFrame() { +void NewFrame(bool is_reusing_frame) { SdlData* bd = GetBackendData(); IM_ASSERT(bd != nullptr && "No platform backend to shutdown, or already shutdown?"); ImGuiIO& io = ImGui::GetIO(); @@ -807,9 +805,29 @@ void NewFrame() { if (current_time <= bd->time) current_time = bd->time + 1; io.DeltaTime = bd->time > 0 ? (float)((double)(current_time - bd->time) / (double)frequency) - : (float)(1.0f / 60.0f); + : 1.0f / 60.0f; bd->time = current_time; + if (!is_reusing_frame) { + if (current_time <= bd->nonReusedtime) + current_time = bd->nonReusedtime + 1; + float deltaTime = + bd->nonReusedtime > 0 + ? (float)((double)(current_time - bd->nonReusedtime) / (double)frequency) + : 1.0f / 60.0f; + bd->nonReusedtime = current_time; + DebugState.FrameDeltaTime = deltaTime; + + int& frameIdx = bd->framerateSecPerFrameIdx; + float& framerateSec = bd->framerateSecPerFrame[frameIdx]; + float& acc = bd->framerateSecPerFrameAcc; + int count = bd->framerateSecPerFrame.size(); + acc += deltaTime - framerateSec; + framerateSec = deltaTime; + frameIdx = (frameIdx + 1) % count; + DebugState.Framerate = acc > 0.0f ? 1.0f / (acc / (float)count) : FLT_MAX; + } + if (bd->mouse_pending_leave_frame && bd->mouse_pending_leave_frame >= ImGui::GetFrameCount() && bd->mouse_buttons_down == 0) { bd->mouse_window_id = 0; diff --git a/src/imgui/renderer/imgui_impl_sdl3.h b/src/imgui/renderer/imgui_impl_sdl3.h index 59b1a6856..fe626a962 100644 --- a/src/imgui/renderer/imgui_impl_sdl3.h +++ b/src/imgui/renderer/imgui_impl_sdl3.h @@ -14,7 +14,7 @@ namespace ImGui::Sdl { bool Init(SDL_Window* window); void Shutdown(); -void NewFrame(); +void NewFrame(bool is_reusing); bool ProcessEvent(const SDL_Event* event); void OnResize(); diff --git a/src/imgui/renderer/imgui_impl_vulkan.cpp b/src/imgui/renderer/imgui_impl_vulkan.cpp index 7f7ade2a5..104ce4b52 100644 --- a/src/imgui/renderer/imgui_impl_vulkan.cpp +++ b/src/imgui/renderer/imgui_impl_vulkan.cpp @@ -57,11 +57,12 @@ struct VkData { vk::DeviceMemory font_memory{}; vk::Image font_image{}; vk::ImageView font_view{}; - vk::DescriptorSet font_descriptor_set{}; + ImTextureID font_texture{}; vk::CommandBuffer font_command_buffer{}; // Render buffers WindowRenderBuffers render_buffers{}; + bool enabled_blending{true}; VkData(const InitInfo init_info) : init_info(init_info) { render_buffers.count = init_info.image_count; @@ -252,8 +253,8 @@ void UploadTextureData::Destroy() { const InitInfo& v = bd->init_info; CheckVkErr(v.device.waitIdle()); - RemoveTexture(descriptor_set); - descriptor_set = VK_NULL_HANDLE; + RemoveTexture(im_texture); + im_texture = nullptr; v.device.destroyImageView(image_view, v.allocator); image_view = VK_NULL_HANDLE; @@ -264,8 +265,8 @@ void UploadTextureData::Destroy() { } // Register a texture -vk::DescriptorSet AddTexture(vk::ImageView image_view, vk::ImageLayout image_layout, - vk::Sampler sampler) { +ImTextureID AddTexture(vk::ImageView image_view, vk::ImageLayout image_layout, + vk::Sampler sampler) { VkData* bd = GetBackendData(); const InitInfo& v = bd->init_info; @@ -303,7 +304,9 @@ vk::DescriptorSet AddTexture(vk::ImageView image_view, vk::ImageLayout image_lay }; v.device.updateDescriptorSets({write_desc}, {}); } - return descriptor_set; + return new Texture{ + .descriptor_set = descriptor_set, + }; } UploadTextureData UploadTexture(const void* data, vk::Format format, u32 width, u32 height, size_t size) { @@ -370,7 +373,7 @@ UploadTextureData UploadTexture(const void* data, vk::Format format, u32 width, } // Create descriptor set (ImTextureID) - info.descriptor_set = AddTexture(info.image_view, vk::ImageLayout::eShaderReadOnlyOptimal); + info.im_texture = AddTexture(info.image_view, vk::ImageLayout::eShaderReadOnlyOptimal); // Create Upload Buffer { @@ -464,10 +467,12 @@ UploadTextureData UploadTexture(const void* data, vk::Format format, u32 width, return info; } -void RemoveTexture(vk::DescriptorSet descriptor_set) { +void RemoveTexture(ImTextureID texture) { + IM_ASSERT(texture != nullptr); VkData* bd = GetBackendData(); const InitInfo& v = bd->init_info; - v.device.freeDescriptorSets(bd->descriptor_pool, {descriptor_set}); + v.device.freeDescriptorSets(bd->descriptor_pool, {texture->descriptor_set}); + delete texture; } static void CreateOrResizeBuffer(RenderBuffer& rb, size_t new_size, vk::BufferUsageFlagBits usage) { @@ -679,13 +684,7 @@ void RenderDrawData(ImDrawData& draw_data, vk::CommandBuffer command_buffer, command_buffer.setScissor(0, 1, &scissor); // Bind DescriptorSet with font or user texture - vk::DescriptorSet desc_set[1]{(VkDescriptorSet)pcmd->TextureId}; - if (sizeof(ImTextureID) < sizeof(ImU64)) { - // We don't support texture switches if ImTextureID hasn't been redefined to be - // 64-bit. Do a flaky check that other textures haven't been used. - IM_ASSERT(pcmd->TextureId == (ImTextureID)bd->font_descriptor_set); - desc_set[0] = bd->font_descriptor_set; - } + vk::DescriptorSet desc_set[1]{pcmd->TextureId->descriptor_set}; command_buffer.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, bd->pipeline_layout, 0, {desc_set}, {}); @@ -709,7 +708,7 @@ static bool CreateFontsTexture() { const InitInfo& v = bd->init_info; // Destroy existing texture (if any) - if (bd->font_view || bd->font_image || bd->font_memory || bd->font_descriptor_set) { + if (bd->font_view || bd->font_image || bd->font_memory || bd->font_texture) { CheckVkErr(v.queue.waitIdle()); DestroyFontsTexture(); } @@ -782,7 +781,7 @@ static bool CreateFontsTexture() { } // Create the Descriptor Set: - bd->font_descriptor_set = AddTexture(bd->font_view, vk::ImageLayout::eShaderReadOnlyOptimal); + bd->font_texture = AddTexture(bd->font_view, vk::ImageLayout::eShaderReadOnlyOptimal); // Create the Upload Buffer: vk::DeviceMemory upload_buffer_memory{}; @@ -874,7 +873,7 @@ static bool CreateFontsTexture() { } // Store our identifier - io.Fonts->SetTexID(bd->font_descriptor_set); + io.Fonts->SetTexID(bd->font_texture); // End command buffer vk::SubmitInfo end_info = {}; @@ -898,9 +897,9 @@ static void DestroyFontsTexture() { VkData* bd = GetBackendData(); const InitInfo& v = bd->init_info; - if (bd->font_descriptor_set) { - RemoveTexture(bd->font_descriptor_set); - bd->font_descriptor_set = VK_NULL_HANDLE; + if (bd->font_texture) { + RemoveTexture(bd->font_texture); + bd->font_texture = nullptr; io.Fonts->SetTexID(nullptr); } diff --git a/src/imgui/renderer/imgui_impl_vulkan.h b/src/imgui/renderer/imgui_impl_vulkan.h index e325e2a8d..9b15dcae6 100644 --- a/src/imgui/renderer/imgui_impl_vulkan.h +++ b/src/imgui/renderer/imgui_impl_vulkan.h @@ -10,6 +10,12 @@ struct ImDrawData; +namespace ImGui { +struct Texture { + vk::DescriptorSet descriptor_set{nullptr}; +}; +} // namespace ImGui + namespace ImGui::Vulkan { struct InitInfo { @@ -34,29 +40,32 @@ struct InitInfo { struct UploadTextureData { vk::Image image; vk::ImageView image_view; - vk::DescriptorSet descriptor_set; vk::DeviceMemory image_memory; vk::CommandBuffer command_buffer; // Submit to the queue vk::Buffer upload_buffer; vk::DeviceMemory upload_buffer_memory; + ImTextureID im_texture; + void Upload(); void Destroy(); }; -vk::DescriptorSet AddTexture(vk::ImageView image_view, vk::ImageLayout image_layout, - vk::Sampler sampler = VK_NULL_HANDLE); +ImTextureID AddTexture(vk::ImageView image_view, vk::ImageLayout image_layout, + vk::Sampler sampler = VK_NULL_HANDLE); UploadTextureData UploadTexture(const void* data, vk::Format format, u32 width, u32 height, size_t size); -void RemoveTexture(vk::DescriptorSet descriptor_set); +void RemoveTexture(ImTextureID descriptor_set); bool Init(InitInfo info); void Shutdown(); void RenderDrawData(ImDrawData& draw_data, vk::CommandBuffer command_buffer, vk::Pipeline pipeline = VK_NULL_HANDLE); +void SetBlendEnabled(bool enabled); + } // namespace ImGui::Vulkan \ No newline at end of file diff --git a/src/imgui/renderer/texture_manager.cpp b/src/imgui/renderer/texture_manager.cpp index f13c995be..d7516a3a5 100644 --- a/src/imgui/renderer/texture_manager.cpp +++ b/src/imgui/renderer/texture_manager.cpp @@ -4,6 +4,7 @@ #include #include +#include #include "common/assert.h" #include "common/config.h" #include "common/io_file.h" @@ -123,7 +124,7 @@ static std::deque g_upload_list; namespace Core::TextureManager { Inner::~Inner() { - if (upload_data.descriptor_set != nullptr) { + if (upload_data.im_texture != nullptr) { std::unique_lock lk{g_upload_mtx}; g_upload_list.emplace_back(UploadJob{ .data = this->upload_data, @@ -239,7 +240,7 @@ void Submit() { } if (upload.core != nullptr) { upload.core->upload_data.Upload(); - upload.core->texture_id = upload.core->upload_data.descriptor_set; + upload.core->texture_id = upload.core->upload_data.im_texture; if (upload.core->count.fetch_sub(1) == 1) { delete upload.core; } diff --git a/src/input/controller.cpp b/src/input/controller.cpp index eb43e6adf..ae54553f4 100644 --- a/src/input/controller.cpp +++ b/src/input/controller.cpp @@ -10,6 +10,55 @@ namespace Input { +using Libraries::Pad::OrbisPadButtonDataOffset; + +void State::OnButton(OrbisPadButtonDataOffset button, bool isPressed) { + if (isPressed) { + buttonsState |= button; + } else { + buttonsState &= ~button; + } +} + +void State::OnAxis(Axis axis, int value) { + const auto toggle = [&](const auto button) { + if (value > 0) { + buttonsState |= button; + } else { + buttonsState &= ~button; + } + }; + switch (axis) { + case Axis::TriggerLeft: + toggle(OrbisPadButtonDataOffset::L2); + break; + case Axis::TriggerRight: + toggle(OrbisPadButtonDataOffset::R2); + break; + default: + break; + } + axes[static_cast(axis)] = value; +} + +void State::OnTouchpad(int touchIndex, bool isDown, float x, float y) { + touchpad[touchIndex].state = isDown; + touchpad[touchIndex].x = static_cast(x * 1920); + touchpad[touchIndex].y = static_cast(y * 941); +} + +void State::OnGyro(const float gyro[3]) { + angularVelocity.x = gyro[0]; + angularVelocity.y = gyro[1]; + angularVelocity.z = gyro[2]; +} + +void State::OnAccel(const float accel[3]) { + acceleration.x = accel[0]; + acceleration.y = accel[1]; + acceleration.z = accel[2]; +} + GameController::GameController() { m_states_num = 0; m_last_state = State(); @@ -75,45 +124,22 @@ void GameController::AddState(const State& state) { m_states_num++; } -void GameController::CheckButton(int id, Libraries::Pad::OrbisPadButtonDataOffset button, - bool is_pressed) { +void GameController::CheckButton(int id, OrbisPadButtonDataOffset button, bool is_pressed) { std::scoped_lock lock{m_mutex}; auto state = GetLastState(); + state.time = Libraries::Kernel::sceKernelGetProcessTime(); - if (is_pressed) { - state.buttonsState |= button; - } else { - state.buttonsState &= ~button; - } + state.OnButton(button, is_pressed); AddState(state); } void GameController::Axis(int id, Input::Axis axis, int value) { - using Libraries::Pad::OrbisPadButtonDataOffset; - std::scoped_lock lock{m_mutex}; auto state = GetLastState(); state.time = Libraries::Kernel::sceKernelGetProcessTime(); - int axis_id = static_cast(axis); - state.axes[axis_id] = value; - - if (axis == Input::Axis::TriggerLeft) { - if (value > 0) { - state.buttonsState |= OrbisPadButtonDataOffset::L2; - } else { - state.buttonsState &= ~OrbisPadButtonDataOffset::L2; - } - } - - if (axis == Input::Axis::TriggerRight) { - if (value > 0) { - state.buttonsState |= OrbisPadButtonDataOffset::R2; - } else { - state.buttonsState &= ~OrbisPadButtonDataOffset::R2; - } - } + state.OnAxis(axis, value); AddState(state); } @@ -124,9 +150,7 @@ void GameController::Gyro(int id, const float gyro[3]) { state.time = Libraries::Kernel::sceKernelGetProcessTime(); // Update the angular velocity (gyro data) - state.angularVelocity.x = gyro[0]; // X-axis - state.angularVelocity.y = gyro[1]; // Y-axis - state.angularVelocity.z = gyro[2]; // Z-axis + state.OnGyro(gyro); AddState(state); } @@ -136,9 +160,7 @@ void GameController::Acceleration(int id, const float acceleration[3]) { state.time = Libraries::Kernel::sceKernelGetProcessTime(); // Update the acceleration values - state.acceleration.x = acceleration[0]; // X-axis - state.acceleration.y = acceleration[1]; // Y-axis - state.acceleration.z = acceleration[2]; // Z-axis + state.OnAccel(acceleration); AddState(state); } @@ -211,62 +233,48 @@ void GameController::CalculateOrientation(Libraries::Pad::OrbisFVector3& acceler } void GameController::SetLightBarRGB(u8 r, u8 g, u8 b) { - if (m_sdl_gamepad != nullptr) { - SDL_SetGamepadLED(m_sdl_gamepad, r, g, b); + if (!m_engine) { + return; } + std::scoped_lock _{m_mutex}; + m_engine->SetLightBarRGB(r, g, b); } -bool GameController::SetVibration(u8 smallMotor, u8 largeMotor) { - if (m_sdl_gamepad != nullptr) { - return SDL_RumbleGamepad(m_sdl_gamepad, (smallMotor / 255.0f) * 0xFFFF, - (largeMotor / 255.0f) * 0xFFFF, -1); +void GameController::SetVibration(u8 smallMotor, u8 largeMotor) { + if (!m_engine) { + return; } - return true; + std::scoped_lock _{m_mutex}; + m_engine->SetVibration(smallMotor, largeMotor); } void GameController::SetTouchpadState(int touchIndex, bool touchDown, float x, float y) { if (touchIndex < 2) { std::scoped_lock lock{m_mutex}; auto state = GetLastState(); - state.time = Libraries::Kernel::sceKernelGetProcessTime(); - state.touchpad[touchIndex].state = touchDown; - state.touchpad[touchIndex].x = static_cast(x * 1920); - state.touchpad[touchIndex].y = static_cast(y * 941); + state.time = Libraries::Kernel::sceKernelGetProcessTime(); + state.OnTouchpad(touchIndex, touchDown, x, y); AddState(state); } } -void GameController::TryOpenSDLController() { - if (m_sdl_gamepad == nullptr || !SDL_GamepadConnected(m_sdl_gamepad)) { - int gamepad_count; - SDL_JoystickID* gamepads = SDL_GetGamepads(&gamepad_count); - m_sdl_gamepad = gamepad_count > 0 ? SDL_OpenGamepad(gamepads[0]) : nullptr; - if (Config::getIsMotionControlsEnabled()) { - if (SDL_SetGamepadSensorEnabled(m_sdl_gamepad, SDL_SENSOR_GYRO, true)) { - gyro_poll_rate = SDL_GetGamepadSensorDataRate(m_sdl_gamepad, SDL_SENSOR_GYRO); - LOG_INFO(Input, "Gyro initialized, poll rate: {}", gyro_poll_rate); - } else { - LOG_ERROR(Input, "Failed to initialize gyro controls for gamepad"); - } - if (SDL_SetGamepadSensorEnabled(m_sdl_gamepad, SDL_SENSOR_ACCEL, true)) { - accel_poll_rate = SDL_GetGamepadSensorDataRate(m_sdl_gamepad, SDL_SENSOR_ACCEL); - LOG_INFO(Input, "Accel initialized, poll rate: {}", accel_poll_rate); - } else { - LOG_ERROR(Input, "Failed to initialize accel controls for gamepad"); - } - } - - SDL_free(gamepads); - - SetLightBarRGB(0, 0, 255); +void GameController::SetEngine(std::unique_ptr engine) { + std::scoped_lock _{m_mutex}; + m_engine = std::move(engine); + if (m_engine) { + m_engine->Init(); } } +Engine* GameController::GetEngine() { + return m_engine.get(); +} + u32 GameController::Poll() { - std::scoped_lock lock{m_mutex}; if (m_connected) { + std::scoped_lock lock{m_mutex}; auto time = Libraries::Kernel::sceKernelGetProcessTime(); if (m_states_num == 0) { auto diff = (time - m_last_state.time) / 1000; diff --git a/src/input/controller.h b/src/input/controller.h index c6fc02c24..a45e71d77 100644 --- a/src/input/controller.h +++ b/src/input/controller.h @@ -3,12 +3,12 @@ #pragma once +#include +#include #include #include "common/types.h" #include "core/libraries/pad/pad.h" -struct SDL_Gamepad; - namespace Input { enum class Axis { @@ -28,7 +28,14 @@ struct TouchpadEntry { u16 y{}; }; -struct State { +class State { +public: + void OnButton(Libraries::Pad::OrbisPadButtonDataOffset, bool); + void OnAxis(Axis, int); + void OnTouchpad(int touchIndex, bool isDown, float x, float y); + void OnGyro(const float[3]); + void OnAccel(const float[3]); + Libraries::Pad::OrbisPadButtonDataOffset buttonsState{}; u64 time = 0; int axes[static_cast(Axis::AxisMax)] = {128, 128, 128, 128, 0, 0}; @@ -38,9 +45,19 @@ struct State { Libraries::Pad::OrbisFQuaternion orientation = {0.0f, 0.0f, 0.0f, 1.0f}; }; +class Engine { +public: + virtual ~Engine() = default; + virtual void Init() = 0; + virtual void SetLightBarRGB(u8 r, u8 g, u8 b) = 0; + virtual void SetVibration(u8 smallMotor, u8 largeMotor) = 0; + virtual State ReadState() = 0; + virtual float GetAccelPollRate() const = 0; + virtual float GetGyroPollRate() const = 0; +}; + inline int GetAxis(int min, int max, int value) { - int v = (255 * (value - min)) / (max - min); - return (v < 0 ? 0 : (v > 255 ? 255 : v)); + return std::clamp((255 * (value - min)) / (max - min), 0, 255); } constexpr u32 MAX_STATES = 64; @@ -59,13 +76,12 @@ public: void Gyro(int id, const float gyro[3]); void Acceleration(int id, const float acceleration[3]); void SetLightBarRGB(u8 r, u8 g, u8 b); - bool SetVibration(u8 smallMotor, u8 largeMotor); + void SetVibration(u8 smallMotor, u8 largeMotor); void SetTouchpadState(int touchIndex, bool touchDown, float x, float y); - void TryOpenSDLController(); + void SetEngine(std::unique_ptr); + Engine* GetEngine(); u32 Poll(); - float gyro_poll_rate; - float accel_poll_rate; static void CalculateOrientation(Libraries::Pad::OrbisFVector3& acceleration, Libraries::Pad::OrbisFVector3& angularVelocity, float deltaTime, @@ -85,7 +101,7 @@ private: std::array m_states; std::array m_private; - SDL_Gamepad* m_sdl_gamepad = nullptr; + std::unique_ptr m_engine = nullptr; }; } // namespace Input diff --git a/src/main.cpp b/src/main.cpp index 54772870c..fad3b1f53 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,6 +29,7 @@ int main(int argc, char* argv[]) { bool has_game_argument = false; std::string game_path; + std::vector game_args{}; // Map of argument strings to lambda functions std::unordered_map> arg_map = { @@ -37,6 +38,9 @@ int main(int argc, char* argv[]) { std::cout << "Usage: shadps4 [options] \n" "Options:\n" " -g, --game Specify game path to launch\n" + " -- ... Parameters passed to the game ELF. " + "Needs to be at the end of the line, and everything after \"--\" is a " + "game argument.\n" " -p, --patch Apply specified patch file\n" " -f, --fullscreen Specify window initial fullscreen " "state. Does not overwrite the config file.\n" @@ -126,6 +130,21 @@ int main(int argc, char* argv[]) { // Assume the last argument is the game file if not specified via -g/--game game_path = argv[i]; has_game_argument = true; + } else if (std::string(argv[i]) == "--") { + if (i + 1 == argc) { + std::cerr << "Warning: -- is set, but no game arguments are added!\n"; + break; + } + for (int j = i + 1; j < argc; j++) { + game_args.push_back(argv[j]); + } + break; + } else if (i + 1 < argc && std::string(argv[i + 1]) == "--") { + if (!has_game_argument) { + game_path = argv[i]; + has_game_argument = true; + } + break; } else { std::cerr << "Unknown argument: " << cur_arg << ", see --help for info.\n"; return 1; @@ -166,7 +185,7 @@ int main(int argc, char* argv[]) { // Run the emulator with the resolved eboot path Core::Emulator emulator; - emulator.Run(eboot_path); + emulator.Run(eboot_path, game_args); return 0; } diff --git a/src/qt_gui/cheats_patches.cpp b/src/qt_gui/cheats_patches.cpp index 2fea0b6ea..13157aa3a 100644 --- a/src/qt_gui/cheats_patches.cpp +++ b/src/qt_gui/cheats_patches.cpp @@ -188,8 +188,12 @@ void CheatsPatches::setupUI() { } }); + QPushButton* closeButton = new QPushButton(tr("Close")); + connect(closeButton, &QPushButton::clicked, [this]() { QWidget::close(); }); + controlLayout->addWidget(downloadButton); controlLayout->addWidget(deleteCheatButton); + controlLayout->addWidget(closeButton); cheatsLayout->addLayout(controlLayout); cheatsTab->setLayout(cheatsLayout); @@ -464,6 +468,8 @@ void CheatsPatches::onSaveButtonClicked() { } else { QMessageBox::information(this, tr("Success"), tr("Options saved successfully.")); } + + QWidget::close(); } QCheckBox* CheatsPatches::findCheckBoxByName(const QString& name) { diff --git a/src/qt_gui/game_list_frame.cpp b/src/qt_gui/game_list_frame.cpp index b1cd07216..9753f511b 100644 --- a/src/qt_gui/game_list_frame.cpp +++ b/src/qt_gui/game_list_frame.cpp @@ -106,6 +106,8 @@ void GameListFrame::PlayBackgroundMusic(QTableWidgetItem* item) { void GameListFrame::PopulateGameList() { // Do not show status column if it is not enabled this->setColumnHidden(2, !Config::getCompatibilityEnabled()); + this->setColumnHidden(6, !Config::GetLoadGameSizeEnabled()); + this->setRowCount(m_game_info->m_games.size()); ResizeIcons(icon_size); diff --git a/src/qt_gui/game_list_utils.h b/src/qt_gui/game_list_utils.h index ab9233886..581a8a55f 100644 --- a/src/qt_gui/game_list_utils.h +++ b/src/qt_gui/game_list_utils.h @@ -62,11 +62,46 @@ public: QDir dir(dirPath); QDirIterator it(dir.absolutePath(), QDirIterator::Subdirectories); qint64 total = 0; + + if (!Config::GetLoadGameSizeEnabled()) { + game.size = FormatSize(0).toStdString(); + return; + } + + // Cache path + QFile size_cache_file(Common::FS::GetUserPath(Common::FS::PathType::MetaDataDir) / + game.serial / "size_cache.txt"); + QFileInfo cacheInfo(size_cache_file); + QFileInfo dirInfo(dirPath); + + // Check if cache file exists and is valid + if (size_cache_file.exists() && cacheInfo.lastModified() >= dirInfo.lastModified()) { + if (size_cache_file.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream in(&size_cache_file); + QString cachedSize = in.readLine(); + size_cache_file.close(); + + if (!cachedSize.isEmpty()) { + game.size = cachedSize.toStdString(); + return; + } + } + } + + // Cache is invalid or does not exist; calculate size while (it.hasNext()) { it.next(); total += it.fileInfo().size(); } + game.size = FormatSize(total).toStdString(); + + // Save new cache + if (size_cache_file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QTextStream out(&size_cache_file); + out << QString::fromStdString(game.size) << "\n"; + size_cache_file.close(); + } } static QString GetRegion(char region) { diff --git a/src/qt_gui/gui_context_menus.h b/src/qt_gui/gui_context_menus.h index bbc84c4fc..0e8675c0c 100644 --- a/src/qt_gui/gui_context_menus.h +++ b/src/qt_gui/gui_context_menus.h @@ -283,7 +283,7 @@ public: #ifdef Q_OS_WIN if (createShortcutWin(linkPath, ebootPath, icoPath, exePath)) { #else - if (createShortcutLinux(linkPath, ebootPath, iconPath)) { + if (createShortcutLinux(linkPath, m_games[itemID].name, ebootPath, iconPath)) { #endif QMessageBox::information( nullptr, tr("Shortcut creation"), @@ -301,7 +301,7 @@ public: #ifdef Q_OS_WIN if (createShortcutWin(linkPath, ebootPath, iconPath, exePath)) { #else - if (createShortcutLinux(linkPath, ebootPath, iconPath)) { + if (createShortcutLinux(linkPath, m_games[itemID].name, ebootPath, iconPath)) { #endif QMessageBox::information( nullptr, tr("Shortcut creation"), @@ -510,8 +510,8 @@ private: return SUCCEEDED(hres); } #else - bool createShortcutLinux(const QString& linkPath, const QString& targetPath, - const QString& iconPath) { + bool createShortcutLinux(const QString& linkPath, const std::string& name, + const QString& targetPath, const QString& iconPath) { QFile shortcutFile(linkPath); if (!shortcutFile.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::critical(nullptr, "Error", @@ -522,7 +522,7 @@ private: QTextStream out(&shortcutFile); out << "[Desktop Entry]\n"; out << "Version=1.0\n"; - out << "Name=" << QFileInfo(linkPath).baseName() << "\n"; + out << "Name=" << QString::fromStdString(name) << "\n"; out << "Exec=" << QCoreApplication::applicationFilePath() << " \"" << targetPath << "\"\n"; out << "Icon=" << iconPath << "\n"; out << "Terminal=false\n"; diff --git a/src/qt_gui/main.cpp b/src/qt_gui/main.cpp index 2d524e199..8babadc35 100644 --- a/src/qt_gui/main.cpp +++ b/src/qt_gui/main.cpp @@ -33,6 +33,7 @@ int main(int argc, char* argv[]) { bool has_command_line_argument = argc > 1; bool show_gui = false, has_game_argument = false; std::string game_path; + std::vector game_args{}; // Map of argument strings to lambda functions std::unordered_map> arg_map = { @@ -43,6 +44,9 @@ int main(int argc, char* argv[]) { " No arguments: Opens the GUI.\n" " -g, --game Specify or " " to launch\n" + " -- ... Parameters passed to the game ELF. " + "Needs to be at the end of the line, and everything after \"--\" is a " + "game argument.\n" " -p, --patch Apply specified patch file\n" " -s, --show-gui Show the GUI\n" " -f, --fullscreen Specify window initial fullscreen " @@ -131,6 +135,20 @@ int main(int argc, char* argv[]) { // Assume the last argument is the game file if not specified via -g/--game game_path = argv[i]; has_game_argument = true; + } else if (std::string(argv[i]) == "--") { + if (i + 1 == argc) { + std::cerr << "Warning: -- is set, but no game arguments are added!\n"; + break; + } + for (int j = i + 1; j < argc; j++) { + game_args.push_back(argv[j]); + } + break; + } else if (i + 1 < argc && std::string(argv[i + 1]) == "--") { + if (!has_game_argument) { + game_path = argv[i]; + has_game_argument = true; + } } else { std::cerr << "Unknown argument: " << cur_arg << ", see --help for info.\n"; return 1; @@ -181,7 +199,7 @@ int main(int argc, char* argv[]) { // Run the emulator with the resolved game path Core::Emulator emulator; - emulator.Run(game_file_path.string()); + emulator.Run(game_file_path.string(), game_args); if (!show_gui) { return 0; // Exit after running the emulator without showing the GUI } diff --git a/src/qt_gui/main_window.cpp b/src/qt_gui/main_window.cpp index b5e02534e..bad70d8ab 100644 --- a/src/qt_gui/main_window.cpp +++ b/src/qt_gui/main_window.cpp @@ -260,6 +260,12 @@ void MainWindow::CreateConnects() { } }); + connect(ui->shadFolderAct, &QAction::triggered, this, [this]() { + QString userPath; + Common::FS::PathToQString(userPath, Common::FS::GetUserPath(Common::FS::PathType::UserDir)); + QDesktopServices::openUrl(QUrl::fromLocalFile(userPath)); + }); + connect(ui->playButton, &QPushButton::clicked, this, &MainWindow::StartGame); connect(m_game_grid_frame.get(), &QTableWidget::cellDoubleClicked, this, &MainWindow::StartGame); @@ -1054,6 +1060,7 @@ QIcon MainWindow::RecolorIcon(const QIcon& icon, bool isWhite) { void MainWindow::SetUiIcons(bool isWhite) { ui->bootInstallPkgAct->setIcon(RecolorIcon(ui->bootInstallPkgAct->icon(), isWhite)); ui->bootGameAct->setIcon(RecolorIcon(ui->bootGameAct->icon(), isWhite)); + ui->shadFolderAct->setIcon(RecolorIcon(ui->shadFolderAct->icon(), isWhite)); ui->exitAct->setIcon(RecolorIcon(ui->exitAct->icon(), isWhite)); #ifdef ENABLE_UPDATER ui->updaterAct->setIcon(RecolorIcon(ui->updaterAct->icon(), isWhite)); diff --git a/src/qt_gui/main_window_ui.h b/src/qt_gui/main_window_ui.h index 46513df9e..ee6b115b1 100644 --- a/src/qt_gui/main_window_ui.h +++ b/src/qt_gui/main_window_ui.h @@ -12,6 +12,7 @@ public: QAction* bootInstallPkgAct; QAction* bootGameAct; QAction* addElfFolderAct; + QAction* shadFolderAct; QAction* exitAct; QAction* showGameListAct; QAction* refreshGameListAct; @@ -90,6 +91,9 @@ public: addElfFolderAct = new QAction(MainWindow); addElfFolderAct->setObjectName("addElfFolderAct"); addElfFolderAct->setIcon(QIcon(":images/folder_icon.png")); + shadFolderAct = new QAction(MainWindow); + shadFolderAct->setObjectName("shadFolderAct"); + shadFolderAct->setIcon(QIcon(":images/folder_icon.png")); exitAct = new QAction(MainWindow); exitAct->setObjectName("exitAct"); exitAct->setIcon(QIcon(":images/exit_icon.png")); @@ -278,7 +282,9 @@ public: menuBar->addAction(menuHelp->menuAction()); menuFile->addAction(bootInstallPkgAct); menuFile->addAction(bootGameAct); + menuFile->addSeparator(); menuFile->addAction(addElfFolderAct); + menuFile->addAction(shadFolderAct); menuFile->addSeparator(); menuFile->addAction(menuRecent->menuAction()); menuFile->addSeparator(); @@ -338,6 +344,8 @@ public: "MainWindow", "Install application from a .pkg file", nullptr)); #endif // QT_CONFIG(tooltip) menuRecent->setTitle(QCoreApplication::translate("MainWindow", "Recent Games", nullptr)); + shadFolderAct->setText( + QCoreApplication::translate("MainWindow", "Open shadPS4 Folder", nullptr)); exitAct->setText(QCoreApplication::translate("MainWindow", "Exit", nullptr)); #if QT_CONFIG(tooltip) exitAct->setToolTip(QCoreApplication::translate("MainWindow", "Exit shadPS4", nullptr)); diff --git a/src/qt_gui/pkg_viewer.cpp b/src/qt_gui/pkg_viewer.cpp index 0ffb9b579..b4dd3afdf 100644 --- a/src/qt_gui/pkg_viewer.cpp +++ b/src/qt_gui/pkg_viewer.cpp @@ -47,6 +47,9 @@ PKGViewer::PKGViewer(std::shared_ptr game_info_get, QWidget* pare connect(treeWidget, &QTreeWidget::customContextMenuRequested, this, [=, this](const QPoint& pos) { + if (treeWidget->selectedItems().isEmpty()) { + return; + } m_gui_context_menus.RequestGameMenuPKGViewer(pos, m_full_pkg_list, treeWidget, InstallDragDropPkg); }); diff --git a/src/qt_gui/settings_dialog.cpp b/src/qt_gui/settings_dialog.cpp index 9d5da0da0..e34452ea7 100644 --- a/src/qt_gui/settings_dialog.cpp +++ b/src/qt_gui/settings_dialog.cpp @@ -17,6 +17,7 @@ #ifdef ENABLE_UPDATER #include "check_update.h" #endif +#include #include #include "background_music_player.h" #include "common/logging/backend.h" @@ -206,6 +207,16 @@ SettingsDialog::SettingsDialog(std::span physical_devices, }); } + // DEBUG TAB + { + connect(ui->OpenLogLocationButton, &QPushButton::clicked, this, []() { + QString userPath; + Common::FS::PathToQString(userPath, + Common::FS::GetUserPath(Common::FS::PathType::UserDir)); + QDesktopServices::openUrl(QUrl::fromLocalFile(userPath + "/log")); + }); + } + // Descriptions { // General @@ -312,6 +323,7 @@ void SettingsDialog::LoadValuesFromConfig() { toml::find_or(data, "General", "FullscreenMode", "Borderless"))); ui->separateUpdatesCheckBox->setChecked( toml::find_or(data, "General", "separateUpdateEnabled", false)); + ui->gameSizeCheckBox->setChecked(toml::find_or(data, "GUI", "loadGameSizeEnabled", true)); ui->showSplashCheckBox->setChecked(toml::find_or(data, "General", "showSplash", false)); ui->logTypeComboBox->setCurrentText( QString::fromStdString(toml::find_or(data, "General", "logType", "async"))); @@ -520,22 +532,6 @@ bool SettingsDialog::eventFilter(QObject* obj, QEvent* event) { } else { ui->descriptionText->setText(defaultTextEdit); } - - // if the text exceeds the size of the box, it will increase the size - QRect currentGeometry = this->geometry(); - int newWidth = currentGeometry.width(); - - int documentHeight = ui->descriptionText->document()->size().height(); - int visibleHeight = ui->descriptionText->viewport()->height(); - if (documentHeight > visibleHeight) { - ui->descriptionText->setMaximumSize(16777215, 110); - this->setGeometry(currentGeometry.x(), currentGeometry.y(), newWidth, - currentGeometry.height() + 40); - } else { - ui->descriptionText->setMaximumSize(16777215, 70); - this->setGeometry(currentGeometry.x(), currentGeometry.y(), newWidth, - initialHeight); - } return true; } } @@ -568,6 +564,7 @@ void SettingsDialog::UpdateSettings() { Config::setDumpShaders(ui->dumpShadersCheckBox->isChecked()); Config::setNullGpu(ui->nullGpuCheckBox->isChecked()); Config::setSeparateUpdateEnabled(ui->separateUpdatesCheckBox->isChecked()); + Config::setLoadGameSizeEnabled(ui->gameSizeCheckBox->isChecked()); Config::setShowSplash(ui->showSplashCheckBox->isChecked()); Config::setDebugDump(ui->debugDump->isChecked()); Config::setVkValidation(ui->vkValidationCheckBox->isChecked()); diff --git a/src/qt_gui/settings_dialog.ui b/src/qt_gui/settings_dialog.ui index 8e9fcc434..736d27177 100644 --- a/src/qt_gui/settings_dialog.ui +++ b/src/qt_gui/settings_dialog.ui @@ -77,43 +77,6 @@ 0 - - - - - - System - - - - - - Console Language - - - - - - - - - - - - Emulator Language - - - - - - - - - - - - - @@ -134,7 +97,7 @@ - + Fullscreen Mode @@ -217,7 +180,214 @@ - + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + GUI Settings + + + + 1 + + + 11 + + + + + Show Game Size In List + + + + + + + + 0 + 0 + + + + Play title music + + + + + + + 1 + + + 0 + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Volume + + + + + + + Set the volume of the background music. + + + 100 + + + 10 + + + 20 + + + 50 + + + Qt::Orientation::Horizontal + + + false + + + false + + + QSlider::TickPosition::NoTicks + + + 10 + + + + + + + + + 6 + + + 0 + + + 50 + + + + + + + Trophy + + + + + + Disable Trophy Pop-ups + + + + + + + Trophy Key + + + + + + + + 0 + 0 + + + + + 10 + false + + + + + + + + + + + + + + + + + + + + + + System + + + + + + Console Language + + + + + + + + + + + + Emulator Language + + + + + + + + + + + + + + 6 @@ -271,7 +441,7 @@ 11 - 11 + 190 @@ -384,7 +554,7 @@ - + @@ -525,169 +695,6 @@ - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - GUI Settings - - - - 1 - - - 11 - - - - - - 0 - 0 - - - - Play title music - - - - - - - 1 - - - 0 - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - Volume - - - - - - - Set the volume of the background music. - - - 100 - - - 10 - - - 20 - - - 50 - - - Qt::Orientation::Horizontal - - - false - - - false - - - QSlider::TickPosition::NoTicks - - - 10 - - - - - - - 6 - - - 0 - - - 80 - - - - - - - Trophy - - - - - - Disable Trophy Pop-ups - - - - - - - Trophy Key - - - - - - - - 0 - 0 - - - - - 10 - false - - - - - - - - - - - - - - - - - - @@ -711,7 +718,7 @@ - + @@ -725,17 +732,14 @@ Cursor - - - 0 - + 11 11 - + true @@ -762,7 +766,7 @@ - + true @@ -921,18 +925,24 @@ - - - - Enable Motion Controls - - - + + + + Enable Motion Controls + + + true + + + 0 + 0 + + 0 @@ -946,23 +956,6 @@ - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - @@ -1185,11 +1178,14 @@ + + true + Advanced - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop @@ -1446,6 +1442,13 @@ + + + + Open Log Location + + + @@ -1483,10 +1486,16 @@ + + + 0 + 0 + + 16777215 - 70 + 120 diff --git a/src/qt_gui/translations/ar.ts b/src/qt_gui/translations/ar.ts index c1964356a..47bd673b2 100644 --- a/src/qt_gui/translations/ar.ts +++ b/src/qt_gui/translations/ar.ts @@ -247,6 +247,10 @@ Recent Games الألعاب الأخيرة + + Open shadPS4 Folder + Open shadPS4 Folder + Exit خروج @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + عرض حجم اللعبة في القائمة + Show Splash إظهار شاشة البداية @@ -576,6 +584,10 @@ Log Filter مرشح السجل + + Open Log Location + افتح موقع السجل + Input إدخال diff --git a/src/qt_gui/translations/da_DK.ts b/src/qt_gui/translations/da_DK.ts index 51fa2ca5f..91a98abd4 100644 --- a/src/qt_gui/translations/da_DK.ts +++ b/src/qt_gui/translations/da_DK.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Vis vis spilstørrelse i listen + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + Åbn logplacering + Input Indtastning diff --git a/src/qt_gui/translations/de.ts b/src/qt_gui/translations/de.ts index 1653298cf..b1e1d2664 100644 --- a/src/qt_gui/translations/de.ts +++ b/src/qt_gui/translations/de.ts @@ -247,6 +247,10 @@ Recent Games Zuletzt gespielt + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Beenden @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Zeigen Sie die Spielgröße in der Liste + Show Splash Startbildschirm anzeigen @@ -576,6 +584,10 @@ Log Filter Log-Filter + + Open Log Location + Protokollspeicherort öffnen + Input Eingabe diff --git a/src/qt_gui/translations/el.ts b/src/qt_gui/translations/el.ts index 6226e1292..ecda0ede0 100644 --- a/src/qt_gui/translations/el.ts +++ b/src/qt_gui/translations/el.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Εμφάνιση Μεγέθους Παιχνιδιού στη Λίστα + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + Άνοιγμα τοποθεσίας αρχείου καταγραφής + Input Είσοδος diff --git a/src/qt_gui/translations/en.ts b/src/qt_gui/translations/en.ts index b42102302..f873eedff 100644 --- a/src/qt_gui/translations/en.ts +++ b/src/qt_gui/translations/en.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Show Game Size In List + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + Open Log Location + Input Input diff --git a/src/qt_gui/translations/es_ES.ts b/src/qt_gui/translations/es_ES.ts index 021b39ed8..a47f7c577 100644 --- a/src/qt_gui/translations/es_ES.ts +++ b/src/qt_gui/translations/es_ES.ts @@ -247,6 +247,10 @@ Recent Games Juegos recientes + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Salir @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Mostrar Tamaño del Juego en la Lista + Show Splash Mostrar splash @@ -576,6 +584,10 @@ Log Filter Filtro de registro + + Open Log Location + Abrir ubicación del registro + Input Entrada diff --git a/src/qt_gui/translations/fa_IR.ts b/src/qt_gui/translations/fa_IR.ts index ee37cd22a..976e7614e 100644 --- a/src/qt_gui/translations/fa_IR.ts +++ b/src/qt_gui/translations/fa_IR.ts @@ -247,6 +247,10 @@ Recent Games بازی های اخیر + + Open shadPS4 Folder + Open shadPS4 Folder + Exit خروج @@ -540,6 +544,10 @@ Enable Separate Update Folder فعال‌سازی پوشه جداگانه برای به‌روزرسانی + + Show Game Size In List + نمایش اندازه بازی در لیست + Show Splash Splash نمایش @@ -576,6 +584,10 @@ Log Filter Log فیلتر + + Open Log Location + باز کردن مکان گزارش + Input ورودی diff --git a/src/qt_gui/translations/fi.ts b/src/qt_gui/translations/fi.ts index 47c38fc46..abc091b7e 100644 --- a/src/qt_gui/translations/fi.ts +++ b/src/qt_gui/translations/fi.ts @@ -247,6 +247,10 @@ Recent Games Viimeisimmät Pelit + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Sulje @@ -540,6 +544,10 @@ Enable Separate Update Folder Ota Käyttöön Erillinen Päivityshakemisto + + Show Game Size In List + Näytä pelin koko luettelossa + Show Splash Näytä Aloitusnäyttö @@ -576,6 +584,10 @@ Log Filter Lokisuodatin + + Open Log Location + Avaa lokin sijainti + Input Syöttö diff --git a/src/qt_gui/translations/fr.ts b/src/qt_gui/translations/fr.ts index c2a2a64d7..d2a1c5307 100644 --- a/src/qt_gui/translations/fr.ts +++ b/src/qt_gui/translations/fr.ts @@ -247,6 +247,10 @@ Recent Games Jeux récents + + Open shadPS4 Folder + Ouvrir le dossier de shadPS4 + Exit Fermer @@ -540,6 +544,10 @@ Enable Separate Update Folder Dossier séparé pour les mises à jours + + Show Game Size In List + Afficher la taille du jeu dans la liste + Show Splash Afficher l'image du jeu @@ -576,6 +584,10 @@ Log Filter Filtre + + Open Log Location + Ouvrir l'emplacement du journal + Input Entrée diff --git a/src/qt_gui/translations/hu_HU.ts b/src/qt_gui/translations/hu_HU.ts index 677302e01..dff6a3a18 100644 --- a/src/qt_gui/translations/hu_HU.ts +++ b/src/qt_gui/translations/hu_HU.ts @@ -247,6 +247,10 @@ Recent Games Legutóbbi Játékok + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Kilépés @@ -540,6 +544,10 @@ Enable Separate Update Folder Külön Frissítési Mappa Engedélyezése + + Show Game Size In List + Játékméret megjelenítése a listában + Show Splash Indítóképernyő Mutatása @@ -576,6 +584,10 @@ Log Filter Naplózási Filter + + Open Log Location + Napló helyének megnyitása + Input Bemenet diff --git a/src/qt_gui/translations/id.ts b/src/qt_gui/translations/id.ts index 7a1391c0e..e6fb8b5aa 100644 --- a/src/qt_gui/translations/id.ts +++ b/src/qt_gui/translations/id.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Tampilkan Ukuran Game di Daftar + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + Buka Lokasi Log + Input Masukan diff --git a/src/qt_gui/translations/it.ts b/src/qt_gui/translations/it.ts index 8bdb7a8fd..73dbdc603 100644 --- a/src/qt_gui/translations/it.ts +++ b/src/qt_gui/translations/it.ts @@ -247,6 +247,10 @@ Recent Games Giochi Recenti + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Uscita @@ -540,6 +544,10 @@ Enable Separate Update Folder Abilita Cartella Aggiornamenti Separata + + Show Game Size In List + Mostra la dimensione del gioco nell'elenco + Show Splash Mostra Schermata Iniziale @@ -576,6 +584,10 @@ Log Filter Filtro Log + + Open Log Location + Apri posizione del registro + Input Input diff --git a/src/qt_gui/translations/ja_JP.ts b/src/qt_gui/translations/ja_JP.ts index f34747549..e07d4eb25 100644 --- a/src/qt_gui/translations/ja_JP.ts +++ b/src/qt_gui/translations/ja_JP.ts @@ -247,6 +247,10 @@ Recent Games 最近のゲーム + + Open shadPS4 Folder + Open shadPS4 Folder + Exit 終了 @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + ゲームサイズをリストに表示 + Show Splash スプラッシュを表示する @@ -576,6 +584,10 @@ Log Filter ログフィルター + + Open Log Location + ログの場所を開く + Input 入力 diff --git a/src/qt_gui/translations/ko_KR.ts b/src/qt_gui/translations/ko_KR.ts index 410f9bead..560b58340 100644 --- a/src/qt_gui/translations/ko_KR.ts +++ b/src/qt_gui/translations/ko_KR.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + 게임 크기를 목록에 표시 + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + 로그 위치 열기 + Input Input diff --git a/src/qt_gui/translations/lt_LT.ts b/src/qt_gui/translations/lt_LT.ts index 770a9b09e..e2ec1e5c3 100644 --- a/src/qt_gui/translations/lt_LT.ts +++ b/src/qt_gui/translations/lt_LT.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Rodyti žaidimo dydį sąraše + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + Atidaryti žurnalo vietą + Input Įvestis diff --git a/src/qt_gui/translations/nb.ts b/src/qt_gui/translations/nb.ts index 711542773..b94d29b23 100644 --- a/src/qt_gui/translations/nb.ts +++ b/src/qt_gui/translations/nb.ts @@ -247,6 +247,10 @@ Recent Games Nylige spill + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Avslutt @@ -540,6 +544,10 @@ Enable Separate Update Folder Aktiver seperat oppdateringsmappe + + Show Game Size In List + Vis spillstørrelse i listen + Show Splash Vis velkomstbilde @@ -576,6 +584,10 @@ Log Filter Logg filter + + Open Log Location + Åpne loggplassering + Input Inndata diff --git a/src/qt_gui/translations/nl.ts b/src/qt_gui/translations/nl.ts index 2aa996413..add27500f 100644 --- a/src/qt_gui/translations/nl.ts +++ b/src/qt_gui/translations/nl.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Toon grootte van het spel in de lijst + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + Loglocatie openen + Input Invoer diff --git a/src/qt_gui/translations/pl_PL.ts b/src/qt_gui/translations/pl_PL.ts index 20c9861c3..3280beea7 100644 --- a/src/qt_gui/translations/pl_PL.ts +++ b/src/qt_gui/translations/pl_PL.ts @@ -247,6 +247,10 @@ Recent Games Ostatnie gry + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Wyjdź @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Pokaż rozmiar gry na liście + Show Splash Pokaż ekran powitania @@ -576,6 +584,10 @@ Log Filter Filtrowanie dziennika + + Open Log Location + Otwórz lokalizację dziennika + Input Wejście diff --git a/src/qt_gui/translations/pt_BR.ts b/src/qt_gui/translations/pt_BR.ts index 2d623dfbf..b9d889519 100644 --- a/src/qt_gui/translations/pt_BR.ts +++ b/src/qt_gui/translations/pt_BR.ts @@ -247,6 +247,10 @@ Recent Games Jogos Recentes + + Open shadPS4 Folder + Abrir pasta shadPS4 + Exit Sair @@ -540,6 +544,10 @@ Enable Separate Update Folder Habilitar pasta de atualização separada + + Show Game Size In List + Mostrar Tamanho do Jogo na Lista + Show Splash Mostrar Splash Inicial @@ -576,6 +584,10 @@ Log Filter Filtro do Registro + + Open Log Location + Abrir local do log + Input Entradas @@ -1333,4 +1345,4 @@ TB - \ No newline at end of file + diff --git a/src/qt_gui/translations/ro_RO.ts b/src/qt_gui/translations/ro_RO.ts index fbbabfac0..00a9eb179 100644 --- a/src/qt_gui/translations/ro_RO.ts +++ b/src/qt_gui/translations/ro_RO.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Afișează dimensiunea jocului în listă + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + Deschide locația jurnalului + Input Introducere diff --git a/src/qt_gui/translations/ru_RU.ts b/src/qt_gui/translations/ru_RU.ts index e914e4d49..4c90450dd 100644 --- a/src/qt_gui/translations/ru_RU.ts +++ b/src/qt_gui/translations/ru_RU.ts @@ -247,6 +247,10 @@ Recent Games Недавние игры + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Выход @@ -540,6 +544,10 @@ Enable Separate Update Folder Отдельная папка обновлений + + Show Game Size In List + Показать размер игры в списке + Show Splash Показывать заставку @@ -576,6 +584,10 @@ Log Filter Фильтр логов + + Open Log Location + Открыть местоположение журнала + Input Ввод diff --git a/src/qt_gui/translations/sq.ts b/src/qt_gui/translations/sq.ts index d4936170b..768db1e75 100644 --- a/src/qt_gui/translations/sq.ts +++ b/src/qt_gui/translations/sq.ts @@ -247,6 +247,10 @@ Recent Games Lojërat e fundit + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Dil @@ -540,6 +544,10 @@ Enable Separate Update Folder Aktivizo dosjen e ndarë të përditësimit + + Show Game Size In List + Shfaq madhësinë e lojës në listë + Show Splash Shfaq Pamjen e nisjes @@ -576,6 +584,10 @@ Log Filter Filtri i Ditarit + + Open Log Location + Hap vendndodhjen e regjistrit + Input Hyrja diff --git a/src/qt_gui/translations/sv.ts b/src/qt_gui/translations/sv.ts index c1c1204f8..3781ba45c 100644 --- a/src/qt_gui/translations/sv.ts +++ b/src/qt_gui/translations/sv.ts @@ -722,6 +722,10 @@ Recent Games Senaste spel + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Avsluta @@ -1032,6 +1036,10 @@ Enable Separate Update Folder Aktivera separat uppdateringsmapp + + Show Game Size In List + Visa spelstorlek i listan + Show Splash Visa startskärm @@ -1064,6 +1072,10 @@ Log Filter Loggfilter + + Open Log Location + Öppna loggplats + Input Inmatning diff --git a/src/qt_gui/translations/tr_TR.ts b/src/qt_gui/translations/tr_TR.ts index 48f291e99..5e8499073 100644 --- a/src/qt_gui/translations/tr_TR.ts +++ b/src/qt_gui/translations/tr_TR.ts @@ -247,6 +247,10 @@ Recent Games Son Oyunlar + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Çıkış @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Göster oyun boyutunu listede + Show Splash Başlangıç Ekranını Göster @@ -576,6 +584,10 @@ Log Filter Kayıt Filtresi + + Open Log Location + Günlük Konumunu Aç + Input Girdi diff --git a/src/qt_gui/translations/uk_UA.ts b/src/qt_gui/translations/uk_UA.ts index 03aca7cd9..a1c7e97e0 100644 --- a/src/qt_gui/translations/uk_UA.ts +++ b/src/qt_gui/translations/uk_UA.ts @@ -247,6 +247,10 @@ Recent Games Нещодавні ігри + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Вихід @@ -540,6 +544,10 @@ Enable Separate Update Folder Увімкнути окрему папку оновлень + + Show Game Size In List + Показати розмір гри в списку + Show Splash Показувати заставку @@ -576,6 +584,10 @@ Log Filter Фільтр логів + + Open Log Location + Відкрити місце розташування журналу + Input Введення diff --git a/src/qt_gui/translations/vi_VN.ts b/src/qt_gui/translations/vi_VN.ts index 3f92c1836..a579a1983 100644 --- a/src/qt_gui/translations/vi_VN.ts +++ b/src/qt_gui/translations/vi_VN.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + Hiển thị Kích thước Game trong Danh sách + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + Mở vị trí nhật ký + Input Đầu vào diff --git a/src/qt_gui/translations/zh_CN.ts b/src/qt_gui/translations/zh_CN.ts index 60e50a2bc..5450f3dfd 100644 --- a/src/qt_gui/translations/zh_CN.ts +++ b/src/qt_gui/translations/zh_CN.ts @@ -247,6 +247,10 @@ Recent Games 最近启动的游戏 + + Open shadPS4 Folder + Open shadPS4 Folder + Exit 退出 @@ -540,6 +544,10 @@ Enable Separate Update Folder 启用单独的更新目录 + + Show Game Size In List + 显示游戏大小在列表中 + Show Splash 显示启动画面 @@ -558,11 +566,11 @@ Trophy Key - Trophy Key + 奖杯密钥 Trophy - Trophy + 奖杯 Logger @@ -576,6 +584,10 @@ Log Filter 日志过滤 + + Open Log Location + 打开日志位置 + Input 输入 @@ -778,7 +790,7 @@ TrophyKey - Trophy Key:\nKey used to decrypt trophies. Must be obtained from your jailbroken console.\nMust contain only hex characters. + 奖杯密钥:\n用于解密奖杯的密钥。必须从您的越狱主机中获得。\n仅包含十六进制字符。 logTypeGroupBox @@ -1333,4 +1345,4 @@ TB - \ No newline at end of file + diff --git a/src/qt_gui/translations/zh_TW.ts b/src/qt_gui/translations/zh_TW.ts index d1e822b5c..0ce0b4d69 100644 --- a/src/qt_gui/translations/zh_TW.ts +++ b/src/qt_gui/translations/zh_TW.ts @@ -247,6 +247,10 @@ Recent Games Recent Games + + Open shadPS4 Folder + Open shadPS4 Folder + Exit Exit @@ -540,6 +544,10 @@ Enable Separate Update Folder Enable Separate Update Folder + + Show Game Size In List + 顯示遊戲大小在列表中 + Show Splash Show Splash @@ -576,6 +584,10 @@ Log Filter Log Filter + + Open Log Location + 開啟日誌位置 + Input 輸入 diff --git a/src/sdl_window.cpp b/src/sdl_window.cpp index 318b3349b..d1fe6bbab 100644 --- a/src/sdl_window.cpp +++ b/src/sdl_window.cpp @@ -10,6 +10,7 @@ #include "common/assert.h" #include "common/config.h" +#include "core/libraries/kernel/time.h" #include "core/libraries/pad/pad.h" #include "imgui/renderer/imgui_core.h" #include "input/controller.h" @@ -20,47 +21,200 @@ #include #endif +namespace Input { + +using Libraries::Pad::OrbisPadButtonDataOffset; + +static OrbisPadButtonDataOffset SDLGamepadToOrbisButton(u8 button) { + using OPBDO = OrbisPadButtonDataOffset; + + switch (button) { + case SDL_GAMEPAD_BUTTON_DPAD_DOWN: + return OPBDO::Down; + case SDL_GAMEPAD_BUTTON_DPAD_UP: + return OPBDO::Up; + case SDL_GAMEPAD_BUTTON_DPAD_LEFT: + return OPBDO::Left; + case SDL_GAMEPAD_BUTTON_DPAD_RIGHT: + return OPBDO::Right; + case SDL_GAMEPAD_BUTTON_SOUTH: + return OPBDO::Cross; + case SDL_GAMEPAD_BUTTON_NORTH: + return OPBDO::Triangle; + case SDL_GAMEPAD_BUTTON_WEST: + return OPBDO::Square; + case SDL_GAMEPAD_BUTTON_EAST: + return OPBDO::Circle; + case SDL_GAMEPAD_BUTTON_START: + return OPBDO::Options; + case SDL_GAMEPAD_BUTTON_TOUCHPAD: + return OPBDO::TouchPad; + case SDL_GAMEPAD_BUTTON_BACK: + return OPBDO::TouchPad; + case SDL_GAMEPAD_BUTTON_LEFT_SHOULDER: + return OPBDO::L1; + case SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER: + return OPBDO::R1; + case SDL_GAMEPAD_BUTTON_LEFT_STICK: + return OPBDO::L3; + case SDL_GAMEPAD_BUTTON_RIGHT_STICK: + return OPBDO::R3; + default: + return OPBDO::None; + } +} + +static SDL_GamepadAxis InputAxisToSDL(Axis axis) { + switch (axis) { + case Axis::LeftX: + return SDL_GAMEPAD_AXIS_LEFTX; + case Axis::LeftY: + return SDL_GAMEPAD_AXIS_LEFTY; + case Axis::RightX: + return SDL_GAMEPAD_AXIS_RIGHTX; + case Axis::RightY: + return SDL_GAMEPAD_AXIS_RIGHTY; + case Axis::TriggerLeft: + return SDL_GAMEPAD_AXIS_LEFT_TRIGGER; + case Axis::TriggerRight: + return SDL_GAMEPAD_AXIS_RIGHT_TRIGGER; + default: + UNREACHABLE(); + } +} + +SDLInputEngine::~SDLInputEngine() { + if (m_gamepad) { + SDL_CloseGamepad(m_gamepad); + } +} + +void SDLInputEngine::Init() { + if (m_gamepad) { + SDL_CloseGamepad(m_gamepad); + m_gamepad = nullptr; + } + int gamepad_count; + SDL_JoystickID* gamepads = SDL_GetGamepads(&gamepad_count); + if (!gamepads) { + LOG_ERROR(Input, "Cannot get gamepad list: {}", SDL_GetError()); + return; + } + if (gamepad_count == 0) { + LOG_INFO(Input, "No gamepad found!"); + SDL_free(gamepads); + return; + } + LOG_INFO(Input, "Got {} gamepads. Opening the first one.", gamepad_count); + if (!(m_gamepad = SDL_OpenGamepad(gamepads[0]))) { + LOG_ERROR(Input, "Failed to open gamepad 0: {}", SDL_GetError()); + SDL_free(gamepads); + return; + } + if (Config::getIsMotionControlsEnabled()) { + if (SDL_SetGamepadSensorEnabled(m_gamepad, SDL_SENSOR_GYRO, true)) { + m_gyro_poll_rate = SDL_GetGamepadSensorDataRate(m_gamepad, SDL_SENSOR_GYRO); + LOG_INFO(Input, "Gyro initialized, poll rate: {}", m_gyro_poll_rate); + } else { + LOG_ERROR(Input, "Failed to initialize gyro controls for gamepad"); + } + if (SDL_SetGamepadSensorEnabled(m_gamepad, SDL_SENSOR_ACCEL, true)) { + m_accel_poll_rate = SDL_GetGamepadSensorDataRate(m_gamepad, SDL_SENSOR_ACCEL); + LOG_INFO(Input, "Accel initialized, poll rate: {}", m_accel_poll_rate); + } else { + LOG_ERROR(Input, "Failed to initialize accel controls for gamepad"); + }; + } + SDL_free(gamepads); + SetLightBarRGB(0, 0, 255); +} + +void SDLInputEngine::SetLightBarRGB(u8 r, u8 g, u8 b) { + if (m_gamepad) { + SDL_SetGamepadLED(m_gamepad, r, g, b); + } +} + +void SDLInputEngine::SetVibration(u8 smallMotor, u8 largeMotor) { + if (m_gamepad) { + const auto low_freq = (smallMotor / 255.0f) * 0xFFFF; + const auto high_freq = (largeMotor / 255.0f) * 0xFFFF; + SDL_RumbleGamepad(m_gamepad, low_freq, high_freq, -1); + } +} + +State SDLInputEngine::ReadState() { + State state{}; + state.time = Libraries::Kernel::sceKernelGetProcessTime(); + + // Buttons + for (u8 i = 0; i < SDL_GAMEPAD_BUTTON_COUNT; ++i) { + auto orbisButton = SDLGamepadToOrbisButton(i); + if (orbisButton == OrbisPadButtonDataOffset::None) { + continue; + } + state.OnButton(orbisButton, SDL_GetGamepadButton(m_gamepad, (SDL_GamepadButton)i)); + } + + // Axes + for (int i = 0; i < static_cast(Axis::AxisMax); ++i) { + const auto axis = static_cast(i); + const auto value = SDL_GetGamepadAxis(m_gamepad, InputAxisToSDL(axis)); + switch (axis) { + case Axis::TriggerLeft: + case Axis::TriggerRight: + state.OnAxis(axis, GetAxis(0, 0x8000, value)); + break; + default: + state.OnAxis(axis, GetAxis(-0x8000, 0x8000, value)); + break; + } + } + + // Touchpad + if (SDL_GetNumGamepadTouchpads(m_gamepad) > 0) { + for (int finger = 0; finger < 2; ++finger) { + bool down; + float x, y; + if (SDL_GetGamepadTouchpadFinger(m_gamepad, 0, finger, &down, &x, &y, NULL)) { + state.OnTouchpad(finger, down, x, y); + } + } + } + + // Gyro + if (SDL_GamepadHasSensor(m_gamepad, SDL_SENSOR_GYRO)) { + float gyro[3]; + if (SDL_GetGamepadSensorData(m_gamepad, SDL_SENSOR_GYRO, gyro, 3)) { + state.OnGyro(gyro); + } + } + + // Accel + if (SDL_GamepadHasSensor(m_gamepad, SDL_SENSOR_ACCEL)) { + float accel[3]; + if (SDL_GetGamepadSensorData(m_gamepad, SDL_SENSOR_ACCEL, accel, 3)) { + state.OnAccel(accel); + } + } + + return state; +} + +float SDLInputEngine::GetGyroPollRate() const { + return m_gyro_poll_rate; +} + +float SDLInputEngine::GetAccelPollRate() const { + return m_accel_poll_rate; +} + +} // namespace Input + namespace Frontend { using namespace Libraries::Pad; -static OrbisPadButtonDataOffset SDLGamepadToOrbisButton(u8 button) { - switch (button) { - case SDL_GAMEPAD_BUTTON_DPAD_DOWN: - return OrbisPadButtonDataOffset::Down; - case SDL_GAMEPAD_BUTTON_DPAD_UP: - return OrbisPadButtonDataOffset::Up; - case SDL_GAMEPAD_BUTTON_DPAD_LEFT: - return OrbisPadButtonDataOffset::Left; - case SDL_GAMEPAD_BUTTON_DPAD_RIGHT: - return OrbisPadButtonDataOffset::Right; - case SDL_GAMEPAD_BUTTON_SOUTH: - return OrbisPadButtonDataOffset::Cross; - case SDL_GAMEPAD_BUTTON_NORTH: - return OrbisPadButtonDataOffset::Triangle; - case SDL_GAMEPAD_BUTTON_WEST: - return OrbisPadButtonDataOffset::Square; - case SDL_GAMEPAD_BUTTON_EAST: - return OrbisPadButtonDataOffset::Circle; - case SDL_GAMEPAD_BUTTON_START: - return OrbisPadButtonDataOffset::Options; - case SDL_GAMEPAD_BUTTON_TOUCHPAD: - return OrbisPadButtonDataOffset::TouchPad; - case SDL_GAMEPAD_BUTTON_BACK: - return OrbisPadButtonDataOffset::TouchPad; - case SDL_GAMEPAD_BUTTON_LEFT_SHOULDER: - return OrbisPadButtonDataOffset::L1; - case SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER: - return OrbisPadButtonDataOffset::R1; - case SDL_GAMEPAD_BUTTON_LEFT_STICK: - return OrbisPadButtonDataOffset::L3; - case SDL_GAMEPAD_BUTTON_RIGHT_STICK: - return OrbisPadButtonDataOffset::R3; - default: - return OrbisPadButtonDataOffset::None; - } -} - static Uint32 SDLCALL PollController(void* userdata, SDL_TimerID timer_id, Uint32 interval) { auto* controller = reinterpret_cast(userdata); return controller->Poll(); @@ -112,7 +266,7 @@ WindowSDL::WindowSDL(s32 width_, s32 height_, Input::GameController* controller_ SDL_SetWindowFullscreen(window, Config::getIsFullscreen()); SDL_InitSubSystem(SDL_INIT_GAMEPAD); - controller->TryOpenSDLController(); + controller->SetEngine(std::make_unique()); #if defined(SDL_PLATFORM_WIN32) window_info.type = WindowSystemType::Windows; @@ -205,7 +359,9 @@ void WindowSDL::InitTimers() { void WindowSDL::RequestKeyboard() { if (keyboard_grab == 0) { - SDL_StartTextInput(window); + SDL_RunOnMainThread( + [](void* userdata) { SDL_StartTextInput(static_cast(userdata)); }, window, + true); } keyboard_grab++; } @@ -214,7 +370,9 @@ void WindowSDL::ReleaseKeyboard() { ASSERT(keyboard_grab > 0); keyboard_grab--; if (keyboard_grab == 0) { - SDL_StopTextInput(window); + SDL_RunOnMainThread( + [](void* userdata) { SDL_StopTextInput(static_cast(userdata)); }, window, + true); } } @@ -418,7 +576,7 @@ void WindowSDL::OnGamepadEvent(const SDL_Event* event) { switch (event->type) { case SDL_EVENT_GAMEPAD_ADDED: case SDL_EVENT_GAMEPAD_REMOVED: - controller->TryOpenSDLController(); + controller->SetEngine(std::make_unique()); break; case SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN: case SDL_EVENT_GAMEPAD_TOUCHPAD_UP: @@ -429,7 +587,7 @@ void WindowSDL::OnGamepadEvent(const SDL_Event* event) { break; case SDL_EVENT_GAMEPAD_BUTTON_DOWN: case SDL_EVENT_GAMEPAD_BUTTON_UP: { - button = SDLGamepadToOrbisButton(event->gbutton.button); + button = Input::SDLGamepadToOrbisButton(event->gbutton.button); if (button == OrbisPadButtonDataOffset::None) { break; } diff --git a/src/sdl_window.h b/src/sdl_window.h index 78d4bbc39..3ab3c3613 100644 --- a/src/sdl_window.h +++ b/src/sdl_window.h @@ -5,14 +5,32 @@ #include #include "common/types.h" +#include "input/controller.h" struct SDL_Window; struct SDL_Gamepad; union SDL_Event; namespace Input { -class GameController; -} + +class SDLInputEngine : public Engine { +public: + ~SDLInputEngine() override; + void Init() override; + void SetLightBarRGB(u8 r, u8 g, u8 b) override; + void SetVibration(u8 smallMotor, u8 largeMotor) override; + float GetGyroPollRate() const override; + float GetAccelPollRate() const override; + State ReadState() override; + +private: + SDL_Gamepad* m_gamepad = nullptr; + + float m_gyro_poll_rate{}; + float m_accel_poll_rate{}; +}; + +} // namespace Input namespace Frontend { diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp index c3d937fe7..e2a969b61 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp @@ -172,20 +172,18 @@ Id EmitImageQueryDimensions(EmitContext& ctx, IR::Inst* inst, u32 handle, Id lod const auto& texture = ctx.images[handle & 0xFFFF]; const Id image = ctx.OpLoad(texture.image_type, texture.id); const auto sharp = ctx.info.images[handle & 0xFFFF].GetSharp(ctx.info); - const auto type = sharp.GetBoundType(); const Id zero = ctx.u32_zero_value; const auto mips{[&] { return has_mips ? ctx.OpImageQueryLevels(ctx.U32[1], image) : zero; }}; - const bool uses_lod{type != AmdGpu::ImageType::Color2DMsaa && !texture.is_storage}; + const bool uses_lod{texture.view_type != AmdGpu::ImageType::Color2DMsaa && !texture.is_storage}; const auto query{[&](Id type) { return uses_lod ? ctx.OpImageQuerySizeLod(type, image, lod) : ctx.OpImageQuerySize(type, image); }}; - switch (type) { + switch (texture.view_type) { case AmdGpu::ImageType::Color1D: return ctx.OpCompositeConstruct(ctx.U32[4], query(ctx.U32[1]), zero, zero, mips()); case AmdGpu::ImageType::Color1DArray: case AmdGpu::ImageType::Color2D: - case AmdGpu::ImageType::Cube: case AmdGpu::ImageType::Color2DMsaa: return ctx.OpCompositeConstruct(ctx.U32[4], query(ctx.U32[2]), zero, mips()); case AmdGpu::ImageType::Color2DArray: @@ -257,4 +255,12 @@ void EmitImageWrite(EmitContext& ctx, IR::Inst* inst, u32 handle, Id coords, Id ctx.OpImageWrite(image, coords, texel, operands.mask, operands.operands); } +Id EmitCubeFaceIndex(EmitContext& ctx, IR::Inst* inst, Id cube_coords) { + if (ctx.profile.supports_native_cube_calc) { + return ctx.OpCubeFaceIndexAMD(ctx.F32[1], cube_coords); + } else { + UNREACHABLE_MSG("SPIR-V Instruction"); + } +} + } // namespace Shader::Backend::SPIRV diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h b/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h index 0d9fcff46..f0bb9fd7e 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h +++ b/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h @@ -439,6 +439,7 @@ Id EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id coords, Id EmitImageAtomicOr32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id coords, Id value); Id EmitImageAtomicXor32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id coords, Id value); Id EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id coords, Id value); +Id EmitCubeFaceIndex(EmitContext& ctx, IR::Inst* inst, Id cube_coords); Id EmitLaneId(EmitContext& ctx); Id EmitWarpId(EmitContext& ctx); Id EmitQuadShuffle(EmitContext& ctx, Id value, Id index); diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp index 4a22ba09f..a0a3ed8ff 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp @@ -24,10 +24,48 @@ void ConvertDepthMode(EmitContext& ctx) { ctx.OpStore(ctx.output_position, vector); } +void ConvertPositionToClipSpace(EmitContext& ctx) { + const Id type{ctx.F32[1]}; + Id position{ctx.OpLoad(ctx.F32[4], ctx.output_position)}; + const Id x{ctx.OpCompositeExtract(type, position, 0u)}; + const Id y{ctx.OpCompositeExtract(type, position, 1u)}; + const Id z{ctx.OpCompositeExtract(type, position, 2u)}; + const Id w{ctx.OpCompositeExtract(type, position, 3u)}; + const Id xoffset_ptr{ctx.OpAccessChain(ctx.TypePointer(spv::StorageClass::PushConstant, type), + ctx.push_data_block, + ctx.ConstU32(PushData::XOffsetIndex))}; + const Id xoffset{ctx.OpLoad(type, xoffset_ptr)}; + const Id yoffset_ptr{ctx.OpAccessChain(ctx.TypePointer(spv::StorageClass::PushConstant, type), + ctx.push_data_block, + ctx.ConstU32(PushData::YOffsetIndex))}; + const Id yoffset{ctx.OpLoad(type, yoffset_ptr)}; + const Id xscale_ptr{ctx.OpAccessChain(ctx.TypePointer(spv::StorageClass::PushConstant, type), + ctx.push_data_block, + ctx.ConstU32(PushData::XScaleIndex))}; + const Id xscale{ctx.OpLoad(type, xscale_ptr)}; + const Id yscale_ptr{ctx.OpAccessChain(ctx.TypePointer(spv::StorageClass::PushConstant, type), + ctx.push_data_block, + ctx.ConstU32(PushData::YScaleIndex))}; + const Id yscale{ctx.OpLoad(type, yscale_ptr)}; + const Id vport_w = + ctx.Constant(type, float(std::min(ctx.profile.max_viewport_width / 2, 8_KB))); + const Id wnd_x = ctx.OpFAdd(type, ctx.OpFMul(type, x, xscale), xoffset); + const Id ndc_x = ctx.OpFSub(type, ctx.OpFDiv(type, wnd_x, vport_w), ctx.Constant(type, 1.f)); + const Id vport_h = + ctx.Constant(type, float(std::min(ctx.profile.max_viewport_height / 2, 8_KB))); + const Id wnd_y = ctx.OpFAdd(type, ctx.OpFMul(type, y, yscale), yoffset); + const Id ndc_y = ctx.OpFSub(type, ctx.OpFDiv(type, wnd_y, vport_h), ctx.Constant(type, 1.f)); + const Id vector{ctx.OpCompositeConstruct(ctx.F32[4], std::array({ndc_x, ndc_y, z, w}))}; + ctx.OpStore(ctx.output_position, vector); +} + void EmitEpilogue(EmitContext& ctx) { if (ctx.stage == Stage::Vertex && ctx.runtime_info.vs_info.emulate_depth_negative_one_to_one) { ConvertDepthMode(ctx); } + if (ctx.stage == Stage::Vertex && ctx.runtime_info.vs_info.clip_disable) { + ConvertPositionToClipSpace(ctx); + } } void EmitDiscard(EmitContext& ctx) { diff --git a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp index 575bf91f7..b0bf5aa0a 100644 --- a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp +++ b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp @@ -395,7 +395,7 @@ void EmitContext::DefineInputs() { DefineVariable(U32[1], spv::BuiltIn::PatchVertices, spv::StorageClass::Input); primitive_id = DefineVariable(U32[1], spv::BuiltIn::PrimitiveId, spv::StorageClass::Input); - const u32 num_attrs = runtime_info.hs_info.ls_stride >> 4; + const u32 num_attrs = Common::AlignUp(runtime_info.hs_info.ls_stride, 16) >> 4; if (num_attrs > 0) { const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))}; // The input vertex count isn't statically known, so make length 32 (what glslang does) @@ -409,7 +409,7 @@ void EmitContext::DefineInputs() { tess_coord = DefineInput(F32[3], std::nullopt, spv::BuiltIn::TessCoord); primitive_id = DefineVariable(U32[1], spv::BuiltIn::PrimitiveId, spv::StorageClass::Input); - const u32 num_attrs = runtime_info.vs_info.hs_output_cp_stride >> 4; + const u32 num_attrs = Common::AlignUp(runtime_info.vs_info.hs_output_cp_stride, 16) >> 4; if (num_attrs > 0) { const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))}; // The input vertex count isn't statically known, so make length 32 (what glslang does) @@ -418,7 +418,7 @@ void EmitContext::DefineInputs() { Name(input_attr_array, "in_attrs"); } - u32 patch_base_location = runtime_info.vs_info.hs_output_cp_stride >> 4; + const u32 patch_base_location = num_attrs; for (size_t index = 0; index < 30; ++index) { if (!(info.uses_patches & (1U << index))) { continue; @@ -453,7 +453,7 @@ void EmitContext::DefineOutputs() { DefineVariable(type, spv::BuiltIn::CullDistance, spv::StorageClass::Output); } if (stage == Shader::Stage::Local && runtime_info.ls_info.links_with_tcs) { - const u32 num_attrs = runtime_info.ls_info.ls_stride >> 4; + const u32 num_attrs = Common::AlignUp(runtime_info.ls_info.ls_stride, 16) >> 4; if (num_attrs > 0) { const Id type{TypeArray(F32[4], ConstU32(num_attrs))}; output_attr_array = DefineOutput(type, 0); @@ -488,7 +488,7 @@ void EmitContext::DefineOutputs() { Decorate(output_tess_level_inner, spv::Decoration::Patch); } - const u32 num_attrs = runtime_info.hs_info.hs_output_cp_stride >> 4; + const u32 num_attrs = Common::AlignUp(runtime_info.hs_info.hs_output_cp_stride, 16) >> 4; if (num_attrs > 0) { const Id per_vertex_type{TypeArray(F32[4], ConstU32(num_attrs))}; // The input vertex count isn't statically known, so make length 32 (what glslang does) @@ -498,7 +498,7 @@ void EmitContext::DefineOutputs() { Name(output_attr_array, "out_attrs"); } - u32 patch_base_location = runtime_info.hs_info.hs_output_cp_stride >> 4; + const u32 patch_base_location = num_attrs; for (size_t index = 0; index < 30; ++index) { if (!(info.uses_patches & (1U << index))) { continue; @@ -568,25 +568,34 @@ void EmitContext::DefineOutputs() { void EmitContext::DefinePushDataBlock() { // Create push constants block for instance steps rates - const Id struct_type{Name( - TypeStruct(U32[1], U32[1], U32[4], U32[4], U32[4], U32[4], U32[4], U32[4]), "AuxData")}; + const Id struct_type{Name(TypeStruct(U32[1], U32[1], U32[4], U32[4], U32[4], U32[4], U32[4], + U32[4], F32[1], F32[1], F32[1], F32[1]), + "AuxData")}; Decorate(struct_type, spv::Decoration::Block); MemberName(struct_type, 0, "sr0"); MemberName(struct_type, 1, "sr1"); - MemberName(struct_type, 2, "buf_offsets0"); - MemberName(struct_type, 3, "buf_offsets1"); - MemberName(struct_type, 4, "ud_regs0"); - MemberName(struct_type, 5, "ud_regs1"); - MemberName(struct_type, 6, "ud_regs2"); - MemberName(struct_type, 7, "ud_regs3"); + MemberName(struct_type, Shader::PushData::BufOffsetIndex + 0, "buf_offsets0"); + MemberName(struct_type, Shader::PushData::BufOffsetIndex + 1, "buf_offsets1"); + MemberName(struct_type, Shader::PushData::UdRegsIndex + 0, "ud_regs0"); + MemberName(struct_type, Shader::PushData::UdRegsIndex + 1, "ud_regs1"); + MemberName(struct_type, Shader::PushData::UdRegsIndex + 2, "ud_regs2"); + MemberName(struct_type, Shader::PushData::UdRegsIndex + 3, "ud_regs3"); + MemberName(struct_type, Shader::PushData::XOffsetIndex, "xoffset"); + MemberName(struct_type, Shader::PushData::YOffsetIndex, "yoffset"); + MemberName(struct_type, Shader::PushData::XScaleIndex, "xscale"); + MemberName(struct_type, Shader::PushData::YScaleIndex, "yscale"); MemberDecorate(struct_type, 0, spv::Decoration::Offset, 0U); MemberDecorate(struct_type, 1, spv::Decoration::Offset, 4U); - MemberDecorate(struct_type, 2, spv::Decoration::Offset, 8U); - MemberDecorate(struct_type, 3, spv::Decoration::Offset, 24U); - MemberDecorate(struct_type, 4, spv::Decoration::Offset, 40U); - MemberDecorate(struct_type, 5, spv::Decoration::Offset, 56U); - MemberDecorate(struct_type, 6, spv::Decoration::Offset, 72U); - MemberDecorate(struct_type, 7, spv::Decoration::Offset, 88U); + MemberDecorate(struct_type, Shader::PushData::BufOffsetIndex + 0, spv::Decoration::Offset, 8U); + MemberDecorate(struct_type, Shader::PushData::BufOffsetIndex + 1, spv::Decoration::Offset, 24U); + MemberDecorate(struct_type, Shader::PushData::UdRegsIndex + 0, spv::Decoration::Offset, 40U); + MemberDecorate(struct_type, Shader::PushData::UdRegsIndex + 1, spv::Decoration::Offset, 56U); + MemberDecorate(struct_type, Shader::PushData::UdRegsIndex + 2, spv::Decoration::Offset, 72U); + MemberDecorate(struct_type, Shader::PushData::UdRegsIndex + 3, spv::Decoration::Offset, 88U); + MemberDecorate(struct_type, Shader::PushData::XOffsetIndex, spv::Decoration::Offset, 104U); + MemberDecorate(struct_type, Shader::PushData::YOffsetIndex, spv::Decoration::Offset, 108U); + MemberDecorate(struct_type, Shader::PushData::XScaleIndex, spv::Decoration::Offset, 112U); + MemberDecorate(struct_type, Shader::PushData::YScaleIndex, spv::Decoration::Offset, 116U); push_data_block = DefineVar(struct_type, spv::StorageClass::PushConstant); Name(push_data_block, "push_data"); interfaces.push_back(push_data_block); @@ -773,8 +782,8 @@ spv::ImageFormat GetFormat(const AmdGpu::Image& image) { Id ImageType(EmitContext& ctx, const ImageResource& desc, Id sampled_type) { const auto image = desc.GetSharp(ctx.info); const auto format = desc.is_atomic ? GetFormat(image) : spv::ImageFormat::Unknown; - const auto type = image.GetBoundType(); - const u32 sampled = desc.IsStorage(image) ? 2 : 1; + const auto type = image.GetViewType(desc.is_array); + const u32 sampled = desc.is_written ? 2 : 1; switch (type) { case AmdGpu::ImageType::Color1D: return ctx.TypeImage(sampled_type, spv::Dim::Dim1D, false, false, false, sampled, format); @@ -788,9 +797,6 @@ Id ImageType(EmitContext& ctx, const ImageResource& desc, Id sampled_type) { return ctx.TypeImage(sampled_type, spv::Dim::Dim2D, false, false, true, sampled, format); case AmdGpu::ImageType::Color3D: return ctx.TypeImage(sampled_type, spv::Dim::Dim3D, false, false, false, sampled, format); - case AmdGpu::ImageType::Cube: - return ctx.TypeImage(sampled_type, spv::Dim::Cube, false, desc.is_array, false, sampled, - format); default: break; } @@ -802,7 +808,7 @@ void EmitContext::DefineImagesAndSamplers() { const auto sharp = image_desc.GetSharp(info); const auto nfmt = sharp.GetNumberFmt(); const bool is_integer = AmdGpu::IsInteger(nfmt); - const bool is_storage = image_desc.IsStorage(sharp); + const bool is_storage = image_desc.is_written; const VectorIds& data_types = GetAttributeType(*this, nfmt); const Id sampled_type = data_types[1]; const Id image_type{ImageType(*this, image_desc, sampled_type)}; @@ -817,6 +823,7 @@ void EmitContext::DefineImagesAndSamplers() { .sampled_type = is_storage ? sampled_type : TypeSampledImage(image_type), .pointer_type = pointer_type, .image_type = image_type, + .view_type = sharp.GetViewType(image_desc.is_array), .is_integer = is_integer, .is_storage = is_storage, }); @@ -849,6 +856,10 @@ void EmitContext::DefineSharedMemory() { if (shared_memory_size == 0) { shared_memory_size = DefaultSharedMemSize; } + + const u32 max_shared_memory_size = runtime_info.cs_info.max_shared_memory_size; + ASSERT(shared_memory_size <= max_shared_memory_size); + const u32 num_elements{Common::DivCeil(shared_memory_size, 4U)}; const Id type{TypeArray(U32[1], ConstU32(num_elements))}; shared_memory_u32_type = TypePointer(spv::StorageClass::Workgroup, type); diff --git a/src/shader_recompiler/backend/spirv/spirv_emit_context.h b/src/shader_recompiler/backend/spirv/spirv_emit_context.h index 583d96b99..f552055c0 100644 --- a/src/shader_recompiler/backend/spirv/spirv_emit_context.h +++ b/src/shader_recompiler/backend/spirv/spirv_emit_context.h @@ -222,6 +222,7 @@ public: Id sampled_type; Id pointer_type; Id image_type; + AmdGpu::ImageType view_type; bool is_integer = false; bool is_storage = false; }; diff --git a/src/shader_recompiler/frontend/control_flow_graph.cpp b/src/shader_recompiler/frontend/control_flow_graph.cpp index 0816ec088..ec5c117f7 100644 --- a/src/shader_recompiler/frontend/control_flow_graph.cpp +++ b/src/shader_recompiler/frontend/control_flow_graph.cpp @@ -47,13 +47,26 @@ static IR::Condition MakeCondition(const GcnInst& inst) { } } -static bool IgnoresExecMask(Opcode opcode) { - switch (opcode) { - case Opcode::V_WRITELANE_B32: +static bool IgnoresExecMask(const GcnInst& inst) { + // EXEC mask does not affect scalar instructions or branches. + switch (inst.category) { + case InstCategory::ScalarALU: + case InstCategory::ScalarMemory: + case InstCategory::FlowControl: return true; default: - return false; + break; } + // Read/Write Lane instructions are not affected either. + switch (inst.opcode) { + case Opcode::V_READLANE_B32: + case Opcode::V_WRITELANE_B32: + case Opcode::V_READFIRSTLANE_B32: + return true; + default: + break; + } + return false; } static constexpr size_t LabelReserveSize = 32; @@ -147,8 +160,7 @@ void CFG::EmitDivergenceLabels() { // If all instructions in the scope ignore exec masking, we shouldn't insert a // scope. const auto start = inst_list.begin() + curr_begin + 1; - if (!std::ranges::all_of(start, inst_list.begin() + index, IgnoresExecMask, - &GcnInst::opcode)) { + if (!std::ranges::all_of(start, inst_list.begin() + index, IgnoresExecMask)) { // Add a label to the instruction right after the open scope call. // It is the start of a new basic block. const auto& save_inst = inst_list[curr_begin]; diff --git a/src/shader_recompiler/frontend/translate/translate.h b/src/shader_recompiler/frontend/translate/translate.h index 7a0b736d4..bef61f997 100644 --- a/src/shader_recompiler/frontend/translate/translate.h +++ b/src/shader_recompiler/frontend/translate/translate.h @@ -301,6 +301,9 @@ private: IR::U32 VMovRelSHelper(u32 src_vgprno, const IR::U32 m0); void VMovRelDHelper(u32 dst_vgprno, const IR::U32 src_val, const IR::U32 m0); + IR::F32 SelectCubeResult(const IR::F32& x, const IR::F32& y, const IR::F32& z, + const IR::F32& x_res, const IR::F32& y_res, const IR::F32& z_res); + void LogMissingOpcode(const GcnInst& inst); private: diff --git a/src/shader_recompiler/frontend/translate/vector_alu.cpp b/src/shader_recompiler/frontend/translate/vector_alu.cpp index 7fa83eebb..b2863f6a8 100644 --- a/src/shader_recompiler/frontend/translate/vector_alu.cpp +++ b/src/shader_recompiler/frontend/translate/vector_alu.cpp @@ -3,6 +3,7 @@ #include "shader_recompiler/frontend/opcodes.h" #include "shader_recompiler/frontend/translate/translate.h" +#include "shader_recompiler/profile.h" namespace Shader::Gcn { @@ -843,7 +844,7 @@ void Translator::V_FREXP_MANT_F64(const GcnInst& inst) { } void Translator::V_FRACT_F64(const GcnInst& inst) { - const IR::F32 src0{GetSrc64(inst.src[0])}; + const IR::F64 src0{GetSrc64(inst.src[0])}; SetDst64(inst.dst[0], ir.FPFract(src0)); } @@ -1042,20 +1043,81 @@ void Translator::V_MAD_U32_U24(const GcnInst& inst) { V_MAD_I32_I24(inst, false); } +IR::F32 Translator::SelectCubeResult(const IR::F32& x, const IR::F32& y, const IR::F32& z, + const IR::F32& x_res, const IR::F32& y_res, + const IR::F32& z_res) { + const auto abs_x = ir.FPAbs(x); + const auto abs_y = ir.FPAbs(y); + const auto abs_z = ir.FPAbs(z); + + const auto z_face_cond{ + ir.LogicalAnd(ir.FPGreaterThanEqual(abs_z, abs_x), ir.FPGreaterThanEqual(abs_z, abs_y))}; + const auto y_face_cond{ir.FPGreaterThanEqual(abs_y, abs_x)}; + + return IR::F32{ir.Select(z_face_cond, z_res, ir.Select(y_face_cond, y_res, x_res))}; +} + void Translator::V_CUBEID_F32(const GcnInst& inst) { - SetDst(inst.dst[0], GetSrc(inst.src[2])); + const auto x = GetSrc(inst.src[0]); + const auto y = GetSrc(inst.src[1]); + const auto z = GetSrc(inst.src[2]); + + IR::F32 result; + if (profile.supports_native_cube_calc) { + result = ir.CubeFaceIndex(ir.CompositeConstruct(x, y, z)); + } else { + const auto x_neg_cond{ir.FPLessThan(x, ir.Imm32(0.f))}; + const auto y_neg_cond{ir.FPLessThan(y, ir.Imm32(0.f))}; + const auto z_neg_cond{ir.FPLessThan(z, ir.Imm32(0.f))}; + const IR::F32 x_face{ir.Select(x_neg_cond, ir.Imm32(1.f), ir.Imm32(0.f))}; + const IR::F32 y_face{ir.Select(y_neg_cond, ir.Imm32(3.f), ir.Imm32(2.f))}; + const IR::F32 z_face{ir.Select(z_neg_cond, ir.Imm32(5.f), ir.Imm32(4.f))}; + + result = SelectCubeResult(x, y, z, x_face, y_face, z_face); + } + SetDst(inst.dst[0], result); } void Translator::V_CUBESC_F32(const GcnInst& inst) { - SetDst(inst.dst[0], GetSrc(inst.src[0])); + const auto x = GetSrc(inst.src[0]); + const auto y = GetSrc(inst.src[1]); + const auto z = GetSrc(inst.src[2]); + + const auto x_neg_cond{ir.FPLessThan(x, ir.Imm32(0.f))}; + const auto z_neg_cond{ir.FPLessThan(z, ir.Imm32(0.f))}; + const IR::F32 x_sc{ir.Select(x_neg_cond, z, ir.FPNeg(z))}; + const IR::F32 y_sc{x}; + const IR::F32 z_sc{ir.Select(z_neg_cond, ir.FPNeg(x), x)}; + + const auto result{SelectCubeResult(x, y, z, x_sc, y_sc, z_sc)}; + SetDst(inst.dst[0], result); } void Translator::V_CUBETC_F32(const GcnInst& inst) { - SetDst(inst.dst[0], GetSrc(inst.src[1])); + const auto x = GetSrc(inst.src[0]); + const auto y = GetSrc(inst.src[1]); + const auto z = GetSrc(inst.src[2]); + + const auto y_neg_cond{ir.FPLessThan(y, ir.Imm32(0.f))}; + const IR::F32 x_z_tc{ir.FPNeg(y)}; + const IR::F32 y_tc{ir.Select(y_neg_cond, ir.FPNeg(z), z)}; + + const auto result{SelectCubeResult(x, y, z, x_z_tc, y_tc, x_z_tc)}; + SetDst(inst.dst[0], result); } void Translator::V_CUBEMA_F32(const GcnInst& inst) { - SetDst(inst.dst[0], ir.Imm32(1.f)); + const auto x = GetSrc(inst.src[0]); + const auto y = GetSrc(inst.src[1]); + const auto z = GetSrc(inst.src[2]); + + const auto two{ir.Imm32(2.f)}; + const IR::F32 x_major_axis{ir.FPMul(x, two)}; + const IR::F32 y_major_axis{ir.FPMul(y, two)}; + const IR::F32 z_major_axis{ir.FPMul(z, two)}; + + const auto result{SelectCubeResult(x, y, z, x_major_axis, y_major_axis, z_major_axis)}; + SetDst(inst.dst[0], result); } void Translator::V_BFE_U32(bool is_signed, const GcnInst& inst) { diff --git a/src/shader_recompiler/frontend/translate/vector_memory.cpp b/src/shader_recompiler/frontend/translate/vector_memory.cpp index c5be08b7d..8fa0f3f87 100644 --- a/src/shader_recompiler/frontend/translate/vector_memory.cpp +++ b/src/shader_recompiler/frontend/translate/vector_memory.cpp @@ -164,8 +164,8 @@ void Translator::EmitVectorMemory(const GcnInst& inst) { } void Translator::BUFFER_LOAD(u32 num_dwords, bool is_typed, const GcnInst& inst) { - const auto& mtbuf = inst.control.mtbuf; - const bool is_ring = mtbuf.glc && mtbuf.slc; + const auto& mubuf = inst.control.mubuf; + const bool is_ring = mubuf.glc && mubuf.slc; const IR::VectorReg vaddr{inst.src[0].code}; const IR::ScalarReg sharp{inst.src[2].code * 4}; const IR::Value soffset{GetSrc(inst.src[3])}; @@ -178,22 +178,23 @@ void Translator::BUFFER_LOAD(u32 num_dwords, bool is_typed, const GcnInst& inst) if (is_ring) { return ir.CompositeConstruct(ir.GetVectorReg(vaddr), soffset); } - if (mtbuf.idxen && mtbuf.offen) { + if (mubuf.idxen && mubuf.offen) { return ir.CompositeConstruct(ir.GetVectorReg(vaddr), ir.GetVectorReg(vaddr + 1)); } - if (mtbuf.idxen || mtbuf.offen) { + if (mubuf.idxen || mubuf.offen) { return ir.GetVectorReg(vaddr); } return {}; }(); IR::BufferInstInfo buffer_info{}; - buffer_info.index_enable.Assign(mtbuf.idxen); - buffer_info.offset_enable.Assign(mtbuf.offen); - buffer_info.inst_offset.Assign(mtbuf.offset); - buffer_info.globally_coherent.Assign(mtbuf.glc); - buffer_info.system_coherent.Assign(mtbuf.slc); + buffer_info.index_enable.Assign(mubuf.idxen); + buffer_info.offset_enable.Assign(mubuf.offen); + buffer_info.inst_offset.Assign(mubuf.offset); + buffer_info.globally_coherent.Assign(mubuf.glc); + buffer_info.system_coherent.Assign(mubuf.slc); if (is_typed) { + const auto& mtbuf = inst.control.mtbuf; const auto dmft = static_cast(mtbuf.dfmt); const auto nfmt = static_cast(mtbuf.nfmt); ASSERT(nfmt == AmdGpu::NumberFormat::Float && @@ -220,9 +221,11 @@ void Translator::BUFFER_LOAD_FORMAT(u32 num_dwords, const GcnInst& inst) { const auto& mubuf = inst.control.mubuf; const IR::VectorReg vaddr{inst.src[0].code}; const IR::ScalarReg sharp{inst.src[2].code * 4}; - ASSERT_MSG(!mubuf.offen && mubuf.offset == 0, "Offsets for image buffers are not supported"); const IR::Value address = [&] -> IR::Value { - if (mubuf.idxen) { + if (mubuf.idxen && mubuf.offen) { + return ir.CompositeConstruct(ir.GetVectorReg(vaddr), ir.GetVectorReg(vaddr + 1)); + } + if (mubuf.idxen || mubuf.offen) { return ir.GetVectorReg(vaddr); } return {}; @@ -230,13 +233,17 @@ void Translator::BUFFER_LOAD_FORMAT(u32 num_dwords, const GcnInst& inst) { const IR::Value soffset{GetSrc(inst.src[3])}; ASSERT_MSG(soffset.IsImmediate() && soffset.U32() == 0, "Non immediate offset not supported"); - IR::BufferInstInfo info{}; - info.index_enable.Assign(mubuf.idxen); + IR::BufferInstInfo buffer_info{}; + buffer_info.index_enable.Assign(mubuf.idxen); + buffer_info.offset_enable.Assign(mubuf.offen); + buffer_info.inst_offset.Assign(mubuf.offset); + buffer_info.globally_coherent.Assign(mubuf.glc); + buffer_info.system_coherent.Assign(mubuf.slc); const IR::Value handle = ir.CompositeConstruct(ir.GetScalarReg(sharp), ir.GetScalarReg(sharp + 1), ir.GetScalarReg(sharp + 2), ir.GetScalarReg(sharp + 3)); - const IR::Value value = ir.LoadBufferFormat(handle, address, info); + const IR::Value value = ir.LoadBufferFormat(handle, address, buffer_info); const IR::VectorReg dst_reg{inst.src[1].code}; for (u32 i = 0; i < num_dwords; i++) { ir.SetVectorReg(dst_reg + i, IR::F32{ir.CompositeExtract(value, i)}); @@ -244,8 +251,8 @@ void Translator::BUFFER_LOAD_FORMAT(u32 num_dwords, const GcnInst& inst) { } void Translator::BUFFER_STORE(u32 num_dwords, bool is_typed, const GcnInst& inst) { - const auto& mtbuf = inst.control.mtbuf; - const bool is_ring = mtbuf.glc && mtbuf.slc; + const auto& mubuf = inst.control.mubuf; + const bool is_ring = mubuf.glc && mubuf.slc; const IR::VectorReg vaddr{inst.src[0].code}; const IR::ScalarReg sharp{inst.src[2].code * 4}; const IR::Value soffset{GetSrc(inst.src[3])}; @@ -259,22 +266,23 @@ void Translator::BUFFER_STORE(u32 num_dwords, bool is_typed, const GcnInst& inst if (is_ring) { return ir.CompositeConstruct(ir.GetVectorReg(vaddr), soffset); } - if (mtbuf.idxen && mtbuf.offen) { + if (mubuf.idxen && mubuf.offen) { return ir.CompositeConstruct(ir.GetVectorReg(vaddr), ir.GetVectorReg(vaddr + 1)); } - if (mtbuf.idxen || mtbuf.offen) { + if (mubuf.idxen || mubuf.offen) { return ir.GetVectorReg(vaddr); } return {}; }(); IR::BufferInstInfo buffer_info{}; - buffer_info.index_enable.Assign(mtbuf.idxen); - buffer_info.offset_enable.Assign(mtbuf.offen); - buffer_info.inst_offset.Assign(mtbuf.offset); - buffer_info.globally_coherent.Assign(mtbuf.glc); - buffer_info.system_coherent.Assign(mtbuf.slc); + buffer_info.index_enable.Assign(mubuf.idxen); + buffer_info.offset_enable.Assign(mubuf.offen); + buffer_info.inst_offset.Assign(mubuf.offset); + buffer_info.globally_coherent.Assign(mubuf.glc); + buffer_info.system_coherent.Assign(mubuf.slc); if (is_typed) { + const auto& mtbuf = inst.control.mtbuf; const auto dmft = static_cast(mtbuf.dfmt); const auto nfmt = static_cast(mtbuf.nfmt); ASSERT(nfmt == AmdGpu::NumberFormat::Float && @@ -321,8 +329,12 @@ void Translator::BUFFER_STORE_FORMAT(u32 num_dwords, const GcnInst& inst) { const IR::Value soffset{GetSrc(inst.src[3])}; ASSERT_MSG(soffset.IsImmediate() && soffset.U32() == 0, "Non immediate offset not supported"); - IR::BufferInstInfo info{}; - info.index_enable.Assign(mubuf.idxen); + IR::BufferInstInfo buffer_info{}; + buffer_info.index_enable.Assign(mubuf.idxen); + buffer_info.offset_enable.Assign(mubuf.offen); + buffer_info.inst_offset.Assign(mubuf.offset); + buffer_info.globally_coherent.Assign(mubuf.glc); + buffer_info.system_coherent.Assign(mubuf.slc); const IR::VectorReg src_reg{inst.src[1].code}; @@ -338,7 +350,7 @@ void Translator::BUFFER_STORE_FORMAT(u32 num_dwords, const GcnInst& inst) { const IR::Value handle = ir.CompositeConstruct(ir.GetScalarReg(sharp), ir.GetScalarReg(sharp + 1), ir.GetScalarReg(sharp + 2), ir.GetScalarReg(sharp + 3)); - ir.StoreBufferFormat(handle, address, value, info); + ir.StoreBufferFormat(handle, address, value, buffer_info); } void Translator::BUFFER_ATOMIC(AtomicOp op, const GcnInst& inst) { @@ -358,10 +370,12 @@ void Translator::BUFFER_ATOMIC(AtomicOp op, const GcnInst& inst) { const IR::U32 soffset{GetSrc(inst.src[3])}; ASSERT_MSG(soffset.IsImmediate() && soffset.U32() == 0, "Non immediate offset not supported"); - IR::BufferInstInfo info{}; - info.index_enable.Assign(mubuf.idxen); - info.inst_offset.Assign(mubuf.offset); - info.offset_enable.Assign(mubuf.offen); + IR::BufferInstInfo buffer_info{}; + buffer_info.index_enable.Assign(mubuf.idxen); + buffer_info.offset_enable.Assign(mubuf.offen); + buffer_info.inst_offset.Assign(mubuf.offset); + buffer_info.globally_coherent.Assign(mubuf.glc); + buffer_info.system_coherent.Assign(mubuf.slc); IR::Value vdata_val = ir.GetVectorReg(vdata); const IR::Value handle = @@ -371,27 +385,27 @@ void Translator::BUFFER_ATOMIC(AtomicOp op, const GcnInst& inst) { const IR::Value original_val = [&] { switch (op) { case AtomicOp::Swap: - return ir.BufferAtomicSwap(handle, address, vdata_val, info); + return ir.BufferAtomicSwap(handle, address, vdata_val, buffer_info); case AtomicOp::Add: - return ir.BufferAtomicIAdd(handle, address, vdata_val, info); + return ir.BufferAtomicIAdd(handle, address, vdata_val, buffer_info); case AtomicOp::Smin: - return ir.BufferAtomicIMin(handle, address, vdata_val, true, info); + return ir.BufferAtomicIMin(handle, address, vdata_val, true, buffer_info); case AtomicOp::Umin: - return ir.BufferAtomicIMin(handle, address, vdata_val, false, info); + return ir.BufferAtomicIMin(handle, address, vdata_val, false, buffer_info); case AtomicOp::Smax: - return ir.BufferAtomicIMax(handle, address, vdata_val, true, info); + return ir.BufferAtomicIMax(handle, address, vdata_val, true, buffer_info); case AtomicOp::Umax: - return ir.BufferAtomicIMax(handle, address, vdata_val, false, info); + return ir.BufferAtomicIMax(handle, address, vdata_val, false, buffer_info); case AtomicOp::And: - return ir.BufferAtomicAnd(handle, address, vdata_val, info); + return ir.BufferAtomicAnd(handle, address, vdata_val, buffer_info); case AtomicOp::Or: - return ir.BufferAtomicOr(handle, address, vdata_val, info); + return ir.BufferAtomicOr(handle, address, vdata_val, buffer_info); case AtomicOp::Xor: - return ir.BufferAtomicXor(handle, address, vdata_val, info); + return ir.BufferAtomicXor(handle, address, vdata_val, buffer_info); case AtomicOp::Inc: - return ir.BufferAtomicInc(handle, address, vdata_val, info); + return ir.BufferAtomicInc(handle, address, vdata_val, buffer_info); case AtomicOp::Dec: - return ir.BufferAtomicDec(handle, address, vdata_val, info); + return ir.BufferAtomicDec(handle, address, vdata_val, buffer_info); default: UNREACHABLE(); } @@ -418,6 +432,7 @@ void Translator::IMAGE_LOAD(bool has_mip, const GcnInst& inst) { IR::TextureInstInfo info{}; info.has_lod.Assign(has_mip); + info.is_array.Assign(mimg.da); const IR::Value texel = ir.ImageRead(handle, body, {}, {}, info); for (u32 i = 0; i < 4; i++) { @@ -442,6 +457,7 @@ void Translator::IMAGE_STORE(bool has_mip, const GcnInst& inst) { IR::TextureInstInfo info{}; info.has_lod.Assign(has_mip); + info.is_array.Assign(mimg.da); boost::container::static_vector comps; for (u32 i = 0; i < 4; i++) { @@ -456,13 +472,18 @@ void Translator::IMAGE_STORE(bool has_mip, const GcnInst& inst) { } void Translator::IMAGE_GET_RESINFO(const GcnInst& inst) { + const auto& mimg = inst.control.mimg; IR::VectorReg dst_reg{inst.dst[0].code}; const IR::ScalarReg tsharp_reg{inst.src[2].code * 4}; const auto flags = ImageResFlags(inst.control.mimg.dmask); const bool has_mips = flags.test(ImageResComponent::MipCount); const IR::U32 lod = ir.GetVectorReg(IR::VectorReg(inst.src[0].code)); const IR::Value tsharp = ir.GetScalarReg(tsharp_reg); - const IR::Value size = ir.ImageQueryDimension(tsharp, lod, ir.Imm1(has_mips)); + + IR::TextureInstInfo info{}; + info.is_array.Assign(mimg.da); + + const IR::Value size = ir.ImageQueryDimension(tsharp, lod, ir.Imm1(has_mips), info); if (flags.test(ImageResComponent::Width)) { ir.SetVectorReg(dst_reg++, IR::U32{ir.CompositeExtract(size, 0)}); @@ -484,6 +505,9 @@ void Translator::IMAGE_ATOMIC(AtomicOp op, const GcnInst& inst) { IR::VectorReg addr_reg{inst.src[0].code}; const IR::ScalarReg tsharp_reg{inst.src[2].code * 4}; + IR::TextureInstInfo info{}; + info.is_array.Assign(mimg.da); + const IR::Value value = ir.GetVectorReg(val_reg); const IR::Value handle = ir.GetScalarReg(tsharp_reg); const IR::Value body = @@ -494,25 +518,25 @@ void Translator::IMAGE_ATOMIC(AtomicOp op, const GcnInst& inst) { case AtomicOp::Swap: return ir.ImageAtomicExchange(handle, body, value, {}); case AtomicOp::Add: - return ir.ImageAtomicIAdd(handle, body, value, {}); + return ir.ImageAtomicIAdd(handle, body, value, info); case AtomicOp::Smin: - return ir.ImageAtomicIMin(handle, body, value, true, {}); + return ir.ImageAtomicIMin(handle, body, value, true, info); case AtomicOp::Umin: - return ir.ImageAtomicUMin(handle, body, value, {}); + return ir.ImageAtomicUMin(handle, body, value, info); case AtomicOp::Smax: - return ir.ImageAtomicIMax(handle, body, value, true, {}); + return ir.ImageAtomicIMax(handle, body, value, true, info); case AtomicOp::Umax: - return ir.ImageAtomicUMax(handle, body, value, {}); + return ir.ImageAtomicUMax(handle, body, value, info); case AtomicOp::And: - return ir.ImageAtomicAnd(handle, body, value, {}); + return ir.ImageAtomicAnd(handle, body, value, info); case AtomicOp::Or: - return ir.ImageAtomicOr(handle, body, value, {}); + return ir.ImageAtomicOr(handle, body, value, info); case AtomicOp::Xor: - return ir.ImageAtomicXor(handle, body, value, {}); + return ir.ImageAtomicXor(handle, body, value, info); case AtomicOp::Inc: - return ir.ImageAtomicInc(handle, body, value, {}); + return ir.ImageAtomicInc(handle, body, value, info); case AtomicOp::Dec: - return ir.ImageAtomicDec(handle, body, value, {}); + return ir.ImageAtomicDec(handle, body, value, info); default: UNREACHABLE(); } @@ -643,11 +667,14 @@ void Translator::IMAGE_GET_LOD(const GcnInst& inst) { IR::VectorReg addr_reg{inst.src[0].code}; const IR::ScalarReg tsharp_reg{inst.src[2].code * 4}; + IR::TextureInstInfo info{}; + info.is_array.Assign(mimg.da); + const IR::Value handle = ir.GetScalarReg(tsharp_reg); const IR::Value body = ir.CompositeConstruct( ir.GetVectorReg(addr_reg), ir.GetVectorReg(addr_reg + 1), ir.GetVectorReg(addr_reg + 2), ir.GetVectorReg(addr_reg + 3)); - const IR::Value lod = ir.ImageQueryLod(handle, body, {}); + const IR::Value lod = ir.ImageQueryLod(handle, body, info); ir.SetVectorReg(dst_reg++, IR::F32{ir.CompositeExtract(lod, 0)}); ir.SetVectorReg(dst_reg++, IR::F32{ir.CompositeExtract(lod, 1)}); } diff --git a/src/shader_recompiler/info.h b/src/shader_recompiler/info.h index b6ac12785..2cde30629 100644 --- a/src/shader_recompiler/info.h +++ b/src/shader_recompiler/info.h @@ -70,14 +70,8 @@ struct ImageResource { bool is_depth{}; bool is_atomic{}; bool is_array{}; - bool is_read{}; bool is_written{}; - [[nodiscard]] bool IsStorage(const AmdGpu::Image& image) const noexcept { - // Need cube as storage when used with ImageRead. - return is_written || (is_read && image.GetBoundType() == AmdGpu::ImageType::Cube); - } - [[nodiscard]] constexpr AmdGpu::Image GetSharp(const Info& info) const noexcept; }; using ImageResourceList = boost::container::small_vector; @@ -102,11 +96,19 @@ using FMaskResourceList = boost::container::small_vector; struct PushData { static constexpr u32 BufOffsetIndex = 2; static constexpr u32 UdRegsIndex = 4; + static constexpr u32 XOffsetIndex = 8; + static constexpr u32 YOffsetIndex = 9; + static constexpr u32 XScaleIndex = 10; + static constexpr u32 YScaleIndex = 11; u32 step0; u32 step1; std::array buf_offsets; std::array ud_regs; + float xoffset; + float yoffset; + float xscale; + float yscale; void AddOffset(u32 binding, u32 offset) { ASSERT(offset < 256 && binding < buf_offsets.size()); diff --git a/src/shader_recompiler/ir/ir_emitter.cpp b/src/shader_recompiler/ir/ir_emitter.cpp index 823f9bdcd..5ac08e7dc 100644 --- a/src/shader_recompiler/ir/ir_emitter.cpp +++ b/src/shader_recompiler/ir/ir_emitter.cpp @@ -1732,11 +1732,6 @@ Value IREmitter::ImageGatherDref(const Value& handle, const Value& coords, const return Inst(Opcode::ImageGatherDref, Flags{info}, handle, coords, offset, dref); } -Value IREmitter::ImageQueryDimension(const Value& handle, const IR::U32& lod, - const IR::U1& skip_mips) { - return Inst(Opcode::ImageQueryDimensions, handle, lod, skip_mips); -} - Value IREmitter::ImageQueryDimension(const Value& handle, const IR::U32& lod, const IR::U1& skip_mips, TextureInstInfo info) { return Inst(Opcode::ImageQueryDimensions, Flags{info}, handle, lod, skip_mips); @@ -1763,6 +1758,10 @@ void IREmitter::ImageWrite(const Value& handle, const Value& coords, const U32& Inst(Opcode::ImageWrite, Flags{info}, handle, coords, lod, multisampling, color); } +[[nodiscard]] F32 IREmitter::CubeFaceIndex(const Value& cube_coords) { + return Inst(Opcode::CubeFaceIndex, cube_coords); +} + // Debug print maps to SPIRV's NonSemantic DebugPrintf instruction // Renderdoc will hook in its own implementation of the SPIRV instruction // Renderdoc accepts format specifiers, e.g. %u, listed here: diff --git a/src/shader_recompiler/ir/ir_emitter.h b/src/shader_recompiler/ir/ir_emitter.h index 9aab9459b..d1dc44d74 100644 --- a/src/shader_recompiler/ir/ir_emitter.h +++ b/src/shader_recompiler/ir/ir_emitter.h @@ -324,8 +324,6 @@ public: const F32& dref, const F32& lod, const Value& offset, TextureInstInfo info); - [[nodiscard]] Value ImageQueryDimension(const Value& handle, const U32& lod, - const U1& skip_mips); [[nodiscard]] Value ImageQueryDimension(const Value& handle, const U32& lod, const U1& skip_mips, TextureInstInfo info); @@ -344,6 +342,8 @@ public: void ImageWrite(const Value& handle, const Value& coords, const U32& lod, const U32& multisampling, const Value& color, TextureInstInfo info); + [[nodiscard]] F32 CubeFaceIndex(const Value& cube_coords); + void EmitVertex(); void EmitPrimitive(); diff --git a/src/shader_recompiler/ir/opcodes.inc b/src/shader_recompiler/ir/opcodes.inc index 6242a230e..b45151dba 100644 --- a/src/shader_recompiler/ir/opcodes.inc +++ b/src/shader_recompiler/ir/opcodes.inc @@ -374,6 +374,9 @@ OPCODE(ImageAtomicOr32, U32, Opaq OPCODE(ImageAtomicXor32, U32, Opaque, Opaque, U32, ) OPCODE(ImageAtomicExchange32, U32, Opaque, Opaque, U32, ) +// Cube operations - optional, usable if profile.supports_native_cube_calc +OPCODE(CubeFaceIndex, F32, F32x3, ) + // Warp operations OPCODE(LaneId, U32, ) OPCODE(WarpId, U32, ) diff --git a/src/shader_recompiler/ir/passes/constant_propagation_pass.cpp b/src/shader_recompiler/ir/passes/constant_propagation_pass.cpp index fcf2f7d9f..26d819d8e 100644 --- a/src/shader_recompiler/ir/passes/constant_propagation_pass.cpp +++ b/src/shader_recompiler/ir/passes/constant_propagation_pass.cpp @@ -222,9 +222,15 @@ void FoldMul(IR::Block& block, IR::Inst& inst) { return; } const IR::Value rhs{inst.Arg(1)}; - if (rhs.IsImmediate() && Arg(rhs) == 0) { - inst.ReplaceUsesWithAndRemove(IR::Value(0u)); - return; + if (rhs.IsImmediate()) { + if (Arg(rhs) == 0) { + inst.ReplaceUsesWithAndRemove(IR::Value(0u)); + return; + } + if (Arg(rhs) == 1) { + inst.ReplaceUsesWithAndRemove(inst.Arg(0)); + return; + } } } diff --git a/src/shader_recompiler/ir/passes/hull_shader_transform.cpp b/src/shader_recompiler/ir/passes/hull_shader_transform.cpp index 6164fec12..b41e38339 100644 --- a/src/shader_recompiler/ir/passes/hull_shader_transform.cpp +++ b/src/shader_recompiler/ir/passes/hull_shader_transform.cpp @@ -349,11 +349,11 @@ static IR::F32 ReadTessControlPointAttribute(IR::U32 addr, const u32 stride, IR: addr = ir.IAdd(addr, ir.Imm32(off_dw)); } const IR::U32 control_point_index = ir.IDiv(addr, ir.Imm32(stride)); - const IR::U32 addr_for_attrs = TryOptimizeAddressModulo(addr, stride, ir); - const IR::U32 attr_index = - ir.ShiftRightLogical(ir.IMod(addr_for_attrs, ir.Imm32(stride)), ir.Imm32(4u)); + const IR::U32 opt_addr = TryOptimizeAddressModulo(addr, stride, ir); + const IR::U32 offset = ir.IMod(opt_addr, ir.Imm32(stride)); + const IR::U32 attr_index = ir.ShiftRightLogical(offset, ir.Imm32(4u)); const IR::U32 comp_index = - ir.ShiftRightLogical(ir.BitwiseAnd(addr_for_attrs, ir.Imm32(0xFU)), ir.Imm32(2u)); + ir.ShiftRightLogical(ir.BitwiseAnd(offset, ir.Imm32(0xFU)), ir.Imm32(2u)); if (is_output_read_in_tcs) { return ir.ReadTcsGenericOuputAttribute(control_point_index, attr_index, comp_index); } else { @@ -452,13 +452,13 @@ void HullShaderTransform(IR::Program& program, RuntimeInfo& runtime_info) { if (off_dw > 0) { addr = ir.IAdd(addr, ir.Imm32(off_dw)); } - u32 stride = runtime_info.hs_info.hs_output_cp_stride; + const u32 stride = runtime_info.hs_info.hs_output_cp_stride; // Invocation ID array index is implicit, handled by SPIRV backend - const IR::U32 addr_for_attrs = TryOptimizeAddressModulo(addr, stride, ir); - const IR::U32 attr_index = ir.ShiftRightLogical( - ir.IMod(addr_for_attrs, ir.Imm32(stride)), ir.Imm32(4u)); + const IR::U32 opt_addr = TryOptimizeAddressModulo(addr, stride, ir); + const IR::U32 offset = ir.IMod(opt_addr, ir.Imm32(stride)); + const IR::U32 attr_index = ir.ShiftRightLogical(offset, ir.Imm32(4u)); const IR::U32 comp_index = ir.ShiftRightLogical( - ir.BitwiseAnd(addr_for_attrs, ir.Imm32(0xFU)), ir.Imm32(2u)); + ir.BitwiseAnd(offset, ir.Imm32(0xFU)), ir.Imm32(2u)); ir.SetTcsGenericAttribute(data_component, attr_index, comp_index); } else { ASSERT(output_kind == AttributeRegion::PatchConst); @@ -535,8 +535,7 @@ void HullShaderTransform(IR::Program& program, RuntimeInfo& runtime_info) { // ... IR::IREmitter ir{*entry_block, it}; - ASSERT(runtime_info.hs_info.ls_stride % 16 == 0); - u32 num_attributes = runtime_info.hs_info.ls_stride / 16; + u32 num_attributes = Common::AlignUp(runtime_info.hs_info.ls_stride, 16) >> 4; const auto invocation_id = ir.GetAttributeU32(IR::Attribute::InvocationId); for (u32 attr_no = 0; attr_no < num_attributes; attr_no++) { for (u32 comp = 0; comp < 4; comp++) { diff --git a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp index f7040ad75..d94c5223a 100644 --- a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp +++ b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp @@ -161,10 +161,10 @@ public: u32 Add(const ImageResource& desc) { const u32 index{Add(image_resources, desc, [&desc](const auto& existing) { - return desc.sharp_idx == existing.sharp_idx; + return desc.sharp_idx == existing.sharp_idx && desc.is_array == existing.is_array; })}; auto& image = image_resources[index]; - image.is_read |= desc.is_read; + image.is_atomic |= desc.is_atomic; image.is_written |= desc.is_written; return index; } @@ -361,7 +361,6 @@ void PatchImageSharp(IR::Block& block, IR::Inst& inst, Info& info, Descriptors& image = AmdGpu::Image::Null(); } ASSERT(image.GetType() != AmdGpu::ImageType::Invalid); - const bool is_read = inst.GetOpcode() == IR::Opcode::ImageRead; const bool is_written = inst.GetOpcode() == IR::Opcode::ImageWrite; // Patch image instruction if image is FMask. @@ -402,7 +401,6 @@ void PatchImageSharp(IR::Block& block, IR::Inst& inst, Info& info, Descriptors& .is_depth = bool(inst_info.is_depth), .is_atomic = IsImageAtomicInstruction(inst), .is_array = bool(inst_info.is_array), - .is_read = is_read, .is_written = is_written, }); @@ -486,55 +484,73 @@ void PatchDataRingAccess(IR::Block& block, IR::Inst& inst, Info& info, Descripto inst.SetArg(1, ir.Imm32(binding)); } +IR::U32 CalculateBufferAddress(IR::IREmitter& ir, const IR::Inst& inst, const Info& info, + const AmdGpu::Buffer& buffer, u32 stride) { + const auto inst_info = inst.Flags(); + + // index = (inst_idxen ? vgpr_index : 0) + (const_add_tid_enable ? thread_id[5:0] : 0) + IR::U32 index = ir.Imm32(0U); + if (inst_info.index_enable) { + const IR::U32 vgpr_index{inst_info.offset_enable + ? IR::U32{ir.CompositeExtract(inst.Arg(1), 0)} + : IR::U32{inst.Arg(1)}}; + index = ir.IAdd(index, vgpr_index); + } + if (buffer.add_tid_enable) { + ASSERT_MSG(info.l_stage == LogicalStage::Compute, + "Thread ID buffer addressing is not supported outside of compute."); + const IR::U32 thread_id{ir.LaneId()}; + index = ir.IAdd(index, thread_id); + } + // offset = (inst_offen ? vgpr_offset : 0) + inst_offset + IR::U32 offset = ir.Imm32(inst_info.inst_offset.Value()); + if (inst_info.offset_enable) { + const IR::U32 vgpr_offset = inst_info.index_enable + ? IR::U32{ir.CompositeExtract(inst.Arg(1), 1)} + : IR::U32{inst.Arg(1)}; + offset = ir.IAdd(offset, vgpr_offset); + } + const IR::U32 const_stride = ir.Imm32(stride); + IR::U32 buffer_offset; + if (buffer.swizzle_enable) { + const IR::U32 const_index_stride = ir.Imm32(buffer.GetIndexStride()); + const IR::U32 const_element_size = ir.Imm32(buffer.GetElementSize()); + // index_msb = index / const_index_stride + const IR::U32 index_msb{ir.IDiv(index, const_index_stride)}; + // index_lsb = index % const_index_stride + const IR::U32 index_lsb{ir.IMod(index, const_index_stride)}; + // offset_msb = offset / const_element_size + const IR::U32 offset_msb{ir.IDiv(offset, const_element_size)}; + // offset_lsb = offset % const_element_size + const IR::U32 offset_lsb{ir.IMod(offset, const_element_size)}; + // buffer_offset = + // (index_msb * const_stride + offset_msb * const_element_size) * const_index_stride + // + index_lsb * const_element_size + offset_lsb + const IR::U32 buffer_offset_msb = ir.IMul( + ir.IAdd(ir.IMul(index_msb, const_stride), ir.IMul(offset_msb, const_element_size)), + const_index_stride); + const IR::U32 buffer_offset_lsb = + ir.IAdd(ir.IMul(index_lsb, const_element_size), offset_lsb); + buffer_offset = ir.IAdd(buffer_offset_msb, buffer_offset_lsb); + } else { + // buffer_offset = index * const_stride + offset + buffer_offset = ir.IAdd(ir.IMul(index, const_stride), offset); + } + return buffer_offset; +} + void PatchBufferArgs(IR::Block& block, IR::Inst& inst, Info& info) { const auto handle = inst.Arg(0); const auto buffer_res = info.buffers[handle.U32()]; const auto buffer = buffer_res.GetSharp(info); - ASSERT(!buffer.add_tid_enable); - // Address of constant buffer reads can be calculated at IR emission time. if (inst.GetOpcode() == IR::Opcode::ReadConstBuffer) { return; } IR::IREmitter ir{block, IR::Block::InstructionList::s_iterator_to(inst)}; - const auto inst_info = inst.Flags(); - - const IR::U32 index_stride = ir.Imm32(buffer.index_stride); - const IR::U32 element_size = ir.Imm32(buffer.element_size); - - // Compute address of the buffer using the stride. - IR::U32 address = ir.Imm32(inst_info.inst_offset.Value()); - if (inst_info.index_enable) { - const IR::U32 index = inst_info.offset_enable ? IR::U32{ir.CompositeExtract(inst.Arg(1), 0)} - : IR::U32{inst.Arg(1)}; - if (buffer.swizzle_enable) { - const IR::U32 stride_index_stride = - ir.Imm32(static_cast(buffer.stride * buffer.index_stride)); - const IR::U32 index_msb = ir.IDiv(index, index_stride); - const IR::U32 index_lsb = ir.IMod(index, index_stride); - address = ir.IAdd(address, ir.IAdd(ir.IMul(index_msb, stride_index_stride), - ir.IMul(index_lsb, element_size))); - } else { - address = ir.IAdd(address, ir.IMul(index, ir.Imm32(buffer.GetStride()))); - } - } - if (inst_info.offset_enable) { - const IR::U32 offset = inst_info.index_enable ? IR::U32{ir.CompositeExtract(inst.Arg(1), 1)} - : IR::U32{inst.Arg(1)}; - if (buffer.swizzle_enable) { - const IR::U32 element_size_index_stride = - ir.Imm32(buffer.element_size * buffer.index_stride); - const IR::U32 offset_msb = ir.IDiv(offset, element_size); - const IR::U32 offset_lsb = ir.IMod(offset, element_size); - address = ir.IAdd(address, - ir.IAdd(ir.IMul(offset_msb, element_size_index_stride), offset_lsb)); - } else { - address = ir.IAdd(address, offset); - } - } - inst.SetArg(1, address); + inst.SetArg(1, CalculateBufferAddress(ir, inst, info, buffer, buffer.stride)); } void PatchTextureBufferArgs(IR::Block& block, IR::Inst& inst, Info& info) { @@ -542,8 +558,15 @@ void PatchTextureBufferArgs(IR::Block& block, IR::Inst& inst, Info& info) { const auto buffer_res = info.texture_buffers[handle.U32()]; const auto buffer = buffer_res.GetSharp(info); - ASSERT(!buffer.swizzle_enable && !buffer.add_tid_enable); + // Only linear addressing with index is supported currently, since we cannot yet + // address with sub-texel granularity. + const auto inst_info = inst.Flags(); + ASSERT_MSG(!buffer.swizzle_enable && !inst_info.offset_enable && inst_info.inst_offset == 0, + "Unsupported texture buffer address mode."); + IR::IREmitter ir{block, IR::Block::InstructionList::s_iterator_to(inst)}; + // Stride of 1 to get an index into formatted data. See above addressing limitations. + inst.SetArg(1, CalculateBufferAddress(ir, inst, info, buffer, 1U)); if (inst.GetOpcode() == IR::Opcode::StoreBufferFormatF32) { const auto swizzled = ApplySwizzle(ir, inst.Arg(2), buffer.DstSelect()); @@ -560,40 +583,15 @@ void PatchTextureBufferArgs(IR::Block& block, IR::Inst& inst, Info& info) { } } -IR::Value PatchCubeCoord(IR::IREmitter& ir, const IR::Value& s, const IR::Value& t, - const IR::Value& z, bool is_written, bool is_array) { - // When cubemap is written with imageStore it is treated like 2DArray. - if (is_written) { - return ir.CompositeConstruct(s, t, z); - } - - ASSERT(s.Type() == IR::Type::F32); // in case of fetched image need to adjust the code below - - // We need to fix x and y coordinate, - // because the s and t coordinate will be scaled and plus 1.5 by v_madak_f32. - // We already force the scale value to be 1.0 when handling v_cubema_f32, - // here we subtract 1.5 to recover the original value. - const IR::Value x = ir.FPSub(IR::F32{s}, ir.Imm32(1.5f)); - const IR::Value y = ir.FPSub(IR::F32{t}, ir.Imm32(1.5f)); - if (is_array) { - const IR::U32 array_index = ir.ConvertFToU(32, IR::F32{z}); - const IR::U32 face_id = ir.BitwiseAnd(array_index, ir.Imm32(7u)); - const IR::U32 slice_id = ir.ShiftRightLogical(array_index, ir.Imm32(3u)); - return ir.CompositeConstruct(x, y, ir.ConvertIToF(32, 32, false, face_id), - ir.ConvertIToF(32, 32, false, slice_id)); - } else { - return ir.CompositeConstruct(x, y, z); - } -} - void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, - const AmdGpu::Image& image) { + const ImageResource& image_res, const AmdGpu::Image& image) { const auto handle = inst.Arg(0); const auto sampler_res = info.samplers[(handle.U32() >> 16) & 0xFFFF]; auto sampler = sampler_res.GetSharp(info); IR::IREmitter ir{block, IR::Block::InstructionList::s_iterator_to(inst)}; const auto inst_info = inst.Flags(); + const auto view_type = image.GetViewType(image_res.is_array); IR::Inst* body1 = inst.Arg(1).InstRecursive(); IR::Inst* body2 = inst.Arg(2).InstRecursive(); @@ -640,7 +638,7 @@ void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, return ir.BitFieldExtract(IR::U32{arg}, ir.Imm32(off), ir.Imm32(6), true); }; - switch (image.GetType()) { + switch (view_type) { case AmdGpu::ImageType::Color1D: case AmdGpu::ImageType::Color1DArray: return read(0); @@ -649,7 +647,6 @@ void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, case AmdGpu::ImageType::Color2DMsaa: return ir.CompositeConstruct(read(0), read(8)); case AmdGpu::ImageType::Color3D: - case AmdGpu::ImageType::Cube: return ir.CompositeConstruct(read(0), read(8), read(16)); default: UNREACHABLE(); @@ -661,7 +658,7 @@ void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, if (!inst_info.has_derivatives) { return {}; } - switch (image.GetType()) { + switch (view_type) { case AmdGpu::ImageType::Color1D: case AmdGpu::ImageType::Color1DArray: // du/dx, du/dy @@ -675,7 +672,6 @@ void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, return {ir.CompositeConstruct(get_addr_reg(addr_reg - 4), get_addr_reg(addr_reg - 3)), ir.CompositeConstruct(get_addr_reg(addr_reg - 2), get_addr_reg(addr_reg - 1))}; case AmdGpu::ImageType::Color3D: - case AmdGpu::ImageType::Cube: // (du/dx, dv/dx, dw/dx), (du/dy, dv/dy, dw/dy) addr_reg = addr_reg + 6; return {ir.CompositeConstruct(get_addr_reg(addr_reg - 6), get_addr_reg(addr_reg - 5), @@ -691,7 +687,8 @@ void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, // Query dimensions of image if needed for normalization. // We can't use the image sharp because it could be bound to a different image later. const auto dimensions = - unnormalized ? ir.ImageQueryDimension(handle, ir.Imm32(0u), ir.Imm1(false)) : IR::Value{}; + unnormalized ? ir.ImageQueryDimension(handle, ir.Imm32(0u), ir.Imm1(false), inst_info) + : IR::Value{}; const auto get_coord = [&](u32 coord_idx, u32 dim_idx) -> IR::Value { const auto coord = get_addr_reg(coord_idx); if (unnormalized) { @@ -705,7 +702,7 @@ void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, // Now we can load body components as noted in Table 8.9 Image Opcodes with Sampler const IR::Value coords = [&] -> IR::Value { - switch (image.GetType()) { + switch (view_type) { case AmdGpu::ImageType::Color1D: // x addr_reg = addr_reg + 1; return get_coord(addr_reg - 1, 0); @@ -724,10 +721,6 @@ void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, addr_reg = addr_reg + 3; return ir.CompositeConstruct(get_coord(addr_reg - 3, 0), get_coord(addr_reg - 2, 1), get_coord(addr_reg - 1, 2)); - case AmdGpu::ImageType::Cube: // x, y, face - addr_reg = addr_reg + 3; - return PatchCubeCoord(ir, get_coord(addr_reg - 3, 0), get_coord(addr_reg - 2, 1), - get_addr_reg(addr_reg - 1), false, inst_info.is_array); default: UNREACHABLE(); } @@ -779,17 +772,18 @@ void PatchImageArgs(IR::Block& block, IR::Inst& inst, Info& info) { // Sample instructions must be handled separately using address register data. if (inst.GetOpcode() == IR::Opcode::ImageSampleRaw) { - PatchImageSampleArgs(block, inst, info, image); + PatchImageSampleArgs(block, inst, info, image_res, image); return; } IR::IREmitter ir{block, IR::Block::InstructionList::s_iterator_to(inst)}; const auto inst_info = inst.Flags(); + const auto view_type = image.GetViewType(image_res.is_array); // Now that we know the image type, adjust texture coordinate vector. IR::Inst* body = inst.Arg(1).InstRecursive(); const auto [coords, arg] = [&] -> std::pair { - switch (image.GetType()) { + switch (view_type) { case AmdGpu::ImageType::Color1D: // x, [lod] return {body->Arg(0), body->Arg(1)}; case AmdGpu::ImageType::Color1DArray: // x, slice, [lod] @@ -805,22 +799,18 @@ void PatchImageArgs(IR::Block& block, IR::Inst& inst, Info& info) { [[fallthrough]]; case AmdGpu::ImageType::Color3D: // x, y, z, [lod] return {ir.CompositeConstruct(body->Arg(0), body->Arg(1), body->Arg(2)), body->Arg(3)}; - case AmdGpu::ImageType::Cube: // x, y, face, [lod] - return {PatchCubeCoord(ir, body->Arg(0), body->Arg(1), body->Arg(2), - inst.GetOpcode() == IR::Opcode::ImageWrite, inst_info.is_array), - body->Arg(3)}; default: - UNREACHABLE_MSG("Unknown image type {}", image.GetType()); + UNREACHABLE_MSG("Unknown image type {}", view_type); } }(); - const auto has_ms = image.GetType() == AmdGpu::ImageType::Color2DMsaa || - image.GetType() == AmdGpu::ImageType::Color2DMsaaArray; + const auto has_ms = view_type == AmdGpu::ImageType::Color2DMsaa || + view_type == AmdGpu::ImageType::Color2DMsaaArray; ASSERT(!inst_info.has_lod || !has_ms); const auto lod = inst_info.has_lod ? IR::U32{arg} : IR::U32{}; const auto ms = has_ms ? IR::U32{arg} : IR::U32{}; - const auto is_storage = image_res.IsStorage(image); + const auto is_storage = image_res.is_written; if (inst.GetOpcode() == IR::Opcode::ImageRead) { auto texel = ir.ImageRead(handle, coords, lod, ms, inst_info); if (is_storage) { diff --git a/src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp b/src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp index c34b59b88..7fd5b75ff 100644 --- a/src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp +++ b/src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp @@ -5,7 +5,7 @@ namespace Shader::Optimization { -void Visit(Info& info, IR::Inst& inst) { +void Visit(Info& info, const IR::Inst& inst) { switch (inst.GetOpcode()) { case IR::Opcode::GetAttribute: case IR::Opcode::GetAttributeU32: diff --git a/src/shader_recompiler/profile.h b/src/shader_recompiler/profile.h index fc8c5956e..f8b91a283 100644 --- a/src/shader_recompiler/profile.h +++ b/src/shader_recompiler/profile.h @@ -24,11 +24,14 @@ struct Profile { bool support_explicit_workgroup_layout{}; bool support_legacy_vertex_attributes{}; bool supports_image_load_store_lod{}; + bool supports_native_cube_calc{}; bool has_broken_spirv_clamp{}; bool lower_left_origin_mode{}; bool needs_manual_interpolation{}; bool needs_lds_barriers{}; u64 min_ssbo_alignment{}; + u32 max_viewport_width{}; + u32 max_viewport_height{}; }; } // namespace Shader diff --git a/src/shader_recompiler/runtime_info.h b/src/shader_recompiler/runtime_info.h index cf49b0879..2bf5e3f0a 100644 --- a/src/shader_recompiler/runtime_info.h +++ b/src/shader_recompiler/runtime_info.h @@ -84,6 +84,7 @@ struct VertexRuntimeInfo { u32 num_outputs; std::array outputs; bool emulate_depth_negative_one_to_one{}; + bool clip_disable{}; // Domain AmdGpu::TessellationType tess_type; AmdGpu::TessellationTopology tess_topology; @@ -92,7 +93,8 @@ struct VertexRuntimeInfo { bool operator==(const VertexRuntimeInfo& other) const noexcept { return emulate_depth_negative_one_to_one == other.emulate_depth_negative_one_to_one && - tess_type == other.tess_type && tess_topology == other.tess_topology && + clip_disable == other.clip_disable && tess_type == other.tess_type && + tess_topology == other.tess_topology && tess_partitioning == other.tess_partitioning && hs_output_cp_stride == other.hs_output_cp_stride; } @@ -198,6 +200,7 @@ struct FragmentRuntimeInfo { struct ComputeRuntimeInfo { u32 shared_memory_size; + u32 max_shared_memory_size; std::array workgroup_size; std::array tgid_enable; diff --git a/src/shader_recompiler/specialization.h b/src/shader_recompiler/specialization.h index f58d2e2d3..523e63497 100644 --- a/src/shader_recompiler/specialization.h +++ b/src/shader_recompiler/specialization.h @@ -21,10 +21,16 @@ struct VsAttribSpecialization { struct BufferSpecialization { u16 stride : 14; u16 is_storage : 1; + u16 swizzle_enable : 1; + u8 index_stride : 2 = 0; + u8 element_size : 2 = 0; u32 size = 0; bool operator==(const BufferSpecialization& other) const { return stride == other.stride && is_storage == other.is_storage && + swizzle_enable == other.swizzle_enable && + (!swizzle_enable || + (index_stride == other.index_stride && element_size == other.element_size)) && (size >= other.is_storage || is_storage); } }; @@ -101,6 +107,11 @@ struct StageSpecialization { [](auto& spec, const auto& desc, AmdGpu::Buffer sharp) { spec.stride = sharp.GetStride(); spec.is_storage = desc.IsStorage(sharp); + spec.swizzle_enable = sharp.swizzle_enable; + if (spec.swizzle_enable) { + spec.index_stride = sharp.index_stride; + spec.element_size = sharp.element_size; + } if (!spec.is_storage) { spec.size = sharp.GetSize(); } @@ -113,9 +124,9 @@ struct StageSpecialization { }); ForEachSharp(binding, images, info->images, [](auto& spec, const auto& desc, AmdGpu::Image sharp) { - spec.type = sharp.GetBoundType(); + spec.type = sharp.GetViewType(desc.is_array); spec.is_integer = AmdGpu::IsInteger(sharp.GetNumberFmt()); - spec.is_storage = desc.IsStorage(sharp); + spec.is_storage = desc.is_written; if (spec.is_storage) { spec.dst_select = sharp.DstSelect(); } diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp index 16ed84f74..8355dd1e6 100644 --- a/src/video_core/amdgpu/liverpool.cpp +++ b/src/video_core/amdgpu/liverpool.cpp @@ -260,7 +260,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(&nop->data_block[1]), marker_sz}; if (rasterizer) { - rasterizer->ScopeMarkerBegin(label); + rasterizer->ScopeMarkerBegin(label, true); } break; } @@ -271,13 +271,13 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span( reinterpret_cast(&nop->data_block[1]) + marker_sz); if (rasterizer) { - rasterizer->ScopedMarkerInsertColor(label, color); + rasterizer->ScopedMarkerInsertColor(label, color, true); } break; } case PM4CmdNop::PayloadType::DebugMarkerPop: { if (rasterizer) { - rasterizer->ScopeMarkerEnd(); + rasterizer->ScopeMarkerEnd(true); } break; } @@ -412,7 +412,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); - rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndex2", cmd_address)); + rasterizer->ScopeMarkerBegin(fmt::format("gfx:{}:DrawIndex2", cmd_address)); rasterizer->Draw(true); rasterizer->ScopeMarkerEnd(); } @@ -430,7 +430,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); rasterizer->ScopeMarkerBegin( - fmt::format("dcb:{}:DrawIndexOffset2", cmd_address)); + fmt::format("gfx:{}:DrawIndexOffset2", cmd_address)); rasterizer->Draw(true, draw_index_off->index_offset); rasterizer->ScopeMarkerEnd(); } @@ -445,7 +445,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); - rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndexAuto", cmd_address)); + rasterizer->ScopeMarkerBegin(fmt::format("gfx:{}:DrawIndexAuto", cmd_address)); rasterizer->Draw(false); rasterizer->ScopeMarkerEnd(); } @@ -460,7 +460,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); - rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndirect", cmd_address)); + rasterizer->ScopeMarkerBegin(fmt::format("gfx:{}:DrawIndirect", cmd_address)); rasterizer->DrawIndirect(false, indirect_args_addr, offset, size, 1, 0); rasterizer->ScopeMarkerEnd(); } @@ -477,7 +477,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); rasterizer->ScopeMarkerBegin( - fmt::format("dcb:{}:DrawIndexIndirect", cmd_address)); + fmt::format("gfx:{}:DrawIndexIndirect", cmd_address)); rasterizer->DrawIndirect(true, indirect_args_addr, offset, size, 1, 0); rasterizer->ScopeMarkerEnd(); } @@ -493,7 +493,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); rasterizer->ScopeMarkerBegin( - fmt::format("dcb:{}:DrawIndexIndirectCountMulti", cmd_address)); + fmt::format("gfx:{}:DrawIndexIndirectCountMulti", cmd_address)); rasterizer->DrawIndirect( true, indirect_args_addr, offset, draw_index_indirect->stride, draw_index_indirect->count, draw_index_indirect->countAddr); @@ -514,7 +514,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); - rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:Dispatch", cmd_address)); + rasterizer->ScopeMarkerBegin(fmt::format("gfx:{}:DispatchDirect", cmd_address)); rasterizer->DispatchDirect(); rasterizer->ScopeMarkerEnd(); } @@ -533,7 +533,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); rasterizer->ScopeMarkerBegin( - fmt::format("dcb:{}:DispatchIndirect", cmd_address)); + fmt::format("gfx:{}:DispatchIndirect", cmd_address)); rasterizer->DispatchIndirect(indirect_args_addr, offset, size); rasterizer->ScopeMarkerEnd(); } @@ -812,7 +812,7 @@ Liverpool::Task Liverpool::ProcessCompute(std::span acb, u32 vqid) { if (rasterizer && (cs_program.dispatch_initiator & 1)) { const auto cmd_address = reinterpret_cast(header); rasterizer->ScopeMarkerBegin( - fmt::format("acb[{}]:{}:DispatchIndirect", vqid, cmd_address)); + fmt::format("asc[{}]:{}:DispatchDirect", vqid, cmd_address)); rasterizer->DispatchDirect(); rasterizer->ScopeMarkerEnd(); } @@ -830,7 +830,8 @@ Liverpool::Task Liverpool::ProcessCompute(std::span acb, u32 vqid) { } if (rasterizer && (cs_program.dispatch_initiator & 1)) { const auto cmd_address = reinterpret_cast(header); - rasterizer->ScopeMarkerBegin(fmt::format("acb[{}]:{}:Dispatch", vqid, cmd_address)); + rasterizer->ScopeMarkerBegin( + fmt::format("asc[{}]:{}:DispatchIndirect", vqid, cmd_address)); rasterizer->DispatchIndirect(ib_address, 0, size); rasterizer->ScopeMarkerEnd(); } diff --git a/src/video_core/amdgpu/liverpool.h b/src/video_core/amdgpu/liverpool.h index 837b73d89..a29bde4ce 100644 --- a/src/video_core/amdgpu/liverpool.h +++ b/src/video_core/amdgpu/liverpool.h @@ -429,11 +429,19 @@ struct Liverpool { } depth_slice; bool DepthValid() const { - return Address() != 0 && z_info.format != ZFormat::Invalid; + return DepthAddress() != 0 && z_info.format != ZFormat::Invalid; } bool StencilValid() const { - return Address() != 0 && stencil_info.format != StencilFormat::Invalid; + return StencilAddress() != 0 && stencil_info.format != StencilFormat::Invalid; + } + + bool DepthWriteValid() const { + return DepthWriteAddress() != 0 && z_info.format != ZFormat::Invalid; + } + + bool StencilWriteValid() const { + return StencilWriteAddress() != 0 && stencil_info.format != StencilFormat::Invalid; } u32 Pitch() const { @@ -444,7 +452,7 @@ struct Liverpool { return (depth_size.height_tile_max + 1) << 3; } - u64 Address() const { + u64 DepthAddress() const { return u64(z_read_base) << 8; } @@ -452,6 +460,14 @@ struct Liverpool { return u64(stencil_read_base) << 8; } + u64 DepthWriteAddress() const { + return u64(z_write_base) << 8; + } + + u64 StencilWriteAddress() const { + return u64(stencil_write_base) << 8; + } + u32 NumSamples() const { return 1u << z_info.num_samples; // spec doesn't say it is a log2 } @@ -899,7 +915,8 @@ struct Liverpool { // There is a small difference between T# and CB number types, account for it. return RemapNumberFormat(info.number_type == NumberFormat::SnormNz ? NumberFormat::Srgb - : info.number_type.Value()); + : info.number_type.Value(), + info.format); } [[nodiscard]] NumberConversion GetNumberConversion() const { @@ -1007,6 +1024,46 @@ struct Liverpool { } }; + enum class ForceEnable : u32 { + Off = 0, + Enable = 1, + Disable = 2, + }; + + enum class ForceSumm : u32 { + Off = 0, + MinZ = 1, + MaxZ = 2, + Both = 3, + }; + + union DepthRenderOverride { + u32 raw; + BitField<0, 2, ForceEnable> force_hiz_enable; + BitField<2, 2, ForceEnable> force_his_enable0; + BitField<4, 2, ForceEnable> force_his_enable1; + BitField<6, 1, u32> force_shader_z_order; + BitField<7, 1, u32> fast_z_disable; + BitField<8, 1, u32> fast_stencil_disable; + BitField<9, 1, u32> noop_cull_disable; + BitField<10, 1, u32> force_color_kill; + BitField<11, 1, u32> force_z_read; + BitField<12, 1, u32> force_stencil_read; + BitField<13, 2, ForceEnable> force_full_z_range; + BitField<15, 1, u32> force_qc_smask_conflict; + BitField<16, 1, u32> disable_viewport_clamp; + BitField<17, 1, u32> ignore_sc_zrange; + BitField<18, 1, u32> disable_fully_covered; + BitField<19, 2, ForceSumm> force_z_limit_summ; + BitField<21, 5, u32> max_tiles_in_dtt; + BitField<26, 1, u32> disable_tile_rate_tiles; + BitField<27, 1, u32> force_z_dirty; + BitField<28, 1, u32> force_stencil_dirty; + BitField<29, 1, u32> force_z_valid; + BitField<30, 1, u32> force_stencil_valid; + BitField<31, 1, u32> preserve_compression; + }; + union AaConfig { BitField<0, 3, u32> msaa_num_samples; BitField<4, 1, u32> aa_mask_centroid_dtmn; @@ -1208,7 +1265,8 @@ struct Liverpool { DepthRenderControl depth_render_control; INSERT_PADDING_WORDS(1); DepthView depth_view; - INSERT_PADDING_WORDS(2); + DepthRenderOverride depth_render_override; + INSERT_PADDING_WORDS(1); Address depth_htile_data_base; INSERT_PADDING_WORDS(2); float depth_bounds_min; diff --git a/src/video_core/amdgpu/resource.h b/src/video_core/amdgpu/resource.h index ffee7964a..fa8edb3e2 100644 --- a/src/video_core/amdgpu/resource.h +++ b/src/video_core/amdgpu/resource.h @@ -54,7 +54,7 @@ struct Buffer { } NumberFormat GetNumberFmt() const noexcept { - return RemapNumberFormat(NumberFormat(num_format)); + return RemapNumberFormat(NumberFormat(num_format), DataFormat(data_format)); } DataFormat GetDataFmt() const noexcept { @@ -76,6 +76,16 @@ struct Buffer { u32 GetSize() const noexcept { return stride == 0 ? num_records : (stride * num_records); } + + u32 GetIndexStride() const noexcept { + // Index stride is 2 bits, meaning 8, 16, 32, or 64. + return 8 << index_stride; + } + + u32 GetElementSize() const noexcept { + // Element size is 2 bits, meaning 2, 4, 8, or 16. + return 2 << element_size; + } }; static_assert(sizeof(Buffer) == 16); // 128bits @@ -119,6 +129,7 @@ constexpr std::string_view NameOf(ImageType type) { enum class TilingMode : u32 { Depth_MacroTiled = 0u, Display_Linear = 0x8u, + Display_MicroTiled = 0x9u, Display_MacroTiled = 0xAu, Texture_MicroTiled = 0xDu, Texture_MacroTiled = 0xEu, @@ -131,6 +142,8 @@ constexpr std::string_view NameOf(TilingMode type) { return "Depth_MacroTiled"; case TilingMode::Display_Linear: return "Display_Linear"; + case TilingMode::Display_MicroTiled: + return "Display_MicroTiled"; case TilingMode::Display_MacroTiled: return "Display_MacroTiled"; case TilingMode::Texture_MicroTiled: @@ -226,15 +239,15 @@ struct Image { return pitch + 1; } - u32 NumLayers(bool is_array) const { - u32 slices = GetType() == ImageType::Color3D ? 1 : depth + 1; - if (GetType() == ImageType::Cube) { - if (is_array) { - slices = last_array + 1; - ASSERT(slices % 6 == 0); - } else { - slices = 6; - } + [[nodiscard]] u32 NumLayers() const noexcept { + // Depth is the number of layers for Array images. + u32 slices = depth + 1; + if (GetType() == ImageType::Color3D) { + // Depth is the actual texture depth for 3D images. + slices = 1; + } else if (IsCube()) { + // Depth is the number of full cubes for Cube images. + slices *= 6; } if (pow2pad) { slices = std::bit_ceil(slices); @@ -256,8 +269,12 @@ struct Image { return 1; } + bool IsCube() const noexcept { + return static_cast(type) == ImageType::Cube; + } + ImageType GetType() const noexcept { - return static_cast(type); + return IsCube() ? ImageType::Color2DArray : static_cast(type); } DataFormat GetDataFmt() const noexcept { @@ -265,7 +282,7 @@ struct Image { } NumberFormat GetNumberFmt() const noexcept { - return RemapNumberFormat(NumberFormat(num_format)); + return RemapNumberFormat(NumberFormat(num_format), DataFormat(data_format)); } NumberConversion GetNumberConversion() const noexcept { @@ -289,13 +306,48 @@ struct Image { GetDataFmt() <= DataFormat::FormatFmask64_8; } - bool IsPartialCubemap() const { - const auto viewed_slice = last_array - base_array + 1; - return GetType() == ImageType::Cube && viewed_slice < 6; + [[nodiscard]] ImageType GetViewType(const bool is_array) const noexcept { + const auto base_type = GetType(); + if (IsCube()) { + // Cube needs to remain array type regardless of instruction array specifier. + return base_type; + } + if (base_type == ImageType::Color1DArray && !is_array) { + return ImageType::Color1D; + } + if (base_type == ImageType::Color2DArray && !is_array) { + return ImageType::Color2D; + } + if (base_type == ImageType::Color2DMsaaArray && !is_array) { + return ImageType::Color2DMsaa; + } + return base_type; } - ImageType GetBoundType() const noexcept { - return IsPartialCubemap() ? ImageType::Color2DArray : GetType(); + [[nodiscard]] u32 NumViewLevels(const bool is_array) const noexcept { + switch (GetViewType(is_array)) { + case ImageType::Color2DMsaa: + case ImageType::Color2DMsaaArray: + return 1; + default: + // Constrain to actual number of available levels. + const auto max_level = std::min(last_level + 1, NumLevels()); + return max_level > base_level ? max_level - base_level : 1; + } + } + + [[nodiscard]] u32 NumViewLayers(const bool is_array) const noexcept { + switch (GetViewType(is_array)) { + case ImageType::Color1D: + case ImageType::Color2D: + case ImageType::Color2DMsaa: + case ImageType::Color3D: + return 1; + default: + // Constrain to actual number of available layers. + const auto max_array = std::min(last_array + 1, NumLayers()); + return max_array > base_array ? max_array - base_array : 1; + } } }; static_assert(sizeof(Image) == 32); // 256bits diff --git a/src/video_core/amdgpu/types.h b/src/video_core/amdgpu/types.h index a19e53256..57f97418a 100644 --- a/src/video_core/amdgpu/types.h +++ b/src/video_core/amdgpu/types.h @@ -252,7 +252,7 @@ inline DataFormat RemapDataFormat(const DataFormat format) { } } -inline NumberFormat RemapNumberFormat(const NumberFormat format) { +inline NumberFormat RemapNumberFormat(const NumberFormat format, const DataFormat data_format) { switch (format) { case NumberFormat::Uscaled: return NumberFormat::Uint; @@ -260,6 +260,14 @@ inline NumberFormat RemapNumberFormat(const NumberFormat format) { return NumberFormat::Sint; case NumberFormat::Ubnorm: return NumberFormat::Unorm; + case NumberFormat::Float: + if (data_format == DataFormat::Format8) { + // Games may ask for 8-bit float when they want to access the stencil component + // of a depth-stencil image. Change to unsigned int to match the stencil format. + // This is also the closest approximation to pass the bits through unconverted. + return NumberFormat::Uint; + } + [[fallthrough]]; default: return format; } diff --git a/src/video_core/buffer_cache/buffer.cpp b/src/video_core/buffer_cache/buffer.cpp index 5a049c185..a8d1271c6 100644 --- a/src/video_core/buffer_cache/buffer.cpp +++ b/src/video_core/buffer_cache/buffer.cpp @@ -131,6 +131,8 @@ vk::BufferView Buffer::View(u32 offset, u32 size, bool is_written, AmdGpu::DataF vk::to_string(view_result)); scheduler->DeferOperation( [view, device = instance->GetDevice()] { device.destroyBufferView(view); }); + Vulkan::SetObjectName(instance->GetDevice(), view, "BufferView {:#x}:{:#x}", cpu_addr + offset, + size); return view; } diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp index 3a210957e..487544a21 100644 --- a/src/video_core/buffer_cache/buffer_cache.cpp +++ b/src/video_core/buffer_cache/buffer_cache.cpp @@ -10,13 +10,13 @@ #include "video_core/amdgpu/liverpool.h" #include "video_core/buffer_cache/buffer_cache.h" #include "video_core/renderer_vulkan/liverpool_to_vk.h" +#include "video_core/renderer_vulkan/vk_graphics_pipeline.h" #include "video_core/renderer_vulkan/vk_instance.h" #include "video_core/renderer_vulkan/vk_scheduler.h" #include "video_core/texture_cache/texture_cache.h" namespace VideoCore { -static constexpr size_t NumVertexBuffers = 32; static constexpr size_t GdsBufferSize = 64_KB; static constexpr size_t StagingBufferSize = 1_GB; static constexpr size_t UboStreamBufferSize = 64_MB; @@ -89,35 +89,22 @@ void BufferCache::DownloadBufferMemory(Buffer& buffer, VAddr device_addr, u64 si } } -bool BufferCache::BindVertexBuffers( - const Shader::Info& vs_info, const std::optional& fetch_shader) { - boost::container::small_vector attributes; - boost::container::small_vector bindings; - SCOPE_EXIT { - if (instance.IsVertexInputDynamicState()) { - const auto cmdbuf = scheduler.CommandBuffer(); - cmdbuf.setVertexInputEXT(bindings, attributes); - } else if (bindings.empty()) { - // Required to call bindVertexBuffers2EXT at least once in the current command buffer - // with non-null strides without a non-dynamic stride pipeline in between. Thus even - // when nothing is bound we still need to make a dummy call. Non-null strides in turn - // requires a count greater than 0. - const auto cmdbuf = scheduler.CommandBuffer(); - const std::array null_buffers = {GetBuffer(NULL_BUFFER_ID).buffer.buffer}; - constexpr std::array null_offsets = {static_cast(0)}; - cmdbuf.bindVertexBuffers2EXT(0, null_buffers, null_offsets, null_offsets, null_offsets); - } - }; +void BufferCache::BindVertexBuffers(const Vulkan::GraphicsPipeline& pipeline) { + Vulkan::VertexInputs attributes; + Vulkan::VertexInputs bindings; + Vulkan::VertexInputs guest_buffers; + pipeline.GetVertexInputs(attributes, bindings, guest_buffers); - if (!fetch_shader || fetch_shader->attributes.empty()) { - return false; + if (instance.IsVertexInputDynamicState()) { + // Update current vertex inputs. + const auto cmdbuf = scheduler.CommandBuffer(); + cmdbuf.setVertexInputEXT(bindings, attributes); } - std::array host_buffers; - std::array host_offsets; - std::array host_sizes; - std::array host_strides; - boost::container::static_vector guest_buffers; + if (bindings.empty()) { + // If there are no bindings, there is nothing further to do. + return; + } struct BufferRange { VAddr base_address; @@ -125,61 +112,37 @@ bool BufferCache::BindVertexBuffers( vk::Buffer vk_buffer; u64 offset; - size_t GetSize() const { + [[nodiscard]] size_t GetSize() const { return end_address - base_address; } }; - // Calculate buffers memory overlaps - bool has_step_rate = false; - boost::container::static_vector ranges{}; - for (const auto& attrib : fetch_shader->attributes) { - if (attrib.UsesStepRates()) { - has_step_rate = true; - continue; + // Build list of ranges covering the requested buffers + Vulkan::VertexInputs ranges{}; + for (const auto& buffer : guest_buffers) { + if (buffer.GetSize() > 0) { + ranges.emplace_back(buffer.base_address, buffer.base_address + buffer.GetSize()); } + } - const auto& buffer = attrib.GetSharp(vs_info); - if (buffer.GetSize() == 0) { - continue; - } - guest_buffers.emplace_back(buffer); - ranges.emplace_back(buffer.base_address, buffer.base_address + buffer.GetSize()); - attributes.push_back({ - .location = attrib.semantic, - .binding = attrib.semantic, - .format = - Vulkan::LiverpoolToVK::SurfaceFormat(buffer.GetDataFmt(), buffer.GetNumberFmt()), - .offset = 0, + // Merge connecting ranges together + Vulkan::VertexInputs ranges_merged{}; + if (!ranges.empty()) { + std::ranges::sort(ranges, [](const BufferRange& lhv, const BufferRange& rhv) { + return lhv.base_address < rhv.base_address; }); - bindings.push_back({ - .binding = attrib.semantic, - .stride = buffer.GetStride(), - .inputRate = attrib.GetStepRate() == Shader::Gcn::VertexAttribute::InstanceIdType::None - ? vk::VertexInputRate::eVertex - : vk::VertexInputRate::eInstance, - .divisor = 1, - }); - } - if (ranges.empty()) { - return false; - } - - std::ranges::sort(ranges, [](const BufferRange& lhv, const BufferRange& rhv) { - return lhv.base_address < rhv.base_address; - }); - - boost::container::static_vector ranges_merged{ranges[0]}; - for (auto range : ranges) { - auto& prev_range = ranges_merged.back(); - if (prev_range.end_address < range.base_address) { - ranges_merged.emplace_back(range); - } else { - prev_range.end_address = std::max(prev_range.end_address, range.end_address); + ranges_merged.emplace_back(ranges[0]); + for (auto range : ranges) { + auto& prev_range = ranges_merged.back(); + if (prev_range.end_address < range.base_address) { + ranges_merged.emplace_back(range); + } else { + prev_range.end_address = std::max(prev_range.end_address, range.end_address); + } } } - // Map buffers + // Map buffers for merged ranges for (auto& range : ranges_merged) { const auto [buffer, offset] = ObtainBuffer(range.base_address, range.GetSize(), false); range.vk_buffer = buffer->buffer; @@ -187,32 +150,39 @@ bool BufferCache::BindVertexBuffers( } // Bind vertex buffers - const size_t num_buffers = guest_buffers.size(); - for (u32 i = 0; i < num_buffers; ++i) { - const auto& buffer = guest_buffers[i]; - const auto host_buffer = std::ranges::find_if(ranges_merged, [&](const BufferRange& range) { - return (buffer.base_address >= range.base_address && - buffer.base_address < range.end_address); - }); - ASSERT(host_buffer != ranges_merged.cend()); - - host_buffers[i] = host_buffer->vk_buffer; - host_offsets[i] = host_buffer->offset + buffer.base_address - host_buffer->base_address; - host_sizes[i] = buffer.GetSize(); - host_strides[i] = buffer.GetStride(); - } - - if (num_buffers > 0) { - const auto cmdbuf = scheduler.CommandBuffer(); - if (instance.IsVertexInputDynamicState()) { - cmdbuf.bindVertexBuffers(0, num_buffers, host_buffers.data(), host_offsets.data()); + Vulkan::VertexInputs host_buffers; + Vulkan::VertexInputs host_offsets; + Vulkan::VertexInputs host_sizes; + Vulkan::VertexInputs host_strides; + const auto null_buffer = + instance.IsNullDescriptorSupported() ? VK_NULL_HANDLE : GetBuffer(NULL_BUFFER_ID).Handle(); + for (const auto& buffer : guest_buffers) { + if (buffer.GetSize() > 0) { + const auto host_buffer_info = + std::ranges::find_if(ranges_merged, [&](const BufferRange& range) { + return buffer.base_address >= range.base_address && + buffer.base_address < range.end_address; + }); + ASSERT(host_buffer_info != ranges_merged.cend()); + host_buffers.emplace_back(host_buffer_info->vk_buffer); + host_offsets.push_back(host_buffer_info->offset + buffer.base_address - + host_buffer_info->base_address); } else { - cmdbuf.bindVertexBuffers2EXT(0, num_buffers, host_buffers.data(), host_offsets.data(), - host_sizes.data(), host_strides.data()); + host_buffers.emplace_back(null_buffer); + host_offsets.push_back(0); } + host_sizes.push_back(buffer.GetSize()); + host_strides.push_back(buffer.GetStride()); } - return has_step_rate; + const auto cmdbuf = scheduler.CommandBuffer(); + const auto num_buffers = guest_buffers.size(); + if (instance.IsVertexInputDynamicState()) { + cmdbuf.bindVertexBuffers(0, num_buffers, host_buffers.data(), host_offsets.data()); + } else { + cmdbuf.bindVertexBuffers2EXT(0, num_buffers, host_buffers.data(), host_offsets.data(), + host_sizes.data(), host_strides.data()); + } } void BufferCache::BindIndexBuffer(u32 index_offset) { diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index f29a37b63..575ee2c60 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -5,8 +5,6 @@ #include #include -#include -#include #include "common/div_ceil.h" #include "common/slot_vector.h" #include "common/types.h" @@ -26,6 +24,10 @@ struct FetchShaderData; struct Info; } // namespace Shader +namespace Vulkan { +class GraphicsPipeline; +} + namespace VideoCore { using BufferId = Common::SlotId; @@ -75,8 +77,7 @@ public: void InvalidateMemory(VAddr device_addr, u64 size); /// Binds host vertex buffers for the current draw. - bool BindVertexBuffers(const Shader::Info& vs_info, - const std::optional& fetch_shader); + void BindVertexBuffers(const Vulkan::GraphicsPipeline& pipeline); /// Bind host index buffer for the current draw. void BindIndexBuffer(u32 index_offset); diff --git a/src/video_core/buffer_cache/word_manager.h b/src/video_core/buffer_cache/word_manager.h index 7ad33d7a6..5ad724f96 100644 --- a/src/video_core/buffer_cache/word_manager.h +++ b/src/video_core/buffer_cache/word_manager.h @@ -8,6 +8,9 @@ #include #include +#ifdef __linux__ +#include "common/adaptive_mutex.h" +#endif #include "common/spin_lock.h" #include "common/types.h" #include "video_core/page_manager.h" @@ -272,7 +275,11 @@ private: } } +#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + Common::AdaptiveMutex lock; +#else Common::SpinLock lock; +#endif PageManager* tracker; VAddr cpu_addr = 0; WordsArray cpu; diff --git a/src/video_core/host_shaders/CMakeLists.txt b/src/video_core/host_shaders/CMakeLists.txt index a9c2964ad..e60cca122 100644 --- a/src/video_core/host_shaders/CMakeLists.txt +++ b/src/video_core/host_shaders/CMakeLists.txt @@ -2,6 +2,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later set(SHADER_FILES + detilers/display_micro_64bpp.comp detilers/macro_32bpp.comp detilers/macro_64bpp.comp detilers/macro_8bpp.comp diff --git a/src/video_core/host_shaders/detilers/display_micro_64bpp.comp b/src/video_core/host_shaders/detilers/display_micro_64bpp.comp new file mode 100644 index 000000000..3e0485682 --- /dev/null +++ b/src/video_core/host_shaders/detilers/display_micro_64bpp.comp @@ -0,0 +1,60 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#version 450 + +layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + +layout(std430, binding = 0) buffer input_buf { + uint in_data[]; +}; +layout(std430, binding = 1) buffer output_buf { + uint out_data[]; +}; + +layout(push_constant) uniform image_info { + uint num_levels; + uint pitch; + uint height; + uint c0; + uint c1; +} info; + +const uint lut_64bpp[16] = { + 0x05040100, 0x0d0c0908, + 0x07060302, 0x0f0e0b0a, + 0x15141110, 0x1d1c1918, + 0x17161312, 0x1f1e1b1a, + 0x25242120, 0x2d2c2928, + 0x27262322, 0x2f2e2b2a, + 0x35343130, 0x3d3c3938, + 0x37363332, 0x3f3e3b3a, +}; + +#define MICRO_TILE_DIM (8) +#define MICRO_TILE_SZ (512) +#define TEXELS_PER_ELEMENT (1) +#define BPP (64) + +void main() { + uint x = gl_GlobalInvocationID.x % info.pitch; + uint y = (gl_GlobalInvocationID.x / info.pitch) % info.height; + uint z = gl_GlobalInvocationID.x / (info.pitch * info.height); + + uint col = bitfieldExtract(x, 0, 3); + uint row = bitfieldExtract(y, 0, 3); + uint idx_dw = lut_64bpp[(col + row * MICRO_TILE_DIM) >> 2u]; + uint byte_ofs = gl_LocalInvocationID.x & 3u; + uint idx = bitfieldExtract(idx_dw >> (8 * byte_ofs), 0, 8); + + uint slice_offs = z * info.c1 * MICRO_TILE_SZ; + uint tile_row = y / MICRO_TILE_DIM; + uint tile_column = x / MICRO_TILE_DIM; + uint tile_offs = ((tile_row * info.c0) + tile_column) * MICRO_TILE_SZ; + uint offs = slice_offs + tile_offs + ((idx * BPP) / 8u); + + uint p0 = in_data[(offs >> 2) + 0]; + uint p1 = in_data[(offs >> 2) + 1]; + out_data[2 * gl_GlobalInvocationID.x + 0] = p0; + out_data[2 * gl_GlobalInvocationID.x + 1] = p1; +} diff --git a/src/video_core/page_manager.h b/src/video_core/page_manager.h index f44307f92..f6bae9641 100644 --- a/src/video_core/page_manager.h +++ b/src/video_core/page_manager.h @@ -5,6 +5,9 @@ #include #include +#ifdef __linux__ +#include "common/adaptive_mutex.h" +#endif #include "common/spin_lock.h" #include "common/types.h" @@ -36,7 +39,11 @@ private: std::unique_ptr impl; Vulkan::Rasterizer* rasterizer; boost::icl::interval_map cached_pages; +#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + Common::AdaptiveMutex lock; +#else Common::SpinLock lock; +#endif }; } // namespace VideoCore diff --git a/src/video_core/renderer_vulkan/liverpool_to_vk.h b/src/video_core/renderer_vulkan/liverpool_to_vk.h index a68280e7d..a9fcd03a9 100644 --- a/src/video_core/renderer_vulkan/liverpool_to_vk.h +++ b/src/video_core/renderer_vulkan/liverpool_to_vk.h @@ -71,8 +71,35 @@ vk::ClearValue ColorBufferClearValue(const AmdGpu::Liverpool::ColorBuffer& color vk::SampleCountFlagBits NumSamples(u32 num_samples, vk::SampleCountFlags supported_flags); +static inline bool IsFormatDepthCompatible(vk::Format fmt) { + switch (fmt) { + // 32-bit float compatible + case vk::Format::eD32Sfloat: + case vk::Format::eR32Sfloat: + case vk::Format::eR32Uint: + // 16-bit unorm compatible + case vk::Format::eD16Unorm: + case vk::Format::eR16Unorm: + return true; + default: + return false; + } +} + +static inline bool IsFormatStencilCompatible(vk::Format fmt) { + switch (fmt) { + // 8-bit uint compatible + case vk::Format::eS8Uint: + case vk::Format::eR8Uint: + case vk::Format::eR8Unorm: + return true; + default: + return false; + } +} + static inline vk::Format PromoteFormatToDepth(vk::Format fmt) { - if (fmt == vk::Format::eR32Sfloat) { + if (fmt == vk::Format::eR32Sfloat || fmt == vk::Format::eR32Uint) { return vk::Format::eD32Sfloat; } else if (fmt == vk::Format::eR16Unorm) { return vk::Format::eD16Unorm; diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp index b24767e8a..23faacfc2 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp @@ -59,9 +59,8 @@ ComputePipeline::ComputePipeline(const Instance& instance_, Scheduler& scheduler for (const auto& image : info->images) { bindings.push_back({ .binding = binding++, - .descriptorType = image.IsStorage(image.GetSharp(*info)) - ? vk::DescriptorType::eStorageImage - : vk::DescriptorType::eSampledImage, + .descriptorType = image.is_written ? vk::DescriptorType::eStorageImage + : vk::DescriptorType::eSampledImage, .descriptorCount = 1, .stageFlags = vk::ShaderStageFlagBits::eCompute, }); diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 0ca1bed8b..4ca3a7f27 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -57,35 +57,11 @@ GraphicsPipeline::GraphicsPipeline( pipeline_layout = std::move(layout); SetObjectName(device, *pipeline_layout, "Graphics PipelineLayout {}", debug_str); - boost::container::static_vector vertex_bindings; - boost::container::static_vector vertex_attributes; - if (fetch_shader && !instance.IsVertexInputDynamicState()) { - const auto& vs_info = GetStage(Shader::LogicalStage::Vertex); - for (const auto& attrib : fetch_shader->attributes) { - if (attrib.UsesStepRates()) { - // Skip attribute binding as the data will be pulled by shader - continue; - } - - const auto buffer = attrib.GetSharp(vs_info); - if (buffer.GetSize() == 0) { - continue; - } - vertex_attributes.push_back({ - .location = attrib.semantic, - .binding = attrib.semantic, - .format = LiverpoolToVK::SurfaceFormat(buffer.GetDataFmt(), buffer.GetNumberFmt()), - .offset = 0, - }); - vertex_bindings.push_back({ - .binding = attrib.semantic, - .stride = buffer.GetStride(), - .inputRate = - attrib.GetStepRate() == Shader::Gcn::VertexAttribute::InstanceIdType::None - ? vk::VertexInputRate::eVertex - : vk::VertexInputRate::eInstance, - }); - } + VertexInputs vertex_attributes; + VertexInputs vertex_bindings; + VertexInputs guest_buffers; + if (!instance.IsVertexInputDynamicState()) { + GetVertexInputs(vertex_attributes, vertex_bindings, guest_buffers); } const vk::PipelineVertexInputStateCreateInfo vertex_input_info = { @@ -161,7 +137,7 @@ GraphicsPipeline::GraphicsPipeline( } if (instance.IsVertexInputDynamicState()) { dynamic_states.push_back(vk::DynamicState::eVertexInputEXT); - } else { + } else if (!vertex_bindings.empty()) { dynamic_states.push_back(vk::DynamicState::eVertexInputBindingStrideEXT); } @@ -329,6 +305,51 @@ GraphicsPipeline::GraphicsPipeline( GraphicsPipeline::~GraphicsPipeline() = default; +template +void GraphicsPipeline::GetVertexInputs(VertexInputs& attributes, + VertexInputs& bindings, + VertexInputs& guest_buffers) const { + if (!fetch_shader || fetch_shader->attributes.empty()) { + return; + } + const auto& vs_info = GetStage(Shader::LogicalStage::Vertex); + for (const auto& attrib : fetch_shader->attributes) { + if (attrib.UsesStepRates()) { + // Skip attribute binding as the data will be pulled by shader. + continue; + } + + const auto& buffer = attrib.GetSharp(vs_info); + attributes.push_back(Attribute{ + .location = attrib.semantic, + .binding = attrib.semantic, + .format = LiverpoolToVK::SurfaceFormat(buffer.GetDataFmt(), buffer.GetNumberFmt()), + .offset = 0, + }); + bindings.push_back(Binding{ + .binding = attrib.semantic, + .stride = buffer.GetStride(), + .inputRate = attrib.GetStepRate() == Shader::Gcn::VertexAttribute::InstanceIdType::None + ? vk::VertexInputRate::eVertex + : vk::VertexInputRate::eInstance, + }); + if constexpr (std::is_same_v) { + bindings.back().divisor = 1; + } + guest_buffers.emplace_back(buffer); + } +} + +// Declare templated GetVertexInputs for necessary types. +template void GraphicsPipeline::GetVertexInputs( + VertexInputs& attributes, + VertexInputs& bindings, + VertexInputs& guest_buffers) const; +template void GraphicsPipeline::GetVertexInputs( + VertexInputs& attributes, + VertexInputs& bindings, + VertexInputs& guest_buffers) const; + void GraphicsPipeline::BuildDescSetLayout() { boost::container::small_vector bindings; u32 binding{}; @@ -367,9 +388,8 @@ void GraphicsPipeline::BuildDescSetLayout() { for (const auto& image : stage->images) { bindings.push_back({ .binding = binding++, - .descriptorType = image.IsStorage(image.GetSharp(*stage)) - ? vk::DescriptorType::eStorageImage - : vk::DescriptorType::eSampledImage, + .descriptorType = image.is_written ? vk::DescriptorType::eStorageImage + : vk::DescriptorType::eSampledImage, .descriptorCount = 1, .stageFlags = gp_stage_flags, }); diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.h b/src/video_core/renderer_vulkan/vk_graphics_pipeline.h index fa10831a0..9a20f94c1 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.h +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include "common/types.h" @@ -27,6 +28,9 @@ class DescriptorHeap; using Liverpool = AmdGpu::Liverpool; +template +using VertexInputs = boost::container::static_vector; + struct GraphicsPipelineKey { std::array stage_hashes; u32 num_color_attachments; @@ -38,13 +42,14 @@ struct GraphicsPipelineKey { vk::Format stencil_format; struct { + bool clip_disable : 1; bool depth_test_enable : 1; bool depth_write_enable : 1; bool depth_bounds_test_enable : 1; bool depth_bias_enable : 1; bool stencil_test_enable : 1; // Must be named to be zero-initialized. - u8 _unused : 3; + u8 _unused : 2; }; vk::CompareOp depth_compare_op; @@ -90,6 +95,10 @@ public: return key.mrt_mask; } + auto IsClipDisabled() const { + return key.clip_disable; + } + [[nodiscard]] bool IsPrimitiveListTopology() const { return key.prim_type == AmdGpu::PrimitiveType::PointList || key.prim_type == AmdGpu::PrimitiveType::LineList || @@ -100,6 +109,11 @@ public: key.prim_type == AmdGpu::PrimitiveType::QuadList; } + /// Gets the attributes and bindings for vertex inputs. + template + void GetVertexInputs(VertexInputs& attributes, VertexInputs& bindings, + VertexInputs& guest_buffers) const; + private: void BuildDescSetLayout(); diff --git a/src/video_core/renderer_vulkan/vk_instance.cpp b/src/video_core/renderer_vulkan/vk_instance.cpp index 9bc627830..5efdf4127 100644 --- a/src/video_core/renderer_vulkan/vk_instance.cpp +++ b/src/video_core/renderer_vulkan/vk_instance.cpp @@ -92,15 +92,13 @@ std::string GetReadableVersion(u32 version) { Instance::Instance(bool enable_validation, bool enable_crash_diagnostic) : instance{CreateInstance(Frontend::WindowSystemType::Headless, enable_validation, enable_crash_diagnostic)}, - physical_devices{EnumeratePhysicalDevices(instance)}, - crash_diagnostic{enable_crash_diagnostic} {} + physical_devices{EnumeratePhysicalDevices(instance)} {} Instance::Instance(Frontend::WindowSDL& window, s32 physical_device_index, bool enable_validation /*= false*/, bool enable_crash_diagnostic /*= false*/) : instance{CreateInstance(window.GetWindowInfo().type, enable_validation, enable_crash_diagnostic)}, - physical_devices{EnumeratePhysicalDevices(instance)}, - crash_diagnostic{enable_crash_diagnostic} { + physical_devices{EnumeratePhysicalDevices(instance)} { if (enable_validation) { debug_callback = CreateDebugCallback(*instance); } @@ -210,6 +208,7 @@ std::string Instance::GetDriverVersionName() { bool Instance::CreateDevice() { const vk::StructureChain feature_chain = physical_device.getFeatures2< vk::PhysicalDeviceFeatures2, vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT, + vk::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT, vk::PhysicalDeviceExtendedDynamicState2FeaturesEXT, vk::PhysicalDeviceExtendedDynamicState3FeaturesEXT, vk::PhysicalDeviceCustomBorderColorFeaturesEXT, @@ -271,6 +270,7 @@ bool Instance::CreateDevice() { maintenance5 = add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME); legacy_vertex_attributes = add_extension(VK_EXT_LEGACY_VERTEX_ATTRIBUTES_EXTENSION_NAME); image_load_store_lod = add_extension(VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME); + amd_gcn_shader = add_extension(VK_AMD_GCN_SHADER_EXTENSION_NAME); // These extensions are promoted by Vulkan 1.3, but for greater compatibility we use Vulkan 1.2 // with extensions. @@ -317,6 +317,9 @@ bool Instance::CreateDevice() { .pQueuePriorities = queue_priorities.data(), }; + const auto topology_list_restart_features = + feature_chain.get(); + const auto vk12_features = feature_chain.get(); vk::StructureChain device_chain = { vk::DeviceCreateInfo{ @@ -406,6 +409,8 @@ bool Instance::CreateDevice() { }, vk::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT{ .primitiveTopologyListRestart = true, + .primitiveTopologyPatchListRestart = + topology_list_restart_features.primitiveTopologyPatchListRestart, }, vk::PhysicalDeviceFragmentShaderBarycentricFeaturesKHR{ .fragmentShaderBarycentric = true, @@ -563,8 +568,6 @@ void Instance::CollectToolingInfo() { for (const vk::PhysicalDeviceToolProperties& tool : tools) { const std::string_view name = tool.name; LOG_INFO(Render_Vulkan, "Attached debugging tool: {}", name); - has_renderdoc = has_renderdoc || name == "RenderDoc"; - has_nsight_graphics = has_nsight_graphics || name == "NVIDIA Nsight Graphics"; } } diff --git a/src/video_core/renderer_vulkan/vk_instance.h b/src/video_core/renderer_vulkan/vk_instance.h index 4e091824d..8c4752c3f 100644 --- a/src/video_core/renderer_vulkan/vk_instance.h +++ b/src/video_core/renderer_vulkan/vk_instance.h @@ -79,11 +79,6 @@ public: return profiler_context; } - /// Returns true when a known debugging tool is attached. - bool HasDebuggingToolAttached() const { - return crash_diagnostic || has_renderdoc || has_nsight_graphics; - } - /// Returns true if anisotropic filtering is supported bool IsAnisotropicFilteringSupported() const { return features.samplerAnisotropy; @@ -159,6 +154,11 @@ public: return image_load_store_lod; } + /// Returns true when VK_AMD_gcn_shader is supported. + bool IsAmdGcnShaderSupported() const { + return amd_gcn_shader; + } + /// Returns true when geometry shaders are supported by the device bool IsGeometryStageSupported() const { return features.geometryShader; @@ -239,6 +239,11 @@ public: return subgroup_size; } + /// Returns the maximum size of compute shared memory. + u32 MaxComputeSharedMemorySize() const { + return properties.limits.maxComputeSharedMemorySize; + } + /// Returns the maximum supported elements in a texel buffer u32 MaxTexelBufferElements() const { return properties.limits.maxTexelBufferElements; @@ -274,6 +279,14 @@ public: return min_imported_host_pointer_alignment; } + u32 GetMaxViewportWidth() const { + return properties.limits.maxViewportDimensions[0]; + } + + u32 GetMaxViewportHeight() const { + return properties.limits.maxViewportDimensions[1]; + } + /// Returns the sample count flags supported by framebuffers. vk::SampleCountFlags GetFramebufferSampleCounts() const { return properties.limits.framebufferColorSampleCounts & @@ -334,13 +347,10 @@ private: bool list_restart{}; bool legacy_vertex_attributes{}; bool image_load_store_lod{}; + bool amd_gcn_shader{}; + bool tooling_info{}; u64 min_imported_host_pointer_alignment{}; u32 subgroup_size{}; - bool tooling_info{}; - bool debug_utils_supported{}; - bool crash_diagnostic{}; - bool has_nsight_graphics{}; - bool has_renderdoc{}; }; } // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 9cfc7c277..c6a56745d 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -125,6 +125,7 @@ const Shader::RuntimeInfo& PipelineCache::BuildRuntimeInfo(Stage stage, LogicalS info.vs_info.emulate_depth_negative_one_to_one = !instance.IsDepthClipControlSupported() && regs.clipper_control.clip_space == Liverpool::ClipSpace::MinusWToW; + info.vs_info.clip_disable = graphics_key.clip_disable; if (l_stage == LogicalStage::TessellationEval) { info.vs_info.tess_type = regs.tess_config.type; info.vs_info.tess_topology = regs.tess_config.topology; @@ -183,6 +184,7 @@ const Shader::RuntimeInfo& PipelineCache::BuildRuntimeInfo(Stage stage, LogicalS info.cs_info.tgid_enable = {cs_pgm.IsTgidEnabled(0), cs_pgm.IsTgidEnabled(1), cs_pgm.IsTgidEnabled(2)}; info.cs_info.shared_memory_size = cs_pgm.SharedMemSize(); + info.cs_info.max_shared_memory_size = instance.MaxComputeSharedMemorySize(); break; } default: @@ -204,10 +206,13 @@ PipelineCache::PipelineCache(const Instance& instance_, Scheduler& scheduler_, .support_explicit_workgroup_layout = true, .support_legacy_vertex_attributes = instance_.IsLegacyVertexAttributesSupported(), .supports_image_load_store_lod = instance_.IsImageLoadStoreLodSupported(), + .supports_native_cube_calc = instance_.IsAmdGcnShaderSupported(), .needs_manual_interpolation = instance.IsFragmentShaderBarycentricSupported() && instance.GetDriverID() == vk::DriverId::eNvidiaProprietary, .needs_lds_barriers = instance.GetDriverID() == vk::DriverId::eNvidiaProprietary || instance.GetDriverID() == vk::DriverId::eMoltenvk, + .max_viewport_width = instance.GetMaxViewportWidth(), + .max_viewport_height = instance.GetMaxViewportHeight(), }; auto [cache_result, cache] = instance.GetDevice().createPipelineCacheUnique({}); ASSERT_MSG(cache_result == vk::Result::eSuccess, "Failed to create pipeline cache: {}", @@ -260,6 +265,8 @@ bool PipelineCache::RefreshGraphicsKey() { auto& regs = liverpool->regs; auto& key = graphics_key; + key.clip_disable = + regs.clipper_control.clip_disable || regs.primitive_type == AmdGpu::PrimitiveType::RectList; key.depth_test_enable = regs.depth_control.depth_enable; key.depth_write_enable = regs.depth_control.depth_write_enable && !regs.depth_render_control.depth_clear_enable; @@ -419,17 +426,17 @@ bool PipelineCache::RefreshGraphicsKey() { } } - const auto vs_info = infos[static_cast(Shader::LogicalStage::Vertex)]; + const auto* vs_info = infos[static_cast(Shader::LogicalStage::Vertex)]; if (vs_info && fetch_shader && !instance.IsVertexInputDynamicState()) { + // Without vertex input dynamic state, the pipeline needs to specialize on format. + // Stride will still be handled outside the pipeline using dynamic state. u32 vertex_binding = 0; for (const auto& attrib : fetch_shader->attributes) { if (attrib.UsesStepRates()) { + // Skip attribute binding as the data will be pulled by shader. continue; } const auto& buffer = attrib.GetSharp(*vs_info); - if (buffer.GetSize() == 0) { - continue; - } ASSERT(vertex_binding < MaxVertexBufferCount); key.vertex_buffer_formats[vertex_binding++] = Vulkan::LiverpoolToVK::SurfaceFormat(buffer.GetDataFmt(), buffer.GetNumberFmt()); diff --git a/src/video_core/renderer_vulkan/vk_platform.cpp b/src/video_core/renderer_vulkan/vk_platform.cpp index 7f0bcb5d2..fdd590e9d 100644 --- a/src/video_core/renderer_vulkan/vk_platform.cpp +++ b/src/video_core/renderer_vulkan/vk_platform.cpp @@ -31,17 +31,6 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL DebugUtilsCallback( VkDebugUtilsMessageSeverityFlagBitsEXT severity, VkDebugUtilsMessageTypeFlagsEXT type, const VkDebugUtilsMessengerCallbackDataEXT* callback_data, void* user_data) { - switch (static_cast(callback_data->messageIdNumber)) { - case 0x609a13b: // Vertex attribute at location not consumed by shader - case 0xc81ad50e: - case 0xb7c39078: - case 0x32868fde: // vkCreateBufferView(): pCreateInfo->range does not equal VK_WHOLE_SIZE - case 0x1012616b: // `VK_FORMAT_UNDEFINED` does not match fragment shader output type - return VK_FALSE; - default: - break; - } - Common::Log::Level level{}; switch (severity) { case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: diff --git a/src/video_core/renderer_vulkan/vk_platform.h b/src/video_core/renderer_vulkan/vk_platform.h index 6b425b6d8..d05d12997 100644 --- a/src/video_core/renderer_vulkan/vk_platform.h +++ b/src/video_core/renderer_vulkan/vk_platform.h @@ -7,6 +7,7 @@ #include #include +#include "common/config.h" #include "common/logging/log.h" #include "common/types.h" #include "video_core/renderer_vulkan/vk_common.h" @@ -32,6 +33,9 @@ concept VulkanHandleType = vk::isVulkanHandleType::value; template void SetObjectName(vk::Device device, const HandleType& handle, std::string_view debug_name) { + if (!Config::vkHostMarkersEnabled()) { + return; + } const vk::DebugUtilsObjectNameInfoEXT name_info = { .objectType = HandleType::objectType, .objectHandle = reinterpret_cast(static_cast(handle)), @@ -46,6 +50,9 @@ void SetObjectName(vk::Device device, const HandleType& handle, std::string_view template void SetObjectName(vk::Device device, const HandleType& handle, const char* format, const Args&... args) { + if (!Config::vkHostMarkersEnabled()) { + return; + } const std::string debug_name = fmt::vformat(format, fmt::make_format_args(args...)); SetObjectName(device, handle, debug_name); } diff --git a/src/video_core/renderer_vulkan/vk_presenter.cpp b/src/video_core/renderer_vulkan/vk_presenter.cpp index 1679aa691..36d64a5d5 100644 --- a/src/video_core/renderer_vulkan/vk_presenter.cpp +++ b/src/video_core/renderer_vulkan/vk_presenter.cpp @@ -20,6 +20,9 @@ #include +#include +#include "imgui/renderer/imgui_impl_vulkan.h" + namespace Vulkan { bool CanBlitToSwapchain(const vk::PhysicalDevice physical_device, vk::Format format) { @@ -103,17 +106,6 @@ static vk::Rect2D FitImage(s32 frame_width, s32 frame_height, s32 swapchain_widt dst_rect.offset.x, dst_rect.offset.y); } -static vk::Format FormatToUnorm(vk::Format fmt) { - switch (fmt) { - case vk::Format::eR8G8B8A8Srgb: - return vk::Format::eR8G8B8A8Unorm; - case vk::Format::eB8G8R8A8Srgb: - return vk::Format::eB8G8R8A8Unorm; - default: - UNREACHABLE(); - } -} - void Presenter::CreatePostProcessPipeline() { static const std::array pp_shaders{ HostShaders::FS_TRI_VERT, @@ -324,9 +316,6 @@ Presenter::Presenter(Frontend::WindowSDL& window_, AmdGpu::Liverpool* liverpool_ CreatePostProcessPipeline(); - // Setup ImGui - ImGui::Core::Initialize(instance, window, num_images, - FormatToUnorm(swapchain.GetSurfaceFormat().format)); ImGui::Layer::AddLayer(Common::Singleton::Instance()); } @@ -344,6 +333,9 @@ Presenter::~Presenter() { void Presenter::RecreateFrame(Frame* frame, u32 width, u32 height) { const vk::Device device = instance.GetDevice(); + if (frame->imgui_texture) { + ImGui::Vulkan::RemoveTexture(frame->imgui_texture); + } if (frame->image_view) { device.destroyImageView(frame->image_view); } @@ -361,7 +353,7 @@ void Presenter::RecreateFrame(Frame* frame, u32 width, u32 height) { .arrayLayers = 1, .samples = vk::SampleCountFlagBits::e1, .usage = vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eTransferDst | - vk::ImageUsageFlagBits::eTransferSrc, + vk::ImageUsageFlagBits::eTransferSrc | vk::ImageUsageFlagBits::eSampled, }; const VmaAllocationCreateInfo alloc_info = { @@ -388,7 +380,7 @@ void Presenter::RecreateFrame(Frame* frame, u32 width, u32 height) { const vk::ImageViewCreateInfo view_info = { .image = frame->image, .viewType = vk::ImageViewType::e2D, - .format = FormatToUnorm(format), + .format = format, .subresourceRange{ .aspectMask = vk::ImageAspectFlagBits::eColor, .baseMipLevel = 0, @@ -403,6 +395,63 @@ void Presenter::RecreateFrame(Frame* frame, u32 width, u32 height) { frame->image_view = view; frame->width = width; frame->height = height; + + frame->imgui_texture = ImGui::Vulkan::AddTexture(view, vk::ImageLayout::eShaderReadOnlyOptimal); +} + +Frame* Presenter::PrepareLastFrame() { + if (last_submit_frame == nullptr) { + return nullptr; + } + + Frame* frame = last_submit_frame; + + while (true) { + vk::Result result = instance.GetDevice().waitForFences(frame->present_done, false, + std::numeric_limits::max()); + if (result == vk::Result::eSuccess) { + break; + } + if (result == vk::Result::eTimeout) { + continue; + } + ASSERT_MSG(result != vk::Result::eErrorDeviceLost, + "Device lost during waiting for a frame"); + } + + auto& scheduler = flip_scheduler; + scheduler.EndRendering(); + const auto cmdbuf = scheduler.CommandBuffer(); + + const auto frame_subresources = vk::ImageSubresourceRange{ + .aspectMask = vk::ImageAspectFlagBits::eColor, + .baseMipLevel = 0, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = VK_REMAINING_ARRAY_LAYERS, + }; + + const auto pre_barrier = + vk::ImageMemoryBarrier2{.srcStageMask = vk::PipelineStageFlagBits2::eColorAttachmentOutput, + .srcAccessMask = vk::AccessFlagBits2::eColorAttachmentRead, + .dstStageMask = vk::PipelineStageFlagBits2::eColorAttachmentOutput, + .dstAccessMask = vk::AccessFlagBits2::eColorAttachmentWrite, + .oldLayout = vk::ImageLayout::eShaderReadOnlyOptimal, + .newLayout = vk::ImageLayout::eGeneral, + .image = frame->image, + .subresourceRange{frame_subresources}}; + + cmdbuf.pipelineBarrier2(vk::DependencyInfo{ + .imageMemoryBarrierCount = 1, + .pImageMemoryBarriers = &pre_barrier, + }); + + // Flush frame creation commands. + frame->ready_semaphore = scheduler.GetMasterSemaphore()->Handle(); + frame->ready_tick = scheduler.CurrentTick(); + SubmitInfo info{}; + scheduler.Flush(info); + return frame; } bool Presenter::ShowSplash(Frame* frame /*= nullptr*/) { @@ -418,10 +467,16 @@ bool Presenter::ShowSplash(Frame* frame /*= nullptr*/) { draw_scheduler.EndRendering(); const auto cmdbuf = draw_scheduler.CommandBuffer(); + if (Config::vkHostMarkersEnabled()) { + cmdbuf.beginDebugUtilsLabelEXT(vk::DebugUtilsLabelEXT{ + .pLabelName = "ShowSplash", + }); + } + if (!frame) { if (!splash_img.has_value()) { VideoCore::ImageInfo info{}; - info.pixel_format = vk::Format::eR8G8B8A8Srgb; + info.pixel_format = vk::Format::eR8G8B8A8Unorm; info.type = vk::ImageType::e2D; info.size = VideoCore::Extent3D{splash->GetImageInfo().width, splash->GetImageInfo().height, 1}; @@ -432,6 +487,7 @@ bool Presenter::ShowSplash(Frame* frame /*= nullptr*/) { splash->GetImageInfo().width, splash->GetImageInfo().height, 0); splash_img.emplace(instance, present_scheduler, info); + splash_img->flags &= ~VideoCore::GpuDirty; texture_cache.RefreshImage(*splash_img); splash_img->Transit(vk::ImageLayout::eTransferSrcOptimal, @@ -485,6 +541,10 @@ bool Presenter::ShowSplash(Frame* frame /*= nullptr*/) { .pImageMemoryBarriers = &post_barrier, }); + if (Config::vkHostMarkersEnabled()) { + cmdbuf.endDebugUtilsLabelEXT(); + } + // Flush frame creation commands. frame->ready_semaphore = draw_scheduler.GetMasterSemaphore()->Handle(); frame->ready_tick = draw_scheduler.CurrentTick(); @@ -499,12 +559,26 @@ Frame* Presenter::PrepareFrameInternal(VideoCore::ImageId image_id, bool is_eop) // Request a free presentation frame. Frame* frame = GetRenderFrame(); + if (image_id != VideoCore::NULL_IMAGE_ID) { + const auto& image = texture_cache.GetImage(image_id); + const auto extent = image.info.size; + if (frame->width != extent.width || frame->height != extent.height) { + RecreateFrame(frame, extent.width, extent.height); + } + } + // EOP flips are triggered from GPU thread so use the drawing scheduler to record // commands. Otherwise we are dealing with a CPU flip which could have arrived // from any guest thread. Use a separate scheduler for that. auto& scheduler = is_eop ? draw_scheduler : flip_scheduler; scheduler.EndRendering(); const auto cmdbuf = scheduler.CommandBuffer(); + if (Config::vkHostMarkersEnabled()) { + const auto label = fmt::format("PrepareFrameInternal:{}", image_id.index); + cmdbuf.beginDebugUtilsLabelEXT(vk::DebugUtilsLabelEXT{ + .pLabelName = label.c_str(), + }); + } const auto frame_subresources = vk::ImageSubresourceRange{ .aspectMask = vk::ImageAspectFlagBits::eColor, @@ -515,8 +589,8 @@ Frame* Presenter::PrepareFrameInternal(VideoCore::ImageId image_id, bool is_eop) }; const auto pre_barrier = - vk::ImageMemoryBarrier2{.srcStageMask = vk::PipelineStageFlagBits2::eTransfer, - .srcAccessMask = vk::AccessFlagBits2::eTransferRead, + vk::ImageMemoryBarrier2{.srcStageMask = vk::PipelineStageFlagBits2::eColorAttachmentOutput, + .srcAccessMask = vk::AccessFlagBits2::eColorAttachmentRead, .dstStageMask = vk::PipelineStageFlagBits2::eColorAttachmentOutput, .dstAccessMask = vk::AccessFlagBits2::eColorAttachmentWrite, .oldLayout = vk::ImageLayout::eUndefined, @@ -529,6 +603,23 @@ Frame* Presenter::PrepareFrameInternal(VideoCore::ImageId image_id, bool is_eop) .pImageMemoryBarriers = &pre_barrier, }); + const std::array attachments = {vk::RenderingAttachmentInfo{ + .imageView = frame->image_view, + .imageLayout = vk::ImageLayout::eColorAttachmentOptimal, + .loadOp = vk::AttachmentLoadOp::eClear, + .storeOp = vk::AttachmentStoreOp::eStore, + }}; + const vk::RenderingInfo rendering_info{ + .renderArea = + vk::Rect2D{ + .offset = {0, 0}, + .extent = {frame->width, frame->height}, + }, + .layerCount = 1, + .colorAttachmentCount = attachments.size(), + .pColorAttachments = attachments.data(), + }; + if (image_id != VideoCore::NULL_IMAGE_ID) { auto& image = texture_cache.GetImage(image_id); image.Transit(vk::ImageLayout::eShaderReadOnlyOptimal, vk::AccessFlagBits2::eShaderRead, {}, @@ -541,6 +632,13 @@ Frame* Presenter::PrepareFrameInternal(VideoCore::ImageId image_id, bool is_eop) VideoCore::ImageViewInfo info{}; info.format = image.info.pixel_format; + // Exclude alpha from output frame to avoid blending with UI. + info.mapping = vk::ComponentMapping{ + .r = vk::ComponentSwizzle::eIdentity, + .g = vk::ComponentSwizzle::eIdentity, + .b = vk::ComponentSwizzle::eIdentity, + .a = vk::ComponentSwizzle::eOne, + }; if (auto view = image.FindView(info)) { image_info.imageView = *texture_cache.GetImageView(view).image_view; } else { @@ -582,26 +680,13 @@ Frame* Presenter::PrepareFrameInternal(VideoCore::ImageId image_id, bool is_eop) cmdbuf.pushConstants(*pp_pipeline_layout, vk::ShaderStageFlagBits::eFragment, 0, sizeof(PostProcessSettings), &pp_settings); - const std::array attachments = {vk::RenderingAttachmentInfo{ - .imageView = frame->image_view, - .imageLayout = vk::ImageLayout::eColorAttachmentOptimal, - .loadOp = vk::AttachmentLoadOp::eClear, - .storeOp = vk::AttachmentStoreOp::eStore, - }}; - - vk::RenderingInfo rendering_info{ - .renderArea = - vk::Rect2D{ - .offset = {0, 0}, - .extent = {frame->width, frame->height}, - }, - .layerCount = 1, - .colorAttachmentCount = attachments.size(), - .pColorAttachments = attachments.data(), - }; cmdbuf.beginRendering(rendering_info); cmdbuf.draw(3, 1, 0, 0); cmdbuf.endRendering(); + } else { + // Fix display of garbage images on startup on some drivers + cmdbuf.beginRendering(rendering_info); + cmdbuf.endRendering(); } const auto post_barrier = @@ -619,6 +704,10 @@ Frame* Presenter::PrepareFrameInternal(VideoCore::ImageId image_id, bool is_eop) .pImageMemoryBarriers = &post_barrier, }); + if (Config::vkHostMarkersEnabled()) { + cmdbuf.endDebugUtilsLabelEXT(); + } + // Flush frame creation commands. frame->ready_semaphore = scheduler.GetMasterSemaphore()->Handle(); frame->ready_tick = scheduler.CurrentTick(); @@ -627,17 +716,19 @@ Frame* Presenter::PrepareFrameInternal(VideoCore::ImageId image_id, bool is_eop) return frame; } -void Presenter::Present(Frame* frame) { +void Presenter::Present(Frame* frame, bool is_reusing_frame) { // Free the frame for reuse const auto free_frame = [&] { - std::scoped_lock fl{free_mutex}; - free_queue.push(frame); - free_cv.notify_one(); + if (!is_reusing_frame) { + last_submit_frame = frame; + std::scoped_lock fl{free_mutex}; + free_queue.push(frame); + free_cv.notify_one(); + } }; // Recreate the swapchain if the window was resized. - if (window.GetWidth() != swapchain.GetExtent().width || - window.GetHeight() != swapchain.GetExtent().height) { + if (window.GetWidth() != swapchain.GetWidth() || window.GetHeight() != swapchain.GetHeight()) { swapchain.Recreate(window.GetWidth(), window.GetHeight()); } @@ -656,14 +747,19 @@ void Presenter::Present(Frame* frame) { // the frame's present fence and future GetRenderFrame() call will hang waiting for this frame. instance.GetDevice().resetFences(frame->present_done); - ImGui::Core::NewFrame(); + ImGuiID dockId = ImGui::Core::NewFrame(is_reusing_frame); const vk::Image swapchain_image = swapchain.Image(); + const vk::ImageView swapchain_image_view = swapchain.ImageView(); auto& scheduler = present_scheduler; const auto cmdbuf = scheduler.CommandBuffer(); - ImGui::Core::Render(cmdbuf, frame); + if (Config::vkHostMarkersEnabled()) { + cmdbuf.beginDebugUtilsLabelEXT(vk::DebugUtilsLabelEXT{ + .pLabelName = "Present", + }); + } { auto* profiler_ctx = instance.GetProfilerContext(); @@ -674,9 +770,9 @@ void Presenter::Present(Frame* frame) { const std::array pre_barriers{ vk::ImageMemoryBarrier{ .srcAccessMask = vk::AccessFlagBits::eNone, - .dstAccessMask = vk::AccessFlagBits::eTransferWrite, + .dstAccessMask = vk::AccessFlagBits::eColorAttachmentWrite, .oldLayout = vk::ImageLayout::eUndefined, - .newLayout = vk::ImageLayout::eTransferDstOptimal, + .newLayout = vk::ImageLayout::eColorAttachmentOptimal, .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .image = swapchain_image, @@ -690,9 +786,9 @@ void Presenter::Present(Frame* frame) { }, vk::ImageMemoryBarrier{ .srcAccessMask = vk::AccessFlagBits::eColorAttachmentWrite, - .dstAccessMask = vk::AccessFlagBits::eTransferRead, + .dstAccessMask = vk::AccessFlagBits::eColorAttachmentRead, .oldLayout = vk::ImageLayout::eGeneral, - .newLayout = vk::ImageLayout::eTransferSrcOptimal, + .newLayout = vk::ImageLayout::eShaderReadOnlyOptimal, .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .image = frame->image, @@ -705,10 +801,11 @@ void Presenter::Present(Frame* frame) { }, }, }; + const vk::ImageMemoryBarrier post_barrier{ - .srcAccessMask = vk::AccessFlagBits::eTransferWrite, + .srcAccessMask = vk::AccessFlagBits::eColorAttachmentWrite, .dstAccessMask = vk::AccessFlagBits::eMemoryRead, - .oldLayout = vk::ImageLayout::eTransferDstOptimal, + .oldLayout = vk::ImageLayout::eColorAttachmentOptimal, .newLayout = vk::ImageLayout::ePresentSrcKHR, .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, @@ -723,14 +820,29 @@ void Presenter::Present(Frame* frame) { }; cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eColorAttachmentOutput, - vk::PipelineStageFlagBits::eTransfer, + vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlagBits::eByRegion, {}, {}, pre_barriers); - cmdbuf.blitImage( - frame->image, vk::ImageLayout::eTransferSrcOptimal, swapchain_image, - vk::ImageLayout::eTransferDstOptimal, - MakeImageBlitStretch(frame->width, frame->height, extent.width, extent.height), - vk::Filter::eLinear); + { // Draw the game + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{0.0f}); + ImGui::SetNextWindowDockID(dockId, ImGuiCond_Once); + ImGui::Begin("Display##game_display", nullptr, ImGuiWindowFlags_NoNav); + + ImVec2 contentArea = ImGui::GetContentRegionAvail(); + const vk::Rect2D imgRect = + FitImage(frame->width, frame->height, (s32)contentArea.x, (s32)contentArea.y); + ImGui::SetCursorPos(ImGui::GetCursorStartPos() + ImVec2{ + (float)imgRect.offset.x, + (float)imgRect.offset.y, + }); + ImGui::Image(frame->imgui_texture, { + static_cast(imgRect.extent.width), + static_cast(imgRect.extent.height), + }); + ImGui::End(); + ImGui::PopStyleVar(); + } + ImGui::Core::Render(cmdbuf, swapchain_image_view, swapchain.GetExtent()); cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eAllCommands, @@ -741,6 +853,10 @@ void Presenter::Present(Frame* frame) { } } + if (Config::vkHostMarkersEnabled()) { + cmdbuf.endDebugUtilsLabelEXT(); + } + // Flush vulkan commands. SubmitInfo info{}; info.AddWait(swapchain.GetImageAcquiredSemaphore()); @@ -756,7 +872,9 @@ void Presenter::Present(Frame* frame) { } free_frame(); - DebugState.IncFlipFrameNum(); + if (!is_reusing_frame) { + DebugState.IncFlipFrameNum(); + } } Frame* Presenter::GetRenderFrame() { @@ -790,9 +908,9 @@ Frame* Presenter::GetRenderFrame() { } } - // If the window dimensions changed, recreate this frame - if (frame->width != window.GetWidth() || frame->height != window.GetHeight()) { - RecreateFrame(frame, window.GetWidth(), window.GetHeight()); + // Initialize default frame image + if (frame->width == 0 || frame->height == 0) { + RecreateFrame(frame, 1920, 1080); } return frame; diff --git a/src/video_core/renderer_vulkan/vk_presenter.h b/src/video_core/renderer_vulkan/vk_presenter.h index 4c29af0f0..63cb30834 100644 --- a/src/video_core/renderer_vulkan/vk_presenter.h +++ b/src/video_core/renderer_vulkan/vk_presenter.h @@ -5,6 +5,7 @@ #include +#include "imgui/imgui_config.h" #include "video_core/amdgpu/liverpool.h" #include "video_core/renderer_vulkan/vk_instance.h" #include "video_core/renderer_vulkan/vk_scheduler.h" @@ -30,6 +31,8 @@ struct Frame { vk::Fence present_done; vk::Semaphore ready_semaphore; u64 ready_tick; + + ImTextureID imgui_texture; }; enum SchedulerType { @@ -86,8 +89,9 @@ public: } bool ShowSplash(Frame* frame = nullptr); - void Present(Frame* frame); + void Present(Frame* frame, bool is_reusing_frame = false); void RecreateFrame(Frame* frame, u32 width, u32 height); + Frame* PrepareLastFrame(); void FlushDraw() { SubmitInfo info{}; @@ -121,6 +125,7 @@ private: vk::UniqueCommandPool command_pool; std::vector present_frames; std::queue free_queue; + Frame* last_submit_frame; std::mutex free_mutex; std::condition_variable free_cv; std::condition_variable_any frame_cv; diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index e8616550b..88b510eca 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -58,6 +58,7 @@ bool Rasterizer::FilterDraw() { if (regs.color_control.mode == Liverpool::ColorControl::OperationMode::FmaskDecompress) { // TODO: check for a valid MRT1 to promote the draw to the resolve pass. LOG_TRACE(Render_Vulkan, "FMask decompression pass skipped"); + ScopedMarkerInsert("FmaskDecompress"); return false; } if (regs.color_control.mode == Liverpool::ColorControl::OperationMode::Resolve) { @@ -67,6 +68,27 @@ bool Rasterizer::FilterDraw() { } if (regs.primitive_type == AmdGpu::PrimitiveType::None) { LOG_TRACE(Render_Vulkan, "Primitive type 'None' skipped"); + ScopedMarkerInsert("PrimitiveTypeNone"); + return false; + } + + const bool cb_disabled = + regs.color_control.mode == AmdGpu::Liverpool::ColorControl::OperationMode::Disable; + const auto depth_copy = + regs.depth_render_override.force_z_dirty && regs.depth_render_override.force_z_valid && + regs.depth_buffer.DepthValid() && regs.depth_buffer.DepthWriteValid() && + regs.depth_buffer.DepthAddress() != regs.depth_buffer.DepthWriteAddress(); + const auto stencil_copy = + regs.depth_render_override.force_stencil_dirty && + regs.depth_render_override.force_stencil_valid && regs.depth_buffer.StencilValid() && + regs.depth_buffer.StencilWriteValid() && + regs.depth_buffer.StencilAddress() != regs.depth_buffer.StencilWriteAddress(); + if (cb_disabled && (depth_copy || stencil_copy)) { + // Games may disable color buffer and enable force depth/stencil dirty and valid to + // do a copy from one depth-stencil surface to another, without a pixel shader. + // We need to detect this case and perform the copy, otherwise it will have no effect. + LOG_TRACE(Render_Vulkan, "Performing depth-stencil override copy"); + DepthStencilCopy(depth_copy, stencil_copy); return false; } @@ -224,10 +246,13 @@ void Rasterizer::EliminateFastClear() { .layerCount = col_buf.view.slice_max - col_buf.view.slice_start + 1, }; scheduler.EndRendering(); + ScopeMarkerBegin(fmt::format("EliminateFastClear:MRT={:#x}:M={:#x}", col_buf.Address(), + col_buf.CmaskAddress())); image.Transit(vk::ImageLayout::eTransferDstOptimal, vk::AccessFlagBits2::eTransferWrite, {}); scheduler.CommandBuffer().clearColorImage(image.image, image.last_state.layout, LiverpoolToVK::ColorBufferClearValue(col_buf).color, range); + ScopeMarkerEnd(); } void Rasterizer::Draw(bool is_indexed, u32 index_offset) { @@ -248,9 +273,7 @@ void Rasterizer::Draw(bool is_indexed, u32 index_offset) { return; } - const auto& vs_info = pipeline->GetStage(Shader::LogicalStage::Vertex); - const auto& fetch_shader = pipeline->GetFetchShader(); - buffer_cache.BindVertexBuffers(vs_info, fetch_shader); + buffer_cache.BindVertexBuffers(*pipeline); if (is_indexed) { buffer_cache.BindIndexBuffer(index_offset); } @@ -258,6 +281,8 @@ void Rasterizer::Draw(bool is_indexed, u32 index_offset) { BeginRendering(*pipeline, state); UpdateDynamicState(*pipeline); + const auto& vs_info = pipeline->GetStage(Shader::LogicalStage::Vertex); + const auto& fetch_shader = pipeline->GetFetchShader(); const auto [vertex_offset, instance_offset] = GetDrawOffsets(regs, vs_info, fetch_shader); const auto cmdbuf = scheduler.CommandBuffer(); @@ -292,9 +317,7 @@ void Rasterizer::DrawIndirect(bool is_indexed, VAddr arg_address, u32 offset, u3 return; } - const auto& vs_info = pipeline->GetStage(Shader::LogicalStage::Vertex); - const auto& fetch_shader = pipeline->GetFetchShader(); - buffer_cache.BindVertexBuffers(vs_info, fetch_shader); + buffer_cache.BindVertexBuffers(*pipeline); if (is_indexed) { buffer_cache.BindIndexBuffer(0); } @@ -481,6 +504,17 @@ bool Rasterizer::BindResources(const Pipeline* pipeline) { } push_data.step0 = regs.vgt_instance_step_rate_0; push_data.step1 = regs.vgt_instance_step_rate_1; + + // TODO(roamic): add support for multiple viewports and geometry shaders when ViewportIndex + // is encountered and implemented in the recompiler. + if (stage->stage == Shader::Stage::Vertex) { + push_data.xoffset = + regs.viewport_control.xoffset_enable ? regs.viewports[0].xoffset : 0.f; + push_data.xscale = regs.viewport_control.xscale_enable ? regs.viewports[0].xscale : 1.f; + push_data.yoffset = + regs.viewport_control.yoffset_enable ? regs.viewports[0].yoffset : 0.f; + push_data.yscale = regs.viewport_control.yscale_enable ? regs.viewports[0].yscale : 1.f; + } stage->PushUd(binding, push_data); BindBuffers(*stage, binding, push_data, set_writes, buffer_barriers); @@ -661,7 +695,7 @@ void Rasterizer::BindTextures(const Shader::Info& stage, Shader::Backend::Bindin if (image->binding.is_bound) { // The image is already bound. In case if it is about to be used as storage we need // to force general layout on it. - image->binding.force_general |= image_desc.IsStorage(tsharp); + image->binding.force_general |= image_desc.is_written; } if (image->binding.is_target) { // The image is already bound as target. Since we read and output to it need to force @@ -768,8 +802,6 @@ void Rasterizer::BeginRendering(const GraphicsPipeline& pipeline, RenderState& s const auto mip = view.info.range.base.level; state.width = std::min(state.width, std::max(image.info.size.width >> mip, 1u)); state.height = std::min(state.height, std::max(image.info.size.height >> mip, 1u)); - ASSERT(old_img.info.size.width == state.width); - ASSERT(old_img.info.size.height == state.height); } auto& image = texture_cache.GetImage(image_id); if (image.binding.force_general) { @@ -824,8 +856,6 @@ void Rasterizer::BeginRendering(const GraphicsPipeline& pipeline, RenderState& s } void Rasterizer::Resolve() { - const auto cmdbuf = scheduler.CommandBuffer(); - // Read from MRT0, average all samples, and write to MRT1, which is one-sample const auto& mrt0_hint = liverpool->last_cb_extent[0]; const auto& mrt1_hint = liverpool->last_cb_extent[1]; @@ -845,9 +875,12 @@ void Rasterizer::Resolve() { mrt1_range.base.layer = liverpool->regs.color_buffers[1].view.slice_start; mrt1_range.extent.layers = liverpool->regs.color_buffers[1].NumSlices() - mrt1_range.base.layer; + ScopeMarkerBegin(fmt::format("Resolve:MRT0={:#x}:MRT1={:#x}", + liverpool->regs.color_buffers[0].Address(), + liverpool->regs.color_buffers[1].Address())); + mrt0_image.Transit(vk::ImageLayout::eTransferSrcOptimal, vk::AccessFlagBits2::eTransferRead, mrt0_range); - mrt1_image.Transit(vk::ImageLayout::eTransferDstOptimal, vk::AccessFlagBits2::eTransferWrite, mrt1_range); @@ -874,8 +907,9 @@ void Rasterizer::Resolve() { .dstOffset = {0, 0, 0}, .extent = {mrt1_image.info.size.width, mrt1_image.info.size.height, 1}, }; - cmdbuf.copyImage(mrt0_image.image, vk::ImageLayout::eTransferSrcOptimal, mrt1_image.image, - vk::ImageLayout::eTransferDstOptimal, region); + scheduler.CommandBuffer().copyImage(mrt0_image.image, vk::ImageLayout::eTransferSrcOptimal, + mrt1_image.image, vk::ImageLayout::eTransferDstOptimal, + region); } else { vk::ImageResolve region = { .srcSubresource = @@ -896,9 +930,72 @@ void Rasterizer::Resolve() { .dstOffset = {0, 0, 0}, .extent = {mrt1_image.info.size.width, mrt1_image.info.size.height, 1}, }; - cmdbuf.resolveImage(mrt0_image.image, vk::ImageLayout::eTransferSrcOptimal, - mrt1_image.image, vk::ImageLayout::eTransferDstOptimal, region); + scheduler.CommandBuffer().resolveImage( + mrt0_image.image, vk::ImageLayout::eTransferSrcOptimal, mrt1_image.image, + vk::ImageLayout::eTransferDstOptimal, region); } + + ScopeMarkerEnd(); +} + +void Rasterizer::DepthStencilCopy(bool is_depth, bool is_stencil) { + auto& regs = liverpool->regs; + + auto read_desc = VideoCore::TextureCache::DepthTargetDesc( + regs.depth_buffer, regs.depth_view, regs.depth_control, + regs.depth_htile_data_base.GetAddress(), liverpool->last_db_extent, false); + auto write_desc = VideoCore::TextureCache::DepthTargetDesc( + regs.depth_buffer, regs.depth_view, regs.depth_control, + regs.depth_htile_data_base.GetAddress(), liverpool->last_db_extent, true); + + auto& read_image = texture_cache.GetImage(texture_cache.FindImage(read_desc)); + auto& write_image = texture_cache.GetImage(texture_cache.FindImage(write_desc)); + + VideoCore::SubresourceRange sub_range; + sub_range.base.layer = liverpool->regs.depth_view.slice_start; + sub_range.extent.layers = liverpool->regs.depth_view.NumSlices() - sub_range.base.layer; + + ScopeMarkerBegin(fmt::format( + "DepthStencilCopy:DR={:#x}:SR={:#x}:DW={:#x}:SW={:#x}", regs.depth_buffer.DepthAddress(), + regs.depth_buffer.StencilAddress(), regs.depth_buffer.DepthWriteAddress(), + regs.depth_buffer.StencilWriteAddress())); + + read_image.Transit(vk::ImageLayout::eTransferSrcOptimal, vk::AccessFlagBits2::eTransferRead, + sub_range); + write_image.Transit(vk::ImageLayout::eTransferDstOptimal, vk::AccessFlagBits2::eTransferWrite, + sub_range); + + auto aspect_mask = vk::ImageAspectFlags(0); + if (is_depth) { + aspect_mask |= vk::ImageAspectFlagBits::eDepth; + } + if (is_stencil) { + aspect_mask |= vk::ImageAspectFlagBits::eStencil; + } + vk::ImageCopy region = { + .srcSubresource = + { + .aspectMask = aspect_mask, + .mipLevel = 0, + .baseArrayLayer = sub_range.base.layer, + .layerCount = sub_range.extent.layers, + }, + .srcOffset = {0, 0, 0}, + .dstSubresource = + { + .aspectMask = aspect_mask, + .mipLevel = 0, + .baseArrayLayer = sub_range.base.layer, + .layerCount = sub_range.extent.layers, + }, + .dstOffset = {0, 0, 0}, + .extent = {write_image.info.size.width, write_image.info.size.height, 1}, + }; + scheduler.CommandBuffer().copyImage(read_image.image, vk::ImageLayout::eTransferSrcOptimal, + write_image.image, vk::ImageLayout::eTransferDstOptimal, + region); + + ScopeMarkerEnd(); } void Rasterizer::InlineData(VAddr address, const void* value, u32 num_bytes, bool is_gds) { @@ -944,7 +1041,7 @@ void Rasterizer::UnmapMemory(VAddr addr, u64 size) { } void Rasterizer::UpdateDynamicState(const GraphicsPipeline& pipeline) { - UpdateViewportScissorState(); + UpdateViewportScissorState(pipeline); auto& regs = liverpool->regs; const auto cmdbuf = scheduler.CommandBuffer(); @@ -1024,7 +1121,7 @@ void Rasterizer::UpdateDynamicState(const GraphicsPipeline& pipeline) { } } -void Rasterizer::UpdateViewportScissorState() { +void Rasterizer::UpdateViewportScissorState(const GraphicsPipeline& pipeline) { const auto& regs = liverpool->regs; const auto combined_scissor_value_tl = [](s16 scr, s16 win, s16 gen, s16 win_offset) { @@ -1063,26 +1160,46 @@ void Rasterizer::UpdateViewportScissorState() { ? 1.0f : 0.0f; + if (regs.polygon_control.enable_window_offset) { + LOG_ERROR(Render_Vulkan, + "PA_SU_SC_MODE_CNTL.VTX_WINDOW_OFFSET_ENABLE support is not yet implemented."); + } + for (u32 i = 0; i < Liverpool::NumViewports; i++) { const auto& vp = regs.viewports[i]; const auto& vp_d = regs.viewport_depths[i]; if (vp.xscale == 0) { continue; } - const auto xoffset = vp_ctl.xoffset_enable ? vp.xoffset : 0.f; - const auto xscale = vp_ctl.xscale_enable ? vp.xscale : 1.f; - const auto yoffset = vp_ctl.yoffset_enable ? vp.yoffset : 0.f; - const auto yscale = vp_ctl.yscale_enable ? vp.yscale : 1.f; - const auto zoffset = vp_ctl.zoffset_enable ? vp.zoffset : 0.f; - const auto zscale = vp_ctl.zscale_enable ? vp.zscale : 1.f; - viewports.push_back({ - .x = xoffset - xscale, - .y = yoffset - yscale, - .width = xscale * 2.0f, - .height = yscale * 2.0f, - .minDepth = zoffset - zscale * reduce_z, - .maxDepth = zscale + zoffset, - }); + + if (pipeline.IsClipDisabled()) { + // In case if clipping is disabled we patch the shader to convert vertex position + // from screen space coordinates to NDC by defining a render space as full hardware + // window range [0..16383, 0..16383] and setting the viewport to its size. + viewports.push_back({ + .x = 0.f, + .y = 0.f, + .width = float(std::min(instance.GetMaxViewportWidth(), 16_KB)), + .height = float(std::min(instance.GetMaxViewportHeight(), 16_KB)), + .minDepth = 0.0, + .maxDepth = 1.0, + }); + } else { + const auto xoffset = vp_ctl.xoffset_enable ? vp.xoffset : 0.f; + const auto xscale = vp_ctl.xscale_enable ? vp.xscale : 1.f; + const auto yoffset = vp_ctl.yoffset_enable ? vp.yoffset : 0.f; + const auto yscale = vp_ctl.yscale_enable ? vp.yscale : 1.f; + const auto zoffset = vp_ctl.zoffset_enable ? vp.zoffset : 0.f; + const auto zscale = vp_ctl.zscale_enable ? vp.zscale : 1.f; + viewports.push_back({ + .x = xoffset - xscale, + .y = yoffset - yscale, + .width = xscale * 2.0f, + .height = yscale * 2.0f, + .minDepth = zoffset - zscale * reduce_z, + .maxDepth = zscale + zoffset, + }); + } auto vp_scsr = scsr; if (regs.mode_control.vport_scissor_enable) { @@ -1104,8 +1221,8 @@ void Rasterizer::UpdateViewportScissorState() { if (viewports.empty()) { // Vulkan requires providing at least one viewport. constexpr vk::Viewport empty_viewport = { - .x = 0.0f, - .y = 0.0f, + .x = -1.0f, + .y = -1.0f, .width = 1.0f, .height = 1.0f, .minDepth = 0.0f, @@ -1124,42 +1241,43 @@ void Rasterizer::UpdateViewportScissorState() { cmdbuf.setScissorWithCountEXT(scissors); } -void Rasterizer::ScopeMarkerBegin(const std::string_view& str) { - if (Config::nullGpu() || !Config::vkMarkersEnabled()) { +void Rasterizer::ScopeMarkerBegin(const std::string_view& str, bool from_guest) { + if ((from_guest && !Config::vkGuestMarkersEnabled()) || + (!from_guest && !Config::vkHostMarkersEnabled())) { return; } - const auto cmdbuf = scheduler.CommandBuffer(); cmdbuf.beginDebugUtilsLabelEXT(vk::DebugUtilsLabelEXT{ .pLabelName = str.data(), }); } -void Rasterizer::ScopeMarkerEnd() { - if (Config::nullGpu() || !Config::vkMarkersEnabled()) { +void Rasterizer::ScopeMarkerEnd(bool from_guest) { + if ((from_guest && !Config::vkGuestMarkersEnabled()) || + (!from_guest && !Config::vkHostMarkersEnabled())) { return; } - const auto cmdbuf = scheduler.CommandBuffer(); cmdbuf.endDebugUtilsLabelEXT(); } -void Rasterizer::ScopedMarkerInsert(const std::string_view& str) { - if (Config::nullGpu() || !Config::vkMarkersEnabled()) { +void Rasterizer::ScopedMarkerInsert(const std::string_view& str, bool from_guest) { + if ((from_guest && !Config::vkGuestMarkersEnabled()) || + (!from_guest && !Config::vkHostMarkersEnabled())) { return; } - const auto cmdbuf = scheduler.CommandBuffer(); cmdbuf.insertDebugUtilsLabelEXT(vk::DebugUtilsLabelEXT{ .pLabelName = str.data(), }); } -void Rasterizer::ScopedMarkerInsertColor(const std::string_view& str, const u32 color) { - if (Config::nullGpu() || !Config::vkMarkersEnabled()) { +void Rasterizer::ScopedMarkerInsertColor(const std::string_view& str, const u32 color, + bool from_guest) { + if ((from_guest && !Config::vkGuestMarkersEnabled()) || + (!from_guest && !Config::vkHostMarkersEnabled())) { return; } - const auto cmdbuf = scheduler.CommandBuffer(); cmdbuf.insertDebugUtilsLabelEXT(vk::DebugUtilsLabelEXT{ .pLabelName = str.data(), diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index 2905c5ddb..ed6cc7e71 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h @@ -47,10 +47,11 @@ public: void DispatchDirect(); void DispatchIndirect(VAddr address, u32 offset, u32 size); - void ScopeMarkerBegin(const std::string_view& str); - void ScopeMarkerEnd(); - void ScopedMarkerInsert(const std::string_view& str); - void ScopedMarkerInsertColor(const std::string_view& str, const u32 color); + void ScopeMarkerBegin(const std::string_view& str, bool from_guest = false); + void ScopeMarkerEnd(bool from_guest = false); + void ScopedMarkerInsert(const std::string_view& str, bool from_guest = false); + void ScopedMarkerInsertColor(const std::string_view& str, const u32 color, + bool from_guest = false); void InlineData(VAddr address, const void* value, u32 num_bytes, bool is_gds); u32 ReadDataFromGds(u32 gsd_offset); @@ -71,10 +72,11 @@ private: RenderState PrepareRenderState(u32 mrt_mask); void BeginRendering(const GraphicsPipeline& pipeline, RenderState& state); void Resolve(); + void DepthStencilCopy(bool is_depth, bool is_stencil); void EliminateFastClear(); void UpdateDynamicState(const GraphicsPipeline& pipeline); - void UpdateViewportScissorState(); + void UpdateViewportScissorState(const GraphicsPipeline& pipeline); bool FilterDraw(); diff --git a/src/video_core/renderer_vulkan/vk_resource_pool.cpp b/src/video_core/renderer_vulkan/vk_resource_pool.cpp index dba603e71..5eae32e70 100644 --- a/src/video_core/renderer_vulkan/vk_resource_pool.cpp +++ b/src/video_core/renderer_vulkan/vk_resource_pool.cpp @@ -73,9 +73,7 @@ CommandPool::CommandPool(const Instance& instance, MasterSemaphore* master_semap ASSERT_MSG(pool_result == vk::Result::eSuccess, "Failed to create command pool: {}", vk::to_string(pool_result)); cmd_pool = std::move(pool); - if (instance.HasDebuggingToolAttached()) { - SetObjectName(device, *cmd_pool, "CommandPool"); - } + SetObjectName(device, *cmd_pool, "CommandPool"); } CommandPool::~CommandPool() = default; @@ -94,10 +92,8 @@ void CommandPool::Allocate(std::size_t begin, std::size_t end) { device.allocateCommandBuffers(&buffer_alloc_info, cmd_buffers.data() + begin); ASSERT(result == vk::Result::eSuccess); - if (instance.HasDebuggingToolAttached()) { - for (std::size_t i = begin; i < end; ++i) { - SetObjectName(device, cmd_buffers[i], "CommandPool: Command Buffer {}", i); - } + for (std::size_t i = begin; i < end; ++i) { + SetObjectName(device, cmd_buffers[i], "CommandPool: Command Buffer {}", i); } } diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp index 44f4be6dd..5467a5733 100644 --- a/src/video_core/renderer_vulkan/vk_swapchain.cpp +++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp @@ -5,6 +5,7 @@ #include #include "common/assert.h" #include "common/logging/log.h" +#include "imgui/renderer/imgui_core.h" #include "sdl_window.h" #include "video_core/renderer_vulkan/vk_instance.h" #include "video_core/renderer_vulkan/vk_swapchain.h" @@ -14,7 +15,9 @@ namespace Vulkan { Swapchain::Swapchain(const Instance& instance_, const Frontend::WindowSDL& window) : instance{instance_}, surface{CreateSurface(instance.GetInstance(), window)} { FindPresentFormat(); - Create(window.GetWidth(), window.GetHeight(), surface); + + Create(window.GetWidth(), window.GetHeight()); + ImGui::Core::Initialize(instance, window, image_count, surface_format.format); } Swapchain::~Swapchain() { @@ -22,10 +25,9 @@ Swapchain::~Swapchain() { instance.GetInstance().destroySurfaceKHR(surface); } -void Swapchain::Create(u32 width_, u32 height_, vk::SurfaceKHR surface_) { +void Swapchain::Create(u32 width_, u32 height_) { width = width_; height = height_; - surface = surface_; needs_recreation = false; Destroy(); @@ -85,7 +87,7 @@ void Swapchain::Create(u32 width_, u32 height_, vk::SurfaceKHR surface_) { void Swapchain::Recreate(u32 width_, u32 height_) { LOG_DEBUG(Render_Vulkan, "Recreate the swapchain: width={} height={}", width_, height_); - Create(width_, height_, surface); + Create(width_, height_); } bool Swapchain::AcquireNextImage() { @@ -145,7 +147,7 @@ void Swapchain::FindPresentFormat() { // If there is a single undefined surface format, the device doesn't care, so we'll just use // RGBA sRGB. if (formats[0].format == vk::Format::eUndefined) { - surface_format.format = vk::Format::eR8G8B8A8Srgb; + surface_format.format = vk::Format::eR8G8B8A8Unorm; surface_format.colorSpace = vk::ColorSpaceKHR::eSrgbNonlinear; return; } @@ -153,7 +155,7 @@ void Swapchain::FindPresentFormat() { // Try to find a suitable format. for (const vk::SurfaceFormatKHR& sformat : formats) { vk::Format format = sformat.format; - if (format != vk::Format::eR8G8B8A8Srgb && format != vk::Format::eB8G8R8A8Srgb) { + if (format != vk::Format::eR8G8B8A8Unorm && format != vk::Format::eB8G8R8A8Unorm) { continue; } @@ -208,10 +210,14 @@ void Swapchain::Destroy() { if (swapchain) { device.destroySwapchainKHR(swapchain); } - for (u32 i = 0; i < image_count; i++) { - device.destroySemaphore(image_acquired[i]); - device.destroySemaphore(present_ready[i]); + + for (const auto& sem : image_acquired) { + device.destroySemaphore(sem); } + for (const auto& sem : present_ready) { + device.destroySemaphore(sem); + } + image_acquired.clear(); present_ready.clear(); } @@ -235,11 +241,9 @@ void Swapchain::RefreshSemaphores() { semaphore = sem; } - if (instance.HasDebuggingToolAttached()) { - for (u32 i = 0; i < image_count; ++i) { - SetObjectName(device, image_acquired[i], "Swapchain Semaphore: image_acquired {}", i); - SetObjectName(device, present_ready[i], "Swapchain Semaphore: present_ready {}", i); - } + for (u32 i = 0; i < image_count; ++i) { + SetObjectName(device, image_acquired[i], "Swapchain Semaphore: image_acquired {}", i); + SetObjectName(device, present_ready[i], "Swapchain Semaphore: present_ready {}", i); } } @@ -250,11 +254,30 @@ void Swapchain::SetupImages() { vk::to_string(images_result)); images = std::move(imgs); image_count = static_cast(images.size()); - - if (instance.HasDebuggingToolAttached()) { - for (u32 i = 0; i < image_count; ++i) { - SetObjectName(device, images[i], "Swapchain Image {}", i); + images_view.resize(image_count); + for (u32 i = 0; i < image_count; ++i) { + if (images_view[i]) { + device.destroyImageView(images_view[i]); } + auto [im_view_result, im_view] = device.createImageView(vk::ImageViewCreateInfo{ + .image = images[i], + .viewType = vk::ImageViewType::e2D, + .format = surface_format.format, + .subresourceRange = + { + .aspectMask = vk::ImageAspectFlagBits::eColor, + .levelCount = 1, + .layerCount = 1, + }, + }); + ASSERT_MSG(im_view_result == vk::Result::eSuccess, "Failed to create image view: {}", + vk::to_string(im_view_result)); + images_view[i] = im_view; + } + + for (u32 i = 0; i < image_count; ++i) { + SetObjectName(device, images[i], "Swapchain Image {}", i); + SetObjectName(device, images_view[i], "Swapchain ImageView {}", i); } } diff --git a/src/video_core/renderer_vulkan/vk_swapchain.h b/src/video_core/renderer_vulkan/vk_swapchain.h index 19ae9b2d2..f5cf9f0d2 100644 --- a/src/video_core/renderer_vulkan/vk_swapchain.h +++ b/src/video_core/renderer_vulkan/vk_swapchain.h @@ -23,7 +23,7 @@ public: ~Swapchain(); /// Creates (or recreates) the swapchain with a given size. - void Create(u32 width, u32 height, vk::SurfaceKHR surface); + void Create(u32 width, u32 height); /// Recreates the swapchain with a given size and current surface. void Recreate(u32 width, u32 height); @@ -42,6 +42,10 @@ public: return images[image_index]; } + vk::ImageView ImageView() const { + return images_view[image_index]; + } + vk::SurfaceFormatKHR GetSurfaceFormat() const { return surface_format; } @@ -99,10 +103,12 @@ private: vk::SwapchainKHR swapchain{}; vk::SurfaceKHR surface{}; vk::SurfaceFormatKHR surface_format; + vk::Format view_format; vk::Extent2D extent; vk::SurfaceTransformFlagBitsKHR transform; vk::CompositeAlphaFlagBitsKHR composite_alpha; std::vector images; + std::vector images_view; std::vector image_acquired; std::vector present_ready; u32 width = 0; diff --git a/src/video_core/texture_cache/image.cpp b/src/video_core/texture_cache/image.cpp index 23249bf21..96881c564 100644 --- a/src/video_core/texture_cache/image.cpp +++ b/src/video_core/texture_cache/image.cpp @@ -153,13 +153,7 @@ Image::Image(const Vulkan::Instance& instance_, Vulkan::Scheduler& scheduler_, // the texture cache should re-create the resource with the usage requested vk::ImageCreateFlags flags{vk::ImageCreateFlagBits::eMutableFormat | vk::ImageCreateFlagBits::eExtendedUsage}; - const bool can_be_cube = - (info.type == vk::ImageType::e2D) && - ((info.props.is_pow2 ? (info.resources.layers % 8) : (info.resources.layers % 6)) == 0) && - (info.size.width == info.size.height); - if (info.props.is_cube || can_be_cube) { - flags |= vk::ImageCreateFlagBits::eCubeCompatible; - } else if (info.props.is_volume) { + if (info.props.is_volume) { flags |= vk::ImageCreateFlagBits::e2DArrayCompatible; } diff --git a/src/video_core/texture_cache/image_info.cpp b/src/video_core/texture_cache/image_info.cpp index bdbaecda6..a9ed76960 100644 --- a/src/video_core/texture_cache/image_info.cpp +++ b/src/video_core/texture_cache/image_info.cpp @@ -37,7 +37,6 @@ static vk::ImageType ConvertImageType(AmdGpu::ImageType type) noexcept { return vk::ImageType::e1D; case AmdGpu::ImageType::Color2D: case AmdGpu::ImageType::Color2DMsaa: - case AmdGpu::ImageType::Cube: case AmdGpu::ImageType::Color2DArray: return vk::ImageType::e2D; case AmdGpu::ImageType::Color3D: @@ -99,7 +98,8 @@ ImageInfo::ImageInfo(const AmdGpu::Liverpool::ColorBuffer& buffer, } ImageInfo::ImageInfo(const AmdGpu::Liverpool::DepthBuffer& buffer, u32 num_slices, - VAddr htile_address, const AmdGpu::Liverpool::CbDbExtent& hint) noexcept { + VAddr htile_address, const AmdGpu::Liverpool::CbDbExtent& hint, + bool write_buffer) noexcept { props.is_tiled = false; pixel_format = LiverpoolToVK::DepthFormat(buffer.z_info.format, buffer.stencil_info.format); type = vk::ImageType::e2D; @@ -112,10 +112,10 @@ ImageInfo::ImageInfo(const AmdGpu::Liverpool::DepthBuffer& buffer, u32 num_slice resources.layers = num_slices; meta_info.htile_addr = buffer.z_info.tile_surface_en ? htile_address : 0; - stencil_addr = buffer.StencilAddress(); + stencil_addr = write_buffer ? buffer.StencilWriteAddress() : buffer.StencilAddress(); stencil_size = pitch * size.height * sizeof(u8); - guest_address = buffer.Address(); + guest_address = write_buffer ? buffer.DepthWriteAddress() : buffer.DepthAddress(); const auto depth_slice_sz = buffer.GetDepthSliceSize(); guest_size = depth_slice_sz * num_slices; mips_layout.emplace_back(depth_slice_sz, pitch, 0); @@ -130,7 +130,6 @@ ImageInfo::ImageInfo(const AmdGpu::Image& image, const Shader::ImageResource& de } type = ConvertImageType(image.GetType()); props.is_tiled = image.IsTiled(); - props.is_cube = image.GetType() == AmdGpu::ImageType::Cube; props.is_volume = image.GetType() == AmdGpu::ImageType::Color3D; props.is_pow2 = image.pow2pad; props.is_block = IsBlockCoded(); @@ -139,7 +138,7 @@ ImageInfo::ImageInfo(const AmdGpu::Image& image, const Shader::ImageResource& de size.depth = props.is_volume ? image.depth + 1 : 1; pitch = image.Pitch(); resources.levels = image.NumLevels(); - resources.layers = image.NumLayers(desc.is_array); + resources.layers = image.NumLayers(); num_samples = image.NumSamples(); num_bits = NumBits(image.GetDataFmt()); @@ -184,6 +183,7 @@ void ImageInfo::UpdateSize() { case AmdGpu::TilingMode::Texture_Volume: mip_d += (-mip_d) & 3u; [[fallthrough]]; + case AmdGpu::TilingMode::Display_MicroTiled: case AmdGpu::TilingMode::Texture_MicroTiled: { std::tie(mip_info.pitch, mip_info.size) = ImageSizeMicroTiled(mip_w, mip_h, bpp, num_samples); @@ -219,7 +219,7 @@ int ImageInfo::IsMipOf(const ImageInfo& info) const { return -1; } - if (IsTilingCompatible(info.tiling_idx, tiling_idx)) { + if (!IsTilingCompatible(info.tiling_idx, tiling_idx)) { return -1; } diff --git a/src/video_core/texture_cache/image_info.h b/src/video_core/texture_cache/image_info.h index 6faca49c5..dad0e751e 100644 --- a/src/video_core/texture_cache/image_info.h +++ b/src/video_core/texture_cache/image_info.h @@ -19,7 +19,7 @@ struct ImageInfo { ImageInfo(const AmdGpu::Liverpool::ColorBuffer& buffer, const AmdGpu::Liverpool::CbDbExtent& hint = {}) noexcept; ImageInfo(const AmdGpu::Liverpool::DepthBuffer& buffer, u32 num_slices, VAddr htile_address, - const AmdGpu::Liverpool::CbDbExtent& hint = {}) noexcept; + const AmdGpu::Liverpool::CbDbExtent& hint = {}, bool write_buffer = false) noexcept; ImageInfo(const AmdGpu::Image& image, const Shader::ImageResource& desc) noexcept; bool IsTiled() const { @@ -61,7 +61,6 @@ struct ImageInfo { } meta_info{}; struct { - u32 is_cube : 1; u32 is_volume : 1; u32 is_tiled : 1; u32 is_pow2 : 1; diff --git a/src/video_core/texture_cache/image_view.cpp b/src/video_core/texture_cache/image_view.cpp index 68b116558..7befb5259 100644 --- a/src/video_core/texture_cache/image_view.cpp +++ b/src/video_core/texture_cache/image_view.cpp @@ -20,8 +20,6 @@ vk::ImageViewType ConvertImageViewType(AmdGpu::ImageType type) { case AmdGpu::ImageType::Color2D: case AmdGpu::ImageType::Color2DMsaa: return vk::ImageViewType::e2D; - case AmdGpu::ImageType::Cube: - return vk::ImageViewType::eCube; case AmdGpu::ImageType::Color2DArray: return vk::ImageViewType::e2DArray; case AmdGpu::ImageType::Color3D: @@ -32,7 +30,7 @@ vk::ImageViewType ConvertImageViewType(AmdGpu::ImageType type) { } ImageViewInfo::ImageViewInfo(const AmdGpu::Image& image, const Shader::ImageResource& desc) noexcept - : is_storage{desc.IsStorage(image)} { + : is_storage{desc.is_written} { const auto dfmt = image.GetDataFmt(); auto nfmt = image.GetNumberFmt(); if (is_storage && nfmt == AmdGpu::NumberFormat::Srgb) { @@ -42,30 +40,12 @@ ImageViewInfo::ImageViewInfo(const AmdGpu::Image& image, const Shader::ImageReso if (desc.is_depth) { format = Vulkan::LiverpoolToVK::PromoteFormatToDepth(format); } + range.base.level = image.base_level; range.base.layer = image.base_array; - if (image.GetType() == AmdGpu::ImageType::Color2DMsaa || - image.GetType() == AmdGpu::ImageType::Color2DMsaaArray) { - range.extent.levels = 1; - } else { - range.extent.levels = image.last_level - image.base_level + 1; - } - range.extent.layers = image.last_array - image.base_array + 1; - type = ConvertImageViewType(image.GetBoundType()); - - // Adjust view type for arrays - if (type == vk::ImageViewType::eCube) { - if (desc.is_array) { - type = vk::ImageViewType::eCubeArray; - } else { - // Some games try to bind an array of cubemaps while shader reads only single one. - range.extent.layers = std::min(range.extent.layers, 6u); - } - } - if (type == vk::ImageViewType::e3D && range.extent.layers > 1) { - // Some games pass incorrect layer count for 3D textures so we need to fixup it. - range.extent.layers = 1; - } + range.extent.levels = image.NumViewLevels(desc.is_array); + range.extent.layers = image.NumViewLayers(desc.is_array); + type = ConvertImageViewType(image.GetViewType(desc.is_array)); if (!is_storage) { mapping = Vulkan::LiverpoolToVK::ComponentMapping(image.DstSelect()); @@ -102,13 +82,12 @@ ImageView::ImageView(const Vulkan::Instance& instance, const ImageViewInfo& info vk::Format format = info.format; vk::ImageAspectFlags aspect = image.aspect_mask; if (image.aspect_mask & vk::ImageAspectFlagBits::eDepth && - (format == vk::Format::eR32Sfloat || format == vk::Format::eD32Sfloat || - format == vk::Format::eR16Unorm || format == vk::Format::eD16Unorm)) { + Vulkan::LiverpoolToVK::IsFormatDepthCompatible(format)) { format = image.info.pixel_format; aspect = vk::ImageAspectFlagBits::eDepth; } if (image.aspect_mask & vk::ImageAspectFlagBits::eStencil && - (format == vk::Format::eR8Uint || format == vk::Format::eR8Unorm)) { + Vulkan::LiverpoolToVK::IsFormatStencilCompatible(format)) { format = image.info.pixel_format; aspect = vk::ImageAspectFlagBits::eStencil; } @@ -131,6 +110,16 @@ ImageView::ImageView(const Vulkan::Instance& instance, const ImageViewInfo& info ASSERT_MSG(view_result == vk::Result::eSuccess, "Failed to create image view: {}", vk::to_string(view_result)); image_view = std::move(view); + + const auto view_aspect = aspect & vk::ImageAspectFlagBits::eDepth ? "Depth" + : aspect & vk::ImageAspectFlagBits::eStencil ? "Stencil" + : "Color"; + Vulkan::SetObjectName( + instance.GetDevice(), *image_view, "ImageView {}x{}x{} {:#x}:{:#x} {}:{} {}:{} ({})", + image.info.size.width, image.info.size.height, image.info.size.depth, + image.info.guest_address, image.info.guest_size, info.range.base.level, + info.range.base.level + info.range.extent.levels - 1, info.range.base.layer, + info.range.base.layer + info.range.extent.layers - 1, view_aspect); } ImageView::~ImageView() = default; diff --git a/src/video_core/texture_cache/texture_cache.cpp b/src/video_core/texture_cache/texture_cache.cpp index bef083d1a..a281b89c9 100644 --- a/src/video_core/texture_cache/texture_cache.cpp +++ b/src/video_core/texture_cache/texture_cache.cpp @@ -469,9 +469,6 @@ ImageView& TextureCache::FindDepthTarget(BaseDesc& desc) { } void TextureCache::RefreshImage(Image& image, Vulkan::Scheduler* custom_scheduler /*= nullptr*/) { - RENDERER_TRACE; - TRACE_HINT(fmt::format("{:x}:{:x}", image.info.guest_address, image.info.guest_size)); - if (False(image.flags & ImageFlagBits::Dirty)) { return; } @@ -480,6 +477,9 @@ void TextureCache::RefreshImage(Image& image, Vulkan::Scheduler* custom_schedule return; } + RENDERER_TRACE; + TRACE_HINT(fmt::format("{:x}:{:x}", image.info.guest_address, image.info.guest_size)); + if (True(image.flags & ImageFlagBits::MaybeCpuDirty) && False(image.flags & ImageFlagBits::CpuDirty)) { // The image size should be less than page size to be considered MaybeCpuDirty diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 944f021df..343a510e6 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -65,7 +65,7 @@ public: struct TextureDesc : public BaseDesc { TextureDesc() = default; TextureDesc(const AmdGpu::Image& image, const Shader::ImageResource& desc) - : BaseDesc{desc.IsStorage(image) ? BindingType::Storage : BindingType::Texture, + : BaseDesc{desc.is_written ? BindingType::Storage : BindingType::Texture, ImageInfo{image, desc}, ImageViewInfo{image, desc}} {} }; @@ -79,9 +79,9 @@ public: DepthTargetDesc(const AmdGpu::Liverpool::DepthBuffer& buffer, const AmdGpu::Liverpool::DepthView& view, const AmdGpu::Liverpool::DepthControl& ctl, VAddr htile_address, - const AmdGpu::Liverpool::CbDbExtent& hint = {}) + const AmdGpu::Liverpool::CbDbExtent& hint = {}, bool write_buffer = false) : BaseDesc{BindingType::DepthTarget, - ImageInfo{buffer, view.NumSlices(), htile_address, hint}, + ImageInfo{buffer, view.NumSlices(), htile_address, hint, write_buffer}, ImageViewInfo{buffer, view, ctl}} {} }; diff --git a/src/video_core/texture_cache/tile_manager.cpp b/src/video_core/texture_cache/tile_manager.cpp index aba255ce5..ede91d128 100644 --- a/src/video_core/texture_cache/tile_manager.cpp +++ b/src/video_core/texture_cache/tile_manager.cpp @@ -8,6 +8,7 @@ #include "video_core/texture_cache/image_view.h" #include "video_core/texture_cache/tile_manager.h" +#include "video_core/host_shaders/detilers/display_micro_64bpp_comp.h" #include "video_core/host_shaders/detilers/macro_32bpp_comp.h" #include "video_core/host_shaders/detilers/macro_64bpp_comp.h" #include "video_core/host_shaders/detilers/macro_8bpp_comp.h" @@ -53,6 +54,14 @@ const DetilerContext* TileManager::GetDetiler(const ImageInfo& info) const { return nullptr; } break; + case AmdGpu::TilingMode::Display_MicroTiled: + switch (bpp) { + case 64: + return &detilers[DetilerType::Display_Micro64]; + default: + return nullptr; + } + break; default: return nullptr; } @@ -68,10 +77,11 @@ struct DetilerParams { TileManager::TileManager(const Vulkan::Instance& instance, Vulkan::Scheduler& scheduler) : instance{instance}, scheduler{scheduler} { static const std::array detiler_shaders{ - HostShaders::MICRO_8BPP_COMP, HostShaders::MICRO_16BPP_COMP, - HostShaders::MICRO_32BPP_COMP, HostShaders::MICRO_64BPP_COMP, - HostShaders::MICRO_128BPP_COMP, HostShaders::MACRO_8BPP_COMP, - HostShaders::MACRO_32BPP_COMP, HostShaders::MACRO_64BPP_COMP, + HostShaders::MICRO_8BPP_COMP, HostShaders::MICRO_16BPP_COMP, + HostShaders::MICRO_32BPP_COMP, HostShaders::MICRO_64BPP_COMP, + HostShaders::MICRO_128BPP_COMP, HostShaders::MACRO_8BPP_COMP, + HostShaders::MACRO_32BPP_COMP, HostShaders::MACRO_64BPP_COMP, + HostShaders::DISPLAY_MICRO_64BPP_COMP, }; boost::container::static_vector bindings{ @@ -258,7 +268,8 @@ std::pair TileManager::TryDetile(vk::Buffer in_buffer, u32 in_o params.num_levels = info.resources.levels; params.pitch0 = info.pitch >> (info.props.is_block ? 2u : 0u); params.height = info.size.height; - if (info.tiling_mode == AmdGpu::TilingMode::Texture_Volume) { + if (info.tiling_mode == AmdGpu::TilingMode::Texture_Volume || + info.tiling_mode == AmdGpu::TilingMode::Display_MicroTiled) { ASSERT(info.resources.levels == 1); const auto tiles_per_row = info.pitch / 8u; const auto tiles_per_slice = tiles_per_row * ((info.size.height + 7u) / 8u); diff --git a/src/video_core/texture_cache/tile_manager.h b/src/video_core/texture_cache/tile_manager.h index 4eae7be9e..adda16b3d 100644 --- a/src/video_core/texture_cache/tile_manager.h +++ b/src/video_core/texture_cache/tile_manager.h @@ -22,6 +22,8 @@ enum DetilerType : u32 { Macro32, Macro64, + Display_Micro64, + Max };